#ifndef CONFIGURATION_H

#define CONFIGURATION_H
#define CONFIGURATION_H_VERSION 010109

#define STRING_CONFIG_H_AUTHOR "Alchimies / J.Roth" // Who made the changes.
#define SHOW_BOOTSCREEN
#define STRING_SPLASH_LINE1 SHORT_BUILD_VERSION // will be shown during bootup in line 1
#define STRING_SPLASH_LINE2 "alchimies.eu"         // will be shown during bootup in line 2

#define SERIAL_PORT 0

#define BAUDRATE 250000

#define MOTHERBOARD BOARD_ALCHIMIES_PD1

#define CUSTOM_MACHINE_NAME "PodoPrinter PROTO"

#define MACHINE_UUID "D1010000-0350-0250-0050-P00000000000"

#define EXTRUDERS 1

#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75

#define POWER_SUPPLY 0

// E3D Volcano
#define TEMP_SENSOR_0 5
// OpenEdge 100k thermistor
//#define TEMP_SENSOR_0 112
// Dyze 5M 500° thersistor
//#define TEMP_SENSOR_0 66
//M301 P5.48 I0.20 D43.89


#define TEMP_SENSOR_1 0
#define TEMP_SENSOR_2 0
#define TEMP_SENSOR_3 0
#define TEMP_SENSOR_4 0
#define TEMP_SENSOR_BED 0
#define TEMP_SENSOR_CHAMBER 0

#define DUMMY_THERMISTOR_998_VALUE 25
#define DUMMY_THERMISTOR_999_VALUE 100

#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 10

#define TEMP_RESIDENCY_TIME 10 // time to wait stabilization
#define TEMP_HYSTERESIS 3 // stable within deg
#define TEMP_WINDOW     1 // start checking stable if within deg

#define TEMP_BED_RESIDENCY_TIME 10  // (seconds)
#define TEMP_BED_HYSTERESIS 3       // (degC) range of +/- temperatures considered "close" to the target one
#define TEMP_BED_WINDOW     1       // (degC) Window around target to start the residency timer x degC early.

#define HEATER_0_MINTEMP 5
#define HEATER_1_MINTEMP 5
#define HEATER_2_MINTEMP 5
#define HEATER_3_MINTEMP 5
#define HEATER_4_MINTEMP 5
#define BED_MINTEMP 5

// When temperature exceeds max temp, your heater will be switched off.
// This feature exists to protect your hotend from overheating accidentally, but *NOT* from thermistor short/failure!
// You should use MINTEMP for thermistor short/failure protection.
//#define HEATER_0_MAXTEMP 255
#define HEATER_0_MAXTEMP 300
#define HEATER_1_MAXTEMP 255
#define HEATER_2_MAXTEMP 255//#define Z_MIN_PROBE_REPEATABILITY_TEST

#define HEATER_3_MAXTEMP 255
#define HEATER_4_MAXTEMP 255
#define BED_MAXTEMP 50

#define PIDTEMP
#define BANG_MAX 255
#define PID_MAX BANG_MAX
#define PID_K1 0.95

#if ENABLED(PIDTEMP)
  #define PID_FUNCTIONAL_RANGE 100
  #define DEFAULT_Kp 0.88
  #define DEFAULT_Ki 0.03
  #define DEFAULT_Kd 18.84
#endif // PIDTEMP

#define PREVENT_COLD_EXTRUSION
#define EXTRUDE_MINTEMP 170

#define PREVENT_LENGTHY_EXTRUDE
#define EXTRUDE_MAXLENGTH 800

//#define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders

#define USE_XMIN_PLUG
//#define USE_YMIN_PLUG
//#define USE_ZMIN_PLUG

//#define USE_XMAX_PLUG
#define USE_YMAX_PLUG
#define USE_ZMAX_PLUG

#define ENDSTOPPULLUPS
#if DISABLED(ENDSTOPPULLUPS)
  // Disable ENDSTOPPULLUPS to set pullups individually
  //#define ENDSTOPPULLUP_XMAX
  //#define ENDSTOPPULLUP_YMAX
  //#define ENDSTOPPULLUP_ZMAX
  //#define ENDSTOPPULLUP_XMIN
  //#define ENDSTOPPULLUP_YMIN
  //#define ENDSTOPPULLUP_ZMIN
  //#define ENDSTOPPULLUP_ZMIN_PROBE
#endif

// Mechanical endstop with COM to ground and NC to Signal uses "false" here (most common setup).
#define X_MIN_ENDSTOP_INVERTING true
#define Y_MIN_ENDSTOP_INVERTING true
#define Z_MIN_ENDSTOP_INVERTING false
#define X_MAX_ENDSTOP_INVERTING true
#define Y_MAX_ENDSTOP_INVERTING true
#define Z_MAX_ENDSTOP_INVERTING false
#define Z_MIN_PROBE_ENDSTOP_INVERTING false

/**
 * :['A4988', 'DRV8825', 'LV8729', 'L6470', 'TB6560', 'TB6600', 'TMC2100', 'TMC2130', 'TMC2130_STANDALONE', 'TMC2208', 'TMC2208_STANDALONE', 'TMC26X', 'TMC26X_STANDALONE', 'TMC2660', 'TMC2660_STANDALONE', 'TMC5130', 'TMC5130_STANDALONE']
 */

/*
#define X_DRIVER_TYPE  TMC2208_STANDALONE
#define Y_DRIVER_TYPE  TMC2208_STANDALONE
#define Z_DRIVER_TYPE  TMC2208_STANDALONE
/*/
#define X_DRIVER_TYPE  DRV8825
#define Y_DRIVER_TYPE  DRV8825
#define Z_DRIVER_TYPE  DRV8825
//*/

//#define X2_DRIVER_TYPE A4988
//#define Y2_DRIVER_TYPE A4988
//#define Z2_DRIVER_TYPE A4988
//#define E0_DRIVER_TYPE A4988
//#define E1_DRIVER_TYPE A4988
//#define E2_DRIVER_TYPE A4988
//#define E3_DRIVER_TYPE A4988
//#define E4_DRIVER_TYPE A4988

//#define ENDSTOP_INTERRUPTS_FEATURE

//#define ENDSTOP_NOISE_FILTER

//#define DISTINCT_E_FACTORS

#define DEFAULT_AXIS_STEPS_PER_UNIT   { 100, 100, 1600, 525 }

#define DEFAULT_MAX_FEEDRATE          { 120, 120, 3, 35 }

#define DEFAULT_MAX_ACCELERATION      { 600, 600, 10, 100 }

#define DEFAULT_ACCELERATION          600    // X, Y, Z and E acceleration for printing moves
#define DEFAULT_RETRACT_ACCELERATION  600    // E acceleration for retracts
#define DEFAULT_TRAVEL_ACCELERATION   600    // X, Y, Z acceleration for travel (non printing) moves

#define DEFAULT_XJERK                 1.0
#define DEFAULT_YJERK                 1.0
#define DEFAULT_ZJERK                  0.5
#define DEFAULT_EJERK                 5.0

//#define S_CURVE_ACCELERATION

//#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
//#define Z_MIN_PROBE_REPEATABILITY_TEST

//#define X_PROBE_OFFSET_FROM_EXTRUDER 10  // X offset: -left  +right  [of the nozzle]
//#define Y_PROBE_OFFSET_FROM_EXTRUDER 10  // Y offset: -front +behind [the nozzle]
//#define Z_PROBE_OFFSET_FROM_EXTRUDER 0   // Z offset: -below +above  [the nozzle]

// Certain types of probes need to stay away from edges
//#define MIN_PROBE_EDGE 10

#define XY_PROBE_SPEED 1200
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 3)
//#define MULTIPLE_PROBING 2

#define Z_CLEARANCE_DEPLOY_PROBE   0 // Z Clearance for Deploy/Stow
#define Z_CLEARANCE_BETWEEN_PROBES  0 // Z Clearance between probe points
#define Z_CLEARANCE_MULTI_PROBE     0 // Z Clearance between multiple probes
//#define Z_AFTER_PROBING           5 // Z position after probing is done

//#define Z_PROBE_LOW_POINT          -2

#define Z_PROBE_OFFSET_RANGE_MIN -20
#define Z_PROBE_OFFSET_RANGE_MAX 20

#define X_ENABLE_ON 0
#define Y_ENABLE_ON 0
#define Z_ENABLE_ON 0
#define E_ENABLE_ON 0

#define DISABLE_X false
#define DISABLE_Y false
#define DISABLE_Z false
//#define DISABLE_REDUCED_ACCURACY_WARNING

#define DISABLE_E false
#define DISABLE_INACTIVE_EXTRUDER false

#define INVERT_X_DIR false
#define INVERT_Y_DIR false
#define INVERT_Z_DIR true

#define INVERT_E0_DIR true
#define INVERT_E1_DIR false
#define INVERT_E2_DIR false
#define INVERT_E3_DIR false
#define INVERT_E4_DIR false

//#define NO_MOTION_BEFORE_HOMING

#define UNKNOWN_Z_NO_RAISE

#define Z_HOMING_HEIGHT 0

#define X_HOME_DIR -1
#define Y_HOME_DIR 1
#define Z_HOME_DIR 1

#define X_BED_SIZE 350
#define Y_BED_SIZE 250

#define X_MIN_POS 0
#define Y_MIN_POS 0
#define Z_MIN_POS 0
#define X_MAX_POS 354
#define Y_MAX_POS 254
#define Z_MAX_POS 54

#define MIN_SOFTWARE_ENDSTOPS
#if ENABLED(MIN_SOFTWARE_ENDSTOPS)
  #define MIN_SOFTWARE_ENDSTOP_X
  #define MIN_SOFTWARE_ENDSTOP_Y
  #define MIN_SOFTWARE_ENDSTOP_Z
#endif

#define MAX_SOFTWARE_ENDSTOPS
#if ENABLED(MAX_SOFTWARE_ENDSTOPS)
  #define MAX_SOFTWARE_ENDSTOP_X
  #define MAX_SOFTWARE_ENDSTOP_Y
  #define MAX_SOFTWARE_ENDSTOP_Z
#endif

//#define FILAMENT_RUNOUT_SENSOR
#if ENABLED(FILAMENT_RUNOUT_SENSOR)
  #define NUM_RUNOUT_SENSORS   1
  #define FIL_RUNOUT_INVERTING false
  #define FIL_RUNOUT_PULLUP
  #define FILAMENT_RUNOUT_SCRIPT "M600"
#endif

// @section homing

// The center of the bed is at (X=0, Y=0)
//#define BED_CENTER_AT_0_0

// Manually set the home position. Leave these undefined for automatic settings.
// For DELTA this is the top-center of the Cartesian print volume.
//#define MANUAL_X_HOME_POS 0
//#define MANUAL_Y_HOME_POS 0
//#define MANUAL_Z_HOME_POS 0

//#define Z_SAFE_HOMING
#if ENABLED(Z_SAFE_HOMING)
  #define Z_SAFE_HOMING_X_POINT ((X_BED_SIZE) / 2)    // X point for Z homing when homing all axes (G28).
  #define Z_SAFE_HOMING_Y_POINT ((Y_BED_SIZE) / 2)   // Y point for Z homing when homing all axes (G28).
#endif

#define HOMING_FEEDRATE_XY (25*60)
#define HOMING_FEEDRATE_Z  (4*60)

//#define SKEW_CORRECTION

#if ENABLED(SKEW_CORRECTION)
  #define XY_DIAG_AC 282.8427124746
  #define XY_DIAG_BD 282.8427124746
  #define XY_SIDE_AD 200
  #define XY_SKEW_FACTOR 0.0
  #if ENABLED(SKEW_CORRECTION_FOR_Z)
    #define XZ_DIAG_AC 282.8427124746
    #define XZ_DIAG_BD 282.8427124746
    #define YZ_DIAG_AC 282.8427124746
    #define YZ_DIAG_BD 282.8427124746
    #define YZ_SIDE_AD 200
    #define XZ_SKEW_FACTOR 0.0
    #define YZ_SKEW_FACTOR 0.0
  #endif
#endif

#define EEPROM_SETTINGS // Enable for M500 and M501 commands
//#define DISABLE_M503    // Saves ~2700 bytes of PROGMEM. Disable for release!
#define EEPROM_CHITCHAT   // Give feedback on EEPROM commands. Disable to save PROGMEM.
#define HOST_KEEPALIVE_FEATURE        // Disable this if your host doesn't like keepalive messages
#define DEFAULT_KEEPALIVE_INTERVAL 2  // Number of seconds between "busy" messages. Set with M113.
#define BUSY_WHILE_HEATING            // Some hosts require "busy" messages even during heating
//#define M100_FREE_MEMORY_WATCHER    // Add M100 (Free Memory Watcher) to debug memory usage
//#define INCH_MODE_SUPPORT
//#define TEMPERATURE_UNITS_SUPPORT
#define PREHEAT_1_TEMP_HOTEND 180
#define PREHEAT_1_TEMP_BED     70
#define PREHEAT_1_FAN_SPEED     0 // Value from 0 to 255
#define PREHEAT_2_TEMP_HOTEND 240
#define PREHEAT_2_TEMP_BED    110
#define PREHEAT_2_FAN_SPEED     0 // Value from 0 to 255

//#define NOZZLE_PARK_FEATURE
#if ENABLED(NOZZLE_PARK_FEATURE)
  #define NOZZLE_PARK_POINT { (X_MIN_POS + 10), (Y_MAX_POS - 10), 20 }
  #define NOZZLE_PARK_XY_FEEDRATE 100   // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
  #define NOZZLE_PARK_Z_FEEDRATE 5      // Z axis feedrate in mm/s (not used for delta printers)
#endif

#define PRINTJOB_TIMER_AUTOSTART
#define PRINTCOUNTER

#define LCD_LANGUAGE en
#define DISPLAY_CHARSET_HD44780 JAPANESE

//#define SDSUPPORT
//#define SPI_SPEED SPI_HALF_SPEED
//#define SPI_SPEED SPI_QUARTER_SPEED
//#define SPI_SPEED SPI_EIGHTH_SPEED
//#define SD_CHECK_AND_RETRY

//#define NO_LCD_MENUS
//#define SLIM_LCD_MENUS
//#define ENCODER_PULSES_PER_STEP 4
//#define ENCODER_STEPS_PER_MENU_ITEM 1
//#define REVERSE_ENCODER_DIRECTION
//#define REVERSE_MENU_DIRECTION
//#define INDIVIDUAL_AXIS_HOMING_MENU
//#define SPEAKER
//#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 2
//#define LCD_FEEDBACK_FREQUENCY_HZ 5000

//#define REPRAP_DISCOUNT_SMART_CONTROLLER
//#define ULTIPANEL
//#define PANEL_ONE
//#define G3D_PANEL
//#define RIGIDBOT_PANEL
//#define MAKEBOARD_MINI_2_LINE_DISPLAY_1602
//#define ZONESTAR_LCD
//#define ULTRA_LCD
//#define RA_CONTROL_PANEL
//#define LCD_SAINSMART_I2C_1602
//#define LCD_SAINSMART_I2C_2004
//#define LCM1602
//#define LCD_I2C_PANELOLU2
//#define LCD_I2C_VIKI
//#define SAV_3DLCD
//#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
//#define REPRAPWORLD_GRAPHICAL_LCD
//#define VIKI2
//#define miniVIKI
//#define MINIPANEL
//#define MAKRPANEL
//#define ELB_FULL_GRAPHIC_CONTROLLER
//#define BQ_LCD_SMART_CONTROLLER
//#define CARTESIO_UI
//#define LCD_FOR_MELZI
//#define U8GLIB_SSD1306
//#define SAV_3DGLCD
#if ENABLED(SAV_3DGLCD)
  //#define U8GLIB_SSD1306
  #define U8GLIB_SH1106
#endif
//#define ULTI_CONTROLLER
//#define OLED_PANEL_TINYBOY2
//#define MKS_MINI_12864
//#define CR10_STOCKDISPLAY
//#define ANET_FULL_GRAPHICS_LCD
//#define MKS_12864OLED
//#define MKS_12864OLED_SSD1306
//#define SILVER_GATE_GLCD_CONTROLLER
//#define MALYAN_LCD
//#define REPRAPWORLD_KEYPAD
//#define REPRAPWORLD_KEYPAD_MOVE_STEP 10.0

//#define FAST_PWM_FAN
//#define FAN_SOFT_PWM
#define SOFT_PWM_SCALE 0
//#define SOFT_PWM_DITHER
//#define TEMP_STAT_LEDS
//#define PHOTOGRAPH_PIN     23
//#define SF_ARC_FIX
//#define BARICUDA
//#define BLINKM
//#define PCA9632

//#define RGB_LED
//#define RGBW_LED

#if ENABLED(RGB_LED) || ENABLED(RGBW_LED)
  #define RGB_LED_R_PIN 34
  #define RGB_LED_G_PIN 43
  #define RGB_LED_B_PIN 35
  #define RGB_LED_W_PIN -1
#endif

//#define NEOPIXEL_LED
#if ENABLED(NEOPIXEL_LED)
  #define NEOPIXEL_TYPE   NEO_GRBW
  #define NEOPIXEL_PIN    4
  #define NEOPIXEL_PIXELS 30
  #define NEOPIXEL_IS_SEQUENTIAL
  #define NEOPIXEL_BRIGHTNESS 127
  //#define NEOPIXEL_STARTUP_TEST
#endif

#if ENABLED(BLINKM) || ENABLED(RGB_LED) || ENABLED(RGBW_LED) || ENABLED(PCA9632) || ENABLED(NEOPIXEL_LED)
  #define PRINTER_EVENT_LEDS
#endif


//#define NUM_SERVOS 3
#define SERVO_DELAY { 300 }
//#define DEACTIVATE_SERVOS_AFTER_MOVE

#endif // CONFIGURATION_H
