Pin status from 0 - 255
- */
-inline void gcode_M42() {
- if (!code_seen('S')) return;
-
- int pin_status = code_value_int();
- if (pin_status < 0 || pin_status > 255) return;
-
- int pin_number = code_seen('P') ? code_value_int() : LED_PIN;
- if (pin_number < 0) return;
-
- for (uint8_t i = 0; i < COUNT(sensitive_pins); i++)
- if (pin_number == sensitive_pins[i]) return;
-
- pinMode(pin_number, OUTPUT);
- digitalWrite(pin_number, pin_status);
- analogWrite(pin_number, pin_status);
-
- #if FAN_COUNT > 0
- switch (pin_number) {
- #if HAS_FAN0
- case FAN_PIN: fanSpeeds[0] = pin_status; break;
- #endif
- #if HAS_FAN1
- case FAN1_PIN: fanSpeeds[1] = pin_status; break;
- #endif
- #if HAS_FAN2
- case FAN2_PIN: fanSpeeds[2] = pin_status; break;
- #endif
- }
- #endif
-}
-
-#if ENABLED(Z_MIN_PROBE_REPEATABILITY_TEST)
-
- /**
- * M48: Z probe repeatability measurement function.
- *
- * Usage:
- * M48
- * P = Number of sampled points (4-50, default 10)
- * X = Sample X position
- * Y = Sample Y position
- * V = Verbose level (0-4, default=1)
- * E = Engage Z probe for each reading
- * L = Number of legs of movement before probe
- * S = Schizoid (Or Star if you prefer)
- *
- * This function assumes the bed has been homed. Specifically, that a G28 command
- * as been issued prior to invoking the M48 Z probe repeatability measurement function.
- * Any information generated by a prior G29 Bed leveling command will be lost and need to be
- * regenerated.
- */
- inline void gcode_M48() {
-
- if (axis_unhomed_error(true, true, true)) return;
-
- int8_t verbose_level = code_seen('V') ? code_value_byte() : 1;
- if (verbose_level < 0 || verbose_level > 4) {
- SERIAL_PROTOCOLLNPGM("?Verbose Level not plausible (0-4).");
- return;
- }
-
- if (verbose_level > 0)
- SERIAL_PROTOCOLLNPGM("M48 Z-Probe Repeatability test");
-
- int8_t n_samples = code_seen('P') ? code_value_byte() : 10;
- if (n_samples < 4 || n_samples > 50) {
- SERIAL_PROTOCOLLNPGM("?Sample size not plausible (4-50).");
- return;
- }
-
- float X_current = current_position[X_AXIS],
- Y_current = current_position[Y_AXIS];
-
- bool stow_probe_after_each = code_seen('E');
-
- float X_probe_location = code_seen('X') ? code_value_axis_units(X_AXIS) : X_current + X_PROBE_OFFSET_FROM_EXTRUDER;
- #if DISABLED(DELTA)
- if (X_probe_location < LOGICAL_X_POSITION(MIN_PROBE_X) || X_probe_location > LOGICAL_X_POSITION(MAX_PROBE_X)) {
- out_of_range_error(PSTR("X"));
- return;
- }
- #endif
-
- float Y_probe_location = code_seen('Y') ? code_value_axis_units(Y_AXIS) : Y_current + Y_PROBE_OFFSET_FROM_EXTRUDER;
- #if DISABLED(DELTA)
- if (Y_probe_location < LOGICAL_Y_POSITION(MIN_PROBE_Y) || Y_probe_location > LOGICAL_Y_POSITION(MAX_PROBE_Y)) {
- out_of_range_error(PSTR("Y"));
- return;
- }
- #else
- if (HYPOT(RAW_X_POSITION(X_probe_location), RAW_Y_POSITION(Y_probe_location)) > DELTA_PROBEABLE_RADIUS) {
- SERIAL_PROTOCOLLNPGM("? (X,Y) location outside of probeable radius.");
- return;
- }
- #endif
-
- bool seen_L = code_seen('L');
- uint8_t n_legs = seen_L ? code_value_byte() : 0;
- if (n_legs > 15) {
- SERIAL_PROTOCOLLNPGM("?Number of legs in movement not plausible (0-15).");
- return;
- }
- if (n_legs == 1) n_legs = 2;
-
- bool schizoid_flag = code_seen('S');
- if (schizoid_flag && !seen_L) n_legs = 7;
-
- /**
- * Now get everything to the specified probe point So we can safely do a
- * probe to get us close to the bed. If the Z-Axis is far from the bed,
- * we don't want to use that as a starting point for each probe.
- */
- if (verbose_level > 2)
- SERIAL_PROTOCOLLNPGM("Positioning the probe...");
-
- #if ENABLED(DELTA)
- // we don't do bed level correction in M48 because we want the raw data when we probe
- reset_bed_level();
- #elif ENABLED(AUTO_BED_LEVELING_FEATURE)
- // we don't do bed level correction in M48 because we want the raw data when we probe
- planner.bed_level_matrix.set_to_identity();
- #endif
-
- setup_for_endstop_or_probe_move();
-
- // Move to the first point, deploy, and probe
- probe_pt(X_probe_location, Y_probe_location, stow_probe_after_each, verbose_level);
-
- randomSeed(millis());
-
- double mean = 0, sigma = 0, sample_set[n_samples];
- for (uint8_t n = 0; n < n_samples; n++) {
- if (n_legs) {
- int dir = (random(0, 10) > 5.0) ? -1 : 1; // clockwise or counter clockwise
- float angle = random(0.0, 360.0),
- radius = random(
- #if ENABLED(DELTA)
- DELTA_PROBEABLE_RADIUS / 8, DELTA_PROBEABLE_RADIUS / 3
- #else
- 5, X_MAX_LENGTH / 8
- #endif
- );
-
- if (verbose_level > 3) {
- SERIAL_ECHOPAIR("Starting radius: ", radius);
- SERIAL_ECHOPAIR(" angle: ", angle);
- SERIAL_ECHOPGM(" Direction: ");
- if (dir > 0) SERIAL_ECHOPGM("Counter-");
- SERIAL_ECHOLNPGM("Clockwise");
- }
-
- for (uint8_t l = 0; l < n_legs - 1; l++) {
- double delta_angle;
-
- if (schizoid_flag)
- // The points of a 5 point star are 72 degrees apart. We need to
- // skip a point and go to the next one on the star.
- delta_angle = dir * 2.0 * 72.0;
-
- else
- // If we do this line, we are just trying to move further
- // around the circle.
- delta_angle = dir * (float) random(25, 45);
-
- angle += delta_angle;
-
- while (angle > 360.0) // We probably do not need to keep the angle between 0 and 2*PI, but the
- angle -= 360.0; // Arduino documentation says the trig functions should not be given values
- while (angle < 0.0) // outside of this range. It looks like they behave correctly with
- angle += 360.0; // numbers outside of the range, but just to be safe we clamp them.
-
- X_current = X_probe_location - (X_PROBE_OFFSET_FROM_EXTRUDER) + cos(RADIANS(angle)) * radius;
- Y_current = Y_probe_location - (Y_PROBE_OFFSET_FROM_EXTRUDER) + sin(RADIANS(angle)) * radius;
-
- #if DISABLED(DELTA)
- X_current = constrain(X_current, X_MIN_POS, X_MAX_POS);
- Y_current = constrain(Y_current, Y_MIN_POS, Y_MAX_POS);
- #else
- // If we have gone out too far, we can do a simple fix and scale the numbers
- // back in closer to the origin.
- while (HYPOT(X_current, Y_current) > DELTA_PROBEABLE_RADIUS) {
- X_current /= 1.25;
- Y_current /= 1.25;
- if (verbose_level > 3) {
- SERIAL_ECHOPAIR("Pulling point towards center:", X_current);
- SERIAL_ECHOPAIR(", ", Y_current);
- SERIAL_EOL;
- }
- }
- #endif
- if (verbose_level > 3) {
- SERIAL_PROTOCOLPGM("Going to:");
- SERIAL_ECHOPAIR(" X", X_current);
- SERIAL_ECHOPAIR(" Y", Y_current);
- SERIAL_ECHOPAIR(" Z", current_position[Z_AXIS]);
- SERIAL_EOL;
- }
- do_blocking_move_to_xy(X_current, Y_current);
- } // n_legs loop
- } // n_legs
-
- // Probe a single point
- sample_set[n] = probe_pt(X_probe_location, Y_probe_location, stow_probe_after_each, verbose_level);
-
- /**
- * Get the current mean for the data points we have so far
- */
- double sum = 0.0;
- for (uint8_t j = 0; j <= n; j++) sum += sample_set[j];
- mean = sum / (n + 1);
-
- /**
- * Now, use that mean to calculate the standard deviation for the
- * data points we have so far
- */
- sum = 0.0;
- for (uint8_t j = 0; j <= n; j++)
- sum += sq(sample_set[j] - mean);
-
- sigma = sqrt(sum / (n + 1));
- if (verbose_level > 0) {
- if (verbose_level > 1) {
- SERIAL_PROTOCOL(n + 1);
- SERIAL_PROTOCOLPGM(" of ");
- SERIAL_PROTOCOL((int)n_samples);
- SERIAL_PROTOCOLPGM(" z: ");
- SERIAL_PROTOCOL_F(current_position[Z_AXIS], 6);
- if (verbose_level > 2) {
- SERIAL_PROTOCOLPGM(" mean: ");
- SERIAL_PROTOCOL_F(mean, 6);
- SERIAL_PROTOCOLPGM(" sigma: ");
- SERIAL_PROTOCOL_F(sigma, 6);
- }
- }
- SERIAL_EOL;
- }
-
- } // End of probe loop
-
- if (STOW_PROBE()) return;
-
- if (verbose_level > 0) {
- SERIAL_PROTOCOLPGM("Mean: ");
- SERIAL_PROTOCOL_F(mean, 6);
- SERIAL_EOL;
- }
-
- SERIAL_PROTOCOLPGM("Standard Deviation: ");
- SERIAL_PROTOCOL_F(sigma, 6);
- SERIAL_EOL; SERIAL_EOL;
-
- clean_up_after_endstop_or_probe_move();
-
- report_current_position();
- }
-
-#endif // Z_MIN_PROBE_REPEATABILITY_TEST
-
-/**
- * M75: Start print timer
- */
-inline void gcode_M75() { print_job_timer.start(); }
-
-/**
- * M76: Pause print timer
- */
-inline void gcode_M76() { print_job_timer.pause(); }
-
-/**
- * M77: Stop print timer
- */
-inline void gcode_M77() { print_job_timer.stop(); }
-
-#if ENABLED(PRINTCOUNTER)
- /**
- * M78: Show print statistics
- */
- inline void gcode_M78() {
- // "M78 S78" will reset the statistics
- if (code_seen('S') && code_value_int() == 78)
- print_job_timer.initStats();
- else print_job_timer.showStats();
- }
-#endif
-
-/**
- * M104: Set hot end temperature
- */
-inline void gcode_M104() {
- if (get_target_extruder_from_command(104)) return;
- if (DEBUGGING(DRYRUN)) return;
-
- #if ENABLED(SINGLENOZZLE)
- if (target_extruder != active_extruder) return;
- #endif
-
- if (code_seen('S')) {
- thermalManager.setTargetHotend(code_value_temp_abs(), target_extruder);
- #if ENABLED(DUAL_X_CARRIAGE)
- if (dual_x_carriage_mode == DXC_DUPLICATION_MODE && target_extruder == 0)
- thermalManager.setTargetHotend(code_value_temp_abs() == 0.0 ? 0.0 : code_value_temp_abs() + duplicate_extruder_temp_offset, 1);
- #endif
-
- #if ENABLED(PRINTJOB_TIMER_AUTOSTART)
- /**
- * Stop the timer at the end of print, starting is managed by
- * 'heat and wait' M109.
- * We use half EXTRUDE_MINTEMP here to allow nozzles to be put into hot
- * stand by mode, for instance in a dual extruder setup, without affecting
- * the running print timer.
- */
- if (code_value_temp_abs() <= (EXTRUDE_MINTEMP)/2) {
- print_job_timer.stop();
- LCD_MESSAGEPGM(WELCOME_MSG);
- }
- #endif
-
- if (code_value_temp_abs() > thermalManager.degHotend(target_extruder)) LCD_MESSAGEPGM(MSG_HEATING);
- }
-}
-
-#if HAS_TEMP_HOTEND || HAS_TEMP_BED
-
- void print_heaterstates() {
- #if HAS_TEMP_HOTEND
- SERIAL_PROTOCOLPGM(" T:");
- SERIAL_PROTOCOL_F(thermalManager.degHotend(target_extruder), 1);
- SERIAL_PROTOCOLPGM(" /");
- SERIAL_PROTOCOL_F(thermalManager.degTargetHotend(target_extruder), 1);
- #if ENABLED(SHOW_TEMP_ADC_VALUES)
- SERIAL_PROTOCOLPAIR(" (", thermalManager.current_temperature_raw[target_extruder] / OVERSAMPLENR);
- SERIAL_CHAR(')');
- #endif
- #endif
- #if HAS_TEMP_BED
- SERIAL_PROTOCOLPGM(" B:");
- SERIAL_PROTOCOL_F(thermalManager.degBed(), 1);
- SERIAL_PROTOCOLPGM(" /");
- SERIAL_PROTOCOL_F(thermalManager.degTargetBed(), 1);
- #if ENABLED(SHOW_TEMP_ADC_VALUES)
- SERIAL_PROTOCOLPAIR(" (", thermalManager.current_temperature_bed_raw / OVERSAMPLENR);
- SERIAL_CHAR(')');
- #endif
- #endif
- #if HOTENDS > 1
- HOTEND_LOOP() {
- SERIAL_PROTOCOLPAIR(" T", e);
- SERIAL_PROTOCOLCHAR(':');
- SERIAL_PROTOCOL_F(thermalManager.degHotend(e), 1);
- SERIAL_PROTOCOLPGM(" /");
- SERIAL_PROTOCOL_F(thermalManager.degTargetHotend(e), 1);
- #if ENABLED(SHOW_TEMP_ADC_VALUES)
- SERIAL_PROTOCOLPAIR(" (", thermalManager.current_temperature_raw[e] / OVERSAMPLENR);
- SERIAL_CHAR(')');
- #endif
- }
- #endif
- SERIAL_PROTOCOLPGM(" @:");
- SERIAL_PROTOCOL(thermalManager.getHeaterPower(target_extruder));
- #if HAS_TEMP_BED
- SERIAL_PROTOCOLPGM(" B@:");
- SERIAL_PROTOCOL(thermalManager.getHeaterPower(-1));
- #endif
- #if HOTENDS > 1
- HOTEND_LOOP() {
- SERIAL_PROTOCOLPAIR(" @", e);
- SERIAL_PROTOCOLCHAR(':');
- SERIAL_PROTOCOL(thermalManager.getHeaterPower(e));
- }
- #endif
- }
-#endif
-
-/**
- * M105: Read hot end and bed temperature
- */
-inline void gcode_M105() {
- if (get_target_extruder_from_command(105)) return;
-
- #if HAS_TEMP_HOTEND || HAS_TEMP_BED
- SERIAL_PROTOCOLPGM(MSG_OK);
- print_heaterstates();
- #else // !HAS_TEMP_HOTEND && !HAS_TEMP_BED
- SERIAL_ERROR_START;
- SERIAL_ERRORLNPGM(MSG_ERR_NO_THERMISTORS);
- #endif
-
- SERIAL_EOL;
-}
-
-#if FAN_COUNT > 0
-
- /**
- * M106: Set Fan Speed
- *
- * S Speed between 0-255
- * P Fan index, if more than one fan
- */
- inline void gcode_M106() {
- uint16_t s = code_seen('S') ? code_value_ushort() : 255,
- p = code_seen('P') ? code_value_ushort() : 0;
- NOMORE(s, 255);
- if (p < FAN_COUNT) fanSpeeds[p] = s;
- }
-
- /**
- * M107: Fan Off
- */
- inline void gcode_M107() {
- uint16_t p = code_seen('P') ? code_value_ushort() : 0;
- if (p < FAN_COUNT) fanSpeeds[p] = 0;
- }
-
-#endif // FAN_COUNT > 0
-
-#if DISABLED(EMERGENCY_PARSER)
-
- /**
- * M108: Stop the waiting for heaters in M109, M190, M303. Does not affect the target temperature.
- */
- inline void gcode_M108() { wait_for_heatup = false; }
-
-
- /**
- * M112: Emergency Stop
- */
- inline void gcode_M112() { kill(PSTR(MSG_KILLED)); }
-
-
- /**
- * M410: Quickstop - Abort all planned moves
- *
- * This will stop the carriages mid-move, so most likely they
- * will be out of sync with the stepper position after this.
- */
- inline void gcode_M410() { quickstop_stepper(); }
-
-#endif
-
- #ifndef MIN_COOLING_SLOPE_DEG
- #define MIN_COOLING_SLOPE_DEG 1.50
- #endif
- #ifndef MIN_COOLING_SLOPE_TIME
- #define MIN_COOLING_SLOPE_TIME 60
- #endif
-
-/**
- * M109: Sxxx Wait for extruder(s) to reach temperature. Waits only when heating.
- * Rxxx Wait for extruder(s) to reach temperature. Waits when heating and cooling.
- */
-inline void gcode_M109() {
-
- if (get_target_extruder_from_command(109)) return;
- if (DEBUGGING(DRYRUN)) return;
-
- #if ENABLED(SINGLENOZZLE)
- if (target_extruder != active_extruder) return;
- #endif
-
- bool no_wait_for_cooling = code_seen('S');
- if (no_wait_for_cooling || code_seen('R')) {
- thermalManager.setTargetHotend(code_value_temp_abs(), target_extruder);
- #if ENABLED(DUAL_X_CARRIAGE)
- if (dual_x_carriage_mode == DXC_DUPLICATION_MODE && target_extruder == 0)
- thermalManager.setTargetHotend(code_value_temp_abs() == 0.0 ? 0.0 : code_value_temp_abs() + duplicate_extruder_temp_offset, 1);
- #endif
-
- #if ENABLED(PRINTJOB_TIMER_AUTOSTART)
- /**
- * We use half EXTRUDE_MINTEMP here to allow nozzles to be put into hot
- * stand by mode, for instance in a dual extruder setup, without affecting
- * the running print timer.
- */
- if (code_value_temp_abs() <= (EXTRUDE_MINTEMP)/2) {
- print_job_timer.stop();
- LCD_MESSAGEPGM(WELCOME_MSG);
- }
- /**
- * We do not check if the timer is already running because this check will
- * be done for us inside the Stopwatch::start() method thus a running timer
- * will not restart.
- */
- else print_job_timer.start();
- #endif
-
- if (thermalManager.isHeatingHotend(target_extruder)) LCD_MESSAGEPGM(MSG_HEATING);
- }
-
- #if ENABLED(AUTOTEMP)
- planner.autotemp_M109();
- #endif
-
- #if TEMP_RESIDENCY_TIME > 0
- millis_t residency_start_ms = 0;
- // Loop until the temperature has stabilized
- #define TEMP_CONDITIONS (!residency_start_ms || PENDING(now, residency_start_ms + (TEMP_RESIDENCY_TIME) * 1000UL))
- #else
- // Loop until the temperature is very close target
- #define TEMP_CONDITIONS (wants_to_cool ? thermalManager.isCoolingHotend(target_extruder) : thermalManager.isHeatingHotend(target_extruder))
- #endif //TEMP_RESIDENCY_TIME > 0
-
- float theTarget = -1.0, old_temp = 9999.0;
- bool wants_to_cool = false;
- wait_for_heatup = true;
- millis_t now, next_temp_ms = 0, next_cool_check_ms = 0;
-
- KEEPALIVE_STATE(NOT_BUSY);
-
- do {
- // Target temperature might be changed during the loop
- if (theTarget != thermalManager.degTargetHotend(target_extruder)) {
- wants_to_cool = thermalManager.isCoolingHotend(target_extruder);
- theTarget = thermalManager.degTargetHotend(target_extruder);
-
- // Exit if S, continue if S, R, or R
- if (no_wait_for_cooling && wants_to_cool) break;
- }
-
- now = millis();
- if (ELAPSED(now, next_temp_ms)) { //Print temp & remaining time every 1s while waiting
- next_temp_ms = now + 1000UL;
- print_heaterstates();
- #if TEMP_RESIDENCY_TIME > 0
- SERIAL_PROTOCOLPGM(" W:");
- if (residency_start_ms) {
- long rem = (((TEMP_RESIDENCY_TIME) * 1000UL) - (now - residency_start_ms)) / 1000UL;
- SERIAL_PROTOCOLLN(rem);
- }
- else {
- SERIAL_PROTOCOLLNPGM("?");
- }
- #else
- SERIAL_EOL;
- #endif
- }
-
- idle();
- refresh_cmd_timeout(); // to prevent stepper_inactive_time from running out
-
- float temp = thermalManager.degHotend(target_extruder);
-
- #if TEMP_RESIDENCY_TIME > 0
-
- float temp_diff = fabs(theTarget - temp);
-
- if (!residency_start_ms) {
- // Start the TEMP_RESIDENCY_TIME timer when we reach target temp for the first time.
- if (temp_diff < TEMP_WINDOW) residency_start_ms = now;
- }
- else if (temp_diff > TEMP_HYSTERESIS) {
- // Restart the timer whenever the temperature falls outside the hysteresis.
- residency_start_ms = now;
- }
-
- #endif //TEMP_RESIDENCY_TIME > 0
-
- // Prevent a wait-forever situation if R is misused i.e. M109 R0
- if (wants_to_cool) {
- // break after MIN_COOLING_SLOPE_TIME seconds
- // if the temperature did not drop at least MIN_COOLING_SLOPE_DEG
- if (!next_cool_check_ms || ELAPSED(now, next_cool_check_ms)) {
- if (old_temp - temp < MIN_COOLING_SLOPE_DEG) break;
- next_cool_check_ms = now + 1000UL * MIN_COOLING_SLOPE_TIME;
- old_temp = temp;
- }
- }
-
- } while (wait_for_heatup && TEMP_CONDITIONS);
-
- LCD_MESSAGEPGM(MSG_HEATING_COMPLETE);
- KEEPALIVE_STATE(IN_HANDLER);
-}
-
-#if HAS_TEMP_BED
-
- #ifndef MIN_COOLING_SLOPE_DEG_BED
- #define MIN_COOLING_SLOPE_DEG_BED 1.50
- #endif
- #ifndef MIN_COOLING_SLOPE_TIME_BED
- #define MIN_COOLING_SLOPE_TIME_BED 60
- #endif
-
- /**
- * M190: Sxxx Wait for bed current temp to reach target temp. Waits only when heating
- * Rxxx Wait for bed current temp to reach target temp. Waits when heating and cooling
- */
- inline void gcode_M190() {
- if (DEBUGGING(DRYRUN)) return;
-
- LCD_MESSAGEPGM(MSG_BED_HEATING);
- bool no_wait_for_cooling = code_seen('S');
- if (no_wait_for_cooling || code_seen('R')) {
- thermalManager.setTargetBed(code_value_temp_abs());
- #if ENABLED(PRINTJOB_TIMER_AUTOSTART)
- if (code_value_temp_abs() > BED_MINTEMP) {
- /**
- * We start the timer when 'heating and waiting' command arrives, LCD
- * functions never wait. Cooling down managed by extruders.
- *
- * We do not check if the timer is already running because this check will
- * be done for us inside the Stopwatch::start() method thus a running timer
- * will not restart.
- */
- print_job_timer.start();
- }
- #endif
- }
-
- #if TEMP_BED_RESIDENCY_TIME > 0
- millis_t residency_start_ms = 0;
- // Loop until the temperature has stabilized
- #define TEMP_BED_CONDITIONS (!residency_start_ms || PENDING(now, residency_start_ms + (TEMP_BED_RESIDENCY_TIME) * 1000UL))
- #else
- // Loop until the temperature is very close target
- #define TEMP_BED_CONDITIONS (wants_to_cool ? thermalManager.isCoolingBed() : thermalManager.isHeatingBed())
- #endif //TEMP_BED_RESIDENCY_TIME > 0
-
- float theTarget = -1.0, old_temp = 9999.0;
- bool wants_to_cool = false;
- wait_for_heatup = true;
- millis_t now, next_temp_ms = 0, next_cool_check_ms = 0;
-
- KEEPALIVE_STATE(NOT_BUSY);
-
- target_extruder = active_extruder; // for print_heaterstates
-
- do {
- // Target temperature might be changed during the loop
- if (theTarget != thermalManager.degTargetBed()) {
- wants_to_cool = thermalManager.isCoolingBed();
- theTarget = thermalManager.degTargetBed();
-
- // Exit if S, continue if S, R, or R
- if (no_wait_for_cooling && wants_to_cool) break;
- }
-
- now = millis();
- if (ELAPSED(now, next_temp_ms)) { //Print Temp Reading every 1 second while heating up.
- next_temp_ms = now + 1000UL;
- print_heaterstates();
- #if TEMP_BED_RESIDENCY_TIME > 0
- SERIAL_PROTOCOLPGM(" W:");
- if (residency_start_ms) {
- long rem = (((TEMP_BED_RESIDENCY_TIME) * 1000UL) - (now - residency_start_ms)) / 1000UL;
- SERIAL_PROTOCOLLN(rem);
- }
- else {
- SERIAL_PROTOCOLLNPGM("?");
- }
- #else
- SERIAL_EOL;
- #endif
- }
-
- idle();
- refresh_cmd_timeout(); // to prevent stepper_inactive_time from running out
-
- float temp = thermalManager.degBed();
-
- #if TEMP_BED_RESIDENCY_TIME > 0
-
- float temp_diff = fabs(theTarget - temp);
-
- if (!residency_start_ms) {
- // Start the TEMP_BED_RESIDENCY_TIME timer when we reach target temp for the first time.
- if (temp_diff < TEMP_BED_WINDOW) residency_start_ms = now;
- }
- else if (temp_diff > TEMP_BED_HYSTERESIS) {
- // Restart the timer whenever the temperature falls outside the hysteresis.
- residency_start_ms = now;
- }
-
- #endif //TEMP_BED_RESIDENCY_TIME > 0
-
- // Prevent a wait-forever situation if R is misused i.e. M190 R0
- if (wants_to_cool) {
- // break after MIN_COOLING_SLOPE_TIME_BED seconds
- // if the temperature did not drop at least MIN_COOLING_SLOPE_DEG_BED
- if (!next_cool_check_ms || ELAPSED(now, next_cool_check_ms)) {
- if (old_temp - temp < MIN_COOLING_SLOPE_DEG_BED) break;
- next_cool_check_ms = now + 1000UL * MIN_COOLING_SLOPE_TIME_BED;
- old_temp = temp;
- }
- }
-
- } while (wait_for_heatup && TEMP_BED_CONDITIONS);
-
- LCD_MESSAGEPGM(MSG_BED_DONE);
- KEEPALIVE_STATE(IN_HANDLER);
- }
-
-#endif // HAS_TEMP_BED
-
-/**
- * M110: Set Current Line Number
- */
-inline void gcode_M110() {
- if (code_seen('N')) gcode_N = code_value_long();
-}
-
-/**
- * M111: Set the debug level
- */
-inline void gcode_M111() {
- marlin_debug_flags = code_seen('S') ? code_value_byte() : (uint8_t) DEBUG_NONE;
-
- const static char str_debug_1[] PROGMEM = MSG_DEBUG_ECHO;
- const static char str_debug_2[] PROGMEM = MSG_DEBUG_INFO;
- const static char str_debug_4[] PROGMEM = MSG_DEBUG_ERRORS;
- const static char str_debug_8[] PROGMEM = MSG_DEBUG_DRYRUN;
- const static char str_debug_16[] PROGMEM = MSG_DEBUG_COMMUNICATION;
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- const static char str_debug_32[] PROGMEM = MSG_DEBUG_LEVELING;
- #endif
-
- const static char* const debug_strings[] PROGMEM = {
- str_debug_1, str_debug_2, str_debug_4, str_debug_8, str_debug_16,
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- str_debug_32
- #endif
- };
-
- SERIAL_ECHO_START;
- SERIAL_ECHOPGM(MSG_DEBUG_PREFIX);
- if (marlin_debug_flags) {
- uint8_t comma = 0;
- for (uint8_t i = 0; i < COUNT(debug_strings); i++) {
- if (TEST(marlin_debug_flags, i)) {
- if (comma++) SERIAL_CHAR(',');
- serialprintPGM((char*)pgm_read_word(&(debug_strings[i])));
- }
- }
- }
- else {
- SERIAL_ECHOPGM(MSG_DEBUG_OFF);
- }
- SERIAL_EOL;
-}
-
-#if ENABLED(HOST_KEEPALIVE_FEATURE)
-
- /**
- * M113: Get or set Host Keepalive interval (0 to disable)
- *
- * S Optional. Set the keepalive interval.
- */
- inline void gcode_M113() {
- if (code_seen('S')) {
- host_keepalive_interval = code_value_byte();
- NOMORE(host_keepalive_interval, 60);
- }
- else {
- SERIAL_ECHO_START;
- SERIAL_ECHOPAIR("M113 S", (unsigned long)host_keepalive_interval);
- SERIAL_EOL;
- }
- }
-
-#endif
-
-#if ENABLED(BARICUDA)
-
- #if HAS_HEATER_1
- /**
- * M126: Heater 1 valve open
- */
- inline void gcode_M126() { baricuda_valve_pressure = code_seen('S') ? code_value_byte() : 255; }
- /**
- * M127: Heater 1 valve close
- */
- inline void gcode_M127() { baricuda_valve_pressure = 0; }
- #endif
-
- #if HAS_HEATER_2
- /**
- * M128: Heater 2 valve open
- */
- inline void gcode_M128() { baricuda_e_to_p_pressure = code_seen('S') ? code_value_byte() : 255; }
- /**
- * M129: Heater 2 valve close
- */
- inline void gcode_M129() { baricuda_e_to_p_pressure = 0; }
- #endif
-
-#endif //BARICUDA
-
-/**
- * M140: Set bed temperature
- */
-inline void gcode_M140() {
- if (DEBUGGING(DRYRUN)) return;
- if (code_seen('S')) thermalManager.setTargetBed(code_value_temp_abs());
-}
-
-#if ENABLED(ULTIPANEL)
-
- /**
- * M145: Set the heatup state for a material in the LCD menu
- * S (0=PLA, 1=ABS)
- * H
- * B
- * F
- */
- inline void gcode_M145() {
- int8_t material = code_seen('S') ? (int8_t)code_value_int() : 0;
- if (material < 0 || material > 1) {
- SERIAL_ERROR_START;
- SERIAL_ERRORLNPGM(MSG_ERR_MATERIAL_INDEX);
- }
- else {
- int v;
- switch (material) {
- case 0:
- if (code_seen('H')) {
- v = code_value_int();
- preheatHotendTemp1 = constrain(v, EXTRUDE_MINTEMP, HEATER_0_MAXTEMP - 15);
- }
- if (code_seen('F')) {
- v = code_value_int();
- preheatFanSpeed1 = constrain(v, 0, 255);
- }
- #if TEMP_SENSOR_BED != 0
- if (code_seen('B')) {
- v = code_value_int();
- preheatBedTemp1 = constrain(v, BED_MINTEMP, BED_MAXTEMP - 15);
- }
- #endif
- break;
- case 1:
- if (code_seen('H')) {
- v = code_value_int();
- preheatHotendTemp2 = constrain(v, EXTRUDE_MINTEMP, HEATER_0_MAXTEMP - 15);
- }
- if (code_seen('F')) {
- v = code_value_int();
- preheatFanSpeed2 = constrain(v, 0, 255);
- }
- #if TEMP_SENSOR_BED != 0
- if (code_seen('B')) {
- v = code_value_int();
- preheatBedTemp2 = constrain(v, BED_MINTEMP, BED_MAXTEMP - 15);
- }
- #endif
- break;
- }
- }
- }
-
-#endif
-
-#if ENABLED(TEMPERATURE_UNITS_SUPPORT)
- /**
- * M149: Set temperature units
- */
- inline void gcode_M149() {
- if (code_seen('C')) {
- set_input_temp_units(TEMPUNIT_C);
- } else if (code_seen('K')) {
- set_input_temp_units(TEMPUNIT_K);
- } else if (code_seen('F')) {
- set_input_temp_units(TEMPUNIT_F);
- }
- }
-#endif
-
-#if HAS_POWER_SWITCH
-
- /**
- * M80: Turn on Power Supply
- */
- inline void gcode_M80() {
- OUT_WRITE(PS_ON_PIN, PS_ON_AWAKE); //GND
-
- /**
- * If you have a switch on suicide pin, this is useful
- * if you want to start another print with suicide feature after
- * a print without suicide...
- */
- #if HAS_SUICIDE
- OUT_WRITE(SUICIDE_PIN, HIGH);
- #endif
-
- #if ENABLED(ULTIPANEL)
- powersupply = true;
- LCD_MESSAGEPGM(WELCOME_MSG);
- lcd_update();
- #endif
- }
-
-#endif // HAS_POWER_SWITCH
-
-/**
- * M81: Turn off Power, including Power Supply, if there is one.
- *
- * This code should ALWAYS be available for EMERGENCY SHUTDOWN!
- */
-inline void gcode_M81() {
- thermalManager.disable_all_heaters();
- stepper.finish_and_disable();
- #if FAN_COUNT > 0
- #if FAN_COUNT > 1
- for (uint8_t i = 0; i < FAN_COUNT; i++) fanSpeeds[i] = 0;
- #else
- fanSpeeds[0] = 0;
- #endif
- #endif
- delay(1000); // Wait 1 second before switching off
- #if HAS_SUICIDE
- stepper.synchronize();
- suicide();
- #elif HAS_POWER_SWITCH
- OUT_WRITE(PS_ON_PIN, PS_ON_ASLEEP);
- #endif
- #if ENABLED(ULTIPANEL)
- #if HAS_POWER_SWITCH
- powersupply = false;
- #endif
- LCD_MESSAGEPGM(MACHINE_NAME " " MSG_OFF ".");
- lcd_update();
- #endif
-}
-
-
-/**
- * M82: Set E codes absolute (default)
- */
-inline void gcode_M82() { axis_relative_modes[E_AXIS] = false; }
-
-/**
- * M83: Set E codes relative while in Absolute Coordinates (G90) mode
- */
-inline void gcode_M83() { axis_relative_modes[E_AXIS] = true; }
-
-/**
- * M18, M84: Disable all stepper motors
- */
-inline void gcode_M18_M84() {
- if (code_seen('S')) {
- stepper_inactive_time = code_value_millis_from_seconds();
- }
- else {
- bool all_axis = !((code_seen('X')) || (code_seen('Y')) || (code_seen('Z')) || (code_seen('E')));
- if (all_axis) {
- stepper.finish_and_disable();
- }
- else {
- stepper.synchronize();
- if (code_seen('X')) disable_x();
- if (code_seen('Y')) disable_y();
- if (code_seen('Z')) disable_z();
- #if ((E0_ENABLE_PIN != X_ENABLE_PIN) && (E1_ENABLE_PIN != Y_ENABLE_PIN)) // Only enable on boards that have seperate ENABLE_PINS
- if (code_seen('E')) {
- disable_e0();
- disable_e1();
- disable_e2();
- disable_e3();
- }
- #endif
- }
- }
-}
-
-/**
- * M85: Set inactivity shutdown timer with parameter S. To disable set zero (default)
- */
-inline void gcode_M85() {
- if (code_seen('S')) max_inactive_time = code_value_millis_from_seconds();
-}
-
-/**
- * M92: Set axis steps-per-unit for one or more axes, X, Y, Z, and E.
- * (Follows the same syntax as G92)
- */
-inline void gcode_M92() {
- LOOP_XYZE(i) {
- if (code_seen(axis_codes[i])) {
- if (i == E_AXIS) {
- float value = code_value_per_axis_unit(i);
- if (value < 20.0) {
- float factor = planner.axis_steps_per_mm[i] / value; // increase e constants if M92 E14 is given for netfab.
- planner.max_e_jerk *= factor;
- planner.max_feedrate_mm_s[i] *= factor;
- planner.max_acceleration_steps_per_s2[i] *= factor;
- }
- planner.axis_steps_per_mm[i] = value;
- }
- else {
- planner.axis_steps_per_mm[i] = code_value_per_axis_unit(i);
- }
- }
- }
- planner.refresh_positioning();
-}
-
-/**
- * Output the current position to serial
- */
-static void report_current_position() {
- SERIAL_PROTOCOLPGM("X:");
- SERIAL_PROTOCOL(current_position[X_AXIS]);
- SERIAL_PROTOCOLPGM(" Y:");
- SERIAL_PROTOCOL(current_position[Y_AXIS]);
- SERIAL_PROTOCOLPGM(" Z:");
- SERIAL_PROTOCOL(current_position[Z_AXIS]);
- SERIAL_PROTOCOLPGM(" E:");
- SERIAL_PROTOCOL(current_position[E_AXIS]);
-
- stepper.report_positions();
-
- #if ENABLED(SCARA)
- SERIAL_PROTOCOLPGM("SCARA Theta:");
- SERIAL_PROTOCOL(delta[X_AXIS]);
- SERIAL_PROTOCOLPGM(" Psi+Theta:");
- SERIAL_PROTOCOL(delta[Y_AXIS]);
- SERIAL_EOL;
-
- SERIAL_PROTOCOLPGM("SCARA Cal - Theta:");
- SERIAL_PROTOCOL(delta[X_AXIS]);
- SERIAL_PROTOCOLPGM(" Psi+Theta (90):");
- SERIAL_PROTOCOL(delta[Y_AXIS] - delta[X_AXIS] - 90);
- SERIAL_EOL;
-
- SERIAL_PROTOCOLPGM("SCARA step Cal - Theta:");
- SERIAL_PROTOCOL(delta[X_AXIS] / 90 * planner.axis_steps_per_mm[X_AXIS]);
- SERIAL_PROTOCOLPGM(" Psi+Theta:");
- SERIAL_PROTOCOL((delta[Y_AXIS] - delta[X_AXIS]) / 90 * planner.axis_steps_per_mm[Y_AXIS]);
- SERIAL_EOL; SERIAL_EOL;
- #endif
-}
-
-/**
- * M114: Output current position to serial port
- */
-inline void gcode_M114() { report_current_position(); }
-
-/**
- * M115: Capabilities string
- */
-inline void gcode_M115() {
- SERIAL_PROTOCOLPGM(MSG_M115_REPORT);
-}
-
-/**
- * M117: Set LCD Status Message
- */
-inline void gcode_M117() {
- lcd_setstatus(current_command_args);
-}
-
-/**
- * M119: Output endstop states to serial output
- */
-inline void gcode_M119() { endstops.M119(); }
-
-/**
- * M120: Enable endstops and set non-homing endstop state to "enabled"
- */
-inline void gcode_M120() { endstops.enable_globally(true); }
-
-/**
- * M121: Disable endstops and set non-homing endstop state to "disabled"
- */
-inline void gcode_M121() { endstops.enable_globally(false); }
-
-#if ENABLED(BLINKM)
-
- /**
- * M150: Set Status LED Color - Use R-U-B for R-G-B
- */
- inline void gcode_M150() {
- SendColors(
- code_seen('R') ? code_value_byte() : 0,
- code_seen('U') ? code_value_byte() : 0,
- code_seen('B') ? code_value_byte() : 0
- );
- }
-
-#endif // BLINKM
-
-#if ENABLED(EXPERIMENTAL_I2CBUS)
-
- /**
- * M155: Send data to a I2C slave device
- *
- * This is a PoC, the formating and arguments for the GCODE will
- * change to be more compatible, the current proposal is:
- *
- * M155 A ; Sets the I2C slave address the data will be sent to
- *
- * M155 B
- * M155 B
- * M155 B
- *
- * M155 S1 ; Send the buffered data and reset the buffer
- * M155 R1 ; Reset the buffer without sending data
- *
- */
- inline void gcode_M155() {
- // Set the target address
- if (code_seen('A'))
- i2c.address(code_value_byte());
-
- // Add a new byte to the buffer
- else if (code_seen('B'))
- i2c.addbyte(code_value_int());
-
- // Flush the buffer to the bus
- else if (code_seen('S')) i2c.send();
-
- // Reset and rewind the buffer
- else if (code_seen('R')) i2c.reset();
- }
-
- /**
- * M156: Request X bytes from I2C slave device
- *
- * Usage: M156 A B
- */
- inline void gcode_M156() {
- uint8_t addr = code_seen('A') ? code_value_byte() : 0;
- int bytes = code_seen('B') ? code_value_int() : 1;
-
- if (addr && bytes > 0 && bytes <= 32) {
- i2c.address(addr);
- i2c.reqbytes(bytes);
- }
- else {
- SERIAL_ERROR_START;
- SERIAL_ERRORLN("Bad i2c request");
- }
- }
-
-#endif //EXPERIMENTAL_I2CBUS
-
-/**
- * M200: Set filament diameter and set E axis units to cubic units
- *
- * T - Optional extruder number. Current extruder if omitted.
- * D - Diameter of the filament. Use "D0" to switch back to linear units on the E axis.
- */
-inline void gcode_M200() {
-
- if (get_target_extruder_from_command(200)) return;
-
- if (code_seen('D')) {
- // setting any extruder filament size disables volumetric on the assumption that
- // slicers either generate in extruder values as cubic mm or as as filament feeds
- // for all extruders
- volumetric_enabled = (code_value_linear_units() != 0.0);
- if (volumetric_enabled) {
- filament_size[target_extruder] = code_value_linear_units();
- // make sure all extruders have some sane value for the filament size
- for (uint8_t i = 0; i < COUNT(filament_size); i++)
- if (! filament_size[i]) filament_size[i] = DEFAULT_NOMINAL_FILAMENT_DIA;
- }
- }
- else {
- //reserved for setting filament diameter via UFID or filament measuring device
- return;
- }
- calculate_volumetric_multipliers();
-}
-
-/**
- * M201: Set max acceleration in units/s^2 for print moves (M201 X1000 Y1000)
- */
-inline void gcode_M201() {
- LOOP_XYZE(i) {
- if (code_seen(axis_codes[i])) {
- planner.max_acceleration_mm_per_s2[i] = code_value_axis_units(i);
- }
- }
- // steps per sq second need to be updated to agree with the units per sq second (as they are what is used in the planner)
- planner.reset_acceleration_rates();
-}
-
-#if 0 // Not used for Sprinter/grbl gen6
- inline void gcode_M202() {
- LOOP_XYZE(i) {
- if (code_seen(axis_codes[i])) axis_travel_steps_per_sqr_second[i] = code_value_axis_units(i) * planner.axis_steps_per_mm[i];
- }
- }
-#endif
-
-
-/**
- * M203: Set maximum feedrate that your machine can sustain (M203 X200 Y200 Z300 E10000) in units/sec
- */
-inline void gcode_M203() {
- LOOP_XYZE(i)
- if (code_seen(axis_codes[i]))
- planner.max_feedrate_mm_s[i] = code_value_axis_units(i);
-}
-
-/**
- * M204: Set Accelerations in units/sec^2 (M204 P1200 R3000 T3000)
- *
- * P = Printing moves
- * R = Retract only (no X, Y, Z) moves
- * T = Travel (non printing) moves
- *
- * Also sets minimum segment time in ms (B20000) to prevent buffer under-runs and M20 minimum feedrate
- */
-inline void gcode_M204() {
- if (code_seen('S')) { // Kept for legacy compatibility. Should NOT BE USED for new developments.
- planner.travel_acceleration = planner.acceleration = code_value_linear_units();
- SERIAL_ECHOPAIR("Setting Print and Travel Acceleration: ", planner.acceleration);
- SERIAL_EOL;
- }
- if (code_seen('P')) {
- planner.acceleration = code_value_linear_units();
- SERIAL_ECHOPAIR("Setting Print Acceleration: ", planner.acceleration);
- SERIAL_EOL;
- }
- if (code_seen('R')) {
- planner.retract_acceleration = code_value_linear_units();
- SERIAL_ECHOPAIR("Setting Retract Acceleration: ", planner.retract_acceleration);
- SERIAL_EOL;
- }
- if (code_seen('T')) {
- planner.travel_acceleration = code_value_linear_units();
- SERIAL_ECHOPAIR("Setting Travel Acceleration: ", planner.travel_acceleration);
- SERIAL_EOL;
- }
-}
-
-/**
- * M205: Set Advanced Settings
- *
- * S = Min Feed Rate (units/s)
- * T = Min Travel Feed Rate (units/s)
- * B = Min Segment Time (µs)
- * X = Max XY Jerk (units/sec^2)
- * Z = Max Z Jerk (units/sec^2)
- * E = Max E Jerk (units/sec^2)
- */
-inline void gcode_M205() {
- if (code_seen('S')) planner.min_feedrate_mm_s = code_value_linear_units();
- if (code_seen('T')) planner.min_travel_feedrate_mm_s = code_value_linear_units();
- if (code_seen('B')) planner.min_segment_time = code_value_millis();
- if (code_seen('X')) planner.max_xy_jerk = code_value_linear_units();
- if (code_seen('Z')) planner.max_z_jerk = code_value_axis_units(Z_AXIS);
- if (code_seen('E')) planner.max_e_jerk = code_value_axis_units(E_AXIS);
-}
-
-/**
- * M206: Set Additional Homing Offset (X Y Z). SCARA aliases T=X, P=Y
- */
-inline void gcode_M206() {
- LOOP_XYZ(i)
- if (code_seen(axis_codes[i]))
- set_home_offset((AxisEnum)i, code_value_axis_units(i));
-
- #if ENABLED(SCARA)
- if (code_seen('T')) set_home_offset(X_AXIS, code_value_axis_units(X_AXIS)); // Theta
- if (code_seen('P')) set_home_offset(Y_AXIS, code_value_axis_units(Y_AXIS)); // Psi
- #endif
-
- SYNC_PLAN_POSITION_KINEMATIC();
- report_current_position();
-}
-
-#if ENABLED(DELTA)
- /**
- * M665: Set delta configurations
- *
- * L = diagonal rod
- * R = delta radius
- * S = segments per second
- * A = Alpha (Tower 1) diagonal rod trim
- * B = Beta (Tower 2) diagonal rod trim
- * C = Gamma (Tower 3) diagonal rod trim
- */
- inline void gcode_M665() {
- if (code_seen('L')) delta_diagonal_rod = code_value_linear_units();
- if (code_seen('R')) delta_radius = code_value_linear_units();
- if (code_seen('S')) delta_segments_per_second = code_value_float();
- if (code_seen('A')) delta_diagonal_rod_trim_tower_1 = code_value_linear_units();
- if (code_seen('B')) delta_diagonal_rod_trim_tower_2 = code_value_linear_units();
- if (code_seen('C')) delta_diagonal_rod_trim_tower_3 = code_value_linear_units();
- recalc_delta_settings(delta_radius, delta_diagonal_rod);
- }
- /**
- * M666: Set delta endstop adjustment
- */
- inline void gcode_M666() {
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) {
- SERIAL_ECHOLNPGM(">>> gcode_M666");
- }
- #endif
- LOOP_XYZ(i) {
- if (code_seen(axis_codes[i])) {
- endstop_adj[i] = code_value_axis_units(i);
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) {
- SERIAL_ECHOPGM("endstop_adj[");
- SERIAL_ECHO(axis_codes[i]);
- SERIAL_ECHOPAIR("] = ", endstop_adj[i]);
- SERIAL_EOL;
- }
- #endif
- }
- }
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) {
- SERIAL_ECHOLNPGM("<<< gcode_M666");
- }
- #endif
- }
-
-#elif ENABLED(Z_DUAL_ENDSTOPS) // !DELTA && ENABLED(Z_DUAL_ENDSTOPS)
-
- /**
- * M666: For Z Dual Endstop setup, set z axis offset to the z2 axis.
- */
- inline void gcode_M666() {
- if (code_seen('Z')) z_endstop_adj = code_value_axis_units(Z_AXIS);
- SERIAL_ECHOPAIR("Z Endstop Adjustment set to (mm):", z_endstop_adj);
- SERIAL_EOL;
- }
-
-#endif // !DELTA && Z_DUAL_ENDSTOPS
-
-#if ENABLED(FWRETRACT)
-
- /**
- * M207: Set firmware retraction values
- *
- * S[+units] retract_length
- * W[+units] retract_length_swap (multi-extruder)
- * F[units/min] retract_feedrate_mm_s
- * Z[units] retract_zlift
- */
- inline void gcode_M207() {
- if (code_seen('S')) retract_length = code_value_axis_units(E_AXIS);
- if (code_seen('F')) retract_feedrate_mm_s = MMM_TO_MMS(code_value_axis_units(E_AXIS));
- if (code_seen('Z')) retract_zlift = code_value_axis_units(Z_AXIS);
- #if EXTRUDERS > 1
- if (code_seen('W')) retract_length_swap = code_value_axis_units(E_AXIS);
- #endif
- }
-
- /**
- * M208: Set firmware un-retraction values
- *
- * S[+units] retract_recover_length (in addition to M207 S*)
- * W[+units] retract_recover_length_swap (multi-extruder)
- * F[units/min] retract_recover_feedrate_mm_s
- */
- inline void gcode_M208() {
- if (code_seen('S')) retract_recover_length = code_value_axis_units(E_AXIS);
- if (code_seen('F')) retract_recover_feedrate_mm_s = MMM_TO_MMS(code_value_axis_units(E_AXIS));
- #if EXTRUDERS > 1
- if (code_seen('W')) retract_recover_length_swap = code_value_axis_units(E_AXIS);
- #endif
- }
-
- /**
- * M209: Enable automatic retract (M209 S1)
- * detect if the slicer did not support G10/11: every normal extrude-only move will be classified as retract depending on the direction.
- */
- inline void gcode_M209() {
- if (code_seen('S')) {
- int t = code_value_int();
- switch (t) {
- case 0:
- autoretract_enabled = false;
- break;
- case 1:
- autoretract_enabled = true;
- break;
- default:
- unknown_command_error();
- return;
- }
- for (int i = 0; i < EXTRUDERS; i++) retracted[i] = false;
- }
- }
-
-#endif // FWRETRACT
-
-#if HOTENDS > 1
-
- /**
- * M218 - set hotend offset (in linear units)
- *
- * T
- * X
- * Y
- * Z - Available with DUAL_X_CARRIAGE and SWITCHING_EXTRUDER
- */
- inline void gcode_M218() {
- if (get_target_extruder_from_command(218)) return;
-
- if (code_seen('X')) hotend_offset[X_AXIS][target_extruder] = code_value_axis_units(X_AXIS);
- if (code_seen('Y')) hotend_offset[Y_AXIS][target_extruder] = code_value_axis_units(Y_AXIS);
-
- #if ENABLED(DUAL_X_CARRIAGE) || ENABLED(SWITCHING_EXTRUDER)
- if (code_seen('Z')) hotend_offset[Z_AXIS][target_extruder] = code_value_axis_units(Z_AXIS);
- #endif
-
- SERIAL_ECHO_START;
- SERIAL_ECHOPGM(MSG_HOTEND_OFFSET);
- HOTEND_LOOP() {
- SERIAL_CHAR(' ');
- SERIAL_ECHO(hotend_offset[X_AXIS][e]);
- SERIAL_CHAR(',');
- SERIAL_ECHO(hotend_offset[Y_AXIS][e]);
- #if ENABLED(DUAL_X_CARRIAGE) || ENABLED(SWITCHING_EXTRUDER)
- SERIAL_CHAR(',');
- SERIAL_ECHO(hotend_offset[Z_AXIS][e]);
- #endif
- }
- SERIAL_EOL;
- }
-
-#endif // HOTENDS > 1
-
-/**
- * M220: Set speed percentage factor, aka "Feed Rate" (M220 S95)
- */
-inline void gcode_M220() {
- if (code_seen('S')) feedrate_percentage = code_value_int();
-}
-
-/**
- * M221: Set extrusion percentage (M221 T0 S95)
- */
-inline void gcode_M221() {
- if (get_target_extruder_from_command(221)) return;
- if (code_seen('S'))
- extruder_multiplier[target_extruder] = code_value_int();
-}
-
-/**
- * M226: Wait until the specified pin reaches the state required (M226 P S)
- */
-inline void gcode_M226() {
- if (code_seen('P')) {
- int pin_number = code_value_int();
-
- int pin_state = code_seen('S') ? code_value_int() : -1; // required pin state - default is inverted
-
- if (pin_state >= -1 && pin_state <= 1) {
-
- for (uint8_t i = 0; i < COUNT(sensitive_pins); i++) {
- if (sensitive_pins[i] == pin_number) {
- pin_number = -1;
- break;
- }
- }
-
- if (pin_number > -1) {
- int target = LOW;
-
- stepper.synchronize();
-
- pinMode(pin_number, INPUT);
-
- switch (pin_state) {
- case 1:
- target = HIGH;
- break;
-
- case 0:
- target = LOW;
- break;
-
- case -1:
- target = !digitalRead(pin_number);
- break;
- }
-
- while (digitalRead(pin_number) != target) idle();
-
- } // pin_number > -1
- } // pin_state -1 0 1
- } // code_seen('P')
-}
-
-#if HAS_SERVOS
-
- /**
- * M280: Get or set servo position. P [S]
- */
- inline void gcode_M280() {
- if (!code_seen('P')) return;
- int servo_index = code_value_int();
- if (servo_index >= 0 && servo_index < NUM_SERVOS) {
- if (code_seen('S'))
- MOVE_SERVO(servo_index, code_value_int());
- else {
- SERIAL_ECHO_START;
- SERIAL_ECHOPGM(" Servo ");
- SERIAL_ECHO(servo_index);
- SERIAL_ECHOPGM(": ");
- SERIAL_ECHOLN(servo[servo_index].read());
- }
- }
- else {
- SERIAL_ERROR_START;
- SERIAL_ERROR("Servo ");
- SERIAL_ERROR(servo_index);
- SERIAL_ERRORLN(" out of range");
- }
- }
-
-#endif // HAS_SERVOS
-
-#if HAS_BUZZER
-
- /**
- * M300: Play beep sound S P
- */
- inline void gcode_M300() {
- uint16_t const frequency = code_seen('S') ? code_value_ushort() : 260;
- uint16_t duration = code_seen('P') ? code_value_ushort() : 1000;
-
- // Limits the tone duration to 0-5 seconds.
- NOMORE(duration, 5000);
-#ifdef UARM_SWIFT
- swift_buzzer.tone(duration, frequency);
-#else
- BUZZ(duration, frequency);
-#endif
- }
-
-#endif // HAS_BUZZER
-
-#if ENABLED(PIDTEMP)
-
- /**
- * M301: Set PID parameters P I D (and optionally C, L)
- *
- * P[float] Kp term
- * I[float] Ki term (unscaled)
- * D[float] Kd term (unscaled)
- *
- * With PID_EXTRUSION_SCALING:
- *
- * C[float] Kc term
- * L[float] LPQ length
- */
- inline void gcode_M301() {
-
- // multi-extruder PID patch: M301 updates or prints a single extruder's PID values
- // default behaviour (omitting E parameter) is to update for extruder 0 only
- int e = code_seen('E') ? code_value_int() : 0; // extruder being updated
-
- if (e < HOTENDS) { // catch bad input value
- if (code_seen('P')) PID_PARAM(Kp, e) = code_value_float();
- if (code_seen('I')) PID_PARAM(Ki, e) = scalePID_i(code_value_float());
- if (code_seen('D')) PID_PARAM(Kd, e) = scalePID_d(code_value_float());
- #if ENABLED(PID_EXTRUSION_SCALING)
- if (code_seen('C')) PID_PARAM(Kc, e) = code_value_float();
- if (code_seen('L')) lpq_len = code_value_float();
- NOMORE(lpq_len, LPQ_MAX_LEN);
- #endif
-
- thermalManager.updatePID();
- SERIAL_ECHO_START;
- #if ENABLED(PID_PARAMS_PER_HOTEND)
- SERIAL_ECHOPGM(" e:"); // specify extruder in serial output
- SERIAL_ECHO(e);
- #endif // PID_PARAMS_PER_HOTEND
- SERIAL_ECHOPGM(" p:");
- SERIAL_ECHO(PID_PARAM(Kp, e));
- SERIAL_ECHOPGM(" i:");
- SERIAL_ECHO(unscalePID_i(PID_PARAM(Ki, e)));
- SERIAL_ECHOPGM(" d:");
- SERIAL_ECHO(unscalePID_d(PID_PARAM(Kd, e)));
- #if ENABLED(PID_EXTRUSION_SCALING)
- SERIAL_ECHOPGM(" c:");
- //Kc does not have scaling applied above, or in resetting defaults
- SERIAL_ECHO(PID_PARAM(Kc, e));
- #endif
- SERIAL_EOL;
- }
- else {
- SERIAL_ERROR_START;
- SERIAL_ERRORLN(MSG_INVALID_EXTRUDER);
- }
- }
-
-#endif // PIDTEMP
-
-#if ENABLED(PIDTEMPBED)
-
- inline void gcode_M304() {
- if (code_seen('P')) thermalManager.bedKp = code_value_float();
- if (code_seen('I')) thermalManager.bedKi = scalePID_i(code_value_float());
- if (code_seen('D')) thermalManager.bedKd = scalePID_d(code_value_float());
-
- thermalManager.updatePID();
-
- SERIAL_ECHO_START;
- SERIAL_ECHOPGM(" p:");
- SERIAL_ECHO(thermalManager.bedKp);
- SERIAL_ECHOPGM(" i:");
- SERIAL_ECHO(unscalePID_i(thermalManager.bedKi));
- SERIAL_ECHOPGM(" d:");
- SERIAL_ECHOLN(unscalePID_d(thermalManager.bedKd));
- }
-
-#endif // PIDTEMPBED
-
-#if defined(CHDK) || HAS_PHOTOGRAPH
-
- /**
- * M240: Trigger a camera by emulating a Canon RC-1
- * See http://www.doc-diy.net/photo/rc-1_hacked/
- */
- inline void gcode_M240() {
- #ifdef CHDK
-
- OUT_WRITE(CHDK, HIGH);
- chdkHigh = millis();
- chdkActive = true;
-
- #elif HAS_PHOTOGRAPH
-
- const uint8_t NUM_PULSES = 16;
- const float PULSE_LENGTH = 0.01524;
- for (int i = 0; i < NUM_PULSES; i++) {
- WRITE(PHOTOGRAPH_PIN, HIGH);
- _delay_ms(PULSE_LENGTH);
- WRITE(PHOTOGRAPH_PIN, LOW);
- _delay_ms(PULSE_LENGTH);
- }
- delay(7.33);
- for (int i = 0; i < NUM_PULSES; i++) {
- WRITE(PHOTOGRAPH_PIN, HIGH);
- _delay_ms(PULSE_LENGTH);
- WRITE(PHOTOGRAPH_PIN, LOW);
- _delay_ms(PULSE_LENGTH);
- }
-
- #endif // !CHDK && HAS_PHOTOGRAPH
- }
-
-#endif // CHDK || PHOTOGRAPH_PIN
-
-#if HAS_LCD_CONTRAST
-
- /**
- * M250: Read and optionally set the LCD contrast
- */
- inline void gcode_M250() {
- if (code_seen('C')) set_lcd_contrast(code_value_int());
- SERIAL_PROTOCOLPGM("lcd contrast value: ");
- SERIAL_PROTOCOL(lcd_contrast);
- SERIAL_EOL;
- }
-
-#endif // HAS_LCD_CONTRAST
-
-#if ENABLED(PREVENT_DANGEROUS_EXTRUDE)
-
- /**
- * M302: Allow cold extrudes, or set the minimum extrude temperature
- *
- * S sets the minimum extrude temperature
- * P enables (1) or disables (0) cold extrusion
- *
- * Examples:
- *
- * M302 ; report current cold extrusion state
- * M302 P0 ; enable cold extrusion checking
- * M302 P1 ; disables cold extrusion checking
- * M302 S0 ; always allow extrusion (disables checking)
- * M302 S170 ; only allow extrusion above 170
- * M302 S170 P1 ; set min extrude temp to 170 but leave disabled
- */
- inline void gcode_M302() {
- bool seen_S = code_seen('S');
- if (seen_S) {
- thermalManager.extrude_min_temp = code_value_temp_abs();
- thermalManager.allow_cold_extrude = (thermalManager.extrude_min_temp == 0);
- }
-
- if (code_seen('P'))
- thermalManager.allow_cold_extrude = (thermalManager.extrude_min_temp == 0) || code_value_bool();
- else if (!seen_S) {
- // Report current state
- SERIAL_ECHO_START;
- SERIAL_ECHOPAIR("Cold extrudes are ", (thermalManager.allow_cold_extrude ? "en" : "dis"));
- SERIAL_ECHOPAIR("abled (min temp ", int(thermalManager.extrude_min_temp + 0.5));
- SERIAL_ECHOLNPGM("C)");
- }
- }
-
-#endif // PREVENT_DANGEROUS_EXTRUDE
-
-/**
- * M303: PID relay autotune
- *
- * S sets the target temperature. (default 150C)
- * E (-1 for the bed) (default 0)
- * C
- * U with a non-zero value will apply the result to current settings
- */
-inline void gcode_M303() {
- #if HAS_PID_HEATING
- int e = code_seen('E') ? code_value_int() : 0;
- int c = code_seen('C') ? code_value_int() : 5;
- bool u = code_seen('U') && code_value_bool();
-
- float temp = code_seen('S') ? code_value_temp_abs() : (e < 0 ? 70.0 : 150.0);
-
- if (e >= 0 && e < HOTENDS)
- target_extruder = e;
-
- KEEPALIVE_STATE(NOT_BUSY); // don't send "busy: processing" messages during autotune output
-
- thermalManager.PID_autotune(temp, e, c, u);
-
- KEEPALIVE_STATE(IN_HANDLER);
- #else
- SERIAL_ERROR_START;
- SERIAL_ERRORLNPGM(MSG_ERR_M303_DISABLED);
- #endif
-}
-
-#if ENABLED(SCARA)
- bool SCARA_move_to_cal(uint8_t delta_x, uint8_t delta_y) {
- //SoftEndsEnabled = false; // Ignore soft endstops during calibration
- //SERIAL_ECHOLNPGM(" Soft endstops disabled");
- if (IsRunning()) {
- //gcode_get_destination(); // For X Y Z E F
- delta[X_AXIS] = delta_x;
- delta[Y_AXIS] = delta_y;
- forward_kinematics_SCARA(delta);
- destination[X_AXIS] = delta[X_AXIS] / axis_scaling[X_AXIS];
- destination[Y_AXIS] = delta[Y_AXIS] / axis_scaling[Y_AXIS];
- prepare_move_to_destination();
- //ok_to_send();
- return true;
- }
- return false;
- }
-
- /**
- * M360: SCARA calibration: Move to cal-position ThetaA (0 deg calibration)
- */
- inline bool gcode_M360() {
- SERIAL_ECHOLNPGM(" Cal: Theta 0");
- return SCARA_move_to_cal(0, 120);
- }
-
- /**
- * M361: SCARA calibration: Move to cal-position ThetaB (90 deg calibration - steps per degree)
- */
- inline bool gcode_M361() {
- SERIAL_ECHOLNPGM(" Cal: Theta 90");
- return SCARA_move_to_cal(90, 130);
- }
-
- /**
- * M362: SCARA calibration: Move to cal-position PsiA (0 deg calibration)
- */
- inline bool gcode_M362() {
- SERIAL_ECHOLNPGM(" Cal: Psi 0");
- return SCARA_move_to_cal(60, 180);
- }
-
- /**
- * M363: SCARA calibration: Move to cal-position PsiB (90 deg calibration - steps per degree)
- */
- inline bool gcode_M363() {
- SERIAL_ECHOLNPGM(" Cal: Psi 90");
- return SCARA_move_to_cal(50, 90);
- }
-
- /**
- * M364: SCARA calibration: Move to cal-position PSIC (90 deg to Theta calibration position)
- */
- inline bool gcode_M364() {
- SERIAL_ECHOLNPGM(" Cal: Theta-Psi 90");
- return SCARA_move_to_cal(45, 135);
- }
-
- /**
- * M365: SCARA calibration: Scaling factor, X, Y, Z axis
- */
- inline void gcode_M365() {
- LOOP_XYZ(i)
- if (code_seen(axis_codes[i]))
- axis_scaling[i] = code_value_float();
- }
-
-#endif // SCARA
-
-#if ENABLED(EXT_SOLENOID)
-
- void enable_solenoid(uint8_t num) {
- switch (num) {
- case 0:
- OUT_WRITE(SOL0_PIN, HIGH);
- break;
- #if HAS_SOLENOID_1
- case 1:
- OUT_WRITE(SOL1_PIN, HIGH);
- break;
- #endif
- #if HAS_SOLENOID_2
- case 2:
- OUT_WRITE(SOL2_PIN, HIGH);
- break;
- #endif
- #if HAS_SOLENOID_3
- case 3:
- OUT_WRITE(SOL3_PIN, HIGH);
- break;
- #endif
- default:
- SERIAL_ECHO_START;
- SERIAL_ECHOLNPGM(MSG_INVALID_SOLENOID);
- break;
- }
- }
-
- void enable_solenoid_on_active_extruder() { enable_solenoid(active_extruder); }
-
- void disable_all_solenoids() {
- OUT_WRITE(SOL0_PIN, LOW);
- OUT_WRITE(SOL1_PIN, LOW);
- OUT_WRITE(SOL2_PIN, LOW);
- OUT_WRITE(SOL3_PIN, LOW);
- }
-
- /**
- * M380: Enable solenoid on the active extruder
- */
- inline void gcode_M380() { enable_solenoid_on_active_extruder(); }
-
- /**
- * M381: Disable all solenoids
- */
- inline void gcode_M381() { disable_all_solenoids(); }
-
-#endif // EXT_SOLENOID
-
-/**
- * M400: Finish all moves
- */
-inline void gcode_M400() { stepper.synchronize(); }
-
-#if HAS_BED_PROBE
-
- /**
- * M401: Engage Z Servo endstop if available
- */
- inline void gcode_M401() { DEPLOY_PROBE(); }
-
- /**
- * M402: Retract Z Servo endstop if enabled
- */
- inline void gcode_M402() { STOW_PROBE(); }
-
-#endif // HAS_BED_PROBE
-
-#if ENABLED(FILAMENT_WIDTH_SENSOR)
-
- /**
- * M404: Display or set (in current units) the nominal filament width (3mm, 1.75mm ) W<3.0>
- */
- inline void gcode_M404() {
- if (code_seen('W')) {
- filament_width_nominal = code_value_linear_units();
- }
- else {
- SERIAL_PROTOCOLPGM("Filament dia (nominal mm):");
- SERIAL_PROTOCOLLN(filament_width_nominal);
- }
- }
-
- /**
- * M405: Turn on filament sensor for control
- */
- inline void gcode_M405() {
- // This is technically a linear measurement, but since it's quantized to centimeters and is a different unit than
- // everything else, it uses code_value_int() instead of code_value_linear_units().
- if (code_seen('D')) meas_delay_cm = code_value_int();
- NOMORE(meas_delay_cm, MAX_MEASUREMENT_DELAY);
-
- if (filwidth_delay_index2 == -1) { // Initialize the ring buffer if not done since startup
- int temp_ratio = thermalManager.widthFil_to_size_ratio();
-
- for (uint8_t i = 0; i < COUNT(measurement_delay); ++i)
- measurement_delay[i] = temp_ratio - 100; // Subtract 100 to scale within a signed byte
-
- filwidth_delay_index1 = filwidth_delay_index2 = 0;
- }
-
- filament_sensor = true;
-
- //SERIAL_PROTOCOLPGM("Filament dia (measured mm):");
- //SERIAL_PROTOCOL(filament_width_meas);
- //SERIAL_PROTOCOLPGM("Extrusion ratio(%):");
- //SERIAL_PROTOCOL(extruder_multiplier[active_extruder]);
- }
-
- /**
- * M406: Turn off filament sensor for control
- */
- inline void gcode_M406() { filament_sensor = false; }
-
- /**
- * M407: Get measured filament diameter on serial output
- */
- inline void gcode_M407() {
- SERIAL_PROTOCOLPGM("Filament dia (measured mm):");
- SERIAL_PROTOCOLLN(filament_width_meas);
- }
-
-#endif // FILAMENT_WIDTH_SENSOR
-
-void quickstop_stepper() {
- stepper.quick_stop();
- #if DISABLED(SCARA)
- stepper.synchronize();
- LOOP_XYZ(i) set_current_from_steppers_for_axis((AxisEnum)i);
- SYNC_PLAN_POSITION_KINEMATIC();
- #endif
-}
-
-#if ENABLED(MESH_BED_LEVELING)
-
- /**
- * M420: Enable/Disable Mesh Bed Leveling
- */
- inline void gcode_M420() { if (code_seen('S') && code_has_value()) mbl.set_has_mesh(code_value_bool()); }
-
- /**
- * M421: Set a single Mesh Bed Leveling Z coordinate
- * Use either 'M421 X Y Z' or 'M421 I J Z'
- */
- inline void gcode_M421() {
- int8_t px = 0, py = 0;
- float z = 0;
- bool hasX, hasY, hasZ, hasI, hasJ;
- if ((hasX = code_seen('X'))) px = mbl.probe_index_x(code_value_axis_units(X_AXIS));
- if ((hasY = code_seen('Y'))) py = mbl.probe_index_y(code_value_axis_units(Y_AXIS));
- if ((hasI = code_seen('I'))) px = code_value_axis_units(X_AXIS);
- if ((hasJ = code_seen('J'))) py = code_value_axis_units(Y_AXIS);
- if ((hasZ = code_seen('Z'))) z = code_value_axis_units(Z_AXIS);
-
- if (hasX && hasY && hasZ) {
-
- if (px >= 0 && py >= 0)
- mbl.set_z(px, py, z);
- else {
- SERIAL_ERROR_START;
- SERIAL_ERRORLNPGM(MSG_ERR_MESH_XY);
- }
- }
- else if (hasI && hasJ && hasZ) {
- if (px >= 0 && px < MESH_NUM_X_POINTS && py >= 0 && py < MESH_NUM_Y_POINTS)
- mbl.set_z(px, py, z);
- else {
- SERIAL_ERROR_START;
- SERIAL_ERRORLNPGM(MSG_ERR_MESH_XY);
- }
- }
- else {
- SERIAL_ERROR_START;
- SERIAL_ERRORLNPGM(MSG_ERR_M421_PARAMETERS);
- }
- }
-
-#endif
-
-/**
- * M428: Set home_offset based on the distance between the
- * current_position and the nearest "reference point."
- * If an axis is past center its endstop position
- * is the reference-point. Otherwise it uses 0. This allows
- * the Z offset to be set near the bed when using a max endstop.
- *
- * M428 can't be used more than 2cm away from 0 or an endstop.
- *
- * Use M206 to set these values directly.
- */
-inline void gcode_M428() {
- bool err = false;
- LOOP_XYZ(i) {
- if (axis_homed[i]) {
- float base = (current_position[i] > (sw_endstop_min[i] + sw_endstop_max[i]) * 0.5) ? base_home_pos(i) : 0,
- diff = current_position[i] - LOGICAL_POSITION(base, i);
- if (diff > -20 && diff < 20) {
- set_home_offset((AxisEnum)i, home_offset[i] - diff);
- }
- else {
- SERIAL_ERROR_START;
- SERIAL_ERRORLNPGM(MSG_ERR_M428_TOO_FAR);
- LCD_ALERTMESSAGEPGM("Err: Too far!");
- BUZZ(200, 40);
- err = true;
- break;
- }
- }
- }
-
- if (!err) {
- SYNC_PLAN_POSITION_KINEMATIC();
- report_current_position();
- LCD_MESSAGEPGM(MSG_HOME_OFFSETS_APPLIED);
- BUZZ(200, 659);
- BUZZ(200, 698);
- }
-}
-
-/**
- * M500: Store settings in EEPROM
- */
-inline void gcode_M500() {
- Config_StoreSettings();
-}
-
-/**
- * M501: Read settings from EEPROM
- */
-inline void gcode_M501() {
- Config_RetrieveSettings();
-}
-
-/**
- * M502: Revert to default settings
- */
-inline void gcode_M502() {
- Config_ResetDefault();
-}
-
-/**
- * M503: print settings currently in memory
- */
-inline void gcode_M503() {
- Config_PrintSettings(code_seen('S') && !code_value_bool());
-}
-
-#if ENABLED(ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED)
-
- /**
- * M540: Set whether SD card print should abort on endstop hit (M540 S<0|1>)
- */
- inline void gcode_M540() {
- if (code_seen('S')) stepper.abort_on_endstop_hit = code_value_bool();
- }
-
-#endif // ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED
-
-#if HAS_BED_PROBE
-
- inline void gcode_M851() {
-
- SERIAL_ECHO_START;
- SERIAL_ECHOPGM(MSG_ZPROBE_ZOFFSET);
- SERIAL_CHAR(' ');
-
- if (code_seen('Z')) {
- float value = code_value_axis_units(Z_AXIS);
- if (Z_PROBE_OFFSET_RANGE_MIN <= value && value <= Z_PROBE_OFFSET_RANGE_MAX) {
- zprobe_zoffset = value;
- SERIAL_ECHO(zprobe_zoffset);
- }
- else {
- SERIAL_ECHOPGM(MSG_Z_MIN);
- SERIAL_ECHO(Z_PROBE_OFFSET_RANGE_MIN);
- SERIAL_CHAR(' ');
- SERIAL_ECHOPGM(MSG_Z_MAX);
- SERIAL_ECHO(Z_PROBE_OFFSET_RANGE_MAX);
- }
- }
- else {
- SERIAL_ECHOPAIR(": ", zprobe_zoffset);
- }
-
- SERIAL_EOL;
- }
-
-#endif // HAS_BED_PROBE
-
-#if ENABLED(FILAMENT_CHANGE_FEATURE)
-
- /**
- * M600: Pause for filament change
- *
- * E[distance] - Retract the filament this far (negative value)
- * Z[distance] - Move the Z axis by this distance
- * X[position] - Move to this X position, with Y
- * Y[position] - Move to this Y position, with X
- * L[distance] - Retract distance for removal (manual reload)
- *
- * Default values are used for omitted arguments.
- *
- */
- inline void gcode_M600() {
-
- if (thermalManager.tooColdToExtrude(active_extruder)) {
- SERIAL_ERROR_START;
- SERIAL_ERRORLNPGM(MSG_TOO_COLD_FOR_M600);
- return;
- }
-
- // Show initial message and wait for synchronize steppers
- lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_INIT);
- stepper.synchronize();
-
- float lastpos[NUM_AXIS];
-
- // Save current position of all axes
- LOOP_XYZE(i)
- lastpos[i] = destination[i] = current_position[i];
-
- // Define runplan for move axes
- #if ENABLED(DELTA)
- #define RUNPLAN(RATE_MM_S) inverse_kinematics(destination); \
- planner.buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], destination[E_AXIS], RATE_MM_S, active_extruder);
- #else
- #define RUNPLAN(RATE_MM_S) line_to_destination(MMS_TO_MMM(RATE_MM_S));
- #endif
-
- KEEPALIVE_STATE(IN_HANDLER);
-
- // Initial retract before move to filament change position
- if (code_seen('E')) destination[E_AXIS] += code_value_axis_units(E_AXIS);
- #if defined(FILAMENT_CHANGE_RETRACT_LENGTH) && FILAMENT_CHANGE_RETRACT_LENGTH > 0
- else destination[E_AXIS] -= FILAMENT_CHANGE_RETRACT_LENGTH;
- #endif
-
- RUNPLAN(FILAMENT_CHANGE_RETRACT_FEEDRATE);
-
- // Lift Z axis
- float z_lift = code_seen('Z') ? code_value_axis_units(Z_AXIS) :
- #if defined(FILAMENT_CHANGE_Z_ADD) && FILAMENT_CHANGE_Z_ADD > 0
- FILAMENT_CHANGE_Z_ADD
- #else
- 0
- #endif
- ;
-
- if (z_lift > 0) {
- destination[Z_AXIS] += z_lift;
- NOMORE(destination[Z_AXIS], Z_MAX_POS);
- RUNPLAN(FILAMENT_CHANGE_Z_FEEDRATE);
- }
-
- // Move XY axes to filament exchange position
- if (code_seen('X')) destination[X_AXIS] = code_value_axis_units(X_AXIS);
- #ifdef FILAMENT_CHANGE_X_POS
- else destination[X_AXIS] = FILAMENT_CHANGE_X_POS;
- #endif
-
- if (code_seen('Y')) destination[Y_AXIS] = code_value_axis_units(Y_AXIS);
- #ifdef FILAMENT_CHANGE_Y_POS
- else destination[Y_AXIS] = FILAMENT_CHANGE_Y_POS;
- #endif
-
- RUNPLAN(FILAMENT_CHANGE_XY_FEEDRATE);
-
- stepper.synchronize();
- lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_UNLOAD);
-
- // Unload filament
- if (code_seen('L')) destination[E_AXIS] += code_value_axis_units(E_AXIS);
- #if defined(FILAMENT_CHANGE_UNLOAD_LENGTH) && FILAMENT_CHANGE_UNLOAD_LENGTH > 0
- else destination[E_AXIS] -= FILAMENT_CHANGE_UNLOAD_LENGTH;
- #endif
-
- RUNPLAN(FILAMENT_CHANGE_UNLOAD_FEEDRATE);
-
- // Synchronize steppers and then disable extruders steppers for manual filament changing
- stepper.synchronize();
- disable_e0();
- disable_e1();
- disable_e2();
- disable_e3();
- delay(100);
-
- #if HAS_BUZZER
- millis_t next_tick = 0;
- #endif
-
- // Wait for filament insert by user and press button
- lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_INSERT);
-
- while (!lcd_clicked()) {
- #if HAS_BUZZER
- millis_t ms = millis();
- if (ms >= next_tick) {
- BUZZ(300, 2000);
- next_tick = ms + 2500; // Beep every 2.5s while waiting
- }
- #endif
- idle(true);
- }
- delay(100);
- while (lcd_clicked()) idle(true);
- delay(100);
-
- // Show load message
- lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_LOAD);
-
- // Load filament
- if (code_seen('L')) destination[E_AXIS] -= code_value_axis_units(E_AXIS);
- #if defined(FILAMENT_CHANGE_LOAD_LENGTH) && FILAMENT_CHANGE_LOAD_LENGTH > 0
- else destination[E_AXIS] += FILAMENT_CHANGE_LOAD_LENGTH;
- #endif
-
- RUNPLAN(FILAMENT_CHANGE_LOAD_FEEDRATE);
- stepper.synchronize();
-
- #if defined(FILAMENT_CHANGE_EXTRUDE_LENGTH) && FILAMENT_CHANGE_EXTRUDE_LENGTH > 0
- do {
- // Extrude filament to get into hotend
- lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_EXTRUDE);
- destination[E_AXIS] += FILAMENT_CHANGE_EXTRUDE_LENGTH;
- RUNPLAN(FILAMENT_CHANGE_EXTRUDE_FEEDRATE);
- stepper.synchronize();
- // Ask user if more filament should be extruded
- KEEPALIVE_STATE(PAUSED_FOR_USER);
- lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_OPTION);
- while (filament_change_menu_response == FILAMENT_CHANGE_RESPONSE_WAIT_FOR) idle(true);
- KEEPALIVE_STATE(IN_HANDLER);
- } while (filament_change_menu_response != FILAMENT_CHANGE_RESPONSE_RESUME_PRINT);
- #endif
-
- lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_RESUME);
-
- KEEPALIVE_STATE(IN_HANDLER);
-
- // Set extruder to saved position
- current_position[E_AXIS] = lastpos[E_AXIS];
- destination[E_AXIS] = lastpos[E_AXIS];
- planner.set_e_position_mm(current_position[E_AXIS]);
-
- #if ENABLED(DELTA)
- // Move XYZ to starting position, then E
- inverse_kinematics(lastpos);
- planner.buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], destination[E_AXIS], FILAMENT_CHANGE_XY_FEEDRATE, active_extruder);
- planner.buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], lastpos[E_AXIS], FILAMENT_CHANGE_XY_FEEDRATE, active_extruder);
- #else
- // Move XY to starting position, then Z, then E
- destination[X_AXIS] = lastpos[X_AXIS];
- destination[Y_AXIS] = lastpos[Y_AXIS];
- RUNPLAN(FILAMENT_CHANGE_XY_FEEDRATE);
- destination[Z_AXIS] = lastpos[Z_AXIS];
- RUNPLAN(FILAMENT_CHANGE_Z_FEEDRATE);
- #endif
- stepper.synchronize();
-
- #if ENABLED(FILAMENT_RUNOUT_SENSOR)
- filament_ran_out = false;
- #endif
-
- // Show status screen
- lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_STATUS);
- }
-
-#endif // FILAMENT_CHANGE_FEATURE
-
-#if ENABLED(DUAL_X_CARRIAGE)
-
- /**
- * M605: Set dual x-carriage movement mode
- *
- * M605 S0: Full control mode. The slicer has full control over x-carriage movement
- * M605 S1: Auto-park mode. The inactive head will auto park/unpark without slicer involvement
- * M605 S2 [Xnnn] [Rmmm]: Duplication mode. The second extruder will duplicate the first with nnn
- * units x-offset and an optional differential hotend temperature of
- * mmm degrees. E.g., with "M605 S2 X100 R2" the second extruder will duplicate
- * the first with a spacing of 100mm in the x direction and 2 degrees hotter.
- *
- * Note: the X axis should be homed after changing dual x-carriage mode.
- */
- inline void gcode_M605() {
- stepper.synchronize();
- if (code_seen('S')) dual_x_carriage_mode = code_value_byte();
- switch (dual_x_carriage_mode) {
- case DXC_DUPLICATION_MODE:
- if (code_seen('X')) duplicate_extruder_x_offset = max(code_value_axis_units(X_AXIS), X2_MIN_POS - x_home_pos(0));
- if (code_seen('R')) duplicate_extruder_temp_offset = code_value_temp_diff();
- SERIAL_ECHO_START;
- SERIAL_ECHOPGM(MSG_HOTEND_OFFSET);
- SERIAL_CHAR(' ');
- SERIAL_ECHO(hotend_offset[X_AXIS][0]);
- SERIAL_CHAR(',');
- SERIAL_ECHO(hotend_offset[Y_AXIS][0]);
- SERIAL_CHAR(' ');
- SERIAL_ECHO(duplicate_extruder_x_offset);
- SERIAL_CHAR(',');
- SERIAL_ECHOLN(hotend_offset[Y_AXIS][1]);
- break;
- case DXC_FULL_CONTROL_MODE:
- case DXC_AUTO_PARK_MODE:
- break;
- default:
- dual_x_carriage_mode = DEFAULT_DUAL_X_CARRIAGE_MODE;
- break;
- }
- active_extruder_parked = false;
- extruder_duplication_enabled = false;
- delayed_move_time = 0;
- }
-
-#elif ENABLED(DUAL_NOZZLE_DUPLICATION_MODE)
-
- inline void gcode_M605() {
- stepper.synchronize();
- extruder_duplication_enabled = code_seen('S') && code_value_int() == 2;
- SERIAL_ECHO_START;
- SERIAL_ECHOPAIR(MSG_DUPLICATION_MODE, extruder_duplication_enabled ? MSG_ON : MSG_OFF);
- SERIAL_EOL;
- }
-
-#endif // M605
-
-#if ENABLED(LIN_ADVANCE)
- /**
- * M905: Set advance factor
- */
- inline void gcode_M905() {
- stepper.synchronize();
- stepper.advance_M905(code_seen('K') ? code_value_float() : -1.0);
- }
-#endif
-
-/**
- * M907: Set digital trimpot motor current using axis codes X, Y, Z, E, B, S
- */
-inline void gcode_M907() {
- #if HAS_DIGIPOTSS
- LOOP_XYZE(i)
- if (code_seen(axis_codes[i])) stepper.digipot_current(i, code_value_int());
- if (code_seen('B')) stepper.digipot_current(4, code_value_int());
- if (code_seen('S')) for (int i = 0; i <= 4; i++) stepper.digipot_current(i, code_value_int());
- #endif
- #if PIN_EXISTS(MOTOR_CURRENT_PWM_XY)
- if (code_seen('X')) stepper.digipot_current(0, code_value_int());
- #endif
- #if PIN_EXISTS(MOTOR_CURRENT_PWM_Z)
- if (code_seen('Z')) stepper.digipot_current(1, code_value_int());
- #endif
- #if PIN_EXISTS(MOTOR_CURRENT_PWM_E)
- if (code_seen('E')) stepper.digipot_current(2, code_value_int());
- #endif
- #if ENABLED(DIGIPOT_I2C)
- // this one uses actual amps in floating point
- LOOP_XYZE(i) if (code_seen(axis_codes[i])) digipot_i2c_set_current(i, code_value_float());
- // for each additional extruder (named B,C,D,E..., channels 4,5,6,7...)
- for (int i = NUM_AXIS; i < DIGIPOT_I2C_NUM_CHANNELS; i++) if (code_seen('B' + i - (NUM_AXIS))) digipot_i2c_set_current(i, code_value_float());
- #endif
- #if ENABLED(DAC_STEPPER_CURRENT)
- if (code_seen('S')) {
- float dac_percent = code_value_float();
- for (uint8_t i = 0; i <= 4; i++) dac_current_percent(i, dac_percent);
- }
- LOOP_XYZE(i) if (code_seen(axis_codes[i])) dac_current_percent(i, code_value_float());
- #endif
-}
-
-#if HAS_DIGIPOTSS || ENABLED(DAC_STEPPER_CURRENT)
-
- /**
- * M908: Control digital trimpot directly (M908 P S)
- */
- inline void gcode_M908() {
- #if HAS_DIGIPOTSS
- stepper.digitalPotWrite(
- code_seen('P') ? code_value_int() : 0,
- code_seen('S') ? code_value_int() : 0
- );
- #endif
- #ifdef DAC_STEPPER_CURRENT
- dac_current_raw(
- code_seen('P') ? code_value_byte() : -1,
- code_seen('S') ? code_value_ushort() : 0
- );
- #endif
- }
-
- #if ENABLED(DAC_STEPPER_CURRENT) // As with Printrbot RevF
-
- inline void gcode_M909() { dac_print_values(); }
-
- inline void gcode_M910() { dac_commit_eeprom(); }
-
- #endif
-
-#endif // HAS_DIGIPOTSS || DAC_STEPPER_CURRENT
-
-#if HAS_MICROSTEPS
-
- // M350 Set microstepping mode. Warning: Steps per unit remains unchanged. S code sets stepping mode for all drivers.
- inline void gcode_M350() {
- if (code_seen('S')) for (int i = 0; i <= 4; i++) stepper.microstep_mode(i, code_value_byte());
- LOOP_XYZE(i) if (code_seen(axis_codes[i])) stepper.microstep_mode(i, code_value_byte());
- if (code_seen('B')) stepper.microstep_mode(4, code_value_byte());
- stepper.microstep_readings();
- }
-
- /**
- * M351: Toggle MS1 MS2 pins directly with axis codes X Y Z E B
- * S# determines MS1 or MS2, X# sets the pin high/low.
- */
- inline void gcode_M351() {
- if (code_seen('S')) switch (code_value_byte()) {
- case 1:
- LOOP_XYZE(i) if (code_seen(axis_codes[i])) stepper.microstep_ms(i, code_value_byte(), -1);
- if (code_seen('B')) stepper.microstep_ms(4, code_value_byte(), -1);
- break;
- case 2:
- LOOP_XYZE(i) if (code_seen(axis_codes[i])) stepper.microstep_ms(i, -1, code_value_byte());
- if (code_seen('B')) stepper.microstep_ms(4, -1, code_value_byte());
- break;
- }
- stepper.microstep_readings();
- }
-
-#endif // HAS_MICROSTEPS
-
-#if ENABLED(MIXING_EXTRUDER)
-
- /**
- * M163: Set a single mix factor for a mixing extruder
- * This is called "weight" by some systems.
- *
- * S[index] The channel index to set
- * P[float] The mix value
- *
- */
- inline void gcode_M163() {
- int mix_index = code_seen('S') ? code_value_int() : 0;
- float mix_value = code_seen('P') ? code_value_float() : 0.0;
- if (mix_index < MIXING_STEPPERS) mixing_factor[mix_index] = mix_value;
- }
-
- #if MIXING_VIRTUAL_TOOLS > 1
-
- /**
- * M164: Store the current mix factors as a virtual tool.
- *
- * S[index] The virtual tool to store
- *
- */
- inline void gcode_M164() {
- int tool_index = code_seen('S') ? code_value_int() : 0;
- if (tool_index < MIXING_VIRTUAL_TOOLS) {
- normalize_mix();
- for (uint8_t i = 0; i < MIXING_STEPPERS; i++)
- mixing_virtual_tool_mix[tool_index][i] = mixing_factor[i];
- }
- }
-
- #endif
-
- #if ENABLED(DIRECT_MIXING_IN_G1)
- /**
- * M165: Set multiple mix factors for a mixing extruder.
- * Factors that are left out will be set to 0.
- * All factors together must add up to 1.0.
- *
- * A[factor] Mix factor for extruder stepper 1
- * B[factor] Mix factor for extruder stepper 2
- * C[factor] Mix factor for extruder stepper 3
- * D[factor] Mix factor for extruder stepper 4
- * H[factor] Mix factor for extruder stepper 5
- * I[factor] Mix factor for extruder stepper 6
- *
- */
- inline void gcode_M165() { gcode_get_mix(); }
- #endif
-
-#endif // MIXING_EXTRUDER
-
-/**
- * M999: Restart after being stopped
- *
- * Default behaviour is to flush the serial buffer and request
- * a resend to the host starting on the last N line received.
- *
- * Sending "M999 S1" will resume printing without flushing the
- * existing command buffer.
- *
- */
-inline void gcode_M999() {
- Running = true;
- lcd_reset_alert_level();
-
- if (code_seen('S') && code_value_bool()) return;
-
- // gcode_LastN = Stopped_gcode_LastN;
- FlushSerialRequestResend();
-}
-
-#if ENABLED(SWITCHING_EXTRUDER)
- inline void move_extruder_servo(uint8_t e) {
- const int angles[2] = SWITCHING_EXTRUDER_SERVO_ANGLES;
- MOVE_SERVO(SWITCHING_EXTRUDER_SERVO_NR, angles[e]);
- }
-#endif
-
-inline void invalid_extruder_error(const uint8_t &e) {
- SERIAL_ECHO_START;
- SERIAL_CHAR('T');
- SERIAL_PROTOCOL_F(e, DEC);
- SERIAL_ECHOLN(MSG_INVALID_EXTRUDER);
-}
-
-void tool_change(const uint8_t tmp_extruder, const float fr_mm_m/*=0.0*/, bool no_move/*=false*/) {
- #if ENABLED(MIXING_EXTRUDER) && MIXING_VIRTUAL_TOOLS > 1
-
- if (tmp_extruder >= MIXING_VIRTUAL_TOOLS) {
- invalid_extruder_error(tmp_extruder);
- return;
- }
-
- // T0-Tnnn: Switch virtual tool by changing the mix
- for (uint8_t j = 0; j < MIXING_STEPPERS; j++)
- mixing_factor[j] = mixing_virtual_tool_mix[tmp_extruder][j];
-
- #else //!MIXING_EXTRUDER || MIXING_VIRTUAL_TOOLS <= 1
-
- #if HOTENDS > 1
-
- if (tmp_extruder >= EXTRUDERS) {
- invalid_extruder_error(tmp_extruder);
- return;
- }
-
- float old_feedrate_mm_m = feedrate_mm_m;
-
- feedrate_mm_m = fr_mm_m > 0.0 ? (old_feedrate_mm_m = fr_mm_m) : XY_PROBE_FEEDRATE_MM_M;
-
- if (tmp_extruder != active_extruder) {
- if (!no_move && axis_unhomed_error(true, true, true)) {
- SERIAL_ECHOLNPGM("No move on toolchange");
- no_move = true;
- }
-
- // Save current position to destination, for use later
- set_destination_to_current();
-
- #if ENABLED(DUAL_X_CARRIAGE)
-
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) {
- SERIAL_ECHOPGM("Dual X Carriage Mode ");
- switch (dual_x_carriage_mode) {
- case DXC_DUPLICATION_MODE: SERIAL_ECHOLNPGM("DXC_DUPLICATION_MODE"); break;
- case DXC_AUTO_PARK_MODE: SERIAL_ECHOLNPGM("DXC_AUTO_PARK_MODE"); break;
- case DXC_FULL_CONTROL_MODE: SERIAL_ECHOLNPGM("DXC_FULL_CONTROL_MODE"); break;
- }
- }
- #endif
-
- if (dual_x_carriage_mode == DXC_AUTO_PARK_MODE && IsRunning() &&
- (delayed_move_time || current_position[X_AXIS] != x_home_pos(active_extruder))
- ) {
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) {
- SERIAL_ECHOPAIR("Raise to ", current_position[Z_AXIS] + TOOLCHANGE_PARK_ZLIFT); SERIAL_EOL;
- SERIAL_ECHOPAIR("MoveX to ", x_home_pos(active_extruder)); SERIAL_EOL;
- SERIAL_ECHOPAIR("Lower to ", current_position[Z_AXIS]); SERIAL_EOL;
- }
- #endif
- // Park old head: 1) raise 2) move to park position 3) lower
- for (uint8_t i = 0; i < 3; i++)
- planner.buffer_line(
- i == 0 ? current_position[X_AXIS] : x_home_pos(active_extruder),
- current_position[Y_AXIS],
- current_position[Z_AXIS] + (i == 2 ? 0 : TOOLCHANGE_PARK_ZLIFT),
- current_position[E_AXIS],
- planner.max_feedrate_mm_s[i == 1 ? X_AXIS : Z_AXIS],
- active_extruder
- );
- stepper.synchronize();
- }
-
- // apply Y & Z extruder offset (x offset is already used in determining home pos)
- current_position[Y_AXIS] -= hotend_offset[Y_AXIS][active_extruder] - hotend_offset[Y_AXIS][tmp_extruder];
- current_position[Z_AXIS] -= hotend_offset[Z_AXIS][active_extruder] - hotend_offset[Z_AXIS][tmp_extruder];
- active_extruder = tmp_extruder;
-
- // This function resets the max/min values - the current position may be overwritten below.
- set_axis_is_at_home(X_AXIS);
-
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) DEBUG_POS("New Extruder", current_position);
- #endif
-
- switch (dual_x_carriage_mode) {
- case DXC_FULL_CONTROL_MODE:
- current_position[X_AXIS] = LOGICAL_X_POSITION(inactive_extruder_x_pos);
- inactive_extruder_x_pos = RAW_X_POSITION(destination[X_AXIS]);
- break;
- case DXC_DUPLICATION_MODE:
- active_extruder_parked = (active_extruder == 0); // this triggers the second extruder to move into the duplication position
- if (active_extruder_parked)
- current_position[X_AXIS] = LOGICAL_X_POSITION(inactive_extruder_x_pos);
- else
- current_position[X_AXIS] = destination[X_AXIS] + duplicate_extruder_x_offset;
- inactive_extruder_x_pos = RAW_X_POSITION(destination[X_AXIS]);
- extruder_duplication_enabled = false;
- break;
- default:
- // record raised toolhead position for use by unpark
- memcpy(raised_parked_position, current_position, sizeof(raised_parked_position));
- raised_parked_position[Z_AXIS] += TOOLCHANGE_UNPARK_ZLIFT;
- active_extruder_parked = true;
- delayed_move_time = 0;
- break;
- }
-
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) {
- SERIAL_ECHOPAIR("Active extruder parked: ", active_extruder_parked ? "yes" : "no");
- SERIAL_EOL;
- DEBUG_POS("New extruder (parked)", current_position);
- }
- #endif
-
- // No extra case for AUTO_BED_LEVELING_FEATURE in DUAL_X_CARRIAGE. Does that mean they don't work together?
- #else // !DUAL_X_CARRIAGE
-
- #if ENABLED(SWITCHING_EXTRUDER)
- // <0 if the new nozzle is higher, >0 if lower. A bigger raise when lower.
- float z_diff = hotend_offset[Z_AXIS][active_extruder] - hotend_offset[Z_AXIS][tmp_extruder],
- z_raise = 0.3 + (z_diff > 0.0 ? z_diff : 0.0);
-
- // Always raise by some amount
- planner.buffer_line(
- current_position[X_AXIS],
- current_position[Y_AXIS],
- current_position[Z_AXIS] + z_raise,
- current_position[E_AXIS],
- planner.max_feedrate_mm_s[Z_AXIS],
- active_extruder
- );
- stepper.synchronize();
-
- move_extruder_servo(active_extruder);
- delay(500);
-
- // Move back down, if needed
- if (z_raise != z_diff) {
- planner.buffer_line(
- current_position[X_AXIS],
- current_position[Y_AXIS],
- current_position[Z_AXIS] + z_diff,
- current_position[E_AXIS],
- planner.max_feedrate_mm_s[Z_AXIS],
- active_extruder
- );
- stepper.synchronize();
- }
- #endif
-
- /**
- * Set current_position to the position of the new nozzle.
- * Offsets are based on linear distance, so we need to get
- * the resulting position in coordinate space.
- *
- * - With grid or 3-point leveling, offset XYZ by a tilted vector
- * - With mesh leveling, update Z for the new position
- * - Otherwise, just use the raw linear distance
- *
- * Software endstops are altered here too. Consider a case where:
- * E0 at X=0 ... E1 at X=10
- * When we switch to E1 now X=10, but E1 can't move left.
- * To express this we apply the change in XY to the software endstops.
- * E1 can move farther right than E0, so the right limit is extended.
- *
- * Note that we don't adjust the Z software endstops. Why not?
- * Consider a case where Z=0 (here) and switching to E1 makes Z=1
- * because the bed is 1mm lower at the new position. As long as
- * the first nozzle is out of the way, the carriage should be
- * allowed to move 1mm lower. This technically "breaks" the
- * Z software endstop. But this is technically correct (and
- * there is no viable alternative).
- */
- #if ENABLED(AUTO_BED_LEVELING_FEATURE)
- // Offset extruder, make sure to apply the bed level rotation matrix
- vector_3 tmp_offset_vec = vector_3(hotend_offset[X_AXIS][tmp_extruder],
- hotend_offset[Y_AXIS][tmp_extruder],
- 0),
- act_offset_vec = vector_3(hotend_offset[X_AXIS][active_extruder],
- hotend_offset[Y_AXIS][active_extruder],
- 0),
- offset_vec = tmp_offset_vec - act_offset_vec;
-
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) {
- tmp_offset_vec.debug("tmp_offset_vec");
- act_offset_vec.debug("act_offset_vec");
- offset_vec.debug("offset_vec (BEFORE)");
- }
- #endif
-
- offset_vec.apply_rotation(planner.bed_level_matrix.transpose(planner.bed_level_matrix));
-
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) offset_vec.debug("offset_vec (AFTER)");
- #endif
-
- // Adjustments to the current position
- float xydiff[2] = { offset_vec.x, offset_vec.y };
- current_position[Z_AXIS] += offset_vec.z;
-
- #else // !AUTO_BED_LEVELING_FEATURE
-
- float xydiff[2] = {
- hotend_offset[X_AXIS][tmp_extruder] - hotend_offset[X_AXIS][active_extruder],
- hotend_offset[Y_AXIS][tmp_extruder] - hotend_offset[Y_AXIS][active_extruder]
- };
-
- #if ENABLED(MESH_BED_LEVELING)
-
- if (mbl.active()) {
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) SERIAL_ECHOPAIR("Z before MBL: ", current_position[Z_AXIS]);
- #endif
- float xpos = RAW_CURRENT_POSITION(X_AXIS),
- ypos = RAW_CURRENT_POSITION(Y_AXIS);
- current_position[Z_AXIS] += mbl.get_z(xpos + xydiff[X_AXIS], ypos + xydiff[Y_AXIS]) - mbl.get_z(xpos, ypos);
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) {
- SERIAL_ECHOPAIR(" after: ", current_position[Z_AXIS]);
- SERIAL_EOL;
- }
- #endif
- }
-
- #endif // MESH_BED_LEVELING
-
- #endif // !AUTO_BED_LEVELING_FEATURE
-
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) {
- SERIAL_ECHOPAIR("Offset Tool XY by { ", xydiff[X_AXIS]);
- SERIAL_ECHOPAIR(", ", xydiff[Y_AXIS]);
- SERIAL_ECHOLNPGM(" }");
- }
- #endif
-
- // The newly-selected extruder XY is actually at...
- current_position[X_AXIS] += xydiff[X_AXIS];
- current_position[Y_AXIS] += xydiff[Y_AXIS];
- for (uint8_t i = X_AXIS; i <= Y_AXIS; i++) {
- position_shift[i] += xydiff[i];
- update_software_endstops((AxisEnum)i);
- }
-
- // Set the new active extruder
- active_extruder = tmp_extruder;
-
- #endif // !DUAL_X_CARRIAGE
-
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) DEBUG_POS("Sync After Toolchange", current_position);
- #endif
-
- // Tell the planner the new "current position"
- SYNC_PLAN_POSITION_KINEMATIC();
-
- // Move to the "old position" (move the extruder into place)
- if (!no_move && IsRunning()) {
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) DEBUG_POS("Move back", destination);
- #endif
- prepare_move_to_destination();
- }
-
- } // (tmp_extruder != active_extruder)
-
- stepper.synchronize();
-
- #if ENABLED(EXT_SOLENOID)
- disable_all_solenoids();
- enable_solenoid_on_active_extruder();
- #endif // EXT_SOLENOID
-
- feedrate_mm_m = old_feedrate_mm_m;
-
- #else // HOTENDS <= 1
-
- // Set the new active extruder
- active_extruder = tmp_extruder;
-
- UNUSED(fr_mm_m);
- UNUSED(no_move);
-
- #endif // HOTENDS <= 1
-
- SERIAL_ECHO_START;
- SERIAL_ECHOPGM(MSG_ACTIVE_EXTRUDER);
- SERIAL_PROTOCOLLN((int)active_extruder);
-
- #endif //!MIXING_EXTRUDER || MIXING_VIRTUAL_TOOLS <= 1
-}
-
-/**
- * T0-T3: Switch tool, usually switching extruders
- *
- * F[units/min] Set the movement feedrate
- * S1 Don't move the tool in XY after change
- */
-inline void gcode_T(uint8_t tmp_extruder) {
-
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) {
- SERIAL_ECHOPAIR(">>> gcode_T(", tmp_extruder);
- SERIAL_ECHOLNPGM(")");
- DEBUG_POS("BEFORE", current_position);
- }
- #endif
-
- #if HOTENDS == 1 || (ENABLED(MIXING_EXTRUDER) && MIXING_VIRTUAL_TOOLS > 1)
-
- tool_change(tmp_extruder);
-
- #elif HOTENDS > 1
-
- tool_change(
- tmp_extruder,
- code_seen('F') ? code_value_axis_units(X_AXIS) : 0.0,
- (tmp_extruder == active_extruder) || (code_seen('S') && code_value_bool())
- );
-
- #endif
-
- #if ENABLED(DEBUG_LEVELING_FEATURE)
- if (DEBUGGING(LEVELING)) {
- DEBUG_POS("AFTER", current_position);
- SERIAL_ECHOLNPGM("<<< gcode_T");
- }
- #endif
-}
-
-/**
- * Process a single command and dispatch it to its handler
- * This is called from the main loop()
- */
-void process_next_command() {
- current_command = command_queue[cmd_queue_index_r];
-
- if (DEBUGGING(ECHO)) {
- SERIAL_ECHO_START;
- SERIAL_ECHOLN(current_command);
- }
-
- // Sanitize the current command:
- // - Skip leading spaces
- // - Bypass N[-0-9][0-9]*[ ]*
- // - Overwrite * with nul to mark the end
- while (*current_command == ' ') ++current_command;
-
-#ifdef UARM_SWIFT
- uint32_t serialNum = 0;
-
- uint8_t needReply = 0;
- char replyBuf[RESULT_BUFFER_SIZE];
- uint8_t result = 0;
- char *pch;
-
- pch = strstr(current_command, "M2245 V");
- if (pch != NULL)
- {
- pch += strlen("M2245 V");
- int strLength = strlen(pch);
- char btName[20];
-
- if (strLength <= 0)
- {
- return ;
- }
- else if (strLength > BT_NAME_MAX_LEN)
- {
- strncpy(btName, pch, BT_NAME_MAX_LEN);
- btName[BT_NAME_MAX_LEN] = '\0';
- }
- else
- {
- strcpy(btName, pch);
- }
-
- if (setBtName(btName))
- {
- MYSERIAL.println(MSG_OK);
- }
- else
- {
- MYSERIAL.print("E25");
- }
-
- return;
- }
-
-
-
- if (*current_command == '#')
- {
- // Get and skip the code number
- current_command++;
- do {
- serialNum = (serialNum * 10) + (*current_command - '0');
- current_command++;
- } while (NUMERIC(*current_command));
-
- while (*current_command == ' ') ++current_command;
- }
-
- debugPrint("serianNum = %d\r\n", serialNum);
-#endif // UARM_SWIFT
-
-
-
- if (*current_command == 'N' && NUMERIC_SIGNED(current_command[1])) {
- current_command += 2; // skip N[-0-9]
- while (NUMERIC(*current_command)) ++current_command; // skip [0-9]*
- while (*current_command == ' ') ++current_command; // skip [ ]*
- }
- char* starpos = strchr(current_command, '*'); // * should always be the last parameter
- if (starpos) while (*starpos == ' ' || *starpos == '*') *starpos-- = '\0'; // nullify '*' and ' '
-
- char *cmd_ptr = current_command;
-
- // Get the command code, which must be G, M, or T
- char command_code = *cmd_ptr++;
-
- // Skip spaces to get the numeric part
- while (*cmd_ptr == ' ') cmd_ptr++;
-
- uint16_t codenum = 0; // define ahead of goto
-
- // Bail early if there's no code
- bool code_is_good = NUMERIC(*cmd_ptr);
- if (!code_is_good) goto ExitUnknownCommand;
-
- // Get and skip the code number
- do {
- codenum = (codenum * 10) + (*cmd_ptr - '0');
- cmd_ptr++;
- } while (NUMERIC(*cmd_ptr));
-
- // Skip all spaces to get to the first argument, or nul
- while (*cmd_ptr == ' ') cmd_ptr++;
-
- // The command's arguments (if any) start here, for sure!
- current_command_args = cmd_ptr;
-
- KEEPALIVE_STATE(IN_HANDLER);
-
- // Handle a known G, M, or T
- switch (command_code) {
- case 'G': switch (codenum) {
-
- // G0, G1
- case 0:
- #ifdef UARM_SWIFT
- uarm_gcode_G0();
- #endif
- gcode_G0_G1();
- break;
- case 1:
- #ifdef UARM_SWIFT
- uarm_gcode_G1();
- #endif
- gcode_G0_G1();
- break;
-
- // G2, G3
- #if ENABLED(ARC_SUPPORT) && DISABLED(SCARA)
- case 2: // G2 - CW ARC
- case 3: // G3 - CCW ARC
- gcode_G2_G3(codenum == 2);
- break;
- #endif
-
- // G4 Dwell
- case 4:
- gcode_G4();
- break;
-
- #if ENABLED(BEZIER_CURVE_SUPPORT)
- // G5
- case 5: // G5 - Cubic B_spline
- gcode_G5();
- break;
- #endif // BEZIER_CURVE_SUPPORT
-
- #if ENABLED(FWRETRACT)
- case 10: // G10: retract
- case 11: // G11: retract_recover
- gcode_G10_G11(codenum == 10);
- break;
- #endif // FWRETRACT
-
- #if ENABLED(NOZZLE_CLEAN_FEATURE)
- case 12:
- gcode_G12(); // G12: Nozzle Clean
- break;
- #endif // NOZZLE_CLEAN_FEATURE
-
- #if ENABLED(INCH_MODE_SUPPORT)
- case 20: //G20: Inch Mode
- gcode_G20();
- break;
-
- case 21: //G21: MM Mode
- gcode_G21();
- break;
- #endif // INCH_MODE_SUPPORT
-
- #if ENABLED(NOZZLE_PARK_FEATURE)
- case 27: // G27: Nozzle Park
- gcode_G27();
- break;
- #endif // NOZZLE_PARK_FEATURE
-
- case 28: // G28: Home all axes, one at a time
- gcode_G28();
- break;
-
- #if ENABLED(AUTO_BED_LEVELING_FEATURE) || ENABLED(MESH_BED_LEVELING)
- case 29: // G29 Detailed Z probe, probes the bed at 3 or more points.
- gcode_G29();
- break;
- #endif // AUTO_BED_LEVELING_FEATURE
-
- #if HAS_BED_PROBE
-
- case 30: // G30 Single Z probe
- gcode_G30();
- break;
-
- #if ENABLED(Z_PROBE_SLED)
-
- case 31: // G31: dock the sled
- gcode_G31();
- break;
-
- case 32: // G32: undock the sled
- gcode_G32();
- break;
-
- #endif // Z_PROBE_SLED
- #endif // HAS_BED_PROBE
-
- case 90: // G90
- relative_mode = false;
- break;
-
- case 91: // G91
- relative_mode = true;
- break;
-
- case 92: // G92
- gcode_G92();
- break;
-
-#ifdef UARM_SWIFT
- // G cmd
- case 2004:
- gcode_G4();
- break;
-
- case 2201:
- gcode_get_destination_polor();
- break;
-
- // rotate stepper motor
- case 2202:
-
-
- if (code_seen('N'))
- {
- uint8_t index = code_value_byte();
-
- if (index < 3)
- {
-
- gcode_get_destination_angle(index);
- line_to_destination_angle();
- }
- else if (index == 3)
- {
- rotate_frontend_motor();
-
- }
- }
- break;
-
- // stop
- case 2203:
- stepper.synchronize();
- refresh_cmd_timeout();
- break;
-
- // 2204 relative move use G90 G91
- case 2204:
- relative_mode = true;
- gcode_G0_G1();
- relative_mode = false;
- break;
-
- case 2205:
- relative_mode = true;
- gcode_get_destination_polor();
- relative_mode = false;
- break;
-
-#endif // UARM_SWIFT
-
- }
- break;
-
- case 'M': switch (codenum) {
- #if ENABLED(ULTIPANEL)
- case 0: // M0 - Unconditional stop - Wait for user button press on LCD
- case 1: // M1 - Conditional stop - Wait for user button press on LCD
- gcode_M0_M1();
- break;
- #endif // ULTIPANEL
-
- case 3:
- uarm_gcode_G0();
- break;
-
- case 5:
- uarm_gcode_G1();
- break;
-
- case 17:
- gcode_M17();
- break;
-
- #if ENABLED(SDSUPPORT)
- case 20: // M20 - list SD card
- gcode_M20(); break;
- case 21: // M21 - init SD card
- gcode_M21(); break;
- case 22: //M22 - release SD card
- gcode_M22(); break;
- case 23: //M23 - Select file
- gcode_M23(); break;
- case 24: //M24 - Start SD print
- gcode_M24(); break;
- case 25: //M25 - Pause SD print
- gcode_M25(); break;
- case 26: //M26 - Set SD index
- gcode_M26(); break;
- case 27: //M27 - Get SD status
- gcode_M27(); break;
- case 28: //M28 - Start SD write
- gcode_M28(); break;
- case 29: //M29 - Stop SD write
- gcode_M29(); break;
- case 30: //M30 Delete File
- gcode_M30(); break;
- case 32: //M32 - Select file and start SD print
- gcode_M32(); break;
-
- #if ENABLED(LONG_FILENAME_HOST_SUPPORT)
- case 33: //M33 - Get the long full path to a file or folder
- gcode_M33(); break;
- #endif // LONG_FILENAME_HOST_SUPPORT
-
- case 928: //M928 - Start SD write
- gcode_M928(); break;
- #endif //SDSUPPORT
-
- case 31: //M31 take time since the start of the SD print or an M109 command
- gcode_M31();
- break;
-
- case 42: //M42 -Change pin status via gcode
- gcode_M42();
- break;
-
- #if ENABLED(Z_MIN_PROBE_REPEATABILITY_TEST)
- case 48: // M48 Z probe repeatability
- gcode_M48();
- break;
- #endif // Z_MIN_PROBE_REPEATABILITY_TEST
-
- case 75: // Start print timer
- gcode_M75();
- break;
-
- case 76: // Pause print timer
- gcode_M76();
- break;
-
- case 77: // Stop print timer
- gcode_M77();
- break;
-
- #if ENABLED(PRINTCOUNTER)
- case 78: // Show print statistics
- gcode_M78();
- break;
- #endif
-
- #if ENABLED(M100_FREE_MEMORY_WATCHER)
- case 100:
- gcode_M100();
- break;
- #endif
-
- case 104: // M104
- gcode_M104();
- break;
-
- case 110: // M110: Set Current Line Number
- gcode_M110();
- break;
-
- case 111: // M111: Set debug level
- gcode_M111();
- break;
-
- #if DISABLED(EMERGENCY_PARSER)
-
- case 108: // M108: Cancel Waiting
- gcode_M108();
- break;
-
- case 112: // M112: Emergency Stop
- gcode_M112();
- break;
-
- case 410: // M410 quickstop - Abort all the planned moves.
- gcode_M410();
- break;
-
- #endif
-
- #if ENABLED(HOST_KEEPALIVE_FEATURE)
- case 113: // M113: Set Host Keepalive interval
- gcode_M113();
- break;
- #endif
-
- case 140: // M140: Set bed temp
- gcode_M140();
- break;
-
- case 105: // M105: Read current temperature
- gcode_M105();
- KEEPALIVE_STATE(NOT_BUSY);
- return; // "ok" already printed
-
- case 109: // M109: Wait for temperature
- gcode_M109();
- break;
-
- #if HAS_TEMP_BED
- case 190: // M190: Wait for bed heater to reach target
- gcode_M190();
- break;
- #endif // HAS_TEMP_BED
-
- #if FAN_COUNT > 0
- case 106: // M106: Fan On
- gcode_M106();
- break;
- case 107: // M107: Fan Off
- gcode_M107();
- break;
- #endif // FAN_COUNT > 0
-
- #if ENABLED(BARICUDA)
- // PWM for HEATER_1_PIN
- #if HAS_HEATER_1
- case 126: // M126: valve open
- gcode_M126();
- break;
- case 127: // M127: valve closed
- gcode_M127();
- break;
- #endif // HAS_HEATER_1
-
- // PWM for HEATER_2_PIN
- #if HAS_HEATER_2
- case 128: // M128: valve open
- gcode_M128();
- break;
- case 129: // M129: valve closed
- gcode_M129();
- break;
- #endif // HAS_HEATER_2
- #endif // BARICUDA
-
- #if HAS_POWER_SWITCH
-
- case 80: // M80: Turn on Power Supply
- gcode_M80();
- break;
-
- #endif // HAS_POWER_SWITCH
-
- case 81: // M81: Turn off Power, including Power Supply, if possible
- gcode_M81();
- break;
-
- case 82:
- gcode_M82();
- break;
- case 83:
- gcode_M83();
- break;
- case 18: // (for compatibility)
- case 84: // M84
- gcode_M18_M84();
- break;
- case 85: // M85
- gcode_M85();
- break;
- case 92: // M92: Set the steps-per-unit for one or more axes
- gcode_M92();
- break;
- case 115: // M115: Report capabilities
- gcode_M115();
- break;
- case 117: // M117: Set LCD message text, if possible
- gcode_M117();
- break;
- case 114: // M114: Report current position
- gcode_M114();
- break;
- case 120: // M120: Enable endstops
- gcode_M120();
- break;
- case 121: // M121: Disable endstops
- gcode_M121();
- break;
- case 119: // M119: Report endstop states
- gcode_M119();
- break;
-
- #if ENABLED(ULTIPANEL)
-
- case 145: // M145: Set material heatup parameters
- gcode_M145();
- break;
-
- #endif
-
- #if ENABLED(TEMPERATURE_UNITS_SUPPORT)
- case 149:
- gcode_M149();
- break;
- #endif
-
- #if ENABLED(BLINKM)
-
- case 150: // M150
- gcode_M150();
- break;
-
- #endif //BLINKM
-
- #if ENABLED(EXPERIMENTAL_I2CBUS)
-
- case 155:
- gcode_M155();
- break;
-
- case 156:
- gcode_M156();
- break;
-
- #endif //EXPERIMENTAL_I2CBUS
-
- #if ENABLED(MIXING_EXTRUDER)
- case 163: // M163 S P set weight for a mixing extruder
- gcode_M163();
- break;
- #if MIXING_VIRTUAL_TOOLS > 1
- case 164: // M164 S save current mix as a virtual extruder
- gcode_M164();
- break;
- #endif
- #if ENABLED(DIRECT_MIXING_IN_G1)
- case 165: // M165 [ABCDHI] set multiple mix weights
- gcode_M165();
- break;
- #endif
- #endif
-
- case 200: // M200 D Set filament diameter and set E axis units to cubic. (Use S0 to revert to linear units.)
- gcode_M200();
- break;
- case 201: // M201
- gcode_M201();
- break;
- #if 0 // Not used for Sprinter/grbl gen6
- case 202: // M202
- gcode_M202();
- break;
- #endif
- case 203: // M203 max feedrate units/sec
- gcode_M203();
- break;
- case 204: // M204 acclereration S normal moves T filmanent only moves
- gcode_M204();
- break;
- case 205: //M205 advanced settings: minimum travel speed S=while printing T=travel only, B=minimum segment time X= maximum xy jerk, Z=maximum Z jerk
- gcode_M205();
- break;
- case 206: // M206 additional homing offset
- gcode_M206();
- break;
-
- #if ENABLED(DELTA)
- case 665: // M665 set delta configurations L R S
- gcode_M665();
- break;
- #endif
-
- #if ENABLED(DELTA) || ENABLED(Z_DUAL_ENDSTOPS)
- case 666: // M666 set delta / dual endstop adjustment
- gcode_M666();
- break;
- #endif
-
- #if ENABLED(FWRETRACT)
- case 207: // M207 - Set Retract Length: S, Feedrate: F, and Z lift: Z
- gcode_M207();
- break;
- case 208: // M208 - Set Recover (unretract) Additional (!) Length: S and Feedrate: F
- gcode_M208();
- break;
- case 209: // M209 - Turn Automatic Retract Detection on/off: S (For slicers that don't support G10/11). Every normal extrude-only move will be classified as retract depending on the direction.
- gcode_M209();
- break;
- #endif // FWRETRACT
-
- #if HOTENDS > 1
- case 218: // M218 - Set a tool offset: T X Y
- gcode_M218();
- break;
- #endif
-
- case 220: // M220 - Set Feedrate Percentage: S ("FR" on your LCD)
- gcode_M220();
- break;
-
- case 221: // M221 - Set Flow Percentage: S
- gcode_M221();
- break;
-
- case 226: // M226 P S- Wait until the specified pin reaches the state required
- gcode_M226();
- break;
-
- #if HAS_SERVOS
- case 280: // M280 - set servo position absolute. P: servo index, S: angle or microseconds
- gcode_M280();
- break;
- #endif // HAS_SERVOS
-
- #if HAS_BUZZER
- case 300: // M300 - Play beep tone
- gcode_M300();
- break;
- #endif // HAS_BUZZER
-
- #if ENABLED(PIDTEMP)
- case 301: // M301
- gcode_M301();
- break;
- #endif // PIDTEMP
-
- #if ENABLED(PIDTEMPBED)
- case 304: // M304
- gcode_M304();
- break;
- #endif // PIDTEMPBED
-
- #if defined(CHDK) || HAS_PHOTOGRAPH
- case 240: // M240 Triggers a camera by emulating a Canon RC-1 : http://www.doc-diy.net/photo/rc-1_hacked/
- gcode_M240();
- break;
- #endif // CHDK || PHOTOGRAPH_PIN
-
- #if HAS_LCD_CONTRAST
- case 250: // M250 Set LCD contrast value: C (value 0..63)
- gcode_M250();
- break;
- #endif // HAS_LCD_CONTRAST
-
- #if ENABLED(PREVENT_DANGEROUS_EXTRUDE)
- case 302: // allow cold extrudes, or set the minimum extrude temperature
- gcode_M302();
- break;
- #endif // PREVENT_DANGEROUS_EXTRUDE
-
- case 303: // M303 PID autotune
- gcode_M303();
- break;
-
- #if ENABLED(SCARA)
- case 360: // M360 SCARA Theta pos1
- if (gcode_M360()) return;
- break;
- case 361: // M361 SCARA Theta pos2
- if (gcode_M361()) return;
- break;
- case 362: // M362 SCARA Psi pos1
- if (gcode_M362()) return;
- break;
- case 363: // M363 SCARA Psi pos2
- if (gcode_M363()) return;
- break;
- case 364: // M364 SCARA Psi pos3 (90 deg to Theta)
- if (gcode_M364()) return;
- break;
- case 365: // M365 Set SCARA scaling for X Y Z
- gcode_M365();
- break;
- #endif // SCARA
-
- case 400: // M400 finish all moves
- gcode_M400();
- break;
-
- #if HAS_BED_PROBE
- case 401:
- gcode_M401();
- break;
- case 402:
- gcode_M402();
- break;
- #endif // HAS_BED_PROBE
-
- #if ENABLED(FILAMENT_WIDTH_SENSOR)
- case 404: //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or display nominal filament width
- gcode_M404();
- break;
- case 405: //M405 Turn on filament sensor for control
- gcode_M405();
- break;
- case 406: //M406 Turn off filament sensor for control
- gcode_M406();
- break;
- case 407: //M407 Display measured filament diameter
- gcode_M407();
- break;
- #endif // ENABLED(FILAMENT_WIDTH_SENSOR)
-
- #if ENABLED(MESH_BED_LEVELING)
- case 420: // M420 Enable/Disable Mesh Bed Leveling
- gcode_M420();
- break;
- case 421: // M421 Set a Mesh Bed Leveling Z coordinate
- gcode_M421();
- break;
- #endif
-
- case 428: // M428 Apply current_position to home_offset
- gcode_M428();
- break;
-
- case 500: // M500 Store settings in EEPROM
- gcode_M500();
- break;
- case 501: // M501 Read settings from EEPROM
- gcode_M501();
- break;
- case 502: // M502 Revert to default settings
- gcode_M502();
- break;
- case 503: // M503 print settings currently in memory
- gcode_M503();
- break;
-
- #if ENABLED(ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED)
- case 540:
- gcode_M540();
- break;
- #endif
-
- #if HAS_BED_PROBE
- case 851:
- gcode_M851();
- break;
- #endif // HAS_BED_PROBE
-
- #if ENABLED(FILAMENT_CHANGE_FEATURE)
- case 600: //Pause for filament change X[pos] Y[pos] Z[relative lift] E[initial retract] L[later retract distance for removal]
- gcode_M600();
- break;
- #endif // FILAMENT_CHANGE_FEATURE
-
- #if ENABLED(DUAL_X_CARRIAGE)
- case 605:
- gcode_M605();
- break;
- #endif // DUAL_X_CARRIAGE
-
- #if ENABLED(LIN_ADVANCE)
- case 905: // M905 Set advance factor.
- gcode_M905();
- break;
- #endif
-
- case 907: // M907 Set digital trimpot motor current using axis codes.
- gcode_M907();
- break;
-
- #if HAS_DIGIPOTSS || ENABLED(DAC_STEPPER_CURRENT)
-
- case 908: // M908 Control digital trimpot directly.
- gcode_M908();
- break;
-
- #if ENABLED(DAC_STEPPER_CURRENT) // As with Printrbot RevF
-
- case 909: // M909 Print digipot/DAC current value
- gcode_M909();
- break;
-
- case 910: // M910 Commit digipot/DAC value to external EEPROM
- gcode_M910();
- break;
-
- #endif
-
- #endif // HAS_DIGIPOTSS || DAC_STEPPER_CURRENT
-
- #if HAS_MICROSTEPS
-
- case 350: // M350 Set microstepping mode. Warning: Steps per unit remains unchanged. S code sets stepping mode for all drivers.
- gcode_M350();
- break;
-
- case 351: // M351 Toggle MS1 MS2 pins directly, S# determines MS1 or MS2, X# sets the pin high/low.
- gcode_M351();
- break;
-
- #endif // HAS_MICROSTEPS
-
- case 999: // M999: Restart after being Stopped
- gcode_M999();
- break;
-
-#ifdef UARM_SWIFT
- //
-
- case 2019:
- disable_all_steppers();
- break;
-
- case 2120:
- uarm_gcode_M2120();
- break;
-
- case 2200:
- needReply = 1;
- result = uarm_gcode_M2200(replyBuf);
- break;
-
- case 2201:
- uarm_gcode_M2201();
- break;
-
- case 2202:
- uarm_gcode_M2202();
- break;
-
- case 2203:
- needReply = 1;
- result = uarm_gcode_M2203(replyBuf);
- break;
-
- case 2210:
- uarm_gcode_M2210();
- break;
-
- case 2211:
- needReply = 1;
- result = uarm_gcode_M2211(replyBuf);
- break;
-
- case 2212:
- uarm_gcode_M2212();
- break;
-
- case 2213:
- uarm_gcode_M2213();
- break;
-
- case 2220:
- needReply = 1;
- result = uarm_gcode_M2220(replyBuf);
- break;
-
- case 2221:
- needReply = 1;
- result = uarm_gcode_M2221(replyBuf);
- break;
-
- case 2222:
- needReply = 1;
- result = uarm_gcode_M2222(replyBuf);
- break;
-
- case 2231:
- uarm_gcode_M2231();
- break;
-
-
- case 2232:
- uarm_gcode_M2232();
- break;
-
- case 2233:
- uarm_gcode_M2233();
- break;
-
- case 2234:
- uarm_gcode_M2234();
- break;
-
- case 2300:
- uarm_gcode_M2300();
- break;
-
- case 2301:
- uarm_gcode_M2301();
- break;
-
- case 2240:
- uarm_gcode_M2240();
- break;
-
- case 2400:
- uarm_gcode_M2400();
- break;
-
- case 2401:
- needReply = 1;
- result = uarm_gcode_M2401(replyBuf);
- break;
-
- case 2410:
- uarm_gcode_M2410();
- break;
-
- case 2411:
- uarm_gcode_M2411();
- break;
-
-
-#endif //UARM_SWIFT
- }
- break;
-
- case 'T':
- gcode_T(codenum);
- break;
-
- case 'P':
- switch (codenum) {
- case 2200:
- needReply = 1;
- result = uarm_gcode_P2200(replyBuf);
- break;
-
- case 2201:
- needReply = 1;
- result = uarm_gcode_P2201(replyBuf);
- break;
-
- case 2202:
- needReply = 1;
- result = uarm_gcode_P2202(replyBuf);
- break;
-
- case 2203:
- needReply = 1;
- result = uarm_gcode_P2203(replyBuf);
- break;
-
- case 2204:
- needReply = 1;
- result = uarm_gcode_P2204(replyBuf);
- break;
-
- case 2205:
- needReply = 1;
- result = uarm_gcode_P2205(replyBuf);
- break;
-
- case 2206:
- needReply = 1;
- result = uarm_gcode_P2206(replyBuf);
- break;
-
- case 2220:
- needReply = 1;
- result = uarm_gcode_P2220(replyBuf);
- break;
-
- case 2221:
- needReply = 1;
- result = uarm_gcode_P2221(replyBuf);
- break;
-
- case 2231:
- needReply = 1;
- result = uarm_gcode_P2231(replyBuf);
- break;
-
- case 2232:
- needReply = 1;
- result = uarm_gcode_P2232(replyBuf);
- break;
-
- case 2233:
- needReply = 1;
- result = uarm_gcode_P2233(replyBuf);
- break;
-
- case 2234:
- needReply = 1;
- result = uarm_gcode_P2234(replyBuf);
- break;
-
- case 2240:
- needReply = 1;
- result = uarm_gcode_P2240(replyBuf);
- break;
-
- case 2241:
- needReply = 1;
- result = uarm_gcode_P2241(replyBuf);
- break;
-
- case 2242:
- needReply = 1;
- result = uarm_gcode_P2242(replyBuf);
- break;
-
- case 2245:
- needReply = 1;
- result = uarm_gcode_P2245(replyBuf);
- break;
-
- case 2400:
- needReply = 1;
- result = uarm_gcode_P2400(replyBuf);
- break;
-
-#ifdef SWIFT_TEST_MODE
- case 2250:
- needReply = 1;
- result = uarm_gcode_P2250(replyBuf);
- break;
-#endif
- }
- break;
-
- default: code_is_good = false;
- }
-
- KEEPALIVE_STATE(NOT_BUSY);
-
-ExitUnknownCommand:
-
- // Still unknown command? Throw an error
- if (!code_is_good) unknown_command_error();
-
-#ifdef UARM_SWIFT
- if (code_is_good)
- {
- if (serialNum > 0)
- {
- MYSERIAL.print("$");
- MYSERIAL.print(serialNum);
- MYSERIAL.print(" ");
-
-
- }
-
- if (needReply)
- {
- if (result == E_OK)
- {
- MYSERIAL.print(MSG_OK);
- MYSERIAL.print(" ");
- MYSERIAL.println(replyBuf);
- }
- else
- {
- MYSERIAL.print("E");
- MYSERIAL.println(result);
- }
- }
- else
- {
- ok_to_send();
- }
- }
-
-#else
- ok_to_send();
-#endif // UARM_SWIFT
-}
-
-void FlushSerialRequestResend() {
- //char command_queue[cmd_queue_index_r][100]="Resend:";
- MYSERIAL.flush();
- SERIAL_PROTOCOLPGM(MSG_RESEND);
- SERIAL_PROTOCOLLN(gcode_LastN + 1);
- ok_to_send();
-}
-
-void ok_to_send() {
- refresh_cmd_timeout();
- if (!send_ok[cmd_queue_index_r]) return;
- SERIAL_PROTOCOLPGM(MSG_OK);
- #if ENABLED(ADVANCED_OK)
- char* p = command_queue[cmd_queue_index_r];
- if (*p == 'N') {
- SERIAL_PROTOCOL(' ');
- SERIAL_ECHO(*p++);
- while (NUMERIC_SIGNED(*p))
- SERIAL_ECHO(*p++);
- }
- SERIAL_PROTOCOLPGM(" P"); SERIAL_PROTOCOL(int(BLOCK_BUFFER_SIZE - planner.movesplanned() - 1));
- SERIAL_PROTOCOLPGM(" B"); SERIAL_PROTOCOL(BUFSIZE - commands_in_queue);
- #endif
- SERIAL_EOL;
-}
-
-void clamp_to_software_endstops(float target[3]) {
- if (min_software_endstops) {
- NOLESS(target[X_AXIS], sw_endstop_min[X_AXIS]);
- NOLESS(target[Y_AXIS], sw_endstop_min[Y_AXIS]);
- NOLESS(target[Z_AXIS], sw_endstop_min[Z_AXIS]);
- }
- if (max_software_endstops) {
- NOMORE(target[X_AXIS], sw_endstop_max[X_AXIS]);
- NOMORE(target[Y_AXIS], sw_endstop_max[Y_AXIS]);
- NOMORE(target[Z_AXIS], sw_endstop_max[Z_AXIS]);
- }
-}
-
-#if ENABLED(DELTA)
-
- void recalc_delta_settings(float radius, float diagonal_rod) {
- delta_tower1_x = -SIN_60 * (radius + DELTA_RADIUS_TRIM_TOWER_1); // front left tower
- delta_tower1_y = -COS_60 * (radius + DELTA_RADIUS_TRIM_TOWER_1);
- delta_tower2_x = SIN_60 * (radius + DELTA_RADIUS_TRIM_TOWER_2); // front right tower
- delta_tower2_y = -COS_60 * (radius + DELTA_RADIUS_TRIM_TOWER_2);
- delta_tower3_x = 0.0; // back middle tower
- delta_tower3_y = (radius + DELTA_RADIUS_TRIM_TOWER_3);
- delta_diagonal_rod_2_tower_1 = sq(diagonal_rod + delta_diagonal_rod_trim_tower_1);
- delta_diagonal_rod_2_tower_2 = sq(diagonal_rod + delta_diagonal_rod_trim_tower_2);
- delta_diagonal_rod_2_tower_3 = sq(diagonal_rod + delta_diagonal_rod_trim_tower_3);
- }
-
- void inverse_kinematics(const float in_cartesian[3]) {
-
- const float cartesian[3] = {
- RAW_X_POSITION(in_cartesian[X_AXIS]),
- RAW_Y_POSITION(in_cartesian[Y_AXIS]),
- RAW_Z_POSITION(in_cartesian[Z_AXIS])
- };
-
- delta[TOWER_1] = sqrt(delta_diagonal_rod_2_tower_1
- - sq(delta_tower1_x - cartesian[X_AXIS])
- - sq(delta_tower1_y - cartesian[Y_AXIS])
- ) + cartesian[Z_AXIS];
- delta[TOWER_2] = sqrt(delta_diagonal_rod_2_tower_2
- - sq(delta_tower2_x - cartesian[X_AXIS])
- - sq(delta_tower2_y - cartesian[Y_AXIS])
- ) + cartesian[Z_AXIS];
- delta[TOWER_3] = sqrt(delta_diagonal_rod_2_tower_3
- - sq(delta_tower3_x - cartesian[X_AXIS])
- - sq(delta_tower3_y - cartesian[Y_AXIS])
- ) + cartesian[Z_AXIS];
- /**
- SERIAL_ECHOPGM("cartesian x="); SERIAL_ECHO(cartesian[X_AXIS]);
- SERIAL_ECHOPGM(" y="); SERIAL_ECHO(cartesian[Y_AXIS]);
- SERIAL_ECHOPGM(" z="); SERIAL_ECHOLN(cartesian[Z_AXIS]);
-
- SERIAL_ECHOPGM("delta a="); SERIAL_ECHO(delta[TOWER_1]);
- SERIAL_ECHOPGM(" b="); SERIAL_ECHO(delta[TOWER_2]);
- SERIAL_ECHOPGM(" c="); SERIAL_ECHOLN(delta[TOWER_3]);
- */
- }
-
- float delta_safe_distance_from_top() {
- float cartesian[3] = {
- LOGICAL_X_POSITION(0),
- LOGICAL_Y_POSITION(0),
- LOGICAL_Z_POSITION(0)
- };
- inverse_kinematics(cartesian);
- float distance = delta[TOWER_3];
- cartesian[Y_AXIS] = LOGICAL_Y_POSITION(DELTA_PRINTABLE_RADIUS);
- inverse_kinematics(cartesian);
- return abs(distance - delta[TOWER_3]);
- }
-
- void forward_kinematics_DELTA(float z1, float z2, float z3) {
- //As discussed in Wikipedia "Trilateration"
- //we are establishing a new coordinate
- //system in the plane of the three carriage points.
- //This system will have the origin at tower1 and
- //tower2 is on the x axis. tower3 is in the X-Y
- //plane with a Z component of zero. We will define unit
- //vectors in this coordinate system in our original
- //coordinate system. Then when we calculate the
- //Xnew, Ynew and Znew values, we can translate back into
- //the original system by moving along those unit vectors
- //by the corresponding values.
- // https://en.wikipedia.org/wiki/Trilateration
-
- // Variable names matched to Marlin, c-version
- // and avoiding a vector library
- // by Andreas Hardtung 2016-06-7
- // based on a Java function from
- // "Delta Robot Kinematics by Steve Graves" V3
-
- // Result is in cartesian_position[].
-
- //Create a vector in old coordinates along x axis of new coordinate
- float p12[3] = { delta_tower2_x - delta_tower1_x, delta_tower2_y - delta_tower1_y, z2 - z1 };
-
- //Get the Magnitude of vector.
- float d = sqrt( p12[0]*p12[0] + p12[1]*p12[1] + p12[2]*p12[2] );
-
- //Create unit vector by dividing by magnitude.
- float ex[3] = { p12[0]/d, p12[1]/d, p12[2]/d };
-
- //Now find vector from the origin of the new system to the third point.
- float p13[3] = { delta_tower3_x - delta_tower1_x, delta_tower3_y - delta_tower1_y, z3 - z1 };
-
- //Now use dot product to find the component of this vector on the X axis.
- float i = ex[0]*p13[0] + ex[1]*p13[1] + ex[2]*p13[2];
-
- //Now create a vector along the x axis that represents the x component of p13.
- float iex[3] = { ex[0]*i, ex[1]*i, ex[2]*i };
-
- //Now subtract the X component away from the original vector leaving only the Y component. We use the
- //variable that will be the unit vector after we scale it.
- float ey[3] = { p13[0] - iex[0], p13[1] - iex[1], p13[2] - iex[2]};
-
- //The magnitude of Y component
- float j = sqrt(sq(ey[0]) + sq(ey[1]) + sq(ey[2]));
-
- //Now make vector a unit vector
- ey[0] /= j; ey[1] /= j; ey[2] /= j;
-
- //The cross product of the unit x and y is the unit z
- //float[] ez = vectorCrossProd(ex, ey);
- float ez[3] = { ex[1]*ey[2] - ex[2]*ey[1], ex[2]*ey[0] - ex[0]*ey[2], ex[0]*ey[1] - ex[1]*ey[0] };
-
- //Now we have the d, i and j values defined in Wikipedia.
- //We can plug them into the equations defined in
- //Wikipedia for Xnew, Ynew and Znew
- float Xnew = (delta_diagonal_rod_2_tower_1 - delta_diagonal_rod_2_tower_2 + d*d)/(d*2);
- float Ynew = ((delta_diagonal_rod_2_tower_1 - delta_diagonal_rod_2_tower_3 + i*i + j*j)/2 - i*Xnew) /j;
- float Znew = sqrt(delta_diagonal_rod_2_tower_1 - Xnew*Xnew - Ynew*Ynew);
-
- //Now we can start from the origin in the old coords and
- //add vectors in the old coords that represent the
- //Xnew, Ynew and Znew to find the point in the old system
- cartesian_position[X_AXIS] = delta_tower1_x + ex[0]*Xnew + ey[0]*Ynew - ez[0]*Znew;
- cartesian_position[Y_AXIS] = delta_tower1_y + ex[1]*Xnew + ey[1]*Ynew - ez[1]*Znew;
- cartesian_position[Z_AXIS] = z1 + ex[2]*Xnew + ey[2]*Ynew - ez[2]*Znew;
- };
-
- void forward_kinematics_DELTA(float point[3]) {
- forward_kinematics_DELTA(point[X_AXIS], point[Y_AXIS], point[Z_AXIS]);
- }
-
- void set_cartesian_from_steppers() {
- forward_kinematics_DELTA(stepper.get_axis_position_mm(X_AXIS),
- stepper.get_axis_position_mm(Y_AXIS),
- stepper.get_axis_position_mm(Z_AXIS));
- }
-
- #if ENABLED(AUTO_BED_LEVELING_FEATURE)
-
- // Adjust print surface height by linear interpolation over the bed_level array.
- void adjust_delta(float cartesian[3]) {
- if (delta_grid_spacing[0] == 0 || delta_grid_spacing[1] == 0) return; // G29 not done!
-
- int half = (AUTO_BED_LEVELING_GRID_POINTS - 1) / 2;
- float h1 = 0.001 - half, h2 = half - 0.001,
- grid_x = max(h1, min(h2, RAW_X_POSITION(cartesian[X_AXIS]) / delta_grid_spacing[0])),
- grid_y = max(h1, min(h2, RAW_Y_POSITION(cartesian[Y_AXIS]) / delta_grid_spacing[1]));
- int floor_x = floor(grid_x), floor_y = floor(grid_y);
- float ratio_x = grid_x - floor_x, ratio_y = grid_y - floor_y,
- z1 = bed_level[floor_x + half][floor_y + half],
- z2 = bed_level[floor_x + half][floor_y + half + 1],
- z3 = bed_level[floor_x + half + 1][floor_y + half],
- z4 = bed_level[floor_x + half + 1][floor_y + half + 1],
- left = (1 - ratio_y) * z1 + ratio_y * z2,
- right = (1 - ratio_y) * z3 + ratio_y * z4,
- offset = (1 - ratio_x) * left + ratio_x * right;
-
- delta[X_AXIS] += offset;
- delta[Y_AXIS] += offset;
- delta[Z_AXIS] += offset;
-
- /**
- SERIAL_ECHOPGM("grid_x="); SERIAL_ECHO(grid_x);
- SERIAL_ECHOPGM(" grid_y="); SERIAL_ECHO(grid_y);
- SERIAL_ECHOPGM(" floor_x="); SERIAL_ECHO(floor_x);
- SERIAL_ECHOPGM(" floor_y="); SERIAL_ECHO(floor_y);
- SERIAL_ECHOPGM(" ratio_x="); SERIAL_ECHO(ratio_x);
- SERIAL_ECHOPGM(" ratio_y="); SERIAL_ECHO(ratio_y);
- SERIAL_ECHOPGM(" z1="); SERIAL_ECHO(z1);
- SERIAL_ECHOPGM(" z2="); SERIAL_ECHO(z2);
- SERIAL_ECHOPGM(" z3="); SERIAL_ECHO(z3);
- SERIAL_ECHOPGM(" z4="); SERIAL_ECHO(z4);
- SERIAL_ECHOPGM(" left="); SERIAL_ECHO(left);
- SERIAL_ECHOPGM(" right="); SERIAL_ECHO(right);
- SERIAL_ECHOPGM(" offset="); SERIAL_ECHOLN(offset);
- */
- }
- #endif // AUTO_BED_LEVELING_FEATURE
-
-#endif // DELTA
-
-void set_current_from_steppers_for_axis(AxisEnum axis) {
- #if ENABLED(DELTA)
- set_cartesian_from_steppers();
- current_position[axis] = LOGICAL_POSITION(cartesian_position[axis], axis);
- #elif ENABLED(AUTO_BED_LEVELING_FEATURE)
- vector_3 pos = planner.adjusted_position();
- current_position[axis] = axis == X_AXIS ? pos.x : axis == Y_AXIS ? pos.y : pos.z;
- #else
- current_position[axis] = stepper.get_axis_position_mm(axis); // CORE handled transparently
- #endif
-}
-
-#if ENABLED(MESH_BED_LEVELING)
-
-// This function is used to split lines on mesh borders so each segment is only part of one mesh area
-void mesh_line_to_destination(float fr_mm_m, uint8_t x_splits = 0xff, uint8_t y_splits = 0xff) {
- int cx1 = mbl.cell_index_x(RAW_CURRENT_POSITION(X_AXIS)),
- cy1 = mbl.cell_index_y(RAW_CURRENT_POSITION(Y_AXIS)),
- cx2 = mbl.cell_index_x(RAW_X_POSITION(destination[X_AXIS])),
- cy2 = mbl.cell_index_y(RAW_Y_POSITION(destination[Y_AXIS]));
- NOMORE(cx1, MESH_NUM_X_POINTS - 2);
- NOMORE(cy1, MESH_NUM_Y_POINTS - 2);
- NOMORE(cx2, MESH_NUM_X_POINTS - 2);
- NOMORE(cy2, MESH_NUM_Y_POINTS - 2);
-
- if (cx1 == cx2 && cy1 == cy2) {
- // Start and end on same mesh square
- line_to_destination(fr_mm_m);
- set_current_to_destination();
- return;
- }
-
- #define MBL_SEGMENT_END(A) (current_position[A ##_AXIS] + (destination[A ##_AXIS] - current_position[A ##_AXIS]) * normalized_dist)
-
- float normalized_dist, end[NUM_AXIS];
-
- // Split at the left/front border of the right/top square
- int8_t gcx = max(cx1, cx2), gcy = max(cy1, cy2);
- if (cx2 != cx1 && TEST(x_splits, gcx)) {
- memcpy(end, destination, sizeof(end));
- destination[X_AXIS] = LOGICAL_X_POSITION(mbl.get_probe_x(gcx));
- normalized_dist = (destination[X_AXIS] - current_position[X_AXIS]) / (end[X_AXIS] - current_position[X_AXIS]);
- destination[Y_AXIS] = MBL_SEGMENT_END(Y);
- CBI(x_splits, gcx);
- }
- else if (cy2 != cy1 && TEST(y_splits, gcy)) {
- memcpy(end, destination, sizeof(end));
- destination[Y_AXIS] = LOGICAL_Y_POSITION(mbl.get_probe_y(gcy));
- normalized_dist = (destination[Y_AXIS] - current_position[Y_AXIS]) / (end[Y_AXIS] - current_position[Y_AXIS]);
- destination[X_AXIS] = MBL_SEGMENT_END(X);
- CBI(y_splits, gcy);
- }
- else {
- // Already split on a border
- line_to_destination(fr_mm_m);
- set_current_to_destination();
- return;
- }
-
- destination[Z_AXIS] = MBL_SEGMENT_END(Z);
- destination[E_AXIS] = MBL_SEGMENT_END(E);
-
- // Do the split and look for more borders
- mesh_line_to_destination(fr_mm_m, x_splits, y_splits);
-
- // Restore destination from stack
- memcpy(destination, end, sizeof(end));
- mesh_line_to_destination(fr_mm_m, x_splits, y_splits);
-}
-#endif // MESH_BED_LEVELING
-
-#if ENABLED(DELTA) || ENABLED(SCARA)
-
- inline bool prepare_kinematic_move_to(float target[NUM_AXIS]) {
- float difference[NUM_AXIS];
- LOOP_XYZE(i) difference[i] = target[i] - current_position[i];
-
- float cartesian_mm = sqrt(sq(difference[X_AXIS]) + sq(difference[Y_AXIS]) + sq(difference[Z_AXIS]));
- if (cartesian_mm < 0.000001) cartesian_mm = abs(difference[E_AXIS]);
- if (cartesian_mm < 0.000001) return false;
- float _feedrate_mm_s = MMM_TO_MMS_SCALED(feedrate_mm_m);
- float seconds = cartesian_mm / _feedrate_mm_s;
- int steps = max(1, int(delta_segments_per_second * seconds));
- float inv_steps = 1.0/steps;
-
- // SERIAL_ECHOPGM("mm="); SERIAL_ECHO(cartesian_mm);
- // SERIAL_ECHOPGM(" seconds="); SERIAL_ECHO(seconds);
- // SERIAL_ECHOPGM(" steps="); SERIAL_ECHOLN(steps);
-
- for (int s = 1; s <= steps; s++) {
-
- float fraction = float(s) * inv_steps;
-
- LOOP_XYZE(i)
- target[i] = current_position[i] + difference[i] * fraction;
-
- inverse_kinematics(target);
-
- #if ENABLED(DELTA) && ENABLED(AUTO_BED_LEVELING_FEATURE)
- if (!bed_leveling_in_progress) adjust_delta(target);
- #endif
-
- //DEBUG_POS("prepare_kinematic_move_to", target);
- //DEBUG_POS("prepare_kinematic_move_to", delta);
-
- planner.buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], target[E_AXIS], _feedrate_mm_s, active_extruder);
- }
- return true;
- }
-
-#endif // DELTA || SCARA
-
-#if ENABLED(DUAL_X_CARRIAGE)
-
- inline bool prepare_move_to_destination_dualx() {
- if (active_extruder_parked) {
- if (dual_x_carriage_mode == DXC_DUPLICATION_MODE && active_extruder == 0) {
- // move duplicate extruder into correct duplication position.
- planner.set_position_mm(
- LOGICAL_X_POSITION(inactive_extruder_x_pos),
- current_position[Y_AXIS],
- current_position[Z_AXIS],
- current_position[E_AXIS]
- );
- planner.buffer_line(current_position[X_AXIS] + duplicate_extruder_x_offset,
- current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], planner.max_feedrate_mm_s[X_AXIS], 1);
- SYNC_PLAN_POSITION_KINEMATIC();
- stepper.synchronize();
- extruder_duplication_enabled = true;
- active_extruder_parked = false;
- }
- else if (dual_x_carriage_mode == DXC_AUTO_PARK_MODE) { // handle unparking of head
- if (current_position[E_AXIS] == destination[E_AXIS]) {
- // This is a travel move (with no extrusion)
- // Skip it, but keep track of the current position
- // (so it can be used as the start of the next non-travel move)
- if (delayed_move_time != 0xFFFFFFFFUL) {
- set_current_to_destination();
- NOLESS(raised_parked_position[Z_AXIS], destination[Z_AXIS]);
- delayed_move_time = millis();
- return false;
- }
- }
- delayed_move_time = 0;
- // unpark extruder: 1) raise, 2) move into starting XY position, 3) lower
- planner.buffer_line(raised_parked_position[X_AXIS], raised_parked_position[Y_AXIS], raised_parked_position[Z_AXIS], current_position[E_AXIS], planner.max_feedrate_mm_s[Z_AXIS], active_extruder);
- planner.buffer_line(current_position[X_AXIS], current_position[Y_AXIS], raised_parked_position[Z_AXIS], current_position[E_AXIS], PLANNER_XY_FEEDRATE(), active_extruder);
- planner.buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], planner.max_feedrate_mm_s[Z_AXIS], active_extruder);
- active_extruder_parked = false;
- }
- }
- return true;
- }
-
-#endif // DUAL_X_CARRIAGE
-
-#if DISABLED(DELTA) && DISABLED(SCARA)
-
- inline bool prepare_move_to_destination_cartesian() {
- // Do not use feedrate_percentage for E or Z only moves
- if (current_position[X_AXIS] == destination[X_AXIS] && current_position[Y_AXIS] == destination[Y_AXIS]) {
- line_to_destination();
- }
- else {
- #if ENABLED(MESH_BED_LEVELING)
- if (mbl.active()) {
- mesh_line_to_destination(MMM_SCALED(feedrate_mm_m));
- return false;
- }
- else
- #endif
- line_to_destination(MMM_SCALED(feedrate_mm_m));
- }
- return true;
- }
-
-#endif // !DELTA && !SCARA
-
-#if ENABLED(PREVENT_DANGEROUS_EXTRUDE)
-
- inline void prevent_dangerous_extrude(float& curr_e, float& dest_e) {
- if (DEBUGGING(DRYRUN)) return;
- float de = dest_e - curr_e;
- if (de) {
- if (thermalManager.tooColdToExtrude(active_extruder)) {
- curr_e = dest_e; // Behave as if the move really took place, but ignore E part
- SERIAL_ECHO_START;
- SERIAL_ECHOLNPGM(MSG_ERR_COLD_EXTRUDE_STOP);
- }
- #if ENABLED(PREVENT_LENGTHY_EXTRUDE)
- if (labs(de) > EXTRUDE_MAXLENGTH) {
- curr_e = dest_e; // Behave as if the move really took place, but ignore E part
- SERIAL_ECHO_START;
- SERIAL_ECHOLNPGM(MSG_ERR_LONG_EXTRUDE_STOP);
- }
- #endif
- }
- }
-
-#endif // PREVENT_DANGEROUS_EXTRUDE
-
-/**
- * Prepare a single move and get ready for the next one
- *
- * (This may call planner.buffer_line several times to put
- * smaller moves into the planner for DELTA or SCARA.)
- */
-void prepare_move_to_destination() {
- clamp_to_software_endstops(destination);
- refresh_cmd_timeout();
-
- #if ENABLED(PREVENT_DANGEROUS_EXTRUDE)
- prevent_dangerous_extrude(current_position[E_AXIS], destination[E_AXIS]);
- #endif
-
- #if ENABLED(DELTA) || ENABLED(SCARA)
- if (!prepare_kinematic_move_to(destination)) return;
- #else
- #if ENABLED(DUAL_X_CARRIAGE)
- if (!prepare_move_to_destination_dualx()) return;
- #endif
- if (!prepare_move_to_destination_cartesian()) return;
- #endif
-
- set_current_to_destination();
-}
-
-#if ENABLED(ARC_SUPPORT)
- /**
- * Plan an arc in 2 dimensions
- *
- * The arc is approximated by generating many small linear segments.
- * The length of each segment is configured in MM_PER_ARC_SEGMENT (Default 1mm)
- * Arcs should only be made relatively large (over 5mm), as larger arcs with
- * larger segments will tend to be more efficient. Your slicer should have
- * options for G2/G3 arc generation. In future these options may be GCode tunable.
- */
- void plan_arc(
- float target[NUM_AXIS], // Destination position
- float* offset, // Center of rotation relative to current_position
- uint8_t clockwise // Clockwise?
- ) {
-
- float radius = HYPOT(offset[X_AXIS], offset[Y_AXIS]),
- center_X = current_position[X_AXIS] + offset[X_AXIS],
- center_Y = current_position[Y_AXIS] + offset[Y_AXIS],
- linear_travel = target[Z_AXIS] - current_position[Z_AXIS],
- extruder_travel = target[E_AXIS] - current_position[E_AXIS],
- r_X = -offset[X_AXIS], // Radius vector from center to current location
- r_Y = -offset[Y_AXIS],
- rt_X = target[X_AXIS] - center_X,
- rt_Y = target[Y_AXIS] - center_Y;
-
- // CCW angle of rotation between position and target from the circle center. Only one atan2() trig computation required.
- float angular_travel = atan2(r_X * rt_Y - r_Y * rt_X, r_X * rt_X + r_Y * rt_Y);
- if (angular_travel < 0) angular_travel += RADIANS(360);
- if (clockwise) angular_travel -= RADIANS(360);
-
- // Make a circle if the angular rotation is 0
- if (angular_travel == 0 && current_position[X_AXIS] == target[X_AXIS] && current_position[Y_AXIS] == target[Y_AXIS])
- angular_travel += RADIANS(360);
-
- float mm_of_travel = HYPOT(angular_travel * radius, fabs(linear_travel));
- if (mm_of_travel < 0.001) return;
- uint16_t segments = floor(mm_of_travel / (MM_PER_ARC_SEGMENT));
- if (segments == 0) segments = 1;
-
- float theta_per_segment = angular_travel / segments;
- float linear_per_segment = linear_travel / segments;
- float extruder_per_segment = extruder_travel / segments;
-
- /**
- * Vector rotation by transformation matrix: r is the original vector, r_T is the rotated vector,
- * and phi is the angle of rotation. Based on the solution approach by Jens Geisler.
- * r_T = [cos(phi) -sin(phi);
- * sin(phi) cos(phi] * r ;
- *
- * For arc generation, the center of the circle is the axis of rotation and the radius vector is
- * defined from the circle center to the initial position. Each line segment is formed by successive
- * vector rotations. This requires only two cos() and sin() computations to form the rotation
- * matrix for the duration of the entire arc. Error may accumulate from numerical round-off, since
- * all double numbers are single precision on the Arduino. (True double precision will not have
- * round off issues for CNC applications.) Single precision error can accumulate to be greater than
- * tool precision in some cases. Therefore, arc path correction is implemented.
- *
- * Small angle approximation may be used to reduce computation overhead further. This approximation
- * holds for everything, but very small circles and large MM_PER_ARC_SEGMENT values. In other words,
- * theta_per_segment would need to be greater than 0.1 rad and N_ARC_CORRECTION would need to be large
- * to cause an appreciable drift error. N_ARC_CORRECTION~=25 is more than small enough to correct for
- * numerical drift error. N_ARC_CORRECTION may be on the order a hundred(s) before error becomes an
- * issue for CNC machines with the single precision Arduino calculations.
- *
- * This approximation also allows plan_arc to immediately insert a line segment into the planner
- * without the initial overhead of computing cos() or sin(). By the time the arc needs to be applied
- * a correction, the planner should have caught up to the lag caused by the initial plan_arc overhead.
- * This is important when there are successive arc motions.
- */
- // Vector rotation matrix values
- float cos_T = 1 - 0.5 * sq(theta_per_segment); // Small angle approximation
- float sin_T = theta_per_segment;
-
- float arc_target[NUM_AXIS];
- float sin_Ti, cos_Ti, r_new_Y;
- uint16_t i;
- int8_t count = 0;
-
- // Initialize the linear axis
- arc_target[Z_AXIS] = current_position[Z_AXIS];
-
- // Initialize the extruder axis
- arc_target[E_AXIS] = current_position[E_AXIS];
-
- float fr_mm_s = MMM_TO_MMS_SCALED(feedrate_mm_m);
-
- millis_t next_idle_ms = millis() + 200UL;
-
- for (i = 1; i < segments; i++) { // Iterate (segments-1) times
-
- thermalManager.manage_heater();
- millis_t now = millis();
- if (ELAPSED(now, next_idle_ms)) {
- next_idle_ms = now + 200UL;
- idle();
- }
-
- if (++count < N_ARC_CORRECTION) {
- // Apply vector rotation matrix to previous r_X / 1
- r_new_Y = r_X * sin_T + r_Y * cos_T;
- r_X = r_X * cos_T - r_Y * sin_T;
- r_Y = r_new_Y;
- }
- else {
- // Arc correction to radius vector. Computed only every N_ARC_CORRECTION increments.
- // Compute exact location by applying transformation matrix from initial radius vector(=-offset).
- // To reduce stuttering, the sin and cos could be computed at different times.
- // For now, compute both at the same time.
- cos_Ti = cos(i * theta_per_segment);
- sin_Ti = sin(i * theta_per_segment);
- r_X = -offset[X_AXIS] * cos_Ti + offset[Y_AXIS] * sin_Ti;
- r_Y = -offset[X_AXIS] * sin_Ti - offset[Y_AXIS] * cos_Ti;
- count = 0;
- }
-
- // Update arc_target location
- arc_target[X_AXIS] = center_X + r_X;
- arc_target[Y_AXIS] = center_Y + r_Y;
- arc_target[Z_AXIS] += linear_per_segment;
- arc_target[E_AXIS] += extruder_per_segment;
-
- clamp_to_software_endstops(arc_target);
-
- #if ENABLED(DELTA) || ENABLED(SCARA)
- inverse_kinematics(arc_target);
- #if ENABLED(DELTA) && ENABLED(AUTO_BED_LEVELING_FEATURE)
- adjust_delta(arc_target);
- #endif
- planner.buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], arc_target[E_AXIS], fr_mm_s, active_extruder);
- #else
- planner.buffer_line(arc_target[X_AXIS], arc_target[Y_AXIS], arc_target[Z_AXIS], arc_target[E_AXIS], fr_mm_s, active_extruder);
- #endif
- }
-
- // Ensure last segment arrives at target location.
- #if ENABLED(DELTA) || ENABLED(SCARA)
- inverse_kinematics(target);
- #if ENABLED(DELTA) && ENABLED(AUTO_BED_LEVELING_FEATURE)
- adjust_delta(target);
- #endif
- planner.buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], target[E_AXIS], fr_mm_s, active_extruder);
- #else
- planner.buffer_line(target[X_AXIS], target[Y_AXIS], target[Z_AXIS], target[E_AXIS], fr_mm_s, active_extruder);
- #endif
-
- // As far as the parser is concerned, the position is now == target. In reality the
- // motion control system might still be processing the action and the real tool position
- // in any intermediate location.
- set_current_to_destination();
- }
-#endif
-
-#if ENABLED(BEZIER_CURVE_SUPPORT)
-
- void plan_cubic_move(const float offset[4]) {
- cubic_b_spline(current_position, destination, offset, MMM_TO_MMS_SCALED(feedrate_mm_m), active_extruder);
-
- // As far as the parser is concerned, the position is now == target. In reality the
- // motion control system might still be processing the action and the real tool position
- // in any intermediate location.
- set_current_to_destination();
- }
-
-#endif // BEZIER_CURVE_SUPPORT
-
-#if HAS_CONTROLLERFAN
-
- void controllerFan() {
- static millis_t lastMotorOn = 0; // Last time a motor was turned on
- static millis_t nextMotorCheck = 0; // Last time the state was checked
- millis_t ms = millis();
- if (ELAPSED(ms, nextMotorCheck)) {
- nextMotorCheck = ms + 2500UL; // Not a time critical function, so only check every 2.5s
- if (X_ENABLE_READ == X_ENABLE_ON || Y_ENABLE_READ == Y_ENABLE_ON || Z_ENABLE_READ == Z_ENABLE_ON || thermalManager.soft_pwm_bed > 0
- || E0_ENABLE_READ == E_ENABLE_ON // If any of the drivers are enabled...
- #if E_STEPPERS > 1
- || E1_ENABLE_READ == E_ENABLE_ON
- #if HAS_X2_ENABLE
- || X2_ENABLE_READ == X_ENABLE_ON
- #endif
- #if E_STEPPERS > 2
- || E2_ENABLE_READ == E_ENABLE_ON
- #if E_STEPPERS > 3
- || E3_ENABLE_READ == E_ENABLE_ON
- #endif
- #endif
- #endif
- ) {
- lastMotorOn = ms; //... set time to NOW so the fan will turn on
- }
-
- // Fan off if no steppers have been enabled for CONTROLLERFAN_SECS seconds
- uint8_t speed = (!lastMotorOn || ELAPSED(ms, lastMotorOn + (CONTROLLERFAN_SECS) * 1000UL)) ? 0 : CONTROLLERFAN_SPEED;
-
- // allows digital or PWM fan output to be used (see M42 handling)
- digitalWrite(CONTROLLERFAN_PIN, speed);
- analogWrite(CONTROLLERFAN_PIN, speed);
- }
- }
-
-#endif // HAS_CONTROLLERFAN
-
-#if ENABLED(SCARA)
-
- void forward_kinematics_SCARA(float f_scara[3]) {
- // Perform forward kinematics, and place results in delta[3]
- // The maths and first version has been done by QHARLEY . Integrated into masterbranch 06/2014 and slightly restructured by Joachim Cerny in June 2014
-
- float x_sin, x_cos, y_sin, y_cos;
-
- //SERIAL_ECHOPGM("f_delta x="); SERIAL_ECHO(f_scara[X_AXIS]);
- //SERIAL_ECHOPGM(" y="); SERIAL_ECHO(f_scara[Y_AXIS]);
-
- x_sin = sin(f_scara[X_AXIS] / SCARA_RAD2DEG) * Linkage_1;
- x_cos = cos(f_scara[X_AXIS] / SCARA_RAD2DEG) * Linkage_1;
- y_sin = sin(f_scara[Y_AXIS] / SCARA_RAD2DEG) * Linkage_2;
- y_cos = cos(f_scara[Y_AXIS] / SCARA_RAD2DEG) * Linkage_2;
-
- //SERIAL_ECHOPGM(" x_sin="); SERIAL_ECHO(x_sin);
- //SERIAL_ECHOPGM(" x_cos="); SERIAL_ECHO(x_cos);
- //SERIAL_ECHOPGM(" y_sin="); SERIAL_ECHO(y_sin);
- //SERIAL_ECHOPGM(" y_cos="); SERIAL_ECHOLN(y_cos);
-
- delta[X_AXIS] = x_cos + y_cos + SCARA_offset_x; //theta
- delta[Y_AXIS] = x_sin + y_sin + SCARA_offset_y; //theta+phi
-
- //SERIAL_ECHOPGM(" delta[X_AXIS]="); SERIAL_ECHO(delta[X_AXIS]);
- //SERIAL_ECHOPGM(" delta[Y_AXIS]="); SERIAL_ECHOLN(delta[Y_AXIS]);
- }
-
- void inverse_kinematics(const float cartesian[3]) {
- // Inverse kinematics.
- // Perform SCARA IK and place results in delta[3].
- // The maths and first version were done by QHARLEY.
- // Integrated, tweaked by Joachim Cerny in June 2014.
-
- float SCARA_pos[2];
- static float SCARA_C2, SCARA_S2, SCARA_K1, SCARA_K2, SCARA_theta, SCARA_psi;
-
- SCARA_pos[X_AXIS] = RAW_X_POSITION(cartesian[X_AXIS]) * axis_scaling[X_AXIS] - SCARA_offset_x; //Translate SCARA to standard X Y
- SCARA_pos[Y_AXIS] = RAW_Y_POSITION(cartesian[Y_AXIS]) * axis_scaling[Y_AXIS] - SCARA_offset_y; // With scaling factor.
-
- #if (Linkage_1 == Linkage_2)
- SCARA_C2 = ((sq(SCARA_pos[X_AXIS]) + sq(SCARA_pos[Y_AXIS])) / (2 * (float)L1_2)) - 1;
- #else
- SCARA_C2 = (sq(SCARA_pos[X_AXIS]) + sq(SCARA_pos[Y_AXIS]) - (float)L1_2 - (float)L2_2) / 45000;
- #endif
-
- SCARA_S2 = sqrt(1 - sq(SCARA_C2));
-
- SCARA_K1 = Linkage_1 + Linkage_2 * SCARA_C2;
- SCARA_K2 = Linkage_2 * SCARA_S2;
-
- SCARA_theta = (atan2(SCARA_pos[X_AXIS], SCARA_pos[Y_AXIS]) - atan2(SCARA_K1, SCARA_K2)) * -1;
- SCARA_psi = atan2(SCARA_S2, SCARA_C2);
-
- delta[X_AXIS] = SCARA_theta * SCARA_RAD2DEG; // Multiply by 180/Pi - theta is support arm angle
- delta[Y_AXIS] = (SCARA_theta + SCARA_psi) * SCARA_RAD2DEG; // - equal to sub arm angle (inverted motor)
- delta[Z_AXIS] = RAW_Z_POSITION(cartesian[Z_AXIS]);
-
- /**
- SERIAL_ECHOPGM("cartesian x="); SERIAL_ECHO(cartesian[X_AXIS]);
- SERIAL_ECHOPGM(" y="); SERIAL_ECHO(cartesian[Y_AXIS]);
- SERIAL_ECHOPGM(" z="); SERIAL_ECHOLN(cartesian[Z_AXIS]);
-
- SERIAL_ECHOPGM("scara x="); SERIAL_ECHO(SCARA_pos[X_AXIS]);
- SERIAL_ECHOPGM(" y="); SERIAL_ECHOLN(SCARA_pos[Y_AXIS]);
-
- SERIAL_ECHOPGM("delta x="); SERIAL_ECHO(delta[X_AXIS]);
- SERIAL_ECHOPGM(" y="); SERIAL_ECHO(delta[Y_AXIS]);
- SERIAL_ECHOPGM(" z="); SERIAL_ECHOLN(delta[Z_AXIS]);
-
- SERIAL_ECHOPGM("C2="); SERIAL_ECHO(SCARA_C2);
- SERIAL_ECHOPGM(" S2="); SERIAL_ECHO(SCARA_S2);
- SERIAL_ECHOPGM(" Theta="); SERIAL_ECHO(SCARA_theta);
- SERIAL_ECHOPGM(" Psi="); SERIAL_ECHOLN(SCARA_psi);
- SERIAL_EOL;
- */
- }
-
-#endif // SCARA
-
-#if ENABLED(TEMP_STAT_LEDS)
-
- static bool red_led = false;
- static millis_t next_status_led_update_ms = 0;
-
- void handle_status_leds(void) {
- float max_temp = 0.0;
- if (ELAPSED(millis(), next_status_led_update_ms)) {
- next_status_led_update_ms += 500; // Update every 0.5s
- HOTEND_LOOP() {
- max_temp = max(max(max_temp, thermalManager.degHotend(e)), thermalManager.degTargetHotend(e));
- }
- #if HAS_TEMP_BED
- max_temp = max(max(max_temp, thermalManager.degTargetBed()), thermalManager.degBed());
- #endif
- bool new_led = (max_temp > 55.0) ? true : (max_temp < 54.0) ? false : red_led;
- if (new_led != red_led) {
- red_led = new_led;
- digitalWrite(STAT_LED_RED, new_led ? HIGH : LOW);
- digitalWrite(STAT_LED_BLUE, new_led ? LOW : HIGH);
- }
- }
- }
-
-#endif
-
-void enable_all_steppers() {
- enable_x();
- enable_y();
- enable_z();
- enable_e0();
- enable_e1();
- enable_e2();
- enable_e3();
-}
-
-void disable_all_steppers() {
- disable_x();
- disable_y();
- disable_z();
- disable_e0();
- disable_e1();
- disable_e2();
- disable_e3();
-}
-
-/**
- * Standard idle routine keeps the machine alive
- */
-void idle(
- #if ENABLED(FILAMENT_CHANGE_FEATURE)
- bool no_stepper_sleep/*=false*/
- #endif
-) {
- lcd_update();
- host_keepalive();
- manage_inactivity(
- #if ENABLED(FILAMENT_CHANGE_FEATURE)
- no_stepper_sleep
- #endif
- );
-
- thermalManager.manage_heater();
-
- #if ENABLED(PRINTCOUNTER)
- print_job_timer.tick();
- #endif
-
- #if HAS_BUZZER && PIN_EXISTS(BEEPER)
- buzzer.tick();
- #endif
-
- #ifdef UARM_SWIFT
- swift_run();
- #endif // UARM_SWIFT
-}
-
-/**
- * Manage several activities:
- * - Check for Filament Runout
- * - Keep the command buffer full
- * - Check for maximum inactive time between commands
- * - Check for maximum inactive time between stepper commands
- * - Check if pin CHDK needs to go LOW
- * - Check for KILL button held down
- * - Check for HOME button held down
- * - Check if cooling fan needs to be switched on
- * - Check if an idle but hot extruder needs filament extruded (EXTRUDER_RUNOUT_PREVENT)
- */
-void manage_inactivity(bool ignore_stepper_queue/*=false*/) {
-
- #if ENABLED(FILAMENT_RUNOUT_SENSOR)
- if ((IS_SD_PRINTING || print_job_timer.isRunning()) && !(READ(FIL_RUNOUT_PIN) ^ FIL_RUNOUT_INVERTING))
- handle_filament_runout();
- #endif
-
- if (commands_in_queue < BUFSIZE) get_available_commands();
-
- millis_t ms = millis();
-
- if (max_inactive_time && ELAPSED(ms, previous_cmd_ms + max_inactive_time)) kill(PSTR(MSG_KILLED));
-
- if (stepper_inactive_time && ELAPSED(ms, previous_cmd_ms + stepper_inactive_time)
- && !ignore_stepper_queue && !planner.blocks_queued()) {
- #if ENABLED(DISABLE_INACTIVE_X)
- disable_x();
- #endif
- #if ENABLED(DISABLE_INACTIVE_Y)
- disable_y();
- #endif
- #if ENABLED(DISABLE_INACTIVE_Z)
- disable_z();
- #endif
- #if ENABLED(DISABLE_INACTIVE_E)
- disable_e0();
- disable_e1();
- disable_e2();
- disable_e3();
- #endif
- }
-
- #ifdef CHDK // Check if pin should be set to LOW after M240 set it to HIGH
- if (chdkActive && PENDING(ms, chdkHigh + CHDK_DELAY)) {
- chdkActive = false;
- WRITE(CHDK, LOW);
- }
- #endif
-
- #if HAS_KILL
-
- // Check if the kill button was pressed and wait just in case it was an accidental
- // key kill key press
- // -------------------------------------------------------------------------------
- static int killCount = 0; // make the inactivity button a bit less responsive
- const int KILL_DELAY = 750;
- if (!READ(KILL_PIN))
- killCount++;
- else if (killCount > 0)
- killCount--;
-
- // Exceeded threshold and we can confirm that it was not accidental
- // KILL the machine
- // ----------------------------------------------------------------
- if (killCount >= KILL_DELAY) kill(PSTR(MSG_KILLED));
- #endif
-
- #if HAS_HOME
- // Check to see if we have to home, use poor man's debouncer
- // ---------------------------------------------------------
- static int homeDebounceCount = 0; // poor man's debouncing count
- const int HOME_DEBOUNCE_DELAY = 2500;
- if (!READ(HOME_PIN)) {
- if (!homeDebounceCount) {
- enqueue_and_echo_commands_P(PSTR("G28"));
- LCD_MESSAGEPGM(MSG_AUTO_HOME);
- }
- if (homeDebounceCount < HOME_DEBOUNCE_DELAY)
- homeDebounceCount++;
- else
- homeDebounceCount = 0;
- }
- #endif
-
- #if HAS_CONTROLLERFAN
- controllerFan(); // Check if fan should be turned on to cool stepper drivers down
- #endif
-
- #if ENABLED(EXTRUDER_RUNOUT_PREVENT)
- if (ELAPSED(ms, previous_cmd_ms + (EXTRUDER_RUNOUT_SECONDS) * 1000UL)
- && thermalManager.degHotend(active_extruder) > EXTRUDER_RUNOUT_MINTEMP) {
- #if ENABLED(SWITCHING_EXTRUDER)
- bool oldstatus = E0_ENABLE_READ;
- enable_e0();
- #else // !SWITCHING_EXTRUDER
- bool oldstatus;
- switch (active_extruder) {
- case 0:
- oldstatus = E0_ENABLE_READ;
- enable_e0();
- break;
- #if E_STEPPERS > 1
- case 1:
- oldstatus = E1_ENABLE_READ;
- enable_e1();
- break;
- #if E_STEPPERS > 2
- case 2:
- oldstatus = E2_ENABLE_READ;
- enable_e2();
- break;
- #if E_STEPPERS > 3
- case 3:
- oldstatus = E3_ENABLE_READ;
- enable_e3();
- break;
- #endif
- #endif
- #endif
- }
- #endif // !SWITCHING_EXTRUDER
-
- float oldepos = current_position[E_AXIS], oldedes = destination[E_AXIS];
- planner.buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS],
- destination[E_AXIS] + (EXTRUDER_RUNOUT_EXTRUDE) * (EXTRUDER_RUNOUT_ESTEPS) / planner.axis_steps_per_mm[E_AXIS],
- MMM_TO_MMS(EXTRUDER_RUNOUT_SPEED) * (EXTRUDER_RUNOUT_ESTEPS) / planner.axis_steps_per_mm[E_AXIS], active_extruder);
- current_position[E_AXIS] = oldepos;
- destination[E_AXIS] = oldedes;
- planner.set_e_position_mm(oldepos);
- previous_cmd_ms = ms; // refresh_cmd_timeout()
- stepper.synchronize();
- #if ENABLED(SWITCHING_EXTRUDER)
- E0_ENABLE_WRITE(oldstatus);
- #else
- switch (active_extruder) {
- case 0:
- E0_ENABLE_WRITE(oldstatus);
- break;
- #if E_STEPPERS > 1
- case 1:
- E1_ENABLE_WRITE(oldstatus);
- break;
- #if E_STEPPERS > 2
- case 2:
- E2_ENABLE_WRITE(oldstatus);
- break;
- #if E_STEPPERS > 3
- case 3:
- E3_ENABLE_WRITE(oldstatus);
- break;
- #endif
- #endif
- #endif
- }
- #endif // !SWITCHING_EXTRUDER
- }
- #endif // EXTRUDER_RUNOUT_PREVENT
-
- #if ENABLED(DUAL_X_CARRIAGE)
- // handle delayed move timeout
- if (delayed_move_time && ELAPSED(ms, delayed_move_time + 1000UL) && IsRunning()) {
- // travel moves have been received so enact them
- delayed_move_time = 0xFFFFFFFFUL; // force moves to be done
- set_destination_to_current();
- prepare_move_to_destination();
- }
- #endif
-
- #if ENABLED(TEMP_STAT_LEDS)
- handle_status_leds();
- #endif
-
- planner.check_axes_activity();
-}
-
-void kill(const char* lcd_msg) {
- SERIAL_ERROR_START;
- SERIAL_ERRORLNPGM(MSG_ERR_KILLED);
-
- #if ENABLED(ULTRA_LCD)
- kill_screen(lcd_msg);
- #else
- UNUSED(lcd_msg);
- #endif
-
- for (int i = 5; i--;) delay(100); // Wait a short time
-
- cli(); // Stop interrupts
- thermalManager.disable_all_heaters();
- disable_all_steppers();
-
- #if HAS_POWER_SWITCH
- pinMode(PS_ON_PIN, INPUT);
- #endif
-
- suicide();
- while (1) {
- #if ENABLED(USE_WATCHDOG)
- watchdog_reset();
- #endif
- } // Wait for reset
-}
-
-#if ENABLED(FILAMENT_RUNOUT_SENSOR)
-
- void handle_filament_runout() {
- if (!filament_ran_out) {
- filament_ran_out = true;
- enqueue_and_echo_commands_P(PSTR(FILAMENT_RUNOUT_SCRIPT));
- stepper.synchronize();
- }
- }
-
-#endif // FILAMENT_RUNOUT_SENSOR
-
-#if ENABLED(FAST_PWM_FAN)
-
- void setPwmFrequency(uint8_t pin, int val) {
- val &= 0x07;
- switch (digitalPinToTimer(pin)) {
- #if defined(TCCR0A)
- case TIMER0A:
- case TIMER0B:
- // TCCR0B &= ~(_BV(CS00) | _BV(CS01) | _BV(CS02));
- // TCCR0B |= val;
- break;
- #endif
- #if defined(TCCR1A)
- case TIMER1A:
- case TIMER1B:
- // TCCR1B &= ~(_BV(CS10) | _BV(CS11) | _BV(CS12));
- // TCCR1B |= val;
- break;
- #endif
- #if defined(TCCR2)
- case TIMER2:
- case TIMER2:
- TCCR2 &= ~(_BV(CS10) | _BV(CS11) | _BV(CS12));
- TCCR2 |= val;
- break;
- #endif
- #if defined(TCCR2A)
- case TIMER2A:
- case TIMER2B:
- TCCR2B &= ~(_BV(CS20) | _BV(CS21) | _BV(CS22));
- TCCR2B |= val;
- break;
- #endif
- #if defined(TCCR3A)
- case TIMER3A:
- case TIMER3B:
- case TIMER3C:
- TCCR3B &= ~(_BV(CS30) | _BV(CS31) | _BV(CS32));
- TCCR3B |= val;
- break;
- #endif
- #if defined(TCCR4A)
- case TIMER4A:
- case TIMER4B:
- case TIMER4C:
- TCCR4B &= ~(_BV(CS40) | _BV(CS41) | _BV(CS42));
- TCCR4B |= val;
- break;
- #endif
- #if defined(TCCR5A)
- case TIMER5A:
- case TIMER5B:
- case TIMER5C:
- TCCR5B &= ~(_BV(CS50) | _BV(CS51) | _BV(CS52));
- TCCR5B |= val;
- break;
- #endif
- }
- }
-#endif // FAST_PWM_FAN
-
-void stop() {
- thermalManager.disable_all_heaters();
- if (IsRunning()) {
- Running = false;
- Stopped_gcode_LastN = gcode_LastN; // Save last g_code for restart
- SERIAL_ERROR_START;
- SERIAL_ERRORLNPGM(MSG_ERR_STOPPED);
- LCD_MESSAGEPGM(MSG_STOPPED);
- }
-}
-
-float calculate_volumetric_multiplier(float diameter) {
- if (!volumetric_enabled || diameter == 0) return 1.0;
- float d2 = diameter * 0.5;
- return 1.0 / (M_PI * d2 * d2);
-}
-
-void calculate_volumetric_multipliers() {
- for (uint8_t i = 0; i < COUNT(filament_size); i++)
- volumetric_multiplier[i] = calculate_volumetric_multiplier(filament_size[i]);
-}
diff --git a/Marlin/SanityCheck.h b/Marlin/SanityCheck.h
deleted file mode 100644
index bec3d46..0000000
--- a/Marlin/SanityCheck.h
+++ /dev/null
@@ -1,736 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * SanityCheck.h
- *
- * Test configuration values for errors at compile-time.
- */
-
-/**
- * Due to the high number of issues related with old versions of Arduino IDE
- * we now prevent Marlin from compiling with older toolkits.
- */
-#if !defined(ARDUINO) || ARDUINO < 10600
- #error "Versions of Arduino IDE prior to 1.6.0 are no longer supported, please update your toolkit."
-#endif
-
-/**
- * We try our best to include sanity checks for all the changes configuration
- * directives because people have a tendency to use outdated config files with
- * the bleding edge source code, but sometimes this is not enough. This check
- * will force a minimum config file revision, otherwise Marlin will not build.
- */
-#if ! defined(CONFIGURATION_H_VERSION) || CONFIGURATION_H_VERSION < REQUIRED_CONFIGURATION_H_VERSION
- #error "You are using an old Configuration.h file, update it before building Marlin."
-#endif
-
-#if ! defined(CONFIGURATION_ADV_H_VERSION) || CONFIGURATION_ADV_H_VERSION < REQUIRED_CONFIGURATION_ADV_H_VERSION
- #error "You are using an old Configuration_adv.h file, update it before building Marlin."
-#endif
-
-/**
- * Marlin release, version and default string
- */
-#ifndef SHORT_BUILD_VERSION
- #error "SHORT_BUILD_VERSION must be specified."
-#elif !defined(DETAILED_BUILD_VERSION)
- #error "BUILD_VERSION must be specified."
-#elif !defined(STRING_DISTRIBUTION_DATE)
- #error "STRING_DISTRIBUTION_DATE must be specified."
-#elif !defined(PROTOCOL_VERSION)
- #error "PROTOCOL_VERSION must be specified."
-#elif !defined(MACHINE_NAME)
- #error "MACHINE_NAME must be specified."
-#elif !defined(SOURCE_CODE_URL)
- #error "SOURCE_CODE_URL must be specified."
-#elif !defined(DEFAULT_MACHINE_UUID)
- #error "DEFAULT_MACHINE_UUID must be specified."
-#elif !defined(WEBSITE_URL)
- #error "WEBSITE_URL must be specified."
-#endif
-
-/**
- * Dual Stepper Drivers
- */
-#if ENABLED(X_DUAL_STEPPER_DRIVERS) && ENABLED(DUAL_X_CARRIAGE)
- #error "DUAL_X_CARRIAGE is not compatible with X_DUAL_STEPPER_DRIVERS."
-#elif ENABLED(X_DUAL_STEPPER_DRIVERS) && (!HAS_X2_ENABLE || !HAS_X2_STEP || !HAS_X2_DIR)
- #error "X_DUAL_STEPPER_DRIVERS requires X2 pins (and an extra E plug)."
-#elif ENABLED(Y_DUAL_STEPPER_DRIVERS) && (!HAS_Y2_ENABLE || !HAS_Y2_STEP || !HAS_Y2_DIR)
- #error "Y_DUAL_STEPPER_DRIVERS requires Y2 pins (and an extra E plug)."
-#elif ENABLED(Z_DUAL_STEPPER_DRIVERS) && (!HAS_Z2_ENABLE || !HAS_Z2_STEP || !HAS_Z2_DIR)
- #error "Z_DUAL_STEPPER_DRIVERS requires Z2 pins (and an extra E plug)."
-#endif
-
-/**
- * Progress Bar
- */
-#if ENABLED(LCD_PROGRESS_BAR)
- #if DISABLED(SDSUPPORT)
- #error "LCD_PROGRESS_BAR requires SDSUPPORT."
- #endif
- #if ENABLED(DOGLCD)
- #error "LCD_PROGRESS_BAR does not apply to graphical displays."
- #endif
- #if ENABLED(FILAMENT_LCD_DISPLAY)
- #error "LCD_PROGRESS_BAR and FILAMENT_LCD_DISPLAY are not fully compatible. Comment out this line to use both."
- #endif
-#endif
-
-/**
- * Babystepping
- */
-#if ENABLED(BABYSTEPPING)
- #if DISABLED(ULTRA_LCD)
- #error "BABYSTEPPING requires an LCD controller."
- #endif
- #if ENABLED(SCARA)
- #error "BABYSTEPPING is not implemented for SCARA yet."
- #endif
- #if ENABLED(DELTA) && ENABLED(BABYSTEP_XY)
- #error "BABYSTEPPING only implemented for Z axis on deltabots."
- #endif
-#endif
-
-/**
- * Filament Runout needs a pin and either SD Support or Auto print start detection
- */
-#if ENABLED(FILAMENT_RUNOUT_SENSOR)
- #if !HAS_FIL_RUNOUT
- #error "FILAMENT_RUNOUT_SENSOR requires FIL_RUNOUT_PIN."
- #elif DISABLED(SDSUPPORT) && DISABLED(PRINTJOB_TIMER_AUTOSTART)
- #error "FILAMENT_RUNOUT_SENSOR requires SDSUPPORT or PRINTJOB_TIMER_AUTOSTART."
- #endif
-#endif
-
-/**
- * Filament Change with Extruder Runout Prevention
- */
-#if ENABLED(FILAMENT_CHANGE_FEATURE) && ENABLED(EXTRUDER_RUNOUT_PREVENT)
- #error "EXTRUDER_RUNOUT_PREVENT is incompatible with FILAMENT_CHANGE_FEATURE."
-#endif
-
-/**
- * Individual axis homing is useless for DELTAS
- */
-#if ENABLED(INDIVIDUAL_AXIS_HOMING_MENU) && ENABLED(DELTA)
- #error "INDIVIDUAL_AXIS_HOMING_MENU is incompatible with DELTA kinematics."
-#endif
-
-/**
- * Options only for EXTRUDERS > 1
- */
-#if EXTRUDERS > 1
-
- #if EXTRUDERS > 4
- #error "The maximum number of EXTRUDERS in Marlin is 4."
- #endif
-
- #if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT)
- #error "EXTRUDERS must be 1 with TEMP_SENSOR_1_AS_REDUNDANT."
- #endif
-
- #if ENABLED(HEATERS_PARALLEL)
- #error "EXTRUDERS must be 1 with HEATERS_PARALLEL."
- #endif
-
-#elif ENABLED(SINGLENOZZLE)
- #error "SINGLENOZZLE requires 2 or more EXTRUDERS."
-#endif
-
-/**
- * Only one type of extruder allowed
- */
-#if (ENABLED(SWITCHING_EXTRUDER) && (ENABLED(SINGLENOZZLE) || ENABLED(MIXING_EXTRUDER))) \
- || (ENABLED(SINGLENOZZLE) && ENABLED(MIXING_EXTRUDER))
- #error "Please define only one type of extruder: SINGLENOZZLE, SWITCHING_EXTRUDER, or MIXING_EXTRUDER."
-#endif
-
-/**
- * Single Stepper Dual Extruder with switching servo
- */
-#if ENABLED(SWITCHING_EXTRUDER)
- #if ENABLED(DUAL_X_CARRIAGE)
- #error "SWITCHING_EXTRUDER and DUAL_X_CARRIAGE are incompatible."
- #elif EXTRUDERS != 2
- #error "SWITCHING_EXTRUDER requires exactly 2 EXTRUDERS."
- #elif NUM_SERVOS < 1
- #error "SWITCHING_EXTRUDER requires NUM_SERVOS >= 1."
- #endif
-#endif
-
-/**
- * Mixing Extruder requirements
- */
-#if ENABLED(MIXING_EXTRUDER)
- #if EXTRUDERS > 1
- #error "MIXING_EXTRUDER currently only supports one extruder."
- #endif
- #if MIXING_STEPPERS < 2
- #error "You must set MIXING_STEPPERS >= 2 for a mixing extruder."
- #endif
- #if ENABLED(FILAMENT_SENSOR)
- #error "MIXING_EXTRUDER is incompatible with FILAMENT_SENSOR. Comment out this line to use it anyway."
- #endif
-#endif
-
-/**
- * Limited number of servos
- */
-#if defined(NUM_SERVOS) && NUM_SERVOS > 0
- #if NUM_SERVOS > 4
- #error "The maximum number of SERVOS in Marlin is 4."
- #elif HAS_Z_SERVO_ENDSTOP && Z_ENDSTOP_SERVO_NR >= NUM_SERVOS
- #error "Z_ENDSTOP_SERVO_NR must be smaller than NUM_SERVOS."
- #endif
-#endif
-
-/**
- * Servo deactivation depends on servo endstops
- */
-#if ENABLED(DEACTIVATE_SERVOS_AFTER_MOVE) && !HAS_Z_SERVO_ENDSTOP
- #error "Z_ENDSTOP_SERVO_NR is required for DEACTIVATE_SERVOS_AFTER_MOVE."
-#endif
-
-/**
- * Required LCD language
- */
-#if DISABLED(DOGLCD) && ENABLED(ULTRA_LCD) && !defined(DISPLAY_CHARSET_HD44780)
- #error "You must set DISPLAY_CHARSET_HD44780 to JAPANESE, WESTERN or CYRILLIC for your LCD controller."
-#endif
-
-/**
- * Bed Heating Options - PID vs Limit Switching
- */
-#if ENABLED(PIDTEMPBED) && ENABLED(BED_LIMIT_SWITCHING)
- #error "To use BED_LIMIT_SWITCHING you must disable PIDTEMPBED."
-#endif
-
-/**
- * Mesh Bed Leveling
- */
-#if ENABLED(MESH_BED_LEVELING)
- #if ENABLED(DELTA)
- #error "MESH_BED_LEVELING does not yet support DELTA printers."
- #elif ENABLED(AUTO_BED_LEVELING_FEATURE)
- #error "Select AUTO_BED_LEVELING_FEATURE or MESH_BED_LEVELING, not both."
- #elif MESH_NUM_X_POINTS > 9 || MESH_NUM_Y_POINTS > 9
- #error "MESH_NUM_X_POINTS and MESH_NUM_Y_POINTS must be less than 10."
- #endif
-#elif ENABLED(MANUAL_BED_LEVELING)
- #error "MESH_BED_LEVELING is required for MANUAL_BED_LEVELING."
-#endif
-
-/**
- * Probes
- */
-
-#if PROBE_SELECTED
-
- #if ENABLED(Z_PROBE_SLED) && ENABLED(DELTA)
- #error "You cannot use Z_PROBE_SLED with DELTA."
- #endif
-
- /**
- * NUM_SERVOS is required for a Z servo probe
- */
- #if HAS_Z_SERVO_ENDSTOP
- #ifndef NUM_SERVOS
- #error "You must set NUM_SERVOS for a Z servo probe (Z_ENDSTOP_SERVO_NR)."
- #elif Z_ENDSTOP_SERVO_NR >= NUM_SERVOS
- #error "Z_ENDSTOP_SERVO_NR must be less than NUM_SERVOS."
- #endif
- #endif
-
- /**
- * A probe needs a pin
- */
- #if !PROBE_PIN_CONFIGURED
- #error "A probe needs a pin! Use Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN or Z_MIN_PROBE_PIN."
- #endif
-
- /**
- * Require a Z min pin
- */
- #if HAS_Z_MIN
- // Z_MIN_PIN and Z_MIN_PROBE_PIN can't co-exist when Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
- #if HAS_Z_MIN_PROBE_PIN && ENABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN)
- #error "A probe cannot have more than one pin! Use Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN or Z_MIN_PROBE_PIN."
- #endif
- #elif !HAS_Z_MIN_PROBE_PIN || (DISABLED(Z_MIN_PROBE_ENDSTOP) || ENABLED(DISABLE_Z_MIN_PROBE_ENDSTOP))
- // A pin was set for the Z probe, but not enabled.
- #error "A probe requires a Z_MIN or Z_PROBE pin. Z_MIN_PIN or Z_MIN_PROBE_PIN must point to a valid hardware pin."
- #endif
-
- /**
- * Make sure the plug is enabled if it's used
- */
- #if ENABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN) && DISABLED(USE_ZMIN_PLUG)
- #error "You must enable USE_ZMIN_PLUG if any probe or endstop is connected to the ZMIN plug."
- #endif
-
- /**
- * Only allow one probe option to be defined
- */
- #if (ENABLED(FIX_MOUNTED_PROBE) && (ENABLED(Z_PROBE_ALLEN_KEY) || HAS_Z_SERVO_ENDSTOP || ENABLED(Z_PROBE_SLED))) \
- || (ENABLED(Z_PROBE_ALLEN_KEY) && (HAS_Z_SERVO_ENDSTOP || ENABLED(Z_PROBE_SLED))) \
- || (HAS_Z_SERVO_ENDSTOP && ENABLED(Z_PROBE_SLED))
- #error "Please define only one type of probe: Z Servo, Z_PROBE_ALLEN_KEY, Z_PROBE_SLED, or FIX_MOUNTED_PROBE."
- #endif
-
- /**
- * Don't allow nonsense probe-pin settings
- */
- #if ENABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN) && ENABLED(Z_MIN_PROBE_ENDSTOP)
- #error "You can't enable both Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN and Z_MIN_PROBE_ENDSTOP."
- #elif ENABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN) && ENABLED(DISABLE_Z_MIN_PROBE_ENDSTOP)
- #error "Don't enable DISABLE_Z_MIN_PROBE_ENDSTOP with Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN."
- #elif ENABLED(DISABLE_Z_MIN_PROBE_ENDSTOP) && DISABLED(Z_MIN_PROBE_ENDSTOP)
- #error "DISABLE_Z_MIN_PROBE_ENDSTOP requires Z_MIN_PROBE_ENDSTOP to be set."
- #endif
-
- /**
- * Require a Z probe pin if Z_MIN_PROBE_ENDSTOP is enabled.
- */
- #if ENABLED(Z_MIN_PROBE_ENDSTOP)
- #if !HAS_Z_MIN_PROBE_PIN
- #error "Z_MIN_PROBE_ENDSTOP requires a Z_MIN_PROBE_PIN in your board's pins_XXXX.h file."
- #endif
- // Forcing Servo definitions can break some hall effect sensor setups. Leaving these here for further comment.
- //#ifndef NUM_SERVOS
- // #error "You must have NUM_SERVOS defined and there must be at least 1 configured to use Z_MIN_PROBE_ENDSTOP."
- //#endif
- //#if defined(NUM_SERVOS) && NUM_SERVOS < 1
- // #error "You must have at least 1 servo defined for NUM_SERVOS to use Z_MIN_PROBE_ENDSTOP."
- //#endif
- //#if Z_ENDSTOP_SERVO_NR < 0
- // #error "You must have Z_ENDSTOP_SERVO_NR set to at least 0 or above to use Z_MIN_PROBE_ENDSTOP."
- //#endif
- //#ifndef Z_SERVO_ANGLES
- // #error "You must have Z_SERVO_ANGLES defined for Z Extend and Retract to use Z_MIN_PROBE_ENDSTOP."
- //#endif
- #endif
-
- /**
- * Make sure Z raise values are set
- */
- #if !defined(Z_PROBE_DEPLOY_HEIGHT)
- #error "You must set Z_PROBE_DEPLOY_HEIGHT in your configuration."
- #elif !defined(Z_PROBE_TRAVEL_HEIGHT)
- #error "You must set Z_PROBE_TRAVEL_HEIGHT in your configuration."
- #elif Z_PROBE_DEPLOY_HEIGHT < 0
- #error "Probes need Z_PROBE_DEPLOY_HEIGHT >= 0."
- #elif Z_PROBE_TRAVEL_HEIGHT < 0
- #error "Probes need Z_PROBE_TRAVEL_HEIGHT >= 0."
- #endif
-
-#else
-
- /**
- * Require some kind of probe for bed leveling and probe testing
- */
- #if ENABLED(AUTO_BED_LEVELING_FEATURE)
- #error "AUTO_BED_LEVELING_FEATURE requires a probe! Define a Z Servo, Z_PROBE_ALLEN_KEY, Z_PROBE_SLED, or FIX_MOUNTED_PROBE."
- #elif ENABLED(Z_MIN_PROBE_REPEATABILITY_TEST)
- #error "Z_MIN_PROBE_REPEATABILITY_TEST requires a probe! Define a Z Servo, Z_PROBE_ALLEN_KEY, Z_PROBE_SLED, or FIX_MOUNTED_PROBE."
- #endif
-
-#endif
-
-/**
- * Make sure Z_SAFE_HOMING point is reachable
- */
-#if ENABLED(Z_SAFE_HOMING)
- #if Z_SAFE_HOMING_X_POINT < MIN_PROBE_X || Z_SAFE_HOMING_X_POINT > MAX_PROBE_X
- #if HAS_BED_PROBE
- #error "Z_SAFE_HOMING_X_POINT can't be reached by the Z probe."
- #else
- #error "Z_SAFE_HOMING_X_POINT can't be reached by the nozzle."
- #endif
- #elif Z_SAFE_HOMING_Y_POINT < MIN_PROBE_Y || Z_SAFE_HOMING_Y_POINT > MAX_PROBE_Y
- #if HAS_BED_PROBE
- #error "Z_SAFE_HOMING_Y_POINT can't be reached by the Z probe."
- #else
- #error "Z_SAFE_HOMING_Y_POINT can't be reached by the nozzle."
- #endif
- #endif
-#endif // Z_SAFE_HOMING
-
-/**
- * Auto Bed Leveling
- */
-#if ENABLED(AUTO_BED_LEVELING_FEATURE)
-
- /**
- * Delta has limited bed leveling options
- */
- #if ENABLED(DELTA) && DISABLED(AUTO_BED_LEVELING_GRID)
- #error "You must use AUTO_BED_LEVELING_GRID for DELTA bed leveling."
- #endif
-
- /**
- * Check if Probe_Offset * Grid Points is greater than Probing Range
- */
- #if ENABLED(AUTO_BED_LEVELING_GRID)
- #ifndef DELTA_PROBEABLE_RADIUS
- // Be sure points are in the right order
- #if LEFT_PROBE_BED_POSITION > RIGHT_PROBE_BED_POSITION
- #error "LEFT_PROBE_BED_POSITION must be less than RIGHT_PROBE_BED_POSITION."
- #elif FRONT_PROBE_BED_POSITION > BACK_PROBE_BED_POSITION
- #error "FRONT_PROBE_BED_POSITION must be less than BACK_PROBE_BED_POSITION."
- #endif
- // Make sure probing points are reachable
- #if LEFT_PROBE_BED_POSITION < MIN_PROBE_X
- #error "The given LEFT_PROBE_BED_POSITION can't be reached by the Z probe."
- #elif RIGHT_PROBE_BED_POSITION > MAX_PROBE_X
- #error "The given RIGHT_PROBE_BED_POSITION can't be reached by the Z probe."
- #elif FRONT_PROBE_BED_POSITION < MIN_PROBE_Y
- #error "The given FRONT_PROBE_BED_POSITION can't be reached by the Z probe."
- #elif BACK_PROBE_BED_POSITION > MAX_PROBE_Y
- #error "The given BACK_PROBE_BED_POSITION can't be reached by the Z probe."
- #endif
- #endif
- #else // !AUTO_BED_LEVELING_GRID
-
- // Check the triangulation points
- #if ABL_PROBE_PT_1_X < MIN_PROBE_X || ABL_PROBE_PT_1_X > MAX_PROBE_X
- #error "The given ABL_PROBE_PT_1_X can't be reached by the Z probe."
- #elif ABL_PROBE_PT_2_X < MIN_PROBE_X || ABL_PROBE_PT_2_X > MAX_PROBE_X
- #error "The given ABL_PROBE_PT_2_X can't be reached by the Z probe."
- #elif ABL_PROBE_PT_3_X < MIN_PROBE_X || ABL_PROBE_PT_3_X > MAX_PROBE_X
- #error "The given ABL_PROBE_PT_3_X can't be reached by the Z probe."
- #elif ABL_PROBE_PT_1_Y < MIN_PROBE_Y || ABL_PROBE_PT_1_Y > MAX_PROBE_Y
- #error "The given ABL_PROBE_PT_1_Y can't be reached by the Z probe."
- #elif ABL_PROBE_PT_2_Y < MIN_PROBE_Y || ABL_PROBE_PT_2_Y > MAX_PROBE_Y
- #error "The given ABL_PROBE_PT_2_Y can't be reached by the Z probe."
- #elif ABL_PROBE_PT_3_Y < MIN_PROBE_Y || ABL_PROBE_PT_3_Y > MAX_PROBE_Y
- #error "The given ABL_PROBE_PT_3_Y can't be reached by the Z probe."
- #endif
-
- #endif // !AUTO_BED_LEVELING_GRID
-
-#endif // AUTO_BED_LEVELING_FEATURE
-
-/**
- * Advance Extrusion
- */
-#if ENABLED(ADVANCE) && ENABLED(LIN_ADVANCE)
- #error "You can enable ADVANCE or LIN_ADVANCE, but not both."
-#endif
-
-/**
- * Filament Width Sensor
- */
-#if ENABLED(FILAMENT_WIDTH_SENSOR) && !HAS_FILAMENT_WIDTH_SENSOR
- #error "FILAMENT_WIDTH_SENSOR requires a FILWIDTH_PIN to be defined."
-#endif
-
-/**
- * ULTIPANEL encoder
- */
-#if ENABLED(ULTIPANEL) && DISABLED(NEWPANEL) && DISABLED(SR_LCD_2W_NL) && !defined(SHIFT_CLK)
- #error "ULTIPANEL requires some kind of encoder."
-#endif
-
-#if ENCODER_PULSES_PER_STEP < 0
- #error "ENCODER_PULSES_PER_STEP should not be negative, use REVERSE_MENU_DIRECTION instead."
-#endif
-
-/**
- * SAV_3DGLCD display options
- */
-#if ENABLED(U8GLIB_SSD1306) && ENABLED(U8GLIB_SH1106)
- #error "Only enable one SAV_3DGLCD display type: U8GLIB_SSD1306 or U8GLIB_SH1106."
-#endif
-
-/**
- * Don't set more than one kinematic type
- */
-#if (ENABLED(DELTA) && (ENABLED(SCARA) || ENABLED(COREXY) || ENABLED(COREXZ) || ENABLED(COREYZ))) \
- || (ENABLED(SCARA) && (ENABLED(COREXY) || ENABLED(COREXZ) || ENABLED(COREYZ))) \
- || (ENABLED(COREXY) && (ENABLED(COREXZ) || ENABLED(COREYZ))) \
- || (ENABLED(COREXZ) && ENABLED(COREYZ))
- #error "Please enable only one of DELTA, SCARA, COREXY, COREXZ, or COREYZ."
-#endif
-
-/**
- * Allen Key
- * Deploying the Allen Key probe uses big moves in z direction. Too dangerous for an unhomed z-axis.
- */
-#if ENABLED(Z_PROBE_ALLEN_KEY) && (Z_HOME_DIR < 0) && ENABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN)
- #error "You can't home to a z min endstop with a Z_PROBE_ALLEN_KEY"
-#endif
-
-/**
- * Dual X Carriage requirements
- */
-#if ENABLED(DUAL_X_CARRIAGE)
- #if EXTRUDERS == 1
- #error "DUAL_X_CARRIAGE requires 2 (or more) extruders."
- #elif ENABLED(COREXY) || ENABLED(COREXZ)
- #error "DUAL_X_CARRIAGE cannot be used with COREXY or COREXZ."
- #elif !HAS_X2_ENABLE || !HAS_X2_STEP || !HAS_X2_DIR
- #error "DUAL_X_CARRIAGE requires X2 stepper pins to be defined."
- #elif !HAS_X_MAX
- #error "DUAL_X_CARRIAGE requires USE_XMAX_PLUG and an X Max Endstop."
- #elif !defined(X2_HOME_POS) || !defined(X2_MIN_POS) || !defined(X2_MAX_POS)
- #error "DUAL_X_CARRIAGE requires X2_HOME_POS, X2_MIN_POS, and X2_MAX_POS."
- #elif X_HOME_DIR != -1 || X2_HOME_DIR != 1
- #error "DUAL_X_CARRIAGE requires X_HOME_DIR -1 and X2_HOME_DIR 1."
- #endif
-#endif // DUAL_X_CARRIAGE
-
-/**
- * Make sure auto fan pins don't conflict with the fan pin
- */
-#if HAS_AUTO_FAN
- #if HAS_FAN0
- #if EXTRUDER_0_AUTO_FAN_PIN == FAN_PIN
- #error "You cannot set EXTRUDER_0_AUTO_FAN_PIN equal to FAN_PIN."
- #elif EXTRUDER_1_AUTO_FAN_PIN == FAN_PIN
- #error "You cannot set EXTRUDER_1_AUTO_FAN_PIN equal to FAN_PIN."
- #elif EXTRUDER_2_AUTO_FAN_PIN == FAN_PIN
- #error "You cannot set EXTRUDER_2_AUTO_FAN_PIN equal to FAN_PIN."
- #elif EXTRUDER_3_AUTO_FAN_PIN == FAN_PIN
- #error "You cannot set EXTRUDER_3_AUTO_FAN_PIN equal to FAN_PIN."
- #endif
- #endif
-#endif
-
-#if HAS_FAN0 && CONTROLLERFAN_PIN == FAN_PIN
- #error "You cannot set CONTROLLERFAN_PIN equal to FAN_PIN."
-#endif
-
-#if HAS_CONTROLLERFAN
- #if EXTRUDER_0_AUTO_FAN_PIN == CONTROLLERFAN_PIN
- #error "You cannot set EXTRUDER_0_AUTO_FAN_PIN equal to CONTROLLERFAN_PIN."
- #elif EXTRUDER_1_AUTO_FAN_PIN == CONTROLLERFAN_PIN
- #error "You cannot set EXTRUDER_1_AUTO_FAN_PIN equal to CONTROLLERFAN_PIN."
- #elif EXTRUDER_2_AUTO_FAN_PIN == CONTROLLERFAN_PIN
- #error "You cannot set EXTRUDER_2_AUTO_FAN_PIN equal to CONTROLLERFAN_PIN."
- #elif EXTRUDER_3_AUTO_FAN_PIN == CONTROLLERFAN_PIN
- #error "You cannot set EXTRUDER_3_AUTO_FAN_PIN equal to CONTROLLERFAN_PIN."
- #endif
-#endif
-
-/**
- * Test Heater, Temp Sensor, and Extruder Pins; Sensor Type must also be set.
- */
-#if !HAS_HEATER_0
- #error "HEATER_0_PIN not defined for this board."
-#elif !PIN_EXISTS(TEMP_0)
- #error "TEMP_0_PIN not defined for this board."
-#elif !PIN_EXISTS(E0_STEP) || !PIN_EXISTS(E0_DIR) || !PIN_EXISTS(E0_ENABLE)
- #error "E0_STEP_PIN, E0_DIR_PIN, or E0_ENABLE_PIN not defined for this board."
-#elif TEMP_SENSOR_0 == 0
- #error "TEMP_SENSOR_0 is required."
-#endif
-
-#if HOTENDS > 1 || ENABLED(HEATERS_PARALLEL)
- #if !HAS_HEATER_1
- #error "HEATER_1_PIN not defined for this board."
- #endif
-#endif
-
-#if HOTENDS > 1
- #if TEMP_SENSOR_1 == 0
- #error "TEMP_SENSOR_1 is required with 2 or more HOTENDS."
- #elif !PIN_EXISTS(TEMP_1)
- #error "TEMP_1_PIN not defined for this board."
- #endif
- #if HOTENDS > 2
- #if TEMP_SENSOR_2 == 0
- #error "TEMP_SENSOR_2 is required with 3 or more HOTENDS."
- #elif !HAS_HEATER_2
- #error "HEATER_2_PIN not defined for this board."
- #elif !PIN_EXISTS(TEMP_2)
- #error "TEMP_2_PIN not defined for this board."
- #endif
- #if HOTENDS > 3
- #if TEMP_SENSOR_3 == 0
- #error "TEMP_SENSOR_3 is required with 4 HOTENDS."
- #elif !HAS_HEATER_3
- #error "HEATER_3_PIN not defined for this board."
- #elif !PIN_EXISTS(TEMP_3)
- #error "TEMP_3_PIN not defined for this board."
- #endif
- #elif TEMP_SENSOR_3 != 0
- #error "TEMP_SENSOR_3 shouldn't be set with only 3 extruders."
- #endif
- #elif TEMP_SENSOR_2 != 0
- #error "TEMP_SENSOR_2 shouldn't be set with only 2 extruders."
- #elif TEMP_SENSOR_3 != 0
- #error "TEMP_SENSOR_3 shouldn't be set with only 2 extruders."
- #endif
-#elif TEMP_SENSOR_1 != 0 && DISABLED(TEMP_SENSOR_1_AS_REDUNDANT)
- #error "TEMP_SENSOR_1 shouldn't be set with only 1 extruder."
-#elif TEMP_SENSOR_2 != 0
- #error "TEMP_SENSOR_2 shouldn't be set with only 1 extruder."
-#elif TEMP_SENSOR_3 != 0
- #error "TEMP_SENSOR_3 shouldn't be set with only 1 extruder."
-#endif
-
-#if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT) && TEMP_SENSOR_1 == 0
- #error "TEMP_SENSOR_1 is required with TEMP_SENSOR_1_AS_REDUNDANT."
-#endif
-
-/**
- * Basic 2-nozzle duplication mode
- */
-#if ENABLED(DUAL_NOZZLE_DUPLICATION_MODE)
- #if HOTENDS != 2
- #error "DUAL_NOZZLE_DUPLICATION_MODE requires exactly 2 hotends."
- #elif ENABLED(DUAL_X_CARRIAGE)
- #error "DUAL_NOZZLE_DUPLICATION_MODE is incompatible with DUAL_X_CARRIAGE."
- #elif ENABLED(SINGLENOZZLE)
- #error "DUAL_NOZZLE_DUPLICATION_MODE is incompatible with SINGLENOZZLE."
- #elif ENABLED(MIXING_EXTRUDER)
- #error "DUAL_NOZZLE_DUPLICATION_MODE is incompatible with MIXING_EXTRUDER."
- #elif ENABLED(SWITCHING_EXTRUDER)
- #error "DUAL_NOZZLE_DUPLICATION_MODE is incompatible with SWITCHING_EXTRUDER."
- #endif
-#endif
-
-/**
- * Test Extruder Pins
- */
-#if EXTRUDERS > 3
- #if !PIN_EXISTS(E3_STEP) || !PIN_EXISTS(E3_DIR) || !PIN_EXISTS(E3_ENABLE)
- #error "E3_STEP_PIN, E3_DIR_PIN, or E3_ENABLE_PIN not defined for this board."
- #endif
-#elif EXTRUDERS > 2
- #if !PIN_EXISTS(E2_STEP) || !PIN_EXISTS(E2_DIR) || !PIN_EXISTS(E2_ENABLE)
- #error "E2_STEP_PIN, E2_DIR_PIN, or E2_ENABLE_PIN not defined for this board."
- #endif
-#elif EXTRUDERS > 1
- #if !PIN_EXISTS(E1_STEP) || !PIN_EXISTS(E1_DIR) || !PIN_EXISTS(E1_ENABLE)
- #error "E1_STEP_PIN, E1_DIR_PIN, or E1_ENABLE_PIN not defined for this board."
- #endif
-#endif
-
-/**
- * Endstops
- */
-#if DISABLED(USE_XMIN_PLUG) && DISABLED(USE_XMAX_PLUG) && !(ENABLED(Z_DUAL_ENDSTOPS) && Z2_USE_ENDSTOP >= _XMAX_ && Z2_USE_ENDSTOP <= _XMIN_)
- #error "You must enable USE_XMIN_PLUG or USE_XMAX_PLUG"
-#elif DISABLED(USE_YMIN_PLUG) && DISABLED(USE_YMAX_PLUG) && !(ENABLED(Z_DUAL_ENDSTOPS) && Z2_USE_ENDSTOP >= _YMAX_ && Z2_USE_ENDSTOP <= _YMIN_)
- #error "You must enable USE_YMIN_PLUG or USE_YMAX_PLUG"
-#elif DISABLED(USE_ZMIN_PLUG) && DISABLED(USE_ZMAX_PLUG) && !(ENABLED(Z_DUAL_ENDSTOPS) && Z2_USE_ENDSTOP >= _ZMAX_ && Z2_USE_ENDSTOP <= _ZMIN_)
- #error "You must enable USE_ZMIN_PLUG or USE_ZMAX_PLUG"
-#elif ENABLED(Z_DUAL_ENDSTOPS) && !Z2_USE_ENDSTOP
- #error "You must set Z2_USE_ENDSTOP with Z_DUAL_ENDSTOPS"
-#endif
-
-/**
- * emergency-command parser
- */
-#if ENABLED(EMERGENCY_PARSER) && ENABLED(USBCON)
- #error "EMERGENCY_PARSER does not work on boards with AT90USB processors (USBCON)."
-#endif
-
- /**
- * Warnings for old configurations
- */
-#if WATCH_TEMP_PERIOD > 500
- #error "WATCH_TEMP_PERIOD now uses seconds instead of milliseconds."
-#elif DISABLED(THERMAL_PROTECTION_HOTENDS) && (defined(WATCH_TEMP_PERIOD) || defined(THERMAL_PROTECTION_PERIOD))
- #error "Thermal Runaway Protection for hotends is now enabled with THERMAL_PROTECTION_HOTENDS."
-#elif DISABLED(THERMAL_PROTECTION_BED) && defined(THERMAL_PROTECTION_BED_PERIOD)
- #error "Thermal Runaway Protection for the bed is now enabled with THERMAL_PROTECTION_BED."
-#elif ENABLED(COREXZ) && ENABLED(Z_LATE_ENABLE)
- #error "Z_LATE_ENABLE can't be used with COREXZ."
-#elif defined(X_HOME_RETRACT_MM)
- #error "[XYZ]_HOME_RETRACT_MM settings have been renamed [XYZ]_HOME_BUMP_MM."
-#elif defined(BEEPER)
- #error "BEEPER is now BEEPER_PIN. Please update your pins definitions."
-#elif defined(SDCARDDETECT)
- #error "SDCARDDETECT is now SD_DETECT_PIN. Please update your pins definitions."
-#elif defined(SDCARDDETECTINVERTED)
- #error "SDCARDDETECTINVERTED is now SD_DETECT_INVERTED. Please update your configuration."
-#elif defined(BTENABLED)
- #error "BTENABLED is now BLUETOOTH. Please update your configuration."
-#elif defined(CUSTOM_MENDEL_NAME)
- #error "CUSTOM_MENDEL_NAME is now CUSTOM_MACHINE_NAME. Please update your configuration."
-#elif defined(HAS_AUTOMATIC_VERSIONING)
- #error "HAS_AUTOMATIC_VERSIONING is now USE_AUTOMATIC_VERSIONING. Please update your configuration."
-#elif defined(ENABLE_AUTO_BED_LEVELING)
- #error "ENABLE_AUTO_BED_LEVELING is now AUTO_BED_LEVELING_FEATURE. Please update your configuration."
-#elif defined(SDSLOW)
- #error "SDSLOW deprecated. Set SPI_SPEED to SPI_HALF_SPEED instead."
-#elif defined(SDEXTRASLOW)
- #error "SDEXTRASLOW deprecated. Set SPI_SPEED to SPI_QUARTER_SPEED instead."
-#elif defined(FILAMENT_SENSOR)
- #error "FILAMENT_SENSOR is deprecated. Use FILAMENT_WIDTH_SENSOR instead."
-#elif defined(DISABLE_MAX_ENDSTOPS) || defined(DISABLE_MIN_ENDSTOPS)
- #error "DISABLE_MAX_ENDSTOPS and DISABLE_MIN_ENDSTOPS deprecated. Use individual USE_*_PLUG options instead."
-#elif ENABLED(Z_DUAL_ENDSTOPS) && !defined(Z2_USE_ENDSTOP)
- #error "Z_DUAL_ENDSTOPS settings are simplified. Just set Z2_USE_ENDSTOP to the endstop you want to repurpose for Z2"
-#elif defined(LANGUAGE_INCLUDE)
- #error "LANGUAGE_INCLUDE has been replaced by LCD_LANGUAGE. Please update your configuration."
-#elif defined(EXTRUDER_OFFSET_X) || defined(EXTRUDER_OFFSET_Y)
- #error "EXTRUDER_OFFSET_[XY] is deprecated. Use HOTEND_OFFSET_[XY] instead."
-#elif defined(PID_PARAMS_PER_EXTRUDER)
- #error "PID_PARAMS_PER_EXTRUDER is deprecated. Use PID_PARAMS_PER_HOTEND instead."
-#elif defined(EXTRUDER_WATTS) || defined(BED_WATTS)
- #error "EXTRUDER_WATTS and BED_WATTS are deprecated. Remove them from your configuration."
-#elif defined(SERVO_ENDSTOP_ANGLES)
- #error "SERVO_ENDSTOP_ANGLES is deprecated. Use Z_SERVO_ANGLES instead."
-#elif defined(X_ENDSTOP_SERVO_NR) || defined(Y_ENDSTOP_SERVO_NR)
- #error "X_ENDSTOP_SERVO_NR and Y_ENDSTOP_SERVO_NR are deprecated and should be removed."
-#elif defined(XY_TRAVEL_SPEED)
- #error "XY_TRAVEL_SPEED is deprecated. Use XY_PROBE_SPEED instead."
-#elif defined(PROBE_SERVO_DEACTIVATION_DELAY)
- #error "PROBE_SERVO_DEACTIVATION_DELAY is deprecated. Use DEACTIVATE_SERVOS_AFTER_MOVE instead."
-#elif defined(SERVO_DEACTIVATION_DELAY)
- #error "SERVO_DEACTIVATION_DELAY is deprecated. Use SERVO_DELAY instead."
-#elif ENABLED(FILAMENTCHANGEENABLE)
- #error "FILAMENTCHANGEENABLE is now FILAMENT_CHANGE_FEATURE. Please update your configuration."
-#elif defined(PLA_PREHEAT_HOTEND_TEMP)
- #error "PLA_PREHEAT_HOTEND_TEMP is now PREHEAT_1_TEMP_HOTEND. Please update your configuration."
-#elif defined(PLA_PREHEAT_HPB_TEMP)
- #error "PLA_PREHEAT_HPB_TEMP is now PREHEAT_1_TEMP_BED. Please update your configuration."
-#elif defined(PLA_PREHEAT_FAN_SPEED)
- #error "PLA_PREHEAT_FAN_SPEED is now PREHEAT_1_FAN_SPEED. Please update your configuration."
-#elif defined(ABS_PREHEAT_HOTEND_TEMP)
- #error "ABS_PREHEAT_HOTEND_TEMP is now PREHEAT_2_TEMP_HOTEND. Please update your configuration."
-#elif defined(ABS_PREHEAT_HPB_TEMP)
- #error "ABS_PREHEAT_HPB_TEMP is now PREHEAT_2_TEMP_BED. Please update your configuration."
-#elif defined(ABS_PREHEAT_FAN_SPEED)
- #error "ABS_PREHEAT_FAN_SPEED is now PREHEAT_2_FAN_SPEED. Please update your configuration."
-#elif defined(ENDSTOPS_ONLY_FOR_HOMING)
- #error "ENDSTOPS_ONLY_FOR_HOMING is deprecated. Use (disable) ENDSTOPS_ALWAYS_ON_DEFAULT instead."
-#elif defined(HOMING_FEEDRATE)
- #error "HOMING_FEEDRATE is deprecated. Set individual rates with HOMING_FEEDRATE_(XY|Z|E) instead."
-#elif defined(MANUAL_HOME_POSITIONS)
- #error "MANUAL_HOME_POSITIONS is deprecated. Set MANUAL_[XYZ]_HOME_POS as-needed instead."
-#elif defined(PID_ADD_EXTRUSION_RATE)
- #error "PID_ADD_EXTRUSION_RATE is now PID_EXTRUSION_SCALING and is DISABLED by default. Are you sure you want to use this option? Please update your configuration."
-#elif defined(Z_RAISE_BEFORE_HOMING)
- #error "Z_RAISE_BEFORE_HOMING is now Z_HOMING_HEIGHT. Please update your configuration."
-#elif defined(MIN_Z_HEIGHT_FOR_HOMING)
- #error "MIN_Z_HEIGHT_FOR_HOMING is now Z_HOMING_HEIGHT. Please update your configuration."
-#elif defined(Z_RAISE_BEFORE_PROBING) || defined(Z_RAISE_AFTER_PROBING)
- #error "Z_RAISE_(BEFORE|AFTER)_PROBING are deprecated. Use Z_PROBE_DEPLOY_HEIGHT instead."
-#elif defined(Z_RAISE_PROBE_DEPLOY_STOW) || defined(Z_RAISE_BETWEEN_PROBINGS)
- #error "Z_RAISE_PROBE_DEPLOY_STOW and Z_RAISE_BETWEEN_PROBINGS are now Z_PROBE_DEPLOY_HEIGHT and Z_PROBE_TRAVEL_HEIGHT Please update your configuration."
-#endif
diff --git a/Marlin/Sd2Card.cpp b/Marlin/Sd2Card.cpp
deleted file mode 100644
index 190e4ad..0000000
--- a/Marlin/Sd2Card.cpp
+++ /dev/null
@@ -1,719 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Arduino Sd2Card Library
- * Copyright (C) 2009 by William Greiman
- *
- * This file is part of the Arduino Sd2Card Library
- */
-#include "Marlin.h"
-
-#if ENABLED(SDSUPPORT)
-#include "Sd2Card.h"
-
-//------------------------------------------------------------------------------
-#if DISABLED(SOFTWARE_SPI)
- // functions for hardware SPI
- //------------------------------------------------------------------------------
- // make sure SPCR rate is in expected bits
- #if (SPR0 != 0 || SPR1 != 1)
- #error "unexpected SPCR bits"
- #endif
- /**
- * Initialize hardware SPI
- * Set SCK rate to F_CPU/pow(2, 1 + spiRate) for spiRate [0,6]
- */
- static void spiInit(uint8_t spiRate) {
- // See avr processor documentation
- SPCR = _BV(SPE) | _BV(MSTR) | (spiRate >> 1);
- SPSR = spiRate & 1 || spiRate == 6 ? 0 : _BV(SPI2X);
- }
- //------------------------------------------------------------------------------
- /** SPI receive a byte */
- static uint8_t spiRec() {
- SPDR = 0XFF;
- while (!TEST(SPSR, SPIF)) { /* Intentionally left empty */ }
- return SPDR;
- }
- //------------------------------------------------------------------------------
- /** SPI read data - only one call so force inline */
- static inline __attribute__((always_inline))
- void spiRead(uint8_t* buf, uint16_t nbyte) {
- if (nbyte-- == 0) return;
- SPDR = 0XFF;
- for (uint16_t i = 0; i < nbyte; i++) {
- while (!TEST(SPSR, SPIF)) { /* Intentionally left empty */ }
- buf[i] = SPDR;
- SPDR = 0XFF;
- }
- while (!TEST(SPSR, SPIF)) { /* Intentionally left empty */ }
- buf[nbyte] = SPDR;
- }
- //------------------------------------------------------------------------------
- /** SPI send a byte */
- static void spiSend(uint8_t b) {
- SPDR = b;
- while (!TEST(SPSR, SPIF)) { /* Intentionally left empty */ }
- }
- //------------------------------------------------------------------------------
- /** SPI send block - only one call so force inline */
- static inline __attribute__((always_inline))
- void spiSendBlock(uint8_t token, const uint8_t* buf) {
- SPDR = token;
- for (uint16_t i = 0; i < 512; i += 2) {
- while (!TEST(SPSR, SPIF)) { /* Intentionally left empty */ }
- SPDR = buf[i];
- while (!TEST(SPSR, SPIF)) { /* Intentionally left empty */ }
- SPDR = buf[i + 1];
- }
- while (!TEST(SPSR, SPIF)) { /* Intentionally left empty */ }
- }
- //------------------------------------------------------------------------------
-#else // SOFTWARE_SPI
- //------------------------------------------------------------------------------
- /** nop to tune soft SPI timing */
- #define nop asm volatile ("nop\n\t")
- //------------------------------------------------------------------------------
- /** Soft SPI receive byte */
- static uint8_t spiRec() {
- uint8_t data = 0;
- // no interrupts during byte receive - about 8 us
- cli();
- // output pin high - like sending 0XFF
- WRITE(SPI_MOSI_PIN, HIGH);
-
- for (uint8_t i = 0; i < 8; i++) {
- WRITE(SPI_SCK_PIN, HIGH);
-
- // adjust so SCK is nice
- nop;
- nop;
-
- data <<= 1;
-
- if (READ(SPI_MISO_PIN)) data |= 1;
-
- WRITE(SPI_SCK_PIN, LOW);
- }
- // enable interrupts
- sei();
- return data;
- }
- //------------------------------------------------------------------------------
- /** Soft SPI read data */
- static void spiRead(uint8_t* buf, uint16_t nbyte) {
- for (uint16_t i = 0; i < nbyte; i++)
- buf[i] = spiRec();
- }
- //------------------------------------------------------------------------------
- /** Soft SPI send byte */
- static void spiSend(uint8_t data) {
- // no interrupts during byte send - about 8 us
- cli();
- for (uint8_t i = 0; i < 8; i++) {
- WRITE(SPI_SCK_PIN, LOW);
-
- WRITE(SPI_MOSI_PIN, data & 0X80);
-
- data <<= 1;
-
- WRITE(SPI_SCK_PIN, HIGH);
- }
- // hold SCK high for a few ns
- nop;
- nop;
- nop;
- nop;
-
- WRITE(SPI_SCK_PIN, LOW);
- // enable interrupts
- sei();
- }
- //------------------------------------------------------------------------------
- /** Soft SPI send block */
- void spiSendBlock(uint8_t token, const uint8_t* buf) {
- spiSend(token);
- for (uint16_t i = 0; i < 512; i++)
- spiSend(buf[i]);
- }
-#endif // SOFTWARE_SPI
-//------------------------------------------------------------------------------
-// send command and return error code. Return zero for OK
-uint8_t Sd2Card::cardCommand(uint8_t cmd, uint32_t arg) {
- // select card
- chipSelectLow();
-
- // wait up to 300 ms if busy
- waitNotBusy(300);
-
- // send command
- spiSend(cmd | 0x40);
-
- // send argument
- for (int8_t s = 24; s >= 0; s -= 8) spiSend(arg >> s);
-
- // send CRC
- uint8_t crc = 0XFF;
- if (cmd == CMD0) crc = 0X95; // correct crc for CMD0 with arg 0
- if (cmd == CMD8) crc = 0X87; // correct crc for CMD8 with arg 0X1AA
- spiSend(crc);
-
- // skip stuff byte for stop read
- if (cmd == CMD12) spiRec();
-
- // wait for response
- for (uint8_t i = 0; ((status_ = spiRec()) & 0X80) && i != 0XFF; i++) { /* Intentionally left empty */ }
- return status_;
-}
-//------------------------------------------------------------------------------
-/**
- * Determine the size of an SD flash memory card.
- *
- * \return The number of 512 byte data blocks in the card
- * or zero if an error occurs.
- */
-uint32_t Sd2Card::cardSize() {
- csd_t csd;
- if (!readCSD(&csd)) return 0;
- if (csd.v1.csd_ver == 0) {
- uint8_t read_bl_len = csd.v1.read_bl_len;
- uint16_t c_size = (csd.v1.c_size_high << 10)
- | (csd.v1.c_size_mid << 2) | csd.v1.c_size_low;
- uint8_t c_size_mult = (csd.v1.c_size_mult_high << 1)
- | csd.v1.c_size_mult_low;
- return (uint32_t)(c_size + 1) << (c_size_mult + read_bl_len - 7);
- }
- else if (csd.v2.csd_ver == 1) {
- uint32_t c_size = ((uint32_t)csd.v2.c_size_high << 16)
- | (csd.v2.c_size_mid << 8) | csd.v2.c_size_low;
- return (c_size + 1) << 10;
- }
- else {
- error(SD_CARD_ERROR_BAD_CSD);
- return 0;
- }
-}
-//------------------------------------------------------------------------------
-void Sd2Card::chipSelectHigh() {
- digitalWrite(chipSelectPin_, HIGH);
-}
-//------------------------------------------------------------------------------
-void Sd2Card::chipSelectLow() {
- #if DISABLED(SOFTWARE_SPI)
- spiInit(spiRate_);
- #endif // SOFTWARE_SPI
- digitalWrite(chipSelectPin_, LOW);
-}
-//------------------------------------------------------------------------------
-/** Erase a range of blocks.
- *
- * \param[in] firstBlock The address of the first block in the range.
- * \param[in] lastBlock The address of the last block in the range.
- *
- * \note This function requests the SD card to do a flash erase for a
- * range of blocks. The data on the card after an erase operation is
- * either 0 or 1, depends on the card vendor. The card must support
- * single block erase.
- *
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure.
- */
-bool Sd2Card::erase(uint32_t firstBlock, uint32_t lastBlock) {
- csd_t csd;
- if (!readCSD(&csd)) goto fail;
- // check for single block erase
- if (!csd.v1.erase_blk_en) {
- // erase size mask
- uint8_t m = (csd.v1.sector_size_high << 1) | csd.v1.sector_size_low;
- if ((firstBlock & m) != 0 || ((lastBlock + 1) & m) != 0) {
- // error card can't erase specified area
- error(SD_CARD_ERROR_ERASE_SINGLE_BLOCK);
- goto fail;
- }
- }
- if (type_ != SD_CARD_TYPE_SDHC) {
- firstBlock <<= 9;
- lastBlock <<= 9;
- }
- if (cardCommand(CMD32, firstBlock)
- || cardCommand(CMD33, lastBlock)
- || cardCommand(CMD38, 0)) {
- error(SD_CARD_ERROR_ERASE);
- goto fail;
- }
- if (!waitNotBusy(SD_ERASE_TIMEOUT)) {
- error(SD_CARD_ERROR_ERASE_TIMEOUT);
- goto fail;
- }
- chipSelectHigh();
- return true;
-fail:
- chipSelectHigh();
- return false;
-}
-//------------------------------------------------------------------------------
-/** Determine if card supports single block erase.
- *
- * \return The value one, true, is returned if single block erase is supported.
- * The value zero, false, is returned if single block erase is not supported.
- */
-bool Sd2Card::eraseSingleBlockEnable() {
- csd_t csd;
- return readCSD(&csd) ? csd.v1.erase_blk_en : false;
-}
-//------------------------------------------------------------------------------
-/**
- * Initialize an SD flash memory card.
- *
- * \param[in] sckRateID SPI clock rate selector. See setSckRate().
- * \param[in] chipSelectPin SD chip select pin number.
- *
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure. The reason for failure
- * can be determined by calling errorCode() and errorData().
- */
-bool Sd2Card::init(uint8_t sckRateID, uint8_t chipSelectPin) {
- errorCode_ = type_ = 0;
- chipSelectPin_ = chipSelectPin;
- // 16-bit init start time allows over a minute
- uint16_t t0 = (uint16_t)millis();
- uint32_t arg;
-
- // set pin modes
- pinMode(chipSelectPin_, OUTPUT);
- chipSelectHigh();
- pinMode(SPI_MISO_PIN, INPUT);
- pinMode(SPI_MOSI_PIN, OUTPUT);
- pinMode(SPI_SCK_PIN, OUTPUT);
-
- #if DISABLED(SOFTWARE_SPI)
- // SS must be in output mode even it is not chip select
- pinMode(SS_PIN, OUTPUT);
- // set SS high - may be chip select for another SPI device
- #if SET_SPI_SS_HIGH
- digitalWrite(SS_PIN, HIGH);
- #endif // SET_SPI_SS_HIGH
- // set SCK rate for initialization commands
- spiRate_ = SPI_SD_INIT_RATE;
- spiInit(spiRate_);
- #endif // SOFTWARE_SPI
-
- // must supply min of 74 clock cycles with CS high.
- for (uint8_t i = 0; i < 10; i++) spiSend(0XFF);
-
- // command to go idle in SPI mode
- while ((status_ = cardCommand(CMD0, 0)) != R1_IDLE_STATE) {
- if (((uint16_t)millis() - t0) > SD_INIT_TIMEOUT) {
- error(SD_CARD_ERROR_CMD0);
- goto fail;
- }
- }
- // check SD version
- if ((cardCommand(CMD8, 0x1AA) & R1_ILLEGAL_COMMAND)) {
- type(SD_CARD_TYPE_SD1);
- }
- else {
- // only need last byte of r7 response
- for (uint8_t i = 0; i < 4; i++) status_ = spiRec();
- if (status_ != 0XAA) {
- error(SD_CARD_ERROR_CMD8);
- goto fail;
- }
- type(SD_CARD_TYPE_SD2);
- }
- // initialize card and send host supports SDHC if SD2
- arg = type() == SD_CARD_TYPE_SD2 ? 0X40000000 : 0;
-
- while ((status_ = cardAcmd(ACMD41, arg)) != R1_READY_STATE) {
- // check for timeout
- if (((uint16_t)millis() - t0) > SD_INIT_TIMEOUT) {
- error(SD_CARD_ERROR_ACMD41);
- goto fail;
- }
- }
- // if SD2 read OCR register to check for SDHC card
- if (type() == SD_CARD_TYPE_SD2) {
- if (cardCommand(CMD58, 0)) {
- error(SD_CARD_ERROR_CMD58);
- goto fail;
- }
- if ((spiRec() & 0XC0) == 0XC0) type(SD_CARD_TYPE_SDHC);
- // discard rest of ocr - contains allowed voltage range
- for (uint8_t i = 0; i < 3; i++) spiRec();
- }
- chipSelectHigh();
-
- #if DISABLED(SOFTWARE_SPI)
- return setSckRate(sckRateID);
- #else // SOFTWARE_SPI
- UNUSED(sckRateID);
- return true;
- #endif // SOFTWARE_SPI
-
-fail:
- chipSelectHigh();
- return false;
-}
-//------------------------------------------------------------------------------
-/**
- * Read a 512 byte block from an SD card.
- *
- * \param[in] blockNumber Logical block to be read.
- * \param[out] dst Pointer to the location that will receive the data.
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure.
- */
-bool Sd2Card::readBlock(uint32_t blockNumber, uint8_t* dst) {
- // use address if not SDHC card
- if (type() != SD_CARD_TYPE_SDHC) blockNumber <<= 9;
-
- #if ENABLED(SD_CHECK_AND_RETRY)
- uint8_t retryCnt = 3;
- do {
- if (!cardCommand(CMD17, blockNumber)) {
- if (readData(dst, 512)) return true;
- }
- else
- error(SD_CARD_ERROR_CMD17);
-
- if (--retryCnt) break;
-
- chipSelectHigh();
- cardCommand(CMD12, 0); // Try sending a stop command, ignore the result.
- errorCode_ = 0;
- } while (true);
- #else
- if (cardCommand(CMD17, blockNumber))
- error(SD_CARD_ERROR_CMD17);
- else
- return readData(dst, 512);
- #endif
-
- chipSelectHigh();
- return false;
-}
-//------------------------------------------------------------------------------
-/** Read one data block in a multiple block read sequence
- *
- * \param[in] dst Pointer to the location for the data to be read.
- *
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure.
- */
-bool Sd2Card::readData(uint8_t* dst) {
- chipSelectLow();
- return readData(dst, 512);
-}
-
-#if ENABLED(SD_CHECK_AND_RETRY)
-static const uint16_t crctab[] PROGMEM = {
- 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
- 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF,
- 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,
- 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE,
- 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485,
- 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D,
- 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4,
- 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC,
- 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823,
- 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B,
- 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12,
- 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A,
- 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41,
- 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49,
- 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70,
- 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78,
- 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F,
- 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067,
- 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E,
- 0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256,
- 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D,
- 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
- 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C,
- 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634,
- 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB,
- 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3,
- 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A,
- 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92,
- 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9,
- 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,
- 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,
- 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0
-};
-static uint16_t CRC_CCITT(const uint8_t* data, size_t n) {
- uint16_t crc = 0;
- for (size_t i = 0; i < n; i++) {
- crc = pgm_read_word(&crctab[(crc >> 8 ^ data[i]) & 0XFF]) ^ (crc << 8);
- }
- return crc;
-}
-#endif
-
-//------------------------------------------------------------------------------
-bool Sd2Card::readData(uint8_t* dst, uint16_t count) {
- // wait for start block token
- uint16_t t0 = millis();
- while ((status_ = spiRec()) == 0XFF) {
- if (((uint16_t)millis() - t0) > SD_READ_TIMEOUT) {
- error(SD_CARD_ERROR_READ_TIMEOUT);
- goto fail;
- }
- }
- if (status_ != DATA_START_BLOCK) {
- error(SD_CARD_ERROR_READ);
- goto fail;
- }
- // transfer data
- spiRead(dst, count);
-
-#if ENABLED(SD_CHECK_AND_RETRY)
- {
- uint16_t calcCrc = CRC_CCITT(dst, count);
- uint16_t recvCrc = spiRec() << 8;
- recvCrc |= spiRec();
- if (calcCrc != recvCrc) {
- error(SD_CARD_ERROR_CRC);
- goto fail;
- }
- }
-#else
- // discard CRC
- spiRec();
- spiRec();
-#endif
- chipSelectHigh();
- // Send an additional dummy byte, required by Toshiba Flash Air SD Card
- spiSend(0XFF);
- return true;
-fail:
- chipSelectHigh();
- // Send an additional dummy byte, required by Toshiba Flash Air SD Card
- spiSend(0XFF);
- return false;
-}
-//------------------------------------------------------------------------------
-/** read CID or CSR register */
-bool Sd2Card::readRegister(uint8_t cmd, void* buf) {
- uint8_t* dst = reinterpret_cast(buf);
- if (cardCommand(cmd, 0)) {
- error(SD_CARD_ERROR_READ_REG);
- goto fail;
- }
- return readData(dst, 16);
-fail:
- chipSelectHigh();
- return false;
-}
-//------------------------------------------------------------------------------
-/** Start a read multiple blocks sequence.
- *
- * \param[in] blockNumber Address of first block in sequence.
- *
- * \note This function is used with readData() and readStop() for optimized
- * multiple block reads. SPI chipSelect must be low for the entire sequence.
- *
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure.
- */
-bool Sd2Card::readStart(uint32_t blockNumber) {
- if (type() != SD_CARD_TYPE_SDHC) blockNumber <<= 9;
- if (cardCommand(CMD18, blockNumber)) {
- error(SD_CARD_ERROR_CMD18);
- goto fail;
- }
- chipSelectHigh();
- return true;
-fail:
- chipSelectHigh();
- return false;
-}
-//------------------------------------------------------------------------------
-/** End a read multiple blocks sequence.
- *
-* \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure.
- */
-bool Sd2Card::readStop() {
- chipSelectLow();
- if (cardCommand(CMD12, 0)) {
- error(SD_CARD_ERROR_CMD12);
- goto fail;
- }
- chipSelectHigh();
- return true;
-fail:
- chipSelectHigh();
- return false;
-}
-//------------------------------------------------------------------------------
-/**
- * Set the SPI clock rate.
- *
- * \param[in] sckRateID A value in the range [0, 6].
- *
- * The SPI clock will be set to F_CPU/pow(2, 1 + sckRateID). The maximum
- * SPI rate is F_CPU/2 for \a sckRateID = 0 and the minimum rate is F_CPU/128
- * for \a scsRateID = 6.
- *
- * \return The value one, true, is returned for success and the value zero,
- * false, is returned for an invalid value of \a sckRateID.
- */
-bool Sd2Card::setSckRate(uint8_t sckRateID) {
- if (sckRateID > 6) {
- error(SD_CARD_ERROR_SCK_RATE);
- return false;
- }
- spiRate_ = sckRateID;
- return true;
-}
-//------------------------------------------------------------------------------
-// wait for card to go not busy
-bool Sd2Card::waitNotBusy(uint16_t timeoutMillis) {
- uint16_t t0 = millis();
- while (spiRec() != 0XFF) {
- if (((uint16_t)millis() - t0) >= timeoutMillis) goto fail;
- }
- return true;
-fail:
- return false;
-}
-//------------------------------------------------------------------------------
-/**
- * Writes a 512 byte block to an SD card.
- *
- * \param[in] blockNumber Logical block to be written.
- * \param[in] src Pointer to the location of the data to be written.
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure.
- */
-bool Sd2Card::writeBlock(uint32_t blockNumber, const uint8_t* src) {
- // use address if not SDHC card
- if (type() != SD_CARD_TYPE_SDHC) blockNumber <<= 9;
- if (cardCommand(CMD24, blockNumber)) {
- error(SD_CARD_ERROR_CMD24);
- goto fail;
- }
- if (!writeData(DATA_START_BLOCK, src)) goto fail;
-
- // wait for flash programming to complete
- if (!waitNotBusy(SD_WRITE_TIMEOUT)) {
- error(SD_CARD_ERROR_WRITE_TIMEOUT);
- goto fail;
- }
- // response is r2 so get and check two bytes for nonzero
- if (cardCommand(CMD13, 0) || spiRec()) {
- error(SD_CARD_ERROR_WRITE_PROGRAMMING);
- goto fail;
- }
- chipSelectHigh();
- return true;
-fail:
- chipSelectHigh();
- return false;
-}
-//------------------------------------------------------------------------------
-/** Write one data block in a multiple block write sequence
- * \param[in] src Pointer to the location of the data to be written.
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure.
- */
-bool Sd2Card::writeData(const uint8_t* src) {
- chipSelectLow();
- // wait for previous write to finish
- if (!waitNotBusy(SD_WRITE_TIMEOUT)) goto fail;
- if (!writeData(WRITE_MULTIPLE_TOKEN, src)) goto fail;
- chipSelectHigh();
- return true;
-fail:
- error(SD_CARD_ERROR_WRITE_MULTIPLE);
- chipSelectHigh();
- return false;
-}
-//------------------------------------------------------------------------------
-// send one block of data for write block or write multiple blocks
-bool Sd2Card::writeData(uint8_t token, const uint8_t* src) {
- spiSendBlock(token, src);
-
- spiSend(0xff); // dummy crc
- spiSend(0xff); // dummy crc
-
- status_ = spiRec();
- if ((status_ & DATA_RES_MASK) != DATA_RES_ACCEPTED) {
- error(SD_CARD_ERROR_WRITE);
- goto fail;
- }
- return true;
-fail:
- chipSelectHigh();
- return false;
-}
-//------------------------------------------------------------------------------
-/** Start a write multiple blocks sequence.
- *
- * \param[in] blockNumber Address of first block in sequence.
- * \param[in] eraseCount The number of blocks to be pre-erased.
- *
- * \note This function is used with writeData() and writeStop()
- * for optimized multiple block writes.
- *
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure.
- */
-bool Sd2Card::writeStart(uint32_t blockNumber, uint32_t eraseCount) {
- // send pre-erase count
- if (cardAcmd(ACMD23, eraseCount)) {
- error(SD_CARD_ERROR_ACMD23);
- goto fail;
- }
- // use address if not SDHC card
- if (type() != SD_CARD_TYPE_SDHC) blockNumber <<= 9;
- if (cardCommand(CMD25, blockNumber)) {
- error(SD_CARD_ERROR_CMD25);
- goto fail;
- }
- chipSelectHigh();
- return true;
-fail:
- chipSelectHigh();
- return false;
-}
-//------------------------------------------------------------------------------
-/** End a write multiple blocks sequence.
- *
-* \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure.
- */
-bool Sd2Card::writeStop() {
- chipSelectLow();
- if (!waitNotBusy(SD_WRITE_TIMEOUT)) goto fail;
- spiSend(STOP_TRAN_TOKEN);
- if (!waitNotBusy(SD_WRITE_TIMEOUT)) goto fail;
- chipSelectHigh();
- return true;
-fail:
- error(SD_CARD_ERROR_STOP_TRAN);
- chipSelectHigh();
- return false;
-}
-
-#endif
diff --git a/Marlin/Sd2Card.h b/Marlin/Sd2Card.h
deleted file mode 100644
index b1f442c..0000000
--- a/Marlin/Sd2Card.h
+++ /dev/null
@@ -1,251 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Arduino Sd2Card Library
- * Copyright (C) 2009 by William Greiman
- *
- * This file is part of the Arduino Sd2Card Library
- */
-
-#include "Marlin.h"
-#if ENABLED(SDSUPPORT)
-
-#ifndef Sd2Card_h
-#define Sd2Card_h
-/**
- * \file
- * \brief Sd2Card class for V2 SD/SDHC cards
- */
-#include "SdFatConfig.h"
-#include "SdInfo.h"
-//------------------------------------------------------------------------------
-// SPI speed is F_CPU/2^(1 + index), 0 <= index <= 6
-/** Set SCK to max rate of F_CPU/2. See Sd2Card::setSckRate(). */
-uint8_t const SPI_FULL_SPEED = 0;
-/** Set SCK rate to F_CPU/4. See Sd2Card::setSckRate(). */
-uint8_t const SPI_HALF_SPEED = 1;
-/** Set SCK rate to F_CPU/8. See Sd2Card::setSckRate(). */
-uint8_t const SPI_QUARTER_SPEED = 2;
-/** Set SCK rate to F_CPU/16. See Sd2Card::setSckRate(). */
-uint8_t const SPI_EIGHTH_SPEED = 3;
-/** Set SCK rate to F_CPU/32. See Sd2Card::setSckRate(). */
-uint8_t const SPI_SIXTEENTH_SPEED = 4;
-//------------------------------------------------------------------------------
-/** init timeout ms */
-uint16_t const SD_INIT_TIMEOUT = 2000;
-/** erase timeout ms */
-uint16_t const SD_ERASE_TIMEOUT = 10000;
-/** read timeout ms */
-uint16_t const SD_READ_TIMEOUT = 300;
-/** write time out ms */
-uint16_t const SD_WRITE_TIMEOUT = 600;
-//------------------------------------------------------------------------------
-// SD card errors
-/** timeout error for command CMD0 (initialize card in SPI mode) */
-uint8_t const SD_CARD_ERROR_CMD0 = 0X1;
-/** CMD8 was not accepted - not a valid SD card*/
-uint8_t const SD_CARD_ERROR_CMD8 = 0X2;
-/** card returned an error response for CMD12 (write stop) */
-uint8_t const SD_CARD_ERROR_CMD12 = 0X3;
-/** card returned an error response for CMD17 (read block) */
-uint8_t const SD_CARD_ERROR_CMD17 = 0X4;
-/** card returned an error response for CMD18 (read multiple block) */
-uint8_t const SD_CARD_ERROR_CMD18 = 0X5;
-/** card returned an error response for CMD24 (write block) */
-uint8_t const SD_CARD_ERROR_CMD24 = 0X6;
-/** WRITE_MULTIPLE_BLOCKS command failed */
-uint8_t const SD_CARD_ERROR_CMD25 = 0X7;
-/** card returned an error response for CMD58 (read OCR) */
-uint8_t const SD_CARD_ERROR_CMD58 = 0X8;
-/** SET_WR_BLK_ERASE_COUNT failed */
-uint8_t const SD_CARD_ERROR_ACMD23 = 0X9;
-/** ACMD41 initialization process timeout */
-uint8_t const SD_CARD_ERROR_ACMD41 = 0XA;
-/** card returned a bad CSR version field */
-uint8_t const SD_CARD_ERROR_BAD_CSD = 0XB;
-/** erase block group command failed */
-uint8_t const SD_CARD_ERROR_ERASE = 0XC;
-/** card not capable of single block erase */
-uint8_t const SD_CARD_ERROR_ERASE_SINGLE_BLOCK = 0XD;
-/** Erase sequence timed out */
-uint8_t const SD_CARD_ERROR_ERASE_TIMEOUT = 0XE;
-/** card returned an error token instead of read data */
-uint8_t const SD_CARD_ERROR_READ = 0XF;
-/** read CID or CSD failed */
-uint8_t const SD_CARD_ERROR_READ_REG = 0X10;
-/** timeout while waiting for start of read data */
-uint8_t const SD_CARD_ERROR_READ_TIMEOUT = 0X11;
-/** card did not accept STOP_TRAN_TOKEN */
-uint8_t const SD_CARD_ERROR_STOP_TRAN = 0X12;
-/** card returned an error token as a response to a write operation */
-uint8_t const SD_CARD_ERROR_WRITE = 0X13;
-/** attempt to write protected block zero */
-uint8_t const SD_CARD_ERROR_WRITE_BLOCK_ZERO = 0X14; // REMOVE - not used
-/** card did not go ready for a multiple block write */
-uint8_t const SD_CARD_ERROR_WRITE_MULTIPLE = 0X15;
-/** card returned an error to a CMD13 status check after a write */
-uint8_t const SD_CARD_ERROR_WRITE_PROGRAMMING = 0X16;
-/** timeout occurred during write programming */
-uint8_t const SD_CARD_ERROR_WRITE_TIMEOUT = 0X17;
-/** incorrect rate selected */
-uint8_t const SD_CARD_ERROR_SCK_RATE = 0X18;
-/** init() not called */
-uint8_t const SD_CARD_ERROR_INIT_NOT_CALLED = 0X19;
-/** crc check error */
-uint8_t const SD_CARD_ERROR_CRC = 0X20;
-//------------------------------------------------------------------------------
-// card types
-/** Standard capacity V1 SD card */
-uint8_t const SD_CARD_TYPE_SD1 = 1;
-/** Standard capacity V2 SD card */
-uint8_t const SD_CARD_TYPE_SD2 = 2;
-/** High Capacity SD card */
-uint8_t const SD_CARD_TYPE_SDHC = 3;
-/**
- * define SOFTWARE_SPI to use bit-bang SPI
- */
-//------------------------------------------------------------------------------
-#if MEGA_SOFT_SPI && (defined(__AVR_ATmega1280__)||defined(__AVR_ATmega2560__))
- #define SOFTWARE_SPI
-#elif USE_SOFTWARE_SPI
- #define SOFTWARE_SPI
-#endif // MEGA_SOFT_SPI
-//------------------------------------------------------------------------------
-// SPI pin definitions - do not edit here - change in SdFatConfig.h
-//
-#if DISABLED(SOFTWARE_SPI)
- // hardware pin defs
- /** The default chip select pin for the SD card is SS. */
- #define SD_CHIP_SELECT_PIN SS_PIN
- // The following three pins must not be redefined for hardware SPI.
- /** SPI Master Out Slave In pin */
- #define SPI_MOSI_PIN MOSI_PIN
- /** SPI Master In Slave Out pin */
- #define SPI_MISO_PIN MISO_PIN
- /** SPI Clock pin */
- #define SPI_SCK_PIN SCK_PIN
-
-#else // SOFTWARE_SPI
-
- /** SPI chip select pin */
- #define SD_CHIP_SELECT_PIN SOFT_SPI_CS_PIN
- /** SPI Master Out Slave In pin */
- #define SPI_MOSI_PIN SOFT_SPI_MOSI_PIN
- /** SPI Master In Slave Out pin */
- #define SPI_MISO_PIN SOFT_SPI_MISO_PIN
- /** SPI Clock pin */
- #define SPI_SCK_PIN SOFT_SPI_SCK_PIN
-#endif // SOFTWARE_SPI
-//------------------------------------------------------------------------------
-/**
- * \class Sd2Card
- * \brief Raw access to SD and SDHC flash memory cards.
- */
-class Sd2Card {
- public:
- /** Construct an instance of Sd2Card. */
- Sd2Card() : errorCode_(SD_CARD_ERROR_INIT_NOT_CALLED), type_(0) {}
- uint32_t cardSize();
- bool erase(uint32_t firstBlock, uint32_t lastBlock);
- bool eraseSingleBlockEnable();
- /**
- * Set SD error code.
- * \param[in] code value for error code.
- */
- void error(uint8_t code) {errorCode_ = code;}
- /**
- * \return error code for last error. See Sd2Card.h for a list of error codes.
- */
- int errorCode() const {return errorCode_;}
- /** \return error data for last error. */
- int errorData() const {return status_;}
- /**
- * Initialize an SD flash memory card with default clock rate and chip
- * select pin. See sd2Card::init(uint8_t sckRateID, uint8_t chipSelectPin).
- *
- * \return true for success or false for failure.
- */
- bool init(uint8_t sckRateID = SPI_FULL_SPEED,
- uint8_t chipSelectPin = SD_CHIP_SELECT_PIN);
- bool readBlock(uint32_t block, uint8_t* dst);
- /**
- * Read a card's CID register. The CID contains card identification
- * information such as Manufacturer ID, Product name, Product serial
- * number and Manufacturing date.
- *
- * \param[out] cid pointer to area for returned data.
- *
- * \return true for success or false for failure.
- */
- bool readCID(cid_t* cid) {
- return readRegister(CMD10, cid);
- }
- /**
- * Read a card's CSD register. The CSD contains Card-Specific Data that
- * provides information regarding access to the card's contents.
- *
- * \param[out] csd pointer to area for returned data.
- *
- * \return true for success or false for failure.
- */
- bool readCSD(csd_t* csd) {
- return readRegister(CMD9, csd);
- }
- bool readData(uint8_t* dst);
- bool readStart(uint32_t blockNumber);
- bool readStop();
- bool setSckRate(uint8_t sckRateID);
- /** Return the card type: SD V1, SD V2 or SDHC
- * \return 0 - SD V1, 1 - SD V2, or 3 - SDHC.
- */
- int type() const {return type_;}
- bool writeBlock(uint32_t blockNumber, const uint8_t* src);
- bool writeData(const uint8_t* src);
- bool writeStart(uint32_t blockNumber, uint32_t eraseCount);
- bool writeStop();
- private:
- //----------------------------------------------------------------------------
- uint8_t chipSelectPin_;
- uint8_t errorCode_;
- uint8_t spiRate_;
- uint8_t status_;
- uint8_t type_;
- // private functions
- uint8_t cardAcmd(uint8_t cmd, uint32_t arg) {
- cardCommand(CMD55, 0);
- return cardCommand(cmd, arg);
- }
- uint8_t cardCommand(uint8_t cmd, uint32_t arg);
-
- bool readData(uint8_t* dst, uint16_t count);
- bool readRegister(uint8_t cmd, void* buf);
- void chipSelectHigh();
- void chipSelectLow();
- void type(uint8_t value) {type_ = value;}
- bool waitNotBusy(uint16_t timeoutMillis);
- bool writeData(uint8_t token, const uint8_t* src);
-};
-#endif // Sd2Card_h
-
-
-#endif
diff --git a/Marlin/SdBaseFile.cpp b/Marlin/SdBaseFile.cpp
deleted file mode 100644
index 95765f9..0000000
--- a/Marlin/SdBaseFile.cpp
+++ /dev/null
@@ -1,1826 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Arduino SdFat Library
- * Copyright (C) 2009 by William Greiman
- *
- * This file is part of the Arduino Sd2Card Library
- */
-
-#include "Marlin.h"
-#if ENABLED(SDSUPPORT)
-
-#include "SdBaseFile.h"
-//------------------------------------------------------------------------------
-// pointer to cwd directory
-SdBaseFile* SdBaseFile::cwd_ = 0;
-// callback function for date/time
-void (*SdBaseFile::dateTime_)(uint16_t* date, uint16_t* time) = 0;
-//------------------------------------------------------------------------------
-// add a cluster to a file
-bool SdBaseFile::addCluster() {
- if (!vol_->allocContiguous(1, &curCluster_)) goto fail;
-
- // if first cluster of file link to directory entry
- if (firstCluster_ == 0) {
- firstCluster_ = curCluster_;
- flags_ |= F_FILE_DIR_DIRTY;
- }
- return true;
-
- fail:
- return false;
-}
-//------------------------------------------------------------------------------
-// Add a cluster to a directory file and zero the cluster.
-// return with first block of cluster in the cache
-bool SdBaseFile::addDirCluster() {
- uint32_t block;
- // max folder size
- if (fileSize_ / sizeof(dir_t) >= 0XFFFF) goto fail;
-
- if (!addCluster()) goto fail;
- if (!vol_->cacheFlush()) goto fail;
-
- block = vol_->clusterStartBlock(curCluster_);
-
- // set cache to first block of cluster
- vol_->cacheSetBlockNumber(block, true);
-
- // zero first block of cluster
- memset(vol_->cacheBuffer_.data, 0, 512);
-
- // zero rest of cluster
- for (uint8_t i = 1; i < vol_->blocksPerCluster_; i++) {
- if (!vol_->writeBlock(block + i, vol_->cacheBuffer_.data)) goto fail;
- }
- // Increase directory file size by cluster size
- fileSize_ += 512UL << vol_->clusterSizeShift_;
- return true;
-fail:
- return false;
-}
-//------------------------------------------------------------------------------
-// cache a file's directory entry
-// return pointer to cached entry or null for failure
-dir_t* SdBaseFile::cacheDirEntry(uint8_t action) {
- if (!vol_->cacheRawBlock(dirBlock_, action)) goto fail;
- return vol_->cache()->dir + dirIndex_;
-fail:
- return 0;
-}
-//------------------------------------------------------------------------------
-/** Close a file and force cached data and directory information
- * to be written to the storage device.
- *
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure.
- * Reasons for failure include no file is open or an I/O error.
- */
-bool SdBaseFile::close() {
- bool rtn = sync();
- type_ = FAT_FILE_TYPE_CLOSED;
- return rtn;
-}
-//------------------------------------------------------------------------------
-/** Check for contiguous file and return its raw block range.
- *
- * \param[out] bgnBlock the first block address for the file.
- * \param[out] endBlock the last block address for the file.
- *
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure.
- * Reasons for failure include file is not contiguous, file has zero length
- * or an I/O error occurred.
- */
-bool SdBaseFile::contiguousRange(uint32_t* bgnBlock, uint32_t* endBlock) {
- // error if no blocks
- if (firstCluster_ == 0) goto fail;
-
- for (uint32_t c = firstCluster_; ; c++) {
- uint32_t next;
- if (!vol_->fatGet(c, &next)) goto fail;
-
- // check for contiguous
- if (next != (c + 1)) {
- // error if not end of chain
- if (!vol_->isEOC(next)) goto fail;
- *bgnBlock = vol_->clusterStartBlock(firstCluster_);
- *endBlock = vol_->clusterStartBlock(c)
- + vol_->blocksPerCluster_ - 1;
- return true;
- }
- }
-
-fail:
- return false;
-}
-//------------------------------------------------------------------------------
-/** Create and open a new contiguous file of a specified size.
- *
- * \note This function only supports short DOS 8.3 names.
- * See open() for more information.
- *
- * \param[in] dirFile The directory where the file will be created.
- * \param[in] path A path with a valid DOS 8.3 file name.
- * \param[in] size The desired file size.
- *
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure.
- * Reasons for failure include \a path contains
- * an invalid DOS 8.3 file name, the FAT volume has not been initialized,
- * a file is already open, the file already exists, the root
- * directory is full or an I/O error.
- *
- */
-bool SdBaseFile::createContiguous(SdBaseFile* dirFile,
- const char* path, uint32_t size) {
- uint32_t count;
- // don't allow zero length file
- if (size == 0) goto fail;
- if (!open(dirFile, path, O_CREAT | O_EXCL | O_RDWR)) goto fail;
-
- // calculate number of clusters needed
- count = ((size - 1) >> (vol_->clusterSizeShift_ + 9)) + 1;
-
- // allocate clusters
- if (!vol_->allocContiguous(count, &firstCluster_)) {
- remove();
- goto fail;
- }
- fileSize_ = size;
-
- // insure sync() will update dir entry
- flags_ |= F_FILE_DIR_DIRTY;
-
- return sync();
-fail:
- return false;
-}
-//------------------------------------------------------------------------------
-/** Return a file's directory entry.
- *
- * \param[out] dir Location for return of the file's directory entry.
- *
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure.
- */
-bool SdBaseFile::dirEntry(dir_t* dir) {
- dir_t* p;
- // make sure fields on SD are correct
- if (!sync()) goto fail;
-
- // read entry
- p = cacheDirEntry(SdVolume::CACHE_FOR_READ);
- if (!p) goto fail;
-
- // copy to caller's struct
- memcpy(dir, p, sizeof(dir_t));
- return true;
-fail:
- return false;
-}
-//------------------------------------------------------------------------------
-/** Format the name field of \a dir into the 13 byte array
- * \a name in standard 8.3 short name format.
- *
- * \param[in] dir The directory structure containing the name.
- * \param[out] name A 13 byte char array for the formatted name.
- */
-void SdBaseFile::dirName(const dir_t& dir, char* name) {
- uint8_t j = 0;
- for (uint8_t i = 0; i < 11; i++) {
- if (dir.name[i] == ' ')continue;
- if (i == 8) name[j++] = '.';
- name[j++] = dir.name[i];
- }
- name[j] = 0;
-}
-//------------------------------------------------------------------------------
-/** Test for the existence of a file in a directory
- *
- * \param[in] name Name of the file to be tested for.
- *
- * The calling instance must be an open directory file.
- *
- * dirFile.exists("TOFIND.TXT") searches for "TOFIND.TXT" in the directory
- * dirFile.
- *
- * \return true if the file exists else false.
- */
-bool SdBaseFile::exists(const char* name) {
- SdBaseFile file;
- return file.open(this, name, O_READ);
-}
-//------------------------------------------------------------------------------
-/**
- * Get a string from a file.
- *
- * fgets() reads bytes from a file into the array pointed to by \a str, until
- * \a num - 1 bytes are read, or a delimiter is read and transferred to \a str,
- * or end-of-file is encountered. The string is then terminated
- * with a null byte.
- *
- * fgets() deletes CR, '\\r', from the string. This insures only a '\\n'
- * terminates the string for Windows text files which use CRLF for newline.
- *
- * \param[out] str Pointer to the array where the string is stored.
- * \param[in] num Maximum number of characters to be read
- * (including the final null byte). Usually the length
- * of the array \a str is used.
- * \param[in] delim Optional set of delimiters. The default is "\n".
- *
- * \return For success fgets() returns the length of the string in \a str.
- * If no data is read, fgets() returns zero for EOF or -1 if an error occurred.
- **/
-int16_t SdBaseFile::fgets(char* str, int16_t num, char* delim) {
- char ch;
- int16_t n = 0;
- int16_t r = -1;
- while ((n + 1) < num && (r = read(&ch, 1)) == 1) {
- // delete CR
- if (ch == '\r') continue;
- str[n++] = ch;
- if (!delim) {
- if (ch == '\n') break;
- }
- else {
- if (strchr(delim, ch)) break;
- }
- }
- if (r < 0) {
- // read error
- return -1;
- }
- str[n] = '\0';
- return n;
-}
-//------------------------------------------------------------------------------
-/** Get a file's name
- *
- * \param[out] name An array of 13 characters for the file's name.
- *
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure.
- */
-bool SdBaseFile::getFilename(char* name) {
- if (!isOpen()) return false;
-
- if (isRoot()) {
- name[0] = '/';
- name[1] = '\0';
- return true;
- }
- // cache entry
- dir_t* p = cacheDirEntry(SdVolume::CACHE_FOR_READ);
- if (!p) return false;
-
- // format name
- dirName(*p, name);
- return true;
-}
-//------------------------------------------------------------------------------
-void SdBaseFile::getpos(filepos_t* pos) {
- pos->position = curPosition_;
- pos->cluster = curCluster_;
-}
-
-//------------------------------------------------------------------------------
-/** List directory contents.
- *
- * \param[in] pr Print stream for list.
- *
- * \param[in] flags The inclusive OR of
- *
- * LS_DATE - %Print file modification date
- *
- * LS_SIZE - %Print file size.
- *
- * LS_R - Recursive list of subdirectories.
- *
- * \param[in] indent Amount of space before file name. Used for recursive
- * list to indicate subdirectory level.
- */
-void SdBaseFile::ls(uint8_t flags, uint8_t indent) {
- rewind();
- int8_t status;
- while ((status = lsPrintNext(flags, indent))) {
- if (status > 1 && (flags & LS_R)) {
- uint16_t index = curPosition() / 32 - 1;
- SdBaseFile s;
- if (s.open(this, index, O_READ)) s.ls(flags, indent + 2);
- seekSet(32 * (index + 1));
- }
- }
-}
-//------------------------------------------------------------------------------
-// saves 32 bytes on stack for ls recursion
-// return 0 - EOF, 1 - normal file, or 2 - directory
-int8_t SdBaseFile::lsPrintNext(uint8_t flags, uint8_t indent) {
- dir_t dir;
- uint8_t w = 0;
-
- while (1) {
- if (read(&dir, sizeof(dir)) != sizeof(dir)) return 0;
- if (dir.name[0] == DIR_NAME_FREE) return 0;
-
- // skip deleted entry and entries for . and ..
- if (dir.name[0] != DIR_NAME_DELETED && dir.name[0] != '.'
- && DIR_IS_FILE_OR_SUBDIR(&dir)) break;
- }
- // indent for dir level
- for (uint8_t i = 0; i < indent; i++) MYSERIAL.write(' ');
-
- // print name
- for (uint8_t i = 0; i < 11; i++) {
- if (dir.name[i] == ' ')continue;
- if (i == 8) {
- MYSERIAL.write('.');
- w++;
- }
- MYSERIAL.write(dir.name[i]);
- w++;
- }
- if (DIR_IS_SUBDIR(&dir)) {
- MYSERIAL.write('/');
- w++;
- }
- if (flags & (LS_DATE | LS_SIZE)) {
- while (w++ < 14) MYSERIAL.write(' ');
- }
- // print modify date/time if requested
- if (flags & LS_DATE) {
- MYSERIAL.write(' ');
- printFatDate(dir.lastWriteDate);
- MYSERIAL.write(' ');
- printFatTime(dir.lastWriteTime);
- }
- // print size if requested
- if (!DIR_IS_SUBDIR(&dir) && (flags & LS_SIZE)) {
- MYSERIAL.write(' ');
- MYSERIAL.print(dir.fileSize);
- }
- MYSERIAL.println();
- return DIR_IS_FILE(&dir) ? 1 : 2;
-}
-//------------------------------------------------------------------------------
-// format directory name field from a 8.3 name string
-bool SdBaseFile::make83Name(const char* str, uint8_t* name, const char** ptr) {
- uint8_t c;
- uint8_t n = 7; // max index for part before dot
- uint8_t i = 0;
- // blank fill name and extension
- while (i < 11) name[i++] = ' ';
- i = 0;
- while (*str != '\0' && *str != '/') {
- c = *str++;
- if (c == '.') {
- if (n == 10) goto fail; // only one dot allowed
- n = 10; // max index for full 8.3 name
- i = 8; // place for extension
- }
- else {
- // illegal FAT characters
- PGM_P p = PSTR("|<>^+=?/[];,*\"\\");
- uint8_t b;
- while ((b = pgm_read_byte(p++))) if (b == c) goto fail;
- // check size and only allow ASCII printable characters
- if (i > n || c < 0x21 || c == 0x7F) goto fail;
- // only upper case allowed in 8.3 names - convert lower to upper
- name[i++] = (c < 'a' || c > 'z') ? (c) : (c + ('A' - 'a'));
- }
- }
- *ptr = str;
- // must have a file name, extension is optional
- return name[0] != ' ';
-fail:
- return false;
-}
-//------------------------------------------------------------------------------
-/** Make a new directory.
- *
- * \param[in] parent An open SdFat instance for the directory that will contain
- * the new directory.
- *
- * \param[in] path A path with a valid 8.3 DOS name for the new directory.
- *
- * \param[in] pFlag Create missing parent directories if true.
- *
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure.
- * Reasons for failure include this file is already open, \a parent is not a
- * directory, \a path is invalid or already exists in \a parent.
- */
-bool SdBaseFile::mkdir(SdBaseFile* parent, const char* path, bool pFlag) {
- uint8_t dname[11];
- SdBaseFile dir1, dir2;
- SdBaseFile* sub = &dir1;
- SdBaseFile* start = parent;
-
- if (!parent || isOpen()) goto fail;
-
- if (*path == '/') {
- while (*path == '/') path++;
- if (!parent->isRoot()) {
- if (!dir2.openRoot(parent->vol_)) goto fail;
- parent = &dir2;
- }
- }
- while (1) {
- if (!make83Name(path, dname, &path)) goto fail;
- while (*path == '/') path++;
- if (!*path) break;
- if (!sub->open(parent, dname, O_READ)) {
- if (!pFlag || !sub->mkdir(parent, dname)) {
- goto fail;
- }
- }
- if (parent != start) parent->close();
- parent = sub;
- sub = parent != &dir1 ? &dir1 : &dir2;
- }
- return mkdir(parent, dname);
-fail:
- return false;
-}
-//------------------------------------------------------------------------------
-bool SdBaseFile::mkdir(SdBaseFile* parent, const uint8_t dname[11]) {
- uint32_t block;
- dir_t d;
- dir_t* p;
-
- if (!parent->isDir()) goto fail;
-
- // create a normal file
- if (!open(parent, dname, O_CREAT | O_EXCL | O_RDWR)) goto fail;
-
- // convert file to directory
- flags_ = O_READ;
- type_ = FAT_FILE_TYPE_SUBDIR;
-
- // allocate and zero first cluster
- if (!addDirCluster())goto fail;
-
- // force entry to SD
- if (!sync()) goto fail;
-
- // cache entry - should already be in cache due to sync() call
- p = cacheDirEntry(SdVolume::CACHE_FOR_WRITE);
- if (!p) goto fail;
-
- // change directory entry attribute
- p->attributes = DIR_ATT_DIRECTORY;
-
- // make entry for '.'
- memcpy(&d, p, sizeof(d));
- d.name[0] = '.';
- for (uint8_t i = 1; i < 11; i++) d.name[i] = ' ';
-
- // cache block for '.' and '..'
- block = vol_->clusterStartBlock(firstCluster_);
- if (!vol_->cacheRawBlock(block, SdVolume::CACHE_FOR_WRITE)) goto fail;
-
- // copy '.' to block
- memcpy(&vol_->cache()->dir[0], &d, sizeof(d));
-
- // make entry for '..'
- d.name[1] = '.';
- if (parent->isRoot()) {
- d.firstClusterLow = 0;
- d.firstClusterHigh = 0;
- }
- else {
- d.firstClusterLow = parent->firstCluster_ & 0XFFFF;
- d.firstClusterHigh = parent->firstCluster_ >> 16;
- }
- // copy '..' to block
- memcpy(&vol_->cache()->dir[1], &d, sizeof(d));
-
- // write first block
- return vol_->cacheFlush();
-fail:
- return false;
-}
-//------------------------------------------------------------------------------
-/** Open a file in the current working directory.
- *
- * \param[in] path A path with a valid 8.3 DOS name for a file to be opened.
- *
- * \param[in] oflag Values for \a oflag are constructed by a bitwise-inclusive
- * OR of open flags. see SdBaseFile::open(SdBaseFile*, const char*, uint8_t).
- *
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure.
- */
-bool SdBaseFile::open(const char* path, uint8_t oflag) {
- return open(cwd_, path, oflag);
-}
-//------------------------------------------------------------------------------
-/** Open a file or directory by name.
- *
- * \param[in] dirFile An open SdFat instance for the directory containing the
- * file to be opened.
- *
- * \param[in] path A path with a valid 8.3 DOS name for a file to be opened.
- *
- * \param[in] oflag Values for \a oflag are constructed by a bitwise-inclusive
- * OR of flags from the following list
- *
- * O_READ - Open for reading.
- *
- * O_RDONLY - Same as O_READ.
- *
- * O_WRITE - Open for writing.
- *
- * O_WRONLY - Same as O_WRITE.
- *
- * O_RDWR - Open for reading and writing.
- *
- * O_APPEND - If set, the file offset shall be set to the end of the
- * file prior to each write.
- *
- * O_AT_END - Set the initial position at the end of the file.
- *
- * O_CREAT - If the file exists, this flag has no effect except as noted
- * under O_EXCL below. Otherwise, the file shall be created
- *
- * O_EXCL - If O_CREAT and O_EXCL are set, open() shall fail if the file exists.
- *
- * O_SYNC - Call sync() after each write. This flag should not be used with
- * write(uint8_t), write_P(PGM_P), writeln_P(PGM_P), or the Arduino Print class.
- * These functions do character at a time writes so sync() will be called
- * after each byte.
- *
- * O_TRUNC - If the file exists and is a regular file, and the file is
- * successfully opened and is not read only, its length shall be truncated to 0.
- *
- * WARNING: A given file must not be opened by more than one SdBaseFile object
- * of file corruption may occur.
- *
- * \note Directory files must be opened read only. Write and truncation is
- * not allowed for directory files.
- *
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure.
- * Reasons for failure include this file is already open, \a dirFile is not
- * a directory, \a path is invalid, the file does not exist
- * or can't be opened in the access mode specified by oflag.
- */
-bool SdBaseFile::open(SdBaseFile* dirFile, const char* path, uint8_t oflag) {
- uint8_t dname[11];
- SdBaseFile dir1, dir2;
- SdBaseFile* parent = dirFile;
- SdBaseFile* sub = &dir1;
-
- if (!dirFile) goto fail;
-
- // error if already open
- if (isOpen()) goto fail;
-
- if (*path == '/') {
- while (*path == '/') path++;
- if (!dirFile->isRoot()) {
- if (!dir2.openRoot(dirFile->vol_)) goto fail;
- parent = &dir2;
- }
- }
- while (1) {
- if (!make83Name(path, dname, &path)) goto fail;
- while (*path == '/') path++;
- if (!*path) break;
- if (!sub->open(parent, dname, O_READ)) goto fail;
- if (parent != dirFile) parent->close();
- parent = sub;
- sub = parent != &dir1 ? &dir1 : &dir2;
- }
- return open(parent, dname, oflag);
-fail:
- return false;
-}
-//------------------------------------------------------------------------------
-// open with filename in dname
-bool SdBaseFile::open(SdBaseFile* dirFile,
- const uint8_t dname[11], uint8_t oflag) {
- bool emptyFound = false;
- bool fileFound = false;
- uint8_t index;
- dir_t* p;
-
- vol_ = dirFile->vol_;
-
- dirFile->rewind();
- // search for file
-
- while (dirFile->curPosition_ < dirFile->fileSize_) {
- index = 0XF & (dirFile->curPosition_ >> 5);
- p = dirFile->readDirCache();
- if (!p) goto fail;
-
- if (p->name[0] == DIR_NAME_FREE || p->name[0] == DIR_NAME_DELETED) {
- // remember first empty slot
- if (!emptyFound) {
- dirBlock_ = dirFile->vol_->cacheBlockNumber();
- dirIndex_ = index;
- emptyFound = true;
- }
- // done if no entries follow
- if (p->name[0] == DIR_NAME_FREE) break;
- }
- else if (!memcmp(dname, p->name, 11)) {
- fileFound = true;
- break;
- }
- }
- if (fileFound) {
- // don't open existing file if O_EXCL
- if (oflag & O_EXCL) goto fail;
- }
- else {
- // don't create unless O_CREAT and O_WRITE
- if (!(oflag & O_CREAT) || !(oflag & O_WRITE)) goto fail;
- if (emptyFound) {
- index = dirIndex_;
- p = cacheDirEntry(SdVolume::CACHE_FOR_WRITE);
- if (!p) goto fail;
- }
- else {
- if (dirFile->type_ == FAT_FILE_TYPE_ROOT_FIXED) goto fail;
-
- // add and zero cluster for dirFile - first cluster is in cache for write
- if (!dirFile->addDirCluster()) goto fail;
-
- // use first entry in cluster
- p = dirFile->vol_->cache()->dir;
- index = 0;
- }
- // initialize as empty file
- memset(p, 0, sizeof(dir_t));
- memcpy(p->name, dname, 11);
-
- // set timestamps
- if (dateTime_) {
- // call user date/time function
- dateTime_(&p->creationDate, &p->creationTime);
- }
- else {
- // use default date/time
- p->creationDate = FAT_DEFAULT_DATE;
- p->creationTime = FAT_DEFAULT_TIME;
- }
- p->lastAccessDate = p->creationDate;
- p->lastWriteDate = p->creationDate;
- p->lastWriteTime = p->creationTime;
-
- // write entry to SD
- if (!dirFile->vol_->cacheFlush()) goto fail;
- }
- // open entry in cache
- return openCachedEntry(index, oflag);
-fail:
- return false;
-}
-//------------------------------------------------------------------------------
-/** Open a file by index.
- *
- * \param[in] dirFile An open SdFat instance for the directory.
- *
- * \param[in] index The \a index of the directory entry for the file to be
- * opened. The value for \a index is (directory file position)/32.
- *
- * \param[in] oflag Values for \a oflag are constructed by a bitwise-inclusive
- * OR of flags O_READ, O_WRITE, O_TRUNC, and O_SYNC.
- *
- * See open() by path for definition of flags.
- * \return true for success or false for failure.
- */
-bool SdBaseFile::open(SdBaseFile* dirFile, uint16_t index, uint8_t oflag) {
- dir_t* p;
-
- vol_ = dirFile->vol_;
-
- // error if already open
- if (isOpen() || !dirFile) goto fail;
-
- // don't open existing file if O_EXCL - user call error
- if (oflag & O_EXCL) goto fail;
-
- // seek to location of entry
- if (!dirFile->seekSet(32 * index)) goto fail;
-
- // read entry into cache
- p = dirFile->readDirCache();
- if (!p) goto fail;
-
- // error if empty slot or '.' or '..'
- if (p->name[0] == DIR_NAME_FREE ||
- p->name[0] == DIR_NAME_DELETED || p->name[0] == '.') {
- goto fail;
- }
- // open cached entry
- return openCachedEntry(index & 0XF, oflag);
-fail:
- return false;
-}
-//------------------------------------------------------------------------------
-// open a cached directory entry. Assumes vol_ is initialized
-bool SdBaseFile::openCachedEntry(uint8_t dirIndex, uint8_t oflag) {
- // location of entry in cache
- dir_t* p = &vol_->cache()->dir[dirIndex];
-
- // write or truncate is an error for a directory or read-only file
- if (p->attributes & (DIR_ATT_READ_ONLY | DIR_ATT_DIRECTORY)) {
- if (oflag & (O_WRITE | O_TRUNC)) goto fail;
- }
- // remember location of directory entry on SD
- dirBlock_ = vol_->cacheBlockNumber();
- dirIndex_ = dirIndex;
-
- // copy first cluster number for directory fields
- firstCluster_ = (uint32_t)p->firstClusterHigh << 16;
- firstCluster_ |= p->firstClusterLow;
-
- // make sure it is a normal file or subdirectory
- if (DIR_IS_FILE(p)) {
- fileSize_ = p->fileSize;
- type_ = FAT_FILE_TYPE_NORMAL;
- }
- else if (DIR_IS_SUBDIR(p)) {
- if (!vol_->chainSize(firstCluster_, &fileSize_)) goto fail;
- type_ = FAT_FILE_TYPE_SUBDIR;
- }
- else {
- goto fail;
- }
- // save open flags for read/write
- flags_ = oflag & F_OFLAG;
-
- // set to start of file
- curCluster_ = 0;
- curPosition_ = 0;
- if ((oflag & O_TRUNC) && !truncate(0)) return false;
- return oflag & O_AT_END ? seekEnd(0) : true;
-fail:
- type_ = FAT_FILE_TYPE_CLOSED;
- return false;
-}
-//------------------------------------------------------------------------------
-/** Open the next file or subdirectory in a directory.
- *
- * \param[in] dirFile An open SdFat instance for the directory containing the
- * file to be opened.
- *
- * \param[in] oflag Values for \a oflag are constructed by a bitwise-inclusive
- * OR of flags O_READ, O_WRITE, O_TRUNC, and O_SYNC.
- *
- * See open() by path for definition of flags.
- * \return true for success or false for failure.
- */
-bool SdBaseFile::openNext(SdBaseFile* dirFile, uint8_t oflag) {
- dir_t* p;
- uint8_t index;
-
- if (!dirFile) goto fail;
-
- // error if already open
- if (isOpen()) goto fail;
-
- vol_ = dirFile->vol_;
-
- while (1) {
- index = 0XF & (dirFile->curPosition_ >> 5);
-
- // read entry into cache
- p = dirFile->readDirCache();
- if (!p) goto fail;
-
- // done if last entry
- if (p->name[0] == DIR_NAME_FREE) goto fail;
-
- // skip empty slot or '.' or '..'
- if (p->name[0] == DIR_NAME_DELETED || p->name[0] == '.') {
- continue;
- }
- // must be file or dir
- if (DIR_IS_FILE_OR_SUBDIR(p)) {
- return openCachedEntry(index, oflag);
- }
- }
-fail:
- return false;
-}
-//------------------------------------------------------------------------------
-/** Open a directory's parent directory.
- *
- * \param[in] dir Parent of this directory will be opened. Must not be root.
- *
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure.
- */
-bool SdBaseFile::openParent(SdBaseFile* dir) {
- dir_t entry;
- dir_t* p;
- SdBaseFile file;
- uint32_t c;
- uint32_t cluster;
- uint32_t lbn;
- // error if already open or dir is root or dir is not a directory
- if (isOpen() || !dir || dir->isRoot() || !dir->isDir()) goto fail;
- vol_ = dir->vol_;
- // position to '..'
- if (!dir->seekSet(32)) goto fail;
- // read '..' entry
- if (dir->read(&entry, sizeof(entry)) != 32) goto fail;
- // verify it is '..'
- if (entry.name[0] != '.' || entry.name[1] != '.') goto fail;
- // start cluster for '..'
- cluster = entry.firstClusterLow;
- cluster |= (uint32_t)entry.firstClusterHigh << 16;
- if (cluster == 0) return openRoot(vol_);
- // start block for '..'
- lbn = vol_->clusterStartBlock(cluster);
- // first block of parent dir
- if (!vol_->cacheRawBlock(lbn, SdVolume::CACHE_FOR_READ)) {
- goto fail;
- }
- p = &vol_->cacheBuffer_.dir[1];
- // verify name for '../..'
- if (p->name[0] != '.' || p->name[1] != '.') goto fail;
- // '..' is pointer to first cluster of parent. open '../..' to find parent
- if (p->firstClusterHigh == 0 && p->firstClusterLow == 0) {
- if (!file.openRoot(dir->volume())) goto fail;
- }
- else if (!file.openCachedEntry(1, O_READ)) {
- goto fail;
- }
- // search for parent in '../..'
- do {
- if (file.readDir(&entry, NULL) != 32) goto fail;
- c = entry.firstClusterLow;
- c |= (uint32_t)entry.firstClusterHigh << 16;
- } while (c != cluster);
- // open parent
- return open(&file, file.curPosition() / 32 - 1, O_READ);
-fail:
- return false;
-}
-//------------------------------------------------------------------------------
-/** Open a volume's root directory.
- *
- * \param[in] vol The FAT volume containing the root directory to be opened.
- *
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure.
- * Reasons for failure include the file is already open, the FAT volume has
- * not been initialized or it a FAT12 volume.
- */
-bool SdBaseFile::openRoot(SdVolume* vol) {
- // error if file is already open
- if (isOpen()) goto fail;
-
- if (vol->fatType() == 16 || (FAT12_SUPPORT && vol->fatType() == 12)) {
- type_ = FAT_FILE_TYPE_ROOT_FIXED;
- firstCluster_ = 0;
- fileSize_ = 32 * vol->rootDirEntryCount();
- }
- else if (vol->fatType() == 32) {
- type_ = FAT_FILE_TYPE_ROOT32;
- firstCluster_ = vol->rootDirStart();
- if (!vol->chainSize(firstCluster_, &fileSize_)) goto fail;
- }
- else {
- // volume is not initialized, invalid, or FAT12 without support
- return false;
- }
- vol_ = vol;
- // read only
- flags_ = O_READ;
-
- // set to start of file
- curCluster_ = 0;
- curPosition_ = 0;
-
- // root has no directory entry
- dirBlock_ = 0;
- dirIndex_ = 0;
- return true;
-fail:
- return false;
-}
-//------------------------------------------------------------------------------
-/** Return the next available byte without consuming it.
- *
- * \return The byte if no error and not at eof else -1;
- */
-int SdBaseFile::peek() {
- filepos_t pos;
- getpos(&pos);
- int c = read();
- if (c >= 0) setpos(&pos);
- return c;
-}
-
-//------------------------------------------------------------------------------
-/** %Print the name field of a directory entry in 8.3 format.
- * \param[in] pr Print stream for output.
- * \param[in] dir The directory structure containing the name.
- * \param[in] width Blank fill name if length is less than \a width.
- * \param[in] printSlash Print '/' after directory names if true.
- */
-void SdBaseFile::printDirName(const dir_t& dir,
- uint8_t width, bool printSlash) {
- uint8_t w = 0;
- for (uint8_t i = 0; i < 11; i++) {
- if (dir.name[i] == ' ')continue;
- if (i == 8) {
- MYSERIAL.write('.');
- w++;
- }
- MYSERIAL.write(dir.name[i]);
- w++;
- }
- if (DIR_IS_SUBDIR(&dir) && printSlash) {
- MYSERIAL.write('/');
- w++;
- }
- while (w < width) {
- MYSERIAL.write(' ');
- w++;
- }
-}
-//------------------------------------------------------------------------------
-// print uint8_t with width 2
-static void print2u(uint8_t v) {
- if (v < 10) MYSERIAL.write('0');
- MYSERIAL.print(v, DEC);
-}
-//------------------------------------------------------------------------------
-/** %Print a directory date field to Serial.
- *
- * Format is yyyy-mm-dd.
- *
- * \param[in] fatDate The date field from a directory entry.
- */
-
-//------------------------------------------------------------------------------
-/** %Print a directory date field.
- *
- * Format is yyyy-mm-dd.
- *
- * \param[in] pr Print stream for output.
- * \param[in] fatDate The date field from a directory entry.
- */
-void SdBaseFile::printFatDate(uint16_t fatDate) {
- MYSERIAL.print(FAT_YEAR(fatDate));
- MYSERIAL.write('-');
- print2u(FAT_MONTH(fatDate));
- MYSERIAL.write('-');
- print2u(FAT_DAY(fatDate));
-}
-
-//------------------------------------------------------------------------------
-/** %Print a directory time field.
- *
- * Format is hh:mm:ss.
- *
- * \param[in] pr Print stream for output.
- * \param[in] fatTime The time field from a directory entry.
- */
-void SdBaseFile::printFatTime(uint16_t fatTime) {
- print2u(FAT_HOUR(fatTime));
- MYSERIAL.write(':');
- print2u(FAT_MINUTE(fatTime));
- MYSERIAL.write(':');
- print2u(FAT_SECOND(fatTime));
-}
-//------------------------------------------------------------------------------
-/** Print a file's name to Serial
- *
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure.
- */
-bool SdBaseFile::printName() {
- char name[FILENAME_LENGTH];
- if (!getFilename(name)) return false;
- MYSERIAL.print(name);
- return true;
-}
-//------------------------------------------------------------------------------
-/** Read the next byte from a file.
- *
- * \return For success read returns the next byte in the file as an int.
- * If an error occurs or end of file is reached -1 is returned.
- */
-int16_t SdBaseFile::read() {
- uint8_t b;
- return read(&b, 1) == 1 ? b : -1;
-}
-//------------------------------------------------------------------------------
-/** Read data from a file starting at the current position.
- *
- * \param[out] buf Pointer to the location that will receive the data.
- *
- * \param[in] nbyte Maximum number of bytes to read.
- *
- * \return For success read() returns the number of bytes read.
- * A value less than \a nbyte, including zero, will be returned
- * if end of file is reached.
- * If an error occurs, read() returns -1. Possible errors include
- * read() called before a file has been opened, corrupt file system
- * or an I/O error occurred.
- */
-int16_t SdBaseFile::read(void* buf, uint16_t nbyte) {
- uint8_t* dst = reinterpret_cast(buf);
- uint16_t offset;
- uint16_t toRead;
- uint32_t block; // raw device block number
-
- // error if not open or write only
- if (!isOpen() || !(flags_ & O_READ)) goto fail;
-
- // max bytes left in file
- NOMORE(nbyte, fileSize_ - curPosition_);
-
- // amount left to read
- toRead = nbyte;
- while (toRead > 0) {
- offset = curPosition_ & 0X1FF; // offset in block
- if (type_ == FAT_FILE_TYPE_ROOT_FIXED) {
- block = vol_->rootDirStart() + (curPosition_ >> 9);
- }
- else {
- uint8_t blockOfCluster = vol_->blockOfCluster(curPosition_);
- if (offset == 0 && blockOfCluster == 0) {
- // start of new cluster
- if (curPosition_ == 0) {
- // use first cluster in file
- curCluster_ = firstCluster_;
- }
- else {
- // get next cluster from FAT
- if (!vol_->fatGet(curCluster_, &curCluster_)) goto fail;
- }
- }
- block = vol_->clusterStartBlock(curCluster_) + blockOfCluster;
- }
- uint16_t n = toRead;
-
- // amount to be read from current block
- NOMORE(n, 512 - offset);
-
- // no buffering needed if n == 512
- if (n == 512 && block != vol_->cacheBlockNumber()) {
- if (!vol_->readBlock(block, dst)) goto fail;
- }
- else {
- // read block to cache and copy data to caller
- if (!vol_->cacheRawBlock(block, SdVolume::CACHE_FOR_READ)) goto fail;
- uint8_t* src = vol_->cache()->data + offset;
- memcpy(dst, src, n);
- }
- dst += n;
- curPosition_ += n;
- toRead -= n;
- }
- return nbyte;
-fail:
- return -1;
-}
-
-/**
- * Read the next entry in a directory.
- *
- * \param[out] dir The dir_t struct that will receive the data.
- *
- * \return For success readDir() returns the number of bytes read.
- * A value of zero will be returned if end of file is reached.
- * If an error occurs, readDir() returns -1. Possible errors include
- * readDir() called before a directory has been opened, this is not
- * a directory file or an I/O error occurred.
- */
-int8_t SdBaseFile::readDir(dir_t* dir, char* longFilename) {
- int16_t n;
- // if not a directory file or miss-positioned return an error
- if (!isDir() || (0X1F & curPosition_)) return -1;
-
- //If we have a longFilename buffer, mark it as invalid. If we find a long filename it will be filled automaticly.
- if (longFilename != NULL) longFilename[0] = '\0';
-
- while (1) {
-
- n = read(dir, sizeof(dir_t));
- if (n != sizeof(dir_t)) return n == 0 ? 0 : -1;
-
- // last entry if DIR_NAME_FREE
- if (dir->name[0] == DIR_NAME_FREE) return 0;
-
- // skip empty entries and entry for . and ..
- if (dir->name[0] == DIR_NAME_DELETED || dir->name[0] == '.') continue;
-
- // Fill the long filename if we have a long filename entry.
- // Long filename entries are stored before the short filename.
- if (longFilename != NULL && DIR_IS_LONG_NAME(dir)) {
- vfat_t* VFAT = (vfat_t*)dir;
- // Sanity-check the VFAT entry. The first cluster is always set to zero. And the sequence number should be higher than 0
- if (VFAT->firstClusterLow == 0 && (VFAT->sequenceNumber & 0x1F) > 0 && (VFAT->sequenceNumber & 0x1F) <= MAX_VFAT_ENTRIES) {
- // TODO: Store the filename checksum to verify if a none-long filename aware system modified the file table.
- n = ((VFAT->sequenceNumber & 0x1F) - 1) * (FILENAME_LENGTH);
- for (uint8_t i = 0; i < FILENAME_LENGTH; i++)
- longFilename[n + i] = (i < 5) ? VFAT->name1[i] : (i < 11) ? VFAT->name2[i - 5] : VFAT->name3[i - 11];
- // If this VFAT entry is the last one, add a NUL terminator at the end of the string
- if (VFAT->sequenceNumber & 0x40) longFilename[n + FILENAME_LENGTH] = '\0';
- }
- }
- // Return if normal file or subdirectory
- if (DIR_IS_FILE_OR_SUBDIR(dir)) return n;
- }
-}
-
-//------------------------------------------------------------------------------
-// Read next directory entry into the cache
-// Assumes file is correctly positioned
-dir_t* SdBaseFile::readDirCache() {
- uint8_t i;
- // error if not directory
- if (!isDir()) goto fail;
-
- // index of entry in cache
- i = (curPosition_ >> 5) & 0XF;
-
- // use read to locate and cache block
- if (read() < 0) goto fail;
-
- // advance to next entry
- curPosition_ += 31;
-
- // return pointer to entry
- return vol_->cache()->dir + i;
-fail:
- return 0;
-}
-//------------------------------------------------------------------------------
-/** Remove a file.
- *
- * The directory entry and all data for the file are deleted.
- *
- * \note This function should not be used to delete the 8.3 version of a
- * file that has a long name. For example if a file has the long name
- * "New Text Document.txt" you should not delete the 8.3 name "NEWTEX~1.TXT".
- *
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure.
- * Reasons for failure include the file read-only, is a directory,
- * or an I/O error occurred.
- */
-bool SdBaseFile::remove() {
- dir_t* d;
- // free any clusters - will fail if read-only or directory
- if (!truncate(0)) goto fail;
-
- // cache directory entry
- d = cacheDirEntry(SdVolume::CACHE_FOR_WRITE);
- if (!d) goto fail;
-
- // mark entry deleted
- d->name[0] = DIR_NAME_DELETED;
-
- // set this file closed
- type_ = FAT_FILE_TYPE_CLOSED;
-
- // write entry to SD
- return vol_->cacheFlush();
- return true;
-fail:
- return false;
-}
-//------------------------------------------------------------------------------
-/** Remove a file.
- *
- * The directory entry and all data for the file are deleted.
- *
- * \param[in] dirFile The directory that contains the file.
- * \param[in] path Path for the file to be removed.
- *
- * \note This function should not be used to delete the 8.3 version of a
- * file that has a long name. For example if a file has the long name
- * "New Text Document.txt" you should not delete the 8.3 name "NEWTEX~1.TXT".
- *
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure.
- * Reasons for failure include the file is a directory, is read only,
- * \a dirFile is not a directory, \a path is not found
- * or an I/O error occurred.
- */
-bool SdBaseFile::remove(SdBaseFile* dirFile, const char* path) {
- SdBaseFile file;
- if (!file.open(dirFile, path, O_WRITE)) goto fail;
- return file.remove();
-fail:
- // can't set iostate - static function
- return false;
-}
-//------------------------------------------------------------------------------
-/** Rename a file or subdirectory.
- *
- * \param[in] dirFile Directory for the new path.
- * \param[in] newPath New path name for the file/directory.
- *
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure.
- * Reasons for failure include \a dirFile is not open or is not a directory
- * file, newPath is invalid or already exists, or an I/O error occurs.
- */
-bool SdBaseFile::rename(SdBaseFile* dirFile, const char* newPath) {
- dir_t entry;
- uint32_t dirCluster = 0;
- SdBaseFile file;
- dir_t* d;
-
- // must be an open file or subdirectory
- if (!(isFile() || isSubDir())) goto fail;
-
- // can't move file
- if (vol_ != dirFile->vol_) goto fail;
-
- // sync() and cache directory entry
- sync();
- d = cacheDirEntry(SdVolume::CACHE_FOR_WRITE);
- if (!d) goto fail;
-
- // save directory entry
- memcpy(&entry, d, sizeof(entry));
-
- // mark entry deleted
- d->name[0] = DIR_NAME_DELETED;
-
- // make directory entry for new path
- if (isFile()) {
- if (!file.open(dirFile, newPath, O_CREAT | O_EXCL | O_WRITE)) {
- goto restore;
- }
- }
- else {
- // don't create missing path prefix components
- if (!file.mkdir(dirFile, newPath, false)) {
- goto restore;
- }
- // save cluster containing new dot dot
- dirCluster = file.firstCluster_;
- }
- // change to new directory entry
- dirBlock_ = file.dirBlock_;
- dirIndex_ = file.dirIndex_;
-
- // mark closed to avoid possible destructor close call
- file.type_ = FAT_FILE_TYPE_CLOSED;
-
- // cache new directory entry
- d = cacheDirEntry(SdVolume::CACHE_FOR_WRITE);
- if (!d) goto fail;
-
- // copy all but name field to new directory entry
- memcpy(&d->attributes, &entry.attributes, sizeof(entry) - sizeof(d->name));
-
- // update dot dot if directory
- if (dirCluster) {
- // get new dot dot
- uint32_t block = vol_->clusterStartBlock(dirCluster);
- if (!vol_->cacheRawBlock(block, SdVolume::CACHE_FOR_READ)) goto fail;
- memcpy(&entry, &vol_->cache()->dir[1], sizeof(entry));
-
- // free unused cluster
- if (!vol_->freeChain(dirCluster)) goto fail;
-
- // store new dot dot
- block = vol_->clusterStartBlock(firstCluster_);
- if (!vol_->cacheRawBlock(block, SdVolume::CACHE_FOR_WRITE)) goto fail;
- memcpy(&vol_->cache()->dir[1], &entry, sizeof(entry));
- }
- return vol_->cacheFlush();
-
-restore:
- d = cacheDirEntry(SdVolume::CACHE_FOR_WRITE);
- if (!d) goto fail;
- // restore entry
- d->name[0] = entry.name[0];
- vol_->cacheFlush();
-
-fail:
- return false;
-}
-//------------------------------------------------------------------------------
-/** Remove a directory file.
- *
- * The directory file will be removed only if it is empty and is not the
- * root directory. rmdir() follows DOS and Windows and ignores the
- * read-only attribute for the directory.
- *
- * \note This function should not be used to delete the 8.3 version of a
- * directory that has a long name. For example if a directory has the
- * long name "New folder" you should not delete the 8.3 name "NEWFOL~1".
- *
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure.
- * Reasons for failure include the file is not a directory, is the root
- * directory, is not empty, or an I/O error occurred.
- */
-bool SdBaseFile::rmdir() {
- // must be open subdirectory
- if (!isSubDir()) goto fail;
-
- rewind();
-
- // make sure directory is empty
- while (curPosition_ < fileSize_) {
- dir_t* p = readDirCache();
- if (!p) goto fail;
- // done if past last used entry
- if (p->name[0] == DIR_NAME_FREE) break;
- // skip empty slot, '.' or '..'
- if (p->name[0] == DIR_NAME_DELETED || p->name[0] == '.') continue;
- // error not empty
- if (DIR_IS_FILE_OR_SUBDIR(p)) goto fail;
- }
- // convert empty directory to normal file for remove
- type_ = FAT_FILE_TYPE_NORMAL;
- flags_ |= O_WRITE;
- return remove();
-fail:
- return false;
-}
-//------------------------------------------------------------------------------
-/** Recursively delete a directory and all contained files.
- *
- * This is like the Unix/Linux 'rm -rf *' if called with the root directory
- * hence the name.
- *
- * Warning - This will remove all contents of the directory including
- * subdirectories. The directory will then be removed if it is not root.
- * The read-only attribute for files will be ignored.
- *
- * \note This function should not be used to delete the 8.3 version of
- * a directory that has a long name. See remove() and rmdir().
- *
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure.
- */
-bool SdBaseFile::rmRfStar() {
- uint16_t index;
- SdBaseFile f;
- rewind();
- while (curPosition_ < fileSize_) {
- // remember position
- index = curPosition_ / 32;
-
- dir_t* p = readDirCache();
- if (!p) goto fail;
-
- // done if past last entry
- if (p->name[0] == DIR_NAME_FREE) break;
-
- // skip empty slot or '.' or '..'
- if (p->name[0] == DIR_NAME_DELETED || p->name[0] == '.') continue;
-
- // skip if part of long file name or volume label in root
- if (!DIR_IS_FILE_OR_SUBDIR(p)) continue;
-
- if (!f.open(this, index, O_READ)) goto fail;
- if (f.isSubDir()) {
- // recursively delete
- if (!f.rmRfStar()) goto fail;
- }
- else {
- // ignore read-only
- f.flags_ |= O_WRITE;
- if (!f.remove()) goto fail;
- }
- // position to next entry if required
- if (curPosition_ != (32 * (index + 1))) {
- if (!seekSet(32 * (index + 1))) goto fail;
- }
- }
- // don't try to delete root
- if (!isRoot()) {
- if (!rmdir()) goto fail;
- }
- return true;
-fail:
- return false;
-}
-//------------------------------------------------------------------------------
-/** Create a file object and open it in the current working directory.
- *
- * \param[in] path A path with a valid 8.3 DOS name for a file to be opened.
- *
- * \param[in] oflag Values for \a oflag are constructed by a bitwise-inclusive
- * OR of open flags. see SdBaseFile::open(SdBaseFile*, const char*, uint8_t).
- */
-SdBaseFile::SdBaseFile(const char* path, uint8_t oflag) {
- type_ = FAT_FILE_TYPE_CLOSED;
- writeError = false;
- open(path, oflag);
-}
-//------------------------------------------------------------------------------
-/** Sets a file's position.
- *
- * \param[in] pos The new position in bytes from the beginning of the file.
- *
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure.
- */
-bool SdBaseFile::seekSet(uint32_t pos) {
- uint32_t nCur;
- uint32_t nNew;
- // error if file not open or seek past end of file
- if (!isOpen() || pos > fileSize_) goto fail;
-
- if (type_ == FAT_FILE_TYPE_ROOT_FIXED) {
- curPosition_ = pos;
- goto done;
- }
- if (pos == 0) {
- // set position to start of file
- curCluster_ = 0;
- curPosition_ = 0;
- goto done;
- }
- // calculate cluster index for cur and new position
- nCur = (curPosition_ - 1) >> (vol_->clusterSizeShift_ + 9);
- nNew = (pos - 1) >> (vol_->clusterSizeShift_ + 9);
-
- if (nNew < nCur || curPosition_ == 0) {
- // must follow chain from first cluster
- curCluster_ = firstCluster_;
- }
- else {
- // advance from curPosition
- nNew -= nCur;
- }
- while (nNew--) {
- if (!vol_->fatGet(curCluster_, &curCluster_)) goto fail;
- }
- curPosition_ = pos;
-
-done:
- return true;
-
-fail:
- return false;
-}
-//------------------------------------------------------------------------------
-void SdBaseFile::setpos(filepos_t* pos) {
- curPosition_ = pos->position;
- curCluster_ = pos->cluster;
-}
-//------------------------------------------------------------------------------
-/** The sync() call causes all modified data and directory fields
- * to be written to the storage device.
- *
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure.
- * Reasons for failure include a call to sync() before a file has been
- * opened or an I/O error.
- */
-bool SdBaseFile::sync() {
- // only allow open files and directories
- if (!isOpen()) goto fail;
-
- if (flags_ & F_FILE_DIR_DIRTY) {
- dir_t* d = cacheDirEntry(SdVolume::CACHE_FOR_WRITE);
- // check for deleted by another open file object
- if (!d || d->name[0] == DIR_NAME_DELETED) goto fail;
-
- // do not set filesize for dir files
- if (!isDir()) d->fileSize = fileSize_;
-
- // update first cluster fields
- d->firstClusterLow = firstCluster_ & 0XFFFF;
- d->firstClusterHigh = firstCluster_ >> 16;
-
- // set modify time if user supplied a callback date/time function
- if (dateTime_) {
- dateTime_(&d->lastWriteDate, &d->lastWriteTime);
- d->lastAccessDate = d->lastWriteDate;
- }
- // clear directory dirty
- flags_ &= ~F_FILE_DIR_DIRTY;
- }
- return vol_->cacheFlush();
-
-fail:
- writeError = true;
- return false;
-}
-//------------------------------------------------------------------------------
-/** Copy a file's timestamps
- *
- * \param[in] file File to copy timestamps from.
- *
- * \note
- * Modify and access timestamps may be overwritten if a date time callback
- * function has been set by dateTimeCallback().
- *
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure.
- */
-bool SdBaseFile::timestamp(SdBaseFile* file) {
- dir_t* d;
- dir_t dir;
-
- // get timestamps
- if (!file->dirEntry(&dir)) goto fail;
-
- // update directory fields
- if (!sync()) goto fail;
-
- d = cacheDirEntry(SdVolume::CACHE_FOR_WRITE);
- if (!d) goto fail;
-
- // copy timestamps
- d->lastAccessDate = dir.lastAccessDate;
- d->creationDate = dir.creationDate;
- d->creationTime = dir.creationTime;
- d->creationTimeTenths = dir.creationTimeTenths;
- d->lastWriteDate = dir.lastWriteDate;
- d->lastWriteTime = dir.lastWriteTime;
-
- // write back entry
- return vol_->cacheFlush();
-
-fail:
- return false;
-}
-//------------------------------------------------------------------------------
-/** Set a file's timestamps in its directory entry.
- *
- * \param[in] flags Values for \a flags are constructed by a bitwise-inclusive
- * OR of flags from the following list
- *
- * T_ACCESS - Set the file's last access date.
- *
- * T_CREATE - Set the file's creation date and time.
- *
- * T_WRITE - Set the file's last write/modification date and time.
- *
- * \param[in] year Valid range 1980 - 2107 inclusive.
- *
- * \param[in] month Valid range 1 - 12 inclusive.
- *
- * \param[in] day Valid range 1 - 31 inclusive.
- *
- * \param[in] hour Valid range 0 - 23 inclusive.
- *
- * \param[in] minute Valid range 0 - 59 inclusive.
- *
- * \param[in] second Valid range 0 - 59 inclusive
- *
- * \note It is possible to set an invalid date since there is no check for
- * the number of days in a month.
- *
- * \note
- * Modify and access timestamps may be overwritten if a date time callback
- * function has been set by dateTimeCallback().
- *
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure.
- */
-bool SdBaseFile::timestamp(uint8_t flags, uint16_t year, uint8_t month,
- uint8_t day, uint8_t hour, uint8_t minute, uint8_t second) {
- uint16_t dirDate;
- uint16_t dirTime;
- dir_t* d;
-
- if (!isOpen()
- || year < 1980
- || year > 2107
- || month < 1
- || month > 12
- || day < 1
- || day > 31
- || hour > 23
- || minute > 59
- || second > 59) {
- goto fail;
- }
- // update directory entry
- if (!sync()) goto fail;
-
- d = cacheDirEntry(SdVolume::CACHE_FOR_WRITE);
- if (!d) goto fail;
-
- dirDate = FAT_DATE(year, month, day);
- dirTime = FAT_TIME(hour, minute, second);
- if (flags & T_ACCESS) {
- d->lastAccessDate = dirDate;
- }
- if (flags & T_CREATE) {
- d->creationDate = dirDate;
- d->creationTime = dirTime;
- // seems to be units of 1/100 second not 1/10 as Microsoft states
- d->creationTimeTenths = second & 1 ? 100 : 0;
- }
- if (flags & T_WRITE) {
- d->lastWriteDate = dirDate;
- d->lastWriteTime = dirTime;
- }
- return vol_->cacheFlush();
-fail:
- return false;
-}
-//------------------------------------------------------------------------------
-/** Truncate a file to a specified length. The current file position
- * will be maintained if it is less than or equal to \a length otherwise
- * it will be set to end of file.
- *
- * \param[in] length The desired length for the file.
- *
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure.
- * Reasons for failure include file is read only, file is a directory,
- * \a length is greater than the current file size or an I/O error occurs.
- */
-bool SdBaseFile::truncate(uint32_t length) {
- uint32_t newPos;
- // error if not a normal file or read-only
- if (!isFile() || !(flags_ & O_WRITE)) goto fail;
-
- // error if length is greater than current size
- if (length > fileSize_) goto fail;
-
- // fileSize and length are zero - nothing to do
- if (fileSize_ == 0) return true;
-
- // remember position for seek after truncation
- newPos = curPosition_ > length ? length : curPosition_;
-
- // position to last cluster in truncated file
- if (!seekSet(length)) goto fail;
-
- if (length == 0) {
- // free all clusters
- if (!vol_->freeChain(firstCluster_)) goto fail;
- firstCluster_ = 0;
- }
- else {
- uint32_t toFree;
- if (!vol_->fatGet(curCluster_, &toFree)) goto fail;
-
- if (!vol_->isEOC(toFree)) {
- // free extra clusters
- if (!vol_->freeChain(toFree)) goto fail;
-
- // current cluster is end of chain
- if (!vol_->fatPutEOC(curCluster_)) goto fail;
- }
- }
- fileSize_ = length;
-
- // need to update directory entry
- flags_ |= F_FILE_DIR_DIRTY;
-
- if (!sync()) goto fail;
-
- // set file to correct position
- return seekSet(newPos);
-
-fail:
- return false;
-}
-//------------------------------------------------------------------------------
-/** Write data to an open file.
- *
- * \note Data is moved to the cache but may not be written to the
- * storage device until sync() is called.
- *
- * \param[in] buf Pointer to the location of the data to be written.
- *
- * \param[in] nbyte Number of bytes to write.
- *
- * \return For success write() returns the number of bytes written, always
- * \a nbyte. If an error occurs, write() returns -1. Possible errors
- * include write() is called before a file has been opened, write is called
- * for a read-only file, device is full, a corrupt file system or an I/O error.
- *
- */
-int16_t SdBaseFile::write(const void* buf, uint16_t nbyte) {
- // convert void* to uint8_t* - must be before goto statements
- const uint8_t* src = reinterpret_cast(buf);
-
- // number of bytes left to write - must be before goto statements
- uint16_t nToWrite = nbyte;
-
- // error if not a normal file or is read-only
- if (!isFile() || !(flags_ & O_WRITE)) goto fail;
-
- // seek to end of file if append flag
- if ((flags_ & O_APPEND) && curPosition_ != fileSize_) {
- if (!seekEnd()) goto fail;
- }
-
- while (nToWrite > 0) {
- uint8_t blockOfCluster = vol_->blockOfCluster(curPosition_);
- uint16_t blockOffset = curPosition_ & 0X1FF;
- if (blockOfCluster == 0 && blockOffset == 0) {
- // start of new cluster
- if (curCluster_ == 0) {
- if (firstCluster_ == 0) {
- // allocate first cluster of file
- if (!addCluster()) goto fail;
- }
- else {
- curCluster_ = firstCluster_;
- }
- }
- else {
- uint32_t next;
- if (!vol_->fatGet(curCluster_, &next)) goto fail;
- if (vol_->isEOC(next)) {
- // add cluster if at end of chain
- if (!addCluster()) goto fail;
- }
- else {
- curCluster_ = next;
- }
- }
- }
- // max space in block
- uint16_t n = 512 - blockOffset;
-
- // lesser of space and amount to write
- NOMORE(n, nToWrite);
-
- // block for data write
- uint32_t block = vol_->clusterStartBlock(curCluster_) + blockOfCluster;
- if (n == 512) {
- // full block - don't need to use cache
- if (vol_->cacheBlockNumber() == block) {
- // invalidate cache if block is in cache
- vol_->cacheSetBlockNumber(0XFFFFFFFF, false);
- }
- if (!vol_->writeBlock(block, src)) goto fail;
- }
- else {
- if (blockOffset == 0 && curPosition_ >= fileSize_) {
- // start of new block don't need to read into cache
- if (!vol_->cacheFlush()) goto fail;
- // set cache dirty and SD address of block
- vol_->cacheSetBlockNumber(block, true);
- }
- else {
- // rewrite part of block
- if (!vol_->cacheRawBlock(block, SdVolume::CACHE_FOR_WRITE)) goto fail;
- }
- uint8_t* dst = vol_->cache()->data + blockOffset;
- memcpy(dst, src, n);
- }
- curPosition_ += n;
- src += n;
- nToWrite -= n;
- }
- if (curPosition_ > fileSize_) {
- // update fileSize and insure sync will update dir entry
- fileSize_ = curPosition_;
- flags_ |= F_FILE_DIR_DIRTY;
- }
- else if (dateTime_ && nbyte) {
- // insure sync will update modified date and time
- flags_ |= F_FILE_DIR_DIRTY;
- }
-
- if (flags_ & O_SYNC) {
- if (!sync()) goto fail;
- }
- return nbyte;
-
-fail:
- // return for write error
- writeError = true;
- return -1;
-}
-//------------------------------------------------------------------------------
-// suppress cpplint warnings with NOLINT comment
-#if ALLOW_DEPRECATED_FUNCTIONS && !defined(DOXYGEN)
- void (*SdBaseFile::oldDateTime_)(uint16_t& date, uint16_t& time) = 0; // NOLINT
-#endif // ALLOW_DEPRECATED_FUNCTIONS
-
-
-#endif
diff --git a/Marlin/SdBaseFile.h b/Marlin/SdBaseFile.h
deleted file mode 100644
index 2b912d2..0000000
--- a/Marlin/SdBaseFile.h
+++ /dev/null
@@ -1,492 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Arduino SdFat Library
- * Copyright (C) 2009 by William Greiman
- *
- * This file is part of the Arduino Sd2Card Library
- */
-#include "Marlin.h"
-#if ENABLED(SDSUPPORT)
-
-#ifndef SdBaseFile_h
-#define SdBaseFile_h
-/**
- * \file
- * \brief SdBaseFile class
- */
-#include "Marlin.h"
-#include "SdFatConfig.h"
-#include "SdVolume.h"
-//------------------------------------------------------------------------------
-/**
- * \struct filepos_t
- * \brief internal type for istream
- * do not use in user apps
- */
-struct filepos_t {
- /** stream position */
- uint32_t position;
- /** cluster for position */
- uint32_t cluster;
- filepos_t() : position(0), cluster(0) {}
-};
-
-// use the gnu style oflag in open()
-/** open() oflag for reading */
-uint8_t const O_READ = 0X01;
-/** open() oflag - same as O_IN */
-uint8_t const O_RDONLY = O_READ;
-/** open() oflag for write */
-uint8_t const O_WRITE = 0X02;
-/** open() oflag - same as O_WRITE */
-uint8_t const O_WRONLY = O_WRITE;
-/** open() oflag for reading and writing */
-uint8_t const O_RDWR = (O_READ | O_WRITE);
-/** open() oflag mask for access modes */
-uint8_t const O_ACCMODE = (O_READ | O_WRITE);
-/** The file offset shall be set to the end of the file prior to each write. */
-uint8_t const O_APPEND = 0X04;
-/** synchronous writes - call sync() after each write */
-uint8_t const O_SYNC = 0X08;
-/** truncate the file to zero length */
-uint8_t const O_TRUNC = 0X10;
-/** set the initial position at the end of the file */
-uint8_t const O_AT_END = 0X20;
-/** create the file if nonexistent */
-uint8_t const O_CREAT = 0X40;
-/** If O_CREAT and O_EXCL are set, open() shall fail if the file exists */
-uint8_t const O_EXCL = 0X80;
-
-// SdBaseFile class static and const definitions
-// flags for ls()
-/** ls() flag to print modify date */
-uint8_t const LS_DATE = 1;
-/** ls() flag to print file size */
-uint8_t const LS_SIZE = 2;
-/** ls() flag for recursive list of subdirectories */
-uint8_t const LS_R = 4;
-
-
-// flags for timestamp
-/** set the file's last access date */
-uint8_t const T_ACCESS = 1;
-/** set the file's creation date and time */
-uint8_t const T_CREATE = 2;
-/** Set the file's write date and time */
-uint8_t const T_WRITE = 4;
-// values for type_
-/** This file has not been opened. */
-uint8_t const FAT_FILE_TYPE_CLOSED = 0;
-/** A normal file */
-uint8_t const FAT_FILE_TYPE_NORMAL = 1;
-/** A FAT12 or FAT16 root directory */
-uint8_t const FAT_FILE_TYPE_ROOT_FIXED = 2;
-/** A FAT32 root directory */
-uint8_t const FAT_FILE_TYPE_ROOT32 = 3;
-/** A subdirectory file*/
-uint8_t const FAT_FILE_TYPE_SUBDIR = 4;
-/** Test value for directory type */
-uint8_t const FAT_FILE_TYPE_MIN_DIR = FAT_FILE_TYPE_ROOT_FIXED;
-
-/** date field for FAT directory entry
- * \param[in] year [1980,2107]
- * \param[in] month [1,12]
- * \param[in] day [1,31]
- *
- * \return Packed date for dir_t entry.
- */
-static inline uint16_t FAT_DATE(uint16_t year, uint8_t month, uint8_t day) {
- return (year - 1980) << 9 | month << 5 | day;
-}
-/** year part of FAT directory date field
- * \param[in] fatDate Date in packed dir format.
- *
- * \return Extracted year [1980,2107]
- */
-static inline uint16_t FAT_YEAR(uint16_t fatDate) {
- return 1980 + (fatDate >> 9);
-}
-/** month part of FAT directory date field
- * \param[in] fatDate Date in packed dir format.
- *
- * \return Extracted month [1,12]
- */
-static inline uint8_t FAT_MONTH(uint16_t fatDate) {
- return (fatDate >> 5) & 0XF;
-}
-/** day part of FAT directory date field
- * \param[in] fatDate Date in packed dir format.
- *
- * \return Extracted day [1,31]
- */
-static inline uint8_t FAT_DAY(uint16_t fatDate) {
- return fatDate & 0X1F;
-}
-/** time field for FAT directory entry
- * \param[in] hour [0,23]
- * \param[in] minute [0,59]
- * \param[in] second [0,59]
- *
- * \return Packed time for dir_t entry.
- */
-static inline uint16_t FAT_TIME(uint8_t hour, uint8_t minute, uint8_t second) {
- return hour << 11 | minute << 5 | second >> 1;
-}
-/** hour part of FAT directory time field
- * \param[in] fatTime Time in packed dir format.
- *
- * \return Extracted hour [0,23]
- */
-static inline uint8_t FAT_HOUR(uint16_t fatTime) {
- return fatTime >> 11;
-}
-/** minute part of FAT directory time field
- * \param[in] fatTime Time in packed dir format.
- *
- * \return Extracted minute [0,59]
- */
-static inline uint8_t FAT_MINUTE(uint16_t fatTime) {
- return (fatTime >> 5) & 0X3F;
-}
-/** second part of FAT directory time field
- * Note second/2 is stored in packed time.
- *
- * \param[in] fatTime Time in packed dir format.
- *
- * \return Extracted second [0,58]
- */
-static inline uint8_t FAT_SECOND(uint16_t fatTime) {
- return 2 * (fatTime & 0X1F);
-}
-/** Default date for file timestamps is 1 Jan 2000 */
-uint16_t const FAT_DEFAULT_DATE = ((2000 - 1980) << 9) | (1 << 5) | 1;
-/** Default time for file timestamp is 1 am */
-uint16_t const FAT_DEFAULT_TIME = (1 << 11);
-//------------------------------------------------------------------------------
-/**
- * \class SdBaseFile
- * \brief Base class for SdFile with Print and C++ streams.
- */
-class SdBaseFile {
- public:
- /** Create an instance. */
- SdBaseFile() : writeError(false), type_(FAT_FILE_TYPE_CLOSED) {}
- SdBaseFile(const char* path, uint8_t oflag);
- ~SdBaseFile() {if (isOpen()) close();}
- /**
- * writeError is set to true if an error occurs during a write().
- * Set writeError to false before calling print() and/or write() and check
- * for true after calls to print() and/or write().
- */
- bool writeError;
- //----------------------------------------------------------------------------
- // helpers for stream classes
- /** get position for streams
- * \param[out] pos struct to receive position
- */
- void getpos(filepos_t* pos);
- /** set position for streams
- * \param[out] pos struct with value for new position
- */
- void setpos(filepos_t* pos);
- //----------------------------------------------------------------------------
- bool close();
- bool contiguousRange(uint32_t* bgnBlock, uint32_t* endBlock);
- bool createContiguous(SdBaseFile* dirFile,
- const char* path, uint32_t size);
- /** \return The current cluster number for a file or directory. */
- uint32_t curCluster() const {return curCluster_;}
- /** \return The current position for a file or directory. */
- uint32_t curPosition() const {return curPosition_;}
- /** \return Current working directory */
- static SdBaseFile* cwd() {return cwd_;}
- /** Set the date/time callback function
- *
- * \param[in] dateTime The user's call back function. The callback
- * function is of the form:
- *
- * \code
- * void dateTime(uint16_t* date, uint16_t* time) {
- * uint16_t year;
- * uint8_t month, day, hour, minute, second;
- *
- * // User gets date and time from GPS or real-time clock here
- *
- * // return date using FAT_DATE macro to format fields
- * *date = FAT_DATE(year, month, day);
- *
- * // return time using FAT_TIME macro to format fields
- * *time = FAT_TIME(hour, minute, second);
- * }
- * \endcode
- *
- * Sets the function that is called when a file is created or when
- * a file's directory entry is modified by sync(). All timestamps,
- * access, creation, and modify, are set when a file is created.
- * sync() maintains the last access date and last modify date/time.
- *
- * See the timestamp() function.
- */
- static void dateTimeCallback(
- void (*dateTime)(uint16_t* date, uint16_t* time)) {
- dateTime_ = dateTime;
- }
- /** Cancel the date/time callback function. */
- static void dateTimeCallbackCancel() {dateTime_ = 0;}
- bool dirEntry(dir_t* dir);
- static void dirName(const dir_t& dir, char* name);
- bool exists(const char* name);
- int16_t fgets(char* str, int16_t num, char* delim = 0);
- /** \return The total number of bytes in a file or directory. */
- uint32_t fileSize() const {return fileSize_;}
- /** \return The first cluster number for a file or directory. */
- uint32_t firstCluster() const {return firstCluster_;}
- bool getFilename(char* name);
- /** \return True if this is a directory else false. */
- bool isDir() const {return type_ >= FAT_FILE_TYPE_MIN_DIR;}
- /** \return True if this is a normal file else false. */
- bool isFile() const {return type_ == FAT_FILE_TYPE_NORMAL;}
- /** \return True if this is an open file/directory else false. */
- bool isOpen() const {return type_ != FAT_FILE_TYPE_CLOSED;}
- /** \return True if this is a subdirectory else false. */
- bool isSubDir() const {return type_ == FAT_FILE_TYPE_SUBDIR;}
- /** \return True if this is the root directory. */
- bool isRoot() const {
- return type_ == FAT_FILE_TYPE_ROOT_FIXED || type_ == FAT_FILE_TYPE_ROOT32;
- }
- void ls(uint8_t flags = 0, uint8_t indent = 0);
- bool mkdir(SdBaseFile* dir, const char* path, bool pFlag = true);
- // alias for backward compactability
- bool makeDir(SdBaseFile* dir, const char* path) {
- return mkdir(dir, path, false);
- }
- bool open(SdBaseFile* dirFile, uint16_t index, uint8_t oflag);
- bool open(SdBaseFile* dirFile, const char* path, uint8_t oflag);
- bool open(const char* path, uint8_t oflag = O_READ);
- bool openNext(SdBaseFile* dirFile, uint8_t oflag);
- bool openRoot(SdVolume* vol);
- int peek();
- static void printFatDate(uint16_t fatDate);
- static void printFatTime(uint16_t fatTime);
- bool printName();
- int16_t read();
- int16_t read(void* buf, uint16_t nbyte);
- int8_t readDir(dir_t* dir, char* longFilename);
- static bool remove(SdBaseFile* dirFile, const char* path);
- bool remove();
- /** Set the file's current position to zero. */
- void rewind() {seekSet(0);}
- bool rename(SdBaseFile* dirFile, const char* newPath);
- bool rmdir();
- // for backward compatibility
- bool rmDir() {return rmdir();}
- bool rmRfStar();
- /** Set the files position to current position + \a pos. See seekSet().
- * \param[in] offset The new position in bytes from the current position.
- * \return true for success or false for failure.
- */
- bool seekCur(int32_t offset) {
- return seekSet(curPosition_ + offset);
- }
- /** Set the files position to end-of-file + \a offset. See seekSet().
- * \param[in] offset The new position in bytes from end-of-file.
- * \return true for success or false for failure.
- */
- bool seekEnd(int32_t offset = 0) {return seekSet(fileSize_ + offset);}
- bool seekSet(uint32_t pos);
- bool sync();
- bool timestamp(SdBaseFile* file);
- bool timestamp(uint8_t flag, uint16_t year, uint8_t month, uint8_t day,
- uint8_t hour, uint8_t minute, uint8_t second);
- /** Type of file. You should use isFile() or isDir() instead of type()
- * if possible.
- *
- * \return The file or directory type.
- */
- uint8_t type() const {return type_;}
- bool truncate(uint32_t size);
- /** \return SdVolume that contains this file. */
- SdVolume* volume() const {return vol_;}
- int16_t write(const void* buf, uint16_t nbyte);
- //------------------------------------------------------------------------------
- private:
- // allow SdFat to set cwd_
- friend class SdFat;
- // global pointer to cwd dir
- static SdBaseFile* cwd_;
- // data time callback function
- static void (*dateTime_)(uint16_t* date, uint16_t* time);
- // bits defined in flags_
- // should be 0X0F
- static uint8_t const F_OFLAG = (O_ACCMODE | O_APPEND | O_SYNC);
- // sync of directory entry required
- static uint8_t const F_FILE_DIR_DIRTY = 0X80;
-
- // private data
- uint8_t flags_; // See above for definition of flags_ bits
- uint8_t fstate_; // error and eof indicator
- uint8_t type_; // type of file see above for values
- uint32_t curCluster_; // cluster for current file position
- uint32_t curPosition_; // current file position in bytes from beginning
- uint32_t dirBlock_; // block for this files directory entry
- uint8_t dirIndex_; // index of directory entry in dirBlock
- uint32_t fileSize_; // file size in bytes
- uint32_t firstCluster_; // first cluster of file
- SdVolume* vol_; // volume where file is located
-
- /** experimental don't use */
- bool openParent(SdBaseFile* dir);
- // private functions
- bool addCluster();
- bool addDirCluster();
- dir_t* cacheDirEntry(uint8_t action);
- int8_t lsPrintNext(uint8_t flags, uint8_t indent);
- static bool make83Name(const char* str, uint8_t* name, const char** ptr);
- bool mkdir(SdBaseFile* parent, const uint8_t dname[11]);
- bool open(SdBaseFile* dirFile, const uint8_t dname[11], uint8_t oflag);
- bool openCachedEntry(uint8_t cacheIndex, uint8_t oflags);
- dir_t* readDirCache();
- //------------------------------------------------------------------------------
- // to be deleted
- static void printDirName(const dir_t& dir,
- uint8_t width, bool printSlash);
- //------------------------------------------------------------------------------
- // Deprecated functions - suppress cpplint warnings with NOLINT comment
-#if ALLOW_DEPRECATED_FUNCTIONS && !defined(DOXYGEN)
- public:
- /** \deprecated Use:
- * bool contiguousRange(uint32_t* bgnBlock, uint32_t* endBlock);
- * \param[out] bgnBlock the first block address for the file.
- * \param[out] endBlock the last block address for the file.
- * \return true for success or false for failure.
- */
- bool contiguousRange(uint32_t& bgnBlock, uint32_t& endBlock) { // NOLINT
- return contiguousRange(&bgnBlock, &endBlock);
- }
- /** \deprecated Use:
- * bool createContiguous(SdBaseFile* dirFile,
- * const char* path, uint32_t size)
- * \param[in] dirFile The directory where the file will be created.
- * \param[in] path A path with a valid DOS 8.3 file name.
- * \param[in] size The desired file size.
- * \return true for success or false for failure.
- */
- bool createContiguous(SdBaseFile& dirFile, // NOLINT
- const char* path, uint32_t size) {
- return createContiguous(&dirFile, path, size);
- }
- /** \deprecated Use:
- * static void dateTimeCallback(
- * void (*dateTime)(uint16_t* date, uint16_t* time));
- * \param[in] dateTime The user's call back function.
- */
- static void dateTimeCallback(
- void (*dateTime)(uint16_t& date, uint16_t& time)) { // NOLINT
- oldDateTime_ = dateTime;
- dateTime_ = dateTime ? oldToNew : 0;
- }
- /** \deprecated Use: bool dirEntry(dir_t* dir);
- * \param[out] dir Location for return of the file's directory entry.
- * \return true for success or false for failure.
- */
- bool dirEntry(dir_t& dir) {return dirEntry(&dir);} // NOLINT
- /** \deprecated Use:
- * bool mkdir(SdBaseFile* dir, const char* path);
- * \param[in] dir An open SdFat instance for the directory that will contain
- * the new directory.
- * \param[in] path A path with a valid 8.3 DOS name for the new directory.
- * \return true for success or false for failure.
- */
- bool mkdir(SdBaseFile& dir, const char* path) { // NOLINT
- return mkdir(&dir, path);
- }
- /** \deprecated Use:
- * bool open(SdBaseFile* dirFile, const char* path, uint8_t oflag);
- * \param[in] dirFile An open SdFat instance for the directory containing the
- * file to be opened.
- * \param[in] path A path with a valid 8.3 DOS name for the file.
- * \param[in] oflag Values for \a oflag are constructed by a bitwise-inclusive
- * OR of flags O_READ, O_WRITE, O_TRUNC, and O_SYNC.
- * \return true for success or false for failure.
- */
- bool open(SdBaseFile& dirFile, // NOLINT
- const char* path, uint8_t oflag) {
- return open(&dirFile, path, oflag);
- }
- /** \deprecated Do not use in new apps
- * \param[in] dirFile An open SdFat instance for the directory containing the
- * file to be opened.
- * \param[in] path A path with a valid 8.3 DOS name for a file to be opened.
- * \return true for success or false for failure.
- */
- bool open(SdBaseFile& dirFile, const char* path) { // NOLINT
- return open(dirFile, path, O_RDWR);
- }
- /** \deprecated Use:
- * bool open(SdBaseFile* dirFile, uint16_t index, uint8_t oflag);
- * \param[in] dirFile An open SdFat instance for the directory.
- * \param[in] index The \a index of the directory entry for the file to be
- * opened. The value for \a index is (directory file position)/32.
- * \param[in] oflag Values for \a oflag are constructed by a bitwise-inclusive
- * OR of flags O_READ, O_WRITE, O_TRUNC, and O_SYNC.
- * \return true for success or false for failure.
- */
- bool open(SdBaseFile& dirFile, uint16_t index, uint8_t oflag) { // NOLINT
- return open(&dirFile, index, oflag);
- }
- /** \deprecated Use: bool openRoot(SdVolume* vol);
- * \param[in] vol The FAT volume containing the root directory to be opened.
- * \return true for success or false for failure.
- */
- bool openRoot(SdVolume& vol) {return openRoot(&vol);} // NOLINT
- /** \deprecated Use: int8_t readDir(dir_t* dir);
- * \param[out] dir The dir_t struct that will receive the data.
- * \return bytes read for success zero for eof or -1 for failure.
- */
- int8_t readDir(dir_t& dir, char* longFilename) {return readDir(&dir, longFilename);} // NOLINT
- /** \deprecated Use:
- * static uint8_t remove(SdBaseFile* dirFile, const char* path);
- * \param[in] dirFile The directory that contains the file.
- * \param[in] path The name of the file to be removed.
- * \return true for success or false for failure.
- */
- static bool remove(SdBaseFile& dirFile, const char* path) { // NOLINT
- return remove(&dirFile, path);
- }
- //------------------------------------------------------------------------------
- // rest are private
- private:
- static void (*oldDateTime_)(uint16_t& date, uint16_t& time); // NOLINT
- static void oldToNew(uint16_t* date, uint16_t* time) {
- uint16_t d;
- uint16_t t;
- oldDateTime_(d, t);
- *date = d;
- *time = t;
- }
-#endif // ALLOW_DEPRECATED_FUNCTIONS
-};
-
-#endif // SdBaseFile_h
-#endif
diff --git a/Marlin/SdFatConfig.h b/Marlin/SdFatConfig.h
deleted file mode 100644
index d3406a0..0000000
--- a/Marlin/SdFatConfig.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Arduino SdFat Library
- * Copyright (C) 2009 by William Greiman
- *
- * This file is part of the Arduino Sd2Card Library
- */
-/**
- * \file
- * \brief configuration definitions
- */
-#include "Marlin.h"
-#if ENABLED(SDSUPPORT)
-
-#ifndef SdFatConfig_h
- #define SdFatConfig_h
- #include
- //------------------------------------------------------------------------------
- /**
- * To use multiple SD cards set USE_MULTIPLE_CARDS nonzero.
- *
- * Using multiple cards costs 400 - 500 bytes of flash.
- *
- * Each card requires about 550 bytes of SRAM so use of a Mega is recommended.
- */
- #define USE_MULTIPLE_CARDS 0
- //------------------------------------------------------------------------------
- /**
- * Call flush for endl if ENDL_CALLS_FLUSH is nonzero
- *
- * The standard for iostreams is to call flush. This is very costly for
- * SdFat. Each call to flush causes 2048 bytes of I/O to the SD.
- *
- * SdFat has a single 512 byte buffer for SD I/O so it must write the current
- * data block to the SD, read the directory block from the SD, update the
- * directory entry, write the directory block to the SD and read the data
- * block back into the buffer.
- *
- * The SD flash memory controller is not designed for this many rewrites
- * so performance may be reduced by more than a factor of 100.
- *
- * If ENDL_CALLS_FLUSH is zero, you must call flush and/or close to force
- * all data to be written to the SD.
- */
- #define ENDL_CALLS_FLUSH 0
- //------------------------------------------------------------------------------
- /**
- * Allow use of deprecated functions if ALLOW_DEPRECATED_FUNCTIONS is nonzero
- */
- #define ALLOW_DEPRECATED_FUNCTIONS 1
- //------------------------------------------------------------------------------
- /**
- * Allow FAT12 volumes if FAT12_SUPPORT is nonzero.
- * FAT12 has not been well tested.
- */
- #define FAT12_SUPPORT 0
- //------------------------------------------------------------------------------
- /**
- * SPI init rate for SD initialization commands. Must be 5 (F_CPU/64)
- * or 6 (F_CPU/128).
- */
- #define SPI_SD_INIT_RATE 5
- //------------------------------------------------------------------------------
- /**
- * Set the SS pin high for hardware SPI. If SS is chip select for another SPI
- * device this will disable that device during the SD init phase.
- */
- #define SET_SPI_SS_HIGH 1
- //------------------------------------------------------------------------------
- /**
- * Define MEGA_SOFT_SPI nonzero to use software SPI on Mega Arduinos.
- * Pins used are SS 10, MOSI 11, MISO 12, and SCK 13.
- *
- * MEGA_SOFT_SPI allows an unmodified Adafruit GPS Shield to be used
- * on Mega Arduinos. Software SPI works well with GPS Shield V1.1
- * but many SD cards will fail with GPS Shield V1.0.
- */
- #define MEGA_SOFT_SPI 0
- //------------------------------------------------------------------------------
- /**
- * Set USE_SOFTWARE_SPI nonzero to always use software SPI.
- */
- #define USE_SOFTWARE_SPI 0
- // define software SPI pins so Mega can use unmodified 168/328 shields
- /** Software SPI chip select pin for the SD */
- #define SOFT_SPI_CS_PIN 10
- /** Software SPI Master Out Slave In pin */
- #define SOFT_SPI_MOSI_PIN 11
- /** Software SPI Master In Slave Out pin */
- #define SOFT_SPI_MISO_PIN 12
- /** Software SPI Clock pin */
- #define SOFT_SPI_SCK_PIN 13
- //------------------------------------------------------------------------------
- /**
- * The __cxa_pure_virtual function is an error handler that is invoked when
- * a pure virtual function is called.
- */
- #define USE_CXA_PURE_VIRTUAL 1
-
- /** Number of UTF-16 characters per entry */
- #define FILENAME_LENGTH 13
-
- /**
- * Defines for long (vfat) filenames
- */
- /** Number of VFAT entries used. Every entry has 13 UTF-16 characters */
- #define MAX_VFAT_ENTRIES (2)
- /** Total size of the buffer used to store the long filenames */
- #define LONG_FILENAME_LENGTH (FILENAME_LENGTH*MAX_VFAT_ENTRIES+1)
-#endif // SdFatConfig_h
-
-
-#endif
diff --git a/Marlin/SdFatStructs.h b/Marlin/SdFatStructs.h
deleted file mode 100644
index 3e989de..0000000
--- a/Marlin/SdFatStructs.h
+++ /dev/null
@@ -1,655 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Arduino SdFat Library
- * Copyright (C) 2009 by William Greiman
- *
- * This file is part of the Arduino Sd2Card Library
- */
-#include "Marlin.h"
-#if ENABLED(SDSUPPORT)
-
-#ifndef SdFatStructs_h
-#define SdFatStructs_h
-
-#define PACKED __attribute__((__packed__))
-/**
- * \file
- * \brief FAT file structures
- */
-/**
- * mostly from Microsoft document fatgen103.doc
- * http://www.microsoft.com/whdc/system/platform/firmware/fatgen.mspx
- */
-//------------------------------------------------------------------------------
-/** Value for byte 510 of boot block or MBR */
-uint8_t const BOOTSIG0 = 0X55;
-/** Value for byte 511 of boot block or MBR */
-uint8_t const BOOTSIG1 = 0XAA;
-/** Value for bootSignature field int FAT/FAT32 boot sector */
-uint8_t const EXTENDED_BOOT_SIG = 0X29;
-//------------------------------------------------------------------------------
-/**
- * \struct partitionTable
- * \brief MBR partition table entry
- *
- * A partition table entry for a MBR formatted storage device.
- * The MBR partition table has four entries.
- */
-struct partitionTable {
- /**
- * Boot Indicator . Indicates whether the volume is the active
- * partition. Legal values include: 0X00. Do not use for booting.
- * 0X80 Active partition.
- */
- uint8_t boot;
- /**
- * Head part of Cylinder-head-sector address of the first block in
- * the partition. Legal values are 0-255. Only used in old PC BIOS.
- */
- uint8_t beginHead;
- /**
- * Sector part of Cylinder-head-sector address of the first block in
- * the partition. Legal values are 1-63. Only used in old PC BIOS.
- */
- unsigned beginSector : 6;
- /** High bits cylinder for first block in partition. */
- unsigned beginCylinderHigh : 2;
- /**
- * Combine beginCylinderLow with beginCylinderHigh. Legal values
- * are 0-1023. Only used in old PC BIOS.
- */
- uint8_t beginCylinderLow;
- /**
- * Partition type. See defines that begin with PART_TYPE_ for
- * some Microsoft partition types.
- */
- uint8_t type;
- /**
- * head part of cylinder-head-sector address of the last sector in the
- * partition. Legal values are 0-255. Only used in old PC BIOS.
- */
- uint8_t endHead;
- /**
- * Sector part of cylinder-head-sector address of the last sector in
- * the partition. Legal values are 1-63. Only used in old PC BIOS.
- */
- unsigned endSector : 6;
- /** High bits of end cylinder */
- unsigned endCylinderHigh : 2;
- /**
- * Combine endCylinderLow with endCylinderHigh. Legal values
- * are 0-1023. Only used in old PC BIOS.
- */
- uint8_t endCylinderLow;
- /** Logical block address of the first block in the partition. */
- uint32_t firstSector;
- /** Length of the partition, in blocks. */
- uint32_t totalSectors;
-} PACKED;
-/** Type name for partitionTable */
-typedef struct partitionTable part_t;
-//------------------------------------------------------------------------------
-/**
- * \struct masterBootRecord
- *
- * \brief Master Boot Record
- *
- * The first block of a storage device that is formatted with a MBR.
- */
-struct masterBootRecord {
- /** Code Area for master boot program. */
- uint8_t codeArea[440];
- /** Optional Windows NT disk signature. May contain boot code. */
- uint32_t diskSignature;
- /** Usually zero but may be more boot code. */
- uint16_t usuallyZero;
- /** Partition tables. */
- part_t part[4];
- /** First MBR signature byte. Must be 0X55 */
- uint8_t mbrSig0;
- /** Second MBR signature byte. Must be 0XAA */
- uint8_t mbrSig1;
-} PACKED;
-/** Type name for masterBootRecord */
-typedef struct masterBootRecord mbr_t;
-//------------------------------------------------------------------------------
-/**
- * \struct fat_boot
- *
- * \brief Boot sector for a FAT12/FAT16 volume.
- *
- */
-struct fat_boot {
- /**
- * The first three bytes of the boot sector must be valid,
- * executable x 86-based CPU instructions. This includes a
- * jump instruction that skips the next nonexecutable bytes.
- */
- uint8_t jump[3];
- /**
- * This is typically a string of characters that identifies
- * the operating system that formatted the volume.
- */
- char oemId[8];
- /**
- * The size of a hardware sector. Valid decimal values for this
- * field are 512, 1024, 2048, and 4096. For most disks used in
- * the United States, the value of this field is 512.
- */
- uint16_t bytesPerSector;
- /**
- * Number of sectors per allocation unit. This value must be a
- * power of 2 that is greater than 0. The legal values are
- * 1, 2, 4, 8, 16, 32, 64, and 128. 128 should be avoided.
- */
- uint8_t sectorsPerCluster;
- /**
- * The number of sectors preceding the start of the first FAT,
- * including the boot sector. The value of this field is always 1.
- */
- uint16_t reservedSectorCount;
- /**
- * The number of copies of the FAT on the volume.
- * The value of this field is always 2.
- */
- uint8_t fatCount;
- /**
- * For FAT12 and FAT16 volumes, this field contains the count of
- * 32-byte directory entries in the root directory. For FAT32 volumes,
- * this field must be set to 0. For FAT12 and FAT16 volumes, this
- * value should always specify a count that when multiplied by 32
- * results in a multiple of bytesPerSector. FAT16 volumes should
- * use the value 512.
- */
- uint16_t rootDirEntryCount;
- /**
- * This field is the old 16-bit total count of sectors on the volume.
- * This count includes the count of all sectors in all four regions
- * of the volume. This field can be 0; if it is 0, then totalSectors32
- * must be nonzero. For FAT32 volumes, this field must be 0. For
- * FAT12 and FAT16 volumes, this field contains the sector count, and
- * totalSectors32 is 0 if the total sector count fits
- * (is less than 0x10000).
- */
- uint16_t totalSectors16;
- /**
- * This dates back to the old MS-DOS 1.x media determination and is
- * no longer usually used for anything. 0xF8 is the standard value
- * for fixed (nonremovable) media. For removable media, 0xF0 is
- * frequently used. Legal values are 0xF0 or 0xF8-0xFF.
- */
- uint8_t mediaType;
- /**
- * Count of sectors occupied by one FAT on FAT12/FAT16 volumes.
- * On FAT32 volumes this field must be 0, and sectorsPerFat32
- * contains the FAT size count.
- */
- uint16_t sectorsPerFat16;
- /** Sectors per track for interrupt 0x13. Not used otherwise. */
- uint16_t sectorsPerTrack;
- /** Number of heads for interrupt 0x13. Not used otherwise. */
- uint16_t headCount;
- /**
- * Count of hidden sectors preceding the partition that contains this
- * FAT volume. This field is generally only relevant for media
- * visible on interrupt 0x13.
- */
- uint32_t hidddenSectors;
- /**
- * This field is the new 32-bit total count of sectors on the volume.
- * This count includes the count of all sectors in all four regions
- * of the volume. This field can be 0; if it is 0, then
- * totalSectors16 must be nonzero.
- */
- uint32_t totalSectors32;
- /**
- * Related to the BIOS physical drive number. Floppy drives are
- * identified as 0x00 and physical hard disks are identified as
- * 0x80, regardless of the number of physical disk drives.
- * Typically, this value is set prior to issuing an INT 13h BIOS
- * call to specify the device to access. The value is only
- * relevant if the device is a boot device.
- */
- uint8_t driveNumber;
- /** used by Windows NT - should be zero for FAT */
- uint8_t reserved1;
- /** 0X29 if next three fields are valid */
- uint8_t bootSignature;
- /**
- * A random serial number created when formatting a disk,
- * which helps to distinguish between disks.
- * Usually generated by combining date and time.
- */
- uint32_t volumeSerialNumber;
- /**
- * A field once used to store the volume label. The volume label
- * is now stored as a special file in the root directory.
- */
- char volumeLabel[11];
- /**
- * A field with a value of either FAT, FAT12 or FAT16,
- * depending on the disk format.
- */
- char fileSystemType[8];
- /** X86 boot code */
- uint8_t bootCode[448];
- /** must be 0X55 */
- uint8_t bootSectorSig0;
- /** must be 0XAA */
- uint8_t bootSectorSig1;
-} PACKED;
-/** Type name for FAT Boot Sector */
-typedef struct fat_boot fat_boot_t;
-//------------------------------------------------------------------------------
-/**
- * \struct fat32_boot
- *
- * \brief Boot sector for a FAT32 volume.
- *
- */
-struct fat32_boot {
- /**
- * The first three bytes of the boot sector must be valid,
- * executable x 86-based CPU instructions. This includes a
- * jump instruction that skips the next nonexecutable bytes.
- */
- uint8_t jump[3];
- /**
- * This is typically a string of characters that identifies
- * the operating system that formatted the volume.
- */
- char oemId[8];
- /**
- * The size of a hardware sector. Valid decimal values for this
- * field are 512, 1024, 2048, and 4096. For most disks used in
- * the United States, the value of this field is 512.
- */
- uint16_t bytesPerSector;
- /**
- * Number of sectors per allocation unit. This value must be a
- * power of 2 that is greater than 0. The legal values are
- * 1, 2, 4, 8, 16, 32, 64, and 128. 128 should be avoided.
- */
- uint8_t sectorsPerCluster;
- /**
- * The number of sectors preceding the start of the first FAT,
- * including the boot sector. Must not be zero
- */
- uint16_t reservedSectorCount;
- /**
- * The number of copies of the FAT on the volume.
- * The value of this field is always 2.
- */
- uint8_t fatCount;
- /**
- * FAT12/FAT16 only. For FAT32 volumes, this field must be set to 0.
- */
- uint16_t rootDirEntryCount;
- /**
- * For FAT32 volumes, this field must be 0.
- */
- uint16_t totalSectors16;
- /**
- * This dates back to the old MS-DOS 1.x media determination and is
- * no longer usually used for anything. 0xF8 is the standard value
- * for fixed (nonremovable) media. For removable media, 0xF0 is
- * frequently used. Legal values are 0xF0 or 0xF8-0xFF.
- */
- uint8_t mediaType;
- /**
- * On FAT32 volumes this field must be 0, and sectorsPerFat32
- * contains the FAT size count.
- */
- uint16_t sectorsPerFat16;
- /** Sectors per track for interrupt 0x13. Not used otherwise. */
- uint16_t sectorsPerTrack;
- /** Number of heads for interrupt 0x13. Not used otherwise. */
- uint16_t headCount;
- /**
- * Count of hidden sectors preceding the partition that contains this
- * FAT volume. This field is generally only relevant for media
- * visible on interrupt 0x13.
- */
- uint32_t hidddenSectors;
- /**
- * Contains the total number of sectors in the FAT32 volume.
- */
- uint32_t totalSectors32;
- /**
- * Count of sectors occupied by one FAT on FAT32 volumes.
- */
- uint32_t sectorsPerFat32;
- /**
- * This field is only defined for FAT32 media and does not exist on
- * FAT12 and FAT16 media.
- * Bits 0-3 -- Zero-based number of active FAT.
- * Only valid if mirroring is disabled.
- * Bits 4-6 -- Reserved.
- * Bit 7 -- 0 means the FAT is mirrored at runtime into all FATs.
- * -- 1 means only one FAT is active; it is the one referenced
- * in bits 0-3.
- * Bits 8-15 -- Reserved.
- */
- uint16_t fat32Flags;
- /**
- * FAT32 version. High byte is major revision number.
- * Low byte is minor revision number. Only 0.0 define.
- */
- uint16_t fat32Version;
- /**
- * Cluster number of the first cluster of the root directory for FAT32.
- * This usually 2 but not required to be 2.
- */
- uint32_t fat32RootCluster;
- /**
- * Sector number of FSINFO structure in the reserved area of the
- * FAT32 volume. Usually 1.
- */
- uint16_t fat32FSInfo;
- /**
- * If nonzero, indicates the sector number in the reserved area
- * of the volume of a copy of the boot record. Usually 6.
- * No value other than 6 is recommended.
- */
- uint16_t fat32BackBootBlock;
- /**
- * Reserved for future expansion. Code that formats FAT32 volumes
- * should always set all of the bytes of this field to 0.
- */
- uint8_t fat32Reserved[12];
- /**
- * Related to the BIOS physical drive number. Floppy drives are
- * identified as 0x00 and physical hard disks are identified as
- * 0x80, regardless of the number of physical disk drives.
- * Typically, this value is set prior to issuing an INT 13h BIOS
- * call to specify the device to access. The value is only
- * relevant if the device is a boot device.
- */
- uint8_t driveNumber;
- /** used by Windows NT - should be zero for FAT */
- uint8_t reserved1;
- /** 0X29 if next three fields are valid */
- uint8_t bootSignature;
- /**
- * A random serial number created when formatting a disk,
- * which helps to distinguish between disks.
- * Usually generated by combining date and time.
- */
- uint32_t volumeSerialNumber;
- /**
- * A field once used to store the volume label. The volume label
- * is now stored as a special file in the root directory.
- */
- char volumeLabel[11];
- /**
- * A text field with a value of FAT32.
- */
- char fileSystemType[8];
- /** X86 boot code */
- uint8_t bootCode[420];
- /** must be 0X55 */
- uint8_t bootSectorSig0;
- /** must be 0XAA */
- uint8_t bootSectorSig1;
-} PACKED;
-/** Type name for FAT32 Boot Sector */
-typedef struct fat32_boot fat32_boot_t;
-//------------------------------------------------------------------------------
-/** Lead signature for a FSINFO sector */
-uint32_t const FSINFO_LEAD_SIG = 0x41615252;
-/** Struct signature for a FSINFO sector */
-uint32_t const FSINFO_STRUCT_SIG = 0x61417272;
-/**
- * \struct fat32_fsinfo
- *
- * \brief FSINFO sector for a FAT32 volume.
- *
- */
-struct fat32_fsinfo {
- /** must be 0X52, 0X52, 0X61, 0X41 */
- uint32_t leadSignature;
- /** must be zero */
- uint8_t reserved1[480];
- /** must be 0X72, 0X72, 0X41, 0X61 */
- uint32_t structSignature;
- /**
- * Contains the last known free cluster count on the volume.
- * If the value is 0xFFFFFFFF, then the free count is unknown
- * and must be computed. Any other value can be used, but is
- * not necessarily correct. It should be range checked at least
- * to make sure it is <= volume cluster count.
- */
- uint32_t freeCount;
- /**
- * This is a hint for the FAT driver. It indicates the cluster
- * number at which the driver should start looking for free clusters.
- * If the value is 0xFFFFFFFF, then there is no hint and the driver
- * should start looking at cluster 2.
- */
- uint32_t nextFree;
- /** must be zero */
- uint8_t reserved2[12];
- /** must be 0X00, 0X00, 0X55, 0XAA */
- uint8_t tailSignature[4];
-} PACKED;
-/** Type name for FAT32 FSINFO Sector */
-typedef struct fat32_fsinfo fat32_fsinfo_t;
-//------------------------------------------------------------------------------
-// End Of Chain values for FAT entries
-/** FAT12 end of chain value used by Microsoft. */
-uint16_t const FAT12EOC = 0XFFF;
-/** Minimum value for FAT12 EOC. Use to test for EOC. */
-uint16_t const FAT12EOC_MIN = 0XFF8;
-/** FAT16 end of chain value used by Microsoft. */
-uint16_t const FAT16EOC = 0XFFFF;
-/** Minimum value for FAT16 EOC. Use to test for EOC. */
-uint16_t const FAT16EOC_MIN = 0XFFF8;
-/** FAT32 end of chain value used by Microsoft. */
-uint32_t const FAT32EOC = 0X0FFFFFFF;
-/** Minimum value for FAT32 EOC. Use to test for EOC. */
-uint32_t const FAT32EOC_MIN = 0X0FFFFFF8;
-/** Mask a for FAT32 entry. Entries are 28 bits. */
-uint32_t const FAT32MASK = 0X0FFFFFFF;
-//------------------------------------------------------------------------------
-/**
- * \struct directoryEntry
- * \brief FAT short directory entry
- *
- * Short means short 8.3 name, not the entry size.
- *
- * Date Format. A FAT directory entry date stamp is a 16-bit field that is
- * basically a date relative to the MS-DOS epoch of 01/01/1980. Here is the
- * format (bit 0 is the LSB of the 16-bit word, bit 15 is the MSB of the
- * 16-bit word):
- *
- * Bits 9-15: Count of years from 1980, valid value range 0-127
- * inclusive (1980-2107).
- *
- * Bits 5-8: Month of year, 1 = January, valid value range 1-12 inclusive.
- *
- * Bits 0-4: Day of month, valid value range 1-31 inclusive.
- *
- * Time Format. A FAT directory entry time stamp is a 16-bit field that has
- * a granularity of 2 seconds. Here is the format (bit 0 is the LSB of the
- * 16-bit word, bit 15 is the MSB of the 16-bit word).
- *
- * Bits 11-15: Hours, valid value range 0-23 inclusive.
- *
- * Bits 5-10: Minutes, valid value range 0-59 inclusive.
- *
- * Bits 0-4: 2-second count, valid value range 0-29 inclusive (0 - 58 seconds).
- *
- * The valid time range is from Midnight 00:00:00 to 23:59:58.
- */
-struct directoryEntry {
- /** Short 8.3 name.
- *
- * The first eight bytes contain the file name with blank fill.
- * The last three bytes contain the file extension with blank fill.
- */
- uint8_t name[11];
- /** Entry attributes.
- *
- * The upper two bits of the attribute byte are reserved and should
- * always be set to 0 when a file is created and never modified or
- * looked at after that. See defines that begin with DIR_ATT_.
- */
- uint8_t attributes;
- /**
- * Reserved for use by Windows NT. Set value to 0 when a file is
- * created and never modify or look at it after that.
- */
- uint8_t reservedNT;
- /**
- * The granularity of the seconds part of creationTime is 2 seconds
- * so this field is a count of tenths of a second and its valid
- * value range is 0-199 inclusive. (WHG note - seems to be hundredths)
- */
- uint8_t creationTimeTenths;
- /** Time file was created. */
- uint16_t creationTime;
- /** Date file was created. */
- uint16_t creationDate;
- /**
- * Last access date. Note that there is no last access time, only
- * a date. This is the date of last read or write. In the case of
- * a write, this should be set to the same date as lastWriteDate.
- */
- uint16_t lastAccessDate;
- /**
- * High word of this entry's first cluster number (always 0 for a
- * FAT12 or FAT16 volume).
- */
- uint16_t firstClusterHigh;
- /** Time of last write. File creation is considered a write. */
- uint16_t lastWriteTime;
- /** Date of last write. File creation is considered a write. */
- uint16_t lastWriteDate;
- /** Low word of this entry's first cluster number. */
- uint16_t firstClusterLow;
- /** 32-bit unsigned holding this file's size in bytes. */
- uint32_t fileSize;
-} PACKED;
-/**
- * \struct directoryVFATEntry
- * \brief VFAT long filename directory entry
- *
- * directoryVFATEntries are found in the same list as normal directoryEntry.
- * But have the attribute field set to DIR_ATT_LONG_NAME.
- *
- * Long filenames are saved in multiple directoryVFATEntries.
- * Each entry containing 13 UTF-16 characters.
- */
-struct directoryVFATEntry {
- /**
- * Sequence number. Consists of 2 parts:
- * bit 6: indicates first long filename block for the next file
- * bit 0-4: the position of this long filename block (first block is 1)
- */
- uint8_t sequenceNumber;
- /** First set of UTF-16 characters */
- uint16_t name1[5];//UTF-16
- /** attributes (at the same location as in directoryEntry), always 0x0F */
- uint8_t attributes;
- /** Reserved for use by Windows NT. Always 0. */
- uint8_t reservedNT;
- /** Checksum of the short 8.3 filename, can be used to checked if the file system as modified by a not-long-filename aware implementation. */
- uint8_t checksum;
- /** Second set of UTF-16 characters */
- uint16_t name2[6];//UTF-16
- /** firstClusterLow is always zero for longFilenames */
- uint16_t firstClusterLow;
- /** Third set of UTF-16 characters */
- uint16_t name3[2];//UTF-16
-} PACKED;
-//------------------------------------------------------------------------------
-// Definitions for directory entries
-//
-/** Type name for directoryEntry */
-typedef struct directoryEntry dir_t;
-/** Type name for directoryVFATEntry */
-typedef struct directoryVFATEntry vfat_t;
-/** escape for name[0] = 0XE5 */
-uint8_t const DIR_NAME_0XE5 = 0X05;
-/** name[0] value for entry that is free after being "deleted" */
-uint8_t const DIR_NAME_DELETED = 0XE5;
-/** name[0] value for entry that is free and no allocated entries follow */
-uint8_t const DIR_NAME_FREE = 0X00;
-/** file is read-only */
-uint8_t const DIR_ATT_READ_ONLY = 0X01;
-/** File should hidden in directory listings */
-uint8_t const DIR_ATT_HIDDEN = 0X02;
-/** Entry is for a system file */
-uint8_t const DIR_ATT_SYSTEM = 0X04;
-/** Directory entry contains the volume label */
-uint8_t const DIR_ATT_VOLUME_ID = 0X08;
-/** Entry is for a directory */
-uint8_t const DIR_ATT_DIRECTORY = 0X10;
-/** Old DOS archive bit for backup support */
-uint8_t const DIR_ATT_ARCHIVE = 0X20;
-/** Test value for long name entry. Test is
- (d->attributes & DIR_ATT_LONG_NAME_MASK) == DIR_ATT_LONG_NAME. */
-uint8_t const DIR_ATT_LONG_NAME = 0X0F;
-/** Test mask for long name entry */
-uint8_t const DIR_ATT_LONG_NAME_MASK = 0X3F;
-/** defined attribute bits */
-uint8_t const DIR_ATT_DEFINED_BITS = 0X3F;
-/** Directory entry is part of a long name
- * \param[in] dir Pointer to a directory entry.
- *
- * \return true if the entry is for part of a long name else false.
- */
-static inline uint8_t DIR_IS_LONG_NAME(const dir_t* dir) {
- return (dir->attributes & DIR_ATT_LONG_NAME_MASK) == DIR_ATT_LONG_NAME;
-}
-/** Mask for file/subdirectory tests */
-uint8_t const DIR_ATT_FILE_TYPE_MASK = (DIR_ATT_VOLUME_ID | DIR_ATT_DIRECTORY);
-/** Directory entry is for a file
- * \param[in] dir Pointer to a directory entry.
- *
- * \return true if the entry is for a normal file else false.
- */
-static inline uint8_t DIR_IS_FILE(const dir_t* dir) {
- return (dir->attributes & DIR_ATT_FILE_TYPE_MASK) == 0;
-}
-/** Directory entry is for a subdirectory
- * \param[in] dir Pointer to a directory entry.
- *
- * \return true if the entry is for a subdirectory else false.
- */
-static inline uint8_t DIR_IS_SUBDIR(const dir_t* dir) {
- return (dir->attributes & DIR_ATT_FILE_TYPE_MASK) == DIR_ATT_DIRECTORY;
-}
-/** Directory entry is for a file or subdirectory
- * \param[in] dir Pointer to a directory entry.
- *
- * \return true if the entry is for a normal file or subdirectory else false.
- */
-static inline uint8_t DIR_IS_FILE_OR_SUBDIR(const dir_t* dir) {
- return (dir->attributes & DIR_ATT_VOLUME_ID) == 0;
-}
-#endif // SdFatStructs_h
-
-
-#endif
diff --git a/Marlin/SdFatUtil.cpp b/Marlin/SdFatUtil.cpp
deleted file mode 100644
index 48d91df..0000000
--- a/Marlin/SdFatUtil.cpp
+++ /dev/null
@@ -1,91 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Arduino SdFat Library
- * Copyright (C) 2008 by William Greiman
- *
- * This file is part of the Arduino Sd2Card Library
- */
-#include "Marlin.h"
-
-#if ENABLED(SDSUPPORT)
-#include "SdFatUtil.h"
-
-//------------------------------------------------------------------------------
-/** Amount of free RAM
- * \return The number of free bytes.
- */
-#ifdef __arm__
-extern "C" char* sbrk(int incr);
-int SdFatUtil::FreeRam() {
- char top;
- return &top - reinterpret_cast(sbrk(0));
-}
-#else // __arm__
-extern char* __brkval;
-extern char __bss_end;
-/** Amount of free RAM
- * \return The number of free bytes.
- */
-int SdFatUtil::FreeRam() {
- char top;
- return __brkval ? &top - __brkval : &top - &__bss_end;
-}
-#endif // __arm
-
-//------------------------------------------------------------------------------
-/** %Print a string in flash memory.
- *
- * \param[in] pr Print object for output.
- * \param[in] str Pointer to string stored in flash memory.
- */
-void SdFatUtil::print_P(PGM_P str) {
- for (uint8_t c; (c = pgm_read_byte(str)); str++) MYSERIAL.write(c);
-}
-//------------------------------------------------------------------------------
-/** %Print a string in flash memory followed by a CR/LF.
- *
- * \param[in] pr Print object for output.
- * \param[in] str Pointer to string stored in flash memory.
- */
-void SdFatUtil::println_P(PGM_P str) {
- print_P(str);
- MYSERIAL.println();
-}
-//------------------------------------------------------------------------------
-/** %Print a string in flash memory to Serial.
- *
- * \param[in] str Pointer to string stored in flash memory.
- */
-void SdFatUtil::SerialPrint_P(PGM_P str) {
- print_P(str);
-}
-//------------------------------------------------------------------------------
-/** %Print a string in flash memory to Serial followed by a CR/LF.
- *
- * \param[in] str Pointer to string stored in flash memory.
- */
-void SdFatUtil::SerialPrintln_P(PGM_P str) {
- println_P(str);
-}
-#endif
diff --git a/Marlin/SdFatUtil.h b/Marlin/SdFatUtil.h
deleted file mode 100644
index 9db81ac..0000000
--- a/Marlin/SdFatUtil.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Arduino SdFat Library
- * Copyright (C) 2008 by William Greiman
- *
- * This file is part of the Arduino Sd2Card Library
- */
-#include "Marlin.h"
-#if ENABLED(SDSUPPORT)
-
-#ifndef SdFatUtil_h
-#define SdFatUtil_h
-/**
- * \file
- * \brief Useful utility functions.
- */
-#include "Marlin.h"
-#include "MarlinSerial.h"
-/** Store and print a string in flash memory.*/
-#define PgmPrint(x) SerialPrint_P(PSTR(x))
-/** Store and print a string in flash memory followed by a CR/LF.*/
-#define PgmPrintln(x) SerialPrintln_P(PSTR(x))
-
-namespace SdFatUtil {
- int FreeRam();
- void print_P(PGM_P str);
- void println_P(PGM_P str);
- void SerialPrint_P(PGM_P str);
- void SerialPrintln_P(PGM_P str);
-}
-
-using namespace SdFatUtil; // NOLINT
-#endif //#define SdFatUtil_h
-
-
-#endif
diff --git a/Marlin/SdFile.cpp b/Marlin/SdFile.cpp
deleted file mode 100644
index fc66f41..0000000
--- a/Marlin/SdFile.cpp
+++ /dev/null
@@ -1,102 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Arduino SdFat Library
- * Copyright (C) 2009 by William Greiman
- *
- * This file is part of the Arduino Sd2Card Library
- */
-#include "Marlin.h"
-
-#if ENABLED(SDSUPPORT)
-#include "SdFile.h"
-/** Create a file object and open it in the current working directory.
- *
- * \param[in] path A path with a valid 8.3 DOS name for a file to be opened.
- *
- * \param[in] oflag Values for \a oflag are constructed by a bitwise-inclusive
- * OR of open flags. see SdBaseFile::open(SdBaseFile*, const char*, uint8_t).
- */
-SdFile::SdFile(const char* path, uint8_t oflag) : SdBaseFile(path, oflag) {
-}
-//------------------------------------------------------------------------------
-/** Write data to an open file.
- *
- * \note Data is moved to the cache but may not be written to the
- * storage device until sync() is called.
- *
- * \param[in] buf Pointer to the location of the data to be written.
- *
- * \param[in] nbyte Number of bytes to write.
- *
- * \return For success write() returns the number of bytes written, always
- * \a nbyte. If an error occurs, write() returns -1. Possible errors
- * include write() is called before a file has been opened, write is called
- * for a read-only file, device is full, a corrupt file system or an I/O error.
- *
- */
-int16_t SdFile::write(const void* buf, uint16_t nbyte) {
- return SdBaseFile::write(buf, nbyte);
-}
-//------------------------------------------------------------------------------
-/** Write a byte to a file. Required by the Arduino Print class.
- * \param[in] b the byte to be written.
- * Use writeError to check for errors.
- */
-#if ARDUINO >= 100
- size_t SdFile::write(uint8_t b) {
- return SdBaseFile::write(&b, 1);
- }
-#else
- void SdFile::write(uint8_t b) {
- SdBaseFile::write(&b, 1);
- }
-#endif
-//------------------------------------------------------------------------------
-/** Write a string to a file. Used by the Arduino Print class.
- * \param[in] str Pointer to the string.
- * Use writeError to check for errors.
- */
-void SdFile::write(const char* str) {
- SdBaseFile::write(str, strlen(str));
-}
-//------------------------------------------------------------------------------
-/** Write a PROGMEM string to a file.
- * \param[in] str Pointer to the PROGMEM string.
- * Use writeError to check for errors.
- */
-void SdFile::write_P(PGM_P str) {
- for (uint8_t c; (c = pgm_read_byte(str)); str++) write(c);
-}
-//------------------------------------------------------------------------------
-/** Write a PROGMEM string followed by CR/LF to a file.
- * \param[in] str Pointer to the PROGMEM string.
- * Use writeError to check for errors.
- */
-void SdFile::writeln_P(PGM_P str) {
- write_P(str);
- write_P(PSTR("\r\n"));
-}
-
-
-#endif
diff --git a/Marlin/SdFile.h b/Marlin/SdFile.h
deleted file mode 100644
index 53f3825..0000000
--- a/Marlin/SdFile.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Arduino SdFat Library
- * Copyright (C) 2009 by William Greiman
- *
- * This file is part of the Arduino Sd2Card Library
- */
-/**
- * \file
- * \brief SdFile class
- */
-#include "Marlin.h"
-
-#if ENABLED(SDSUPPORT)
-#include "SdBaseFile.h"
-#include
-#ifndef SdFile_h
-#define SdFile_h
-//------------------------------------------------------------------------------
-/**
- * \class SdFile
- * \brief SdBaseFile with Print.
- */
-class SdFile : public SdBaseFile, public Print {
- public:
- SdFile() {}
- SdFile(const char* name, uint8_t oflag);
- #if ARDUINO >= 100
- size_t write(uint8_t b);
- #else
- void write(uint8_t b);
- #endif
-
- int16_t write(const void* buf, uint16_t nbyte);
- void write(const char* str);
- void write_P(PGM_P str);
- void writeln_P(PGM_P str);
-};
-#endif // SdFile_h
-
-
-#endif
diff --git a/Marlin/SdInfo.h b/Marlin/SdInfo.h
deleted file mode 100644
index f4b36b7..0000000
--- a/Marlin/SdInfo.h
+++ /dev/null
@@ -1,289 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Arduino Sd2Card Library
- * Copyright (C) 2009 by William Greiman
- *
- * This file is part of the Arduino Sd2Card Library
- */
-#include "Marlin.h"
-#if ENABLED(SDSUPPORT)
-
-#ifndef SdInfo_h
-#define SdInfo_h
-#include
-// Based on the document:
-//
-// SD Specifications
-// Part 1
-// Physical Layer
-// Simplified Specification
-// Version 3.01
-// May 18, 2010
-//
-// http://www.sdcard.org/developers/tech/sdcard/pls/simplified_specs
-//------------------------------------------------------------------------------
-// SD card commands
-/** GO_IDLE_STATE - init card in spi mode if CS low */
-uint8_t const CMD0 = 0X00;
-/** SEND_IF_COND - verify SD Memory Card interface operating condition.*/
-uint8_t const CMD8 = 0X08;
-/** SEND_CSD - read the Card Specific Data (CSD register) */
-uint8_t const CMD9 = 0X09;
-/** SEND_CID - read the card identification information (CID register) */
-uint8_t const CMD10 = 0X0A;
-/** STOP_TRANSMISSION - end multiple block read sequence */
-uint8_t const CMD12 = 0X0C;
-/** SEND_STATUS - read the card status register */
-uint8_t const CMD13 = 0X0D;
-/** READ_SINGLE_BLOCK - read a single data block from the card */
-uint8_t const CMD17 = 0X11;
-/** READ_MULTIPLE_BLOCK - read a multiple data blocks from the card */
-uint8_t const CMD18 = 0X12;
-/** WRITE_BLOCK - write a single data block to the card */
-uint8_t const CMD24 = 0X18;
-/** WRITE_MULTIPLE_BLOCK - write blocks of data until a STOP_TRANSMISSION */
-uint8_t const CMD25 = 0X19;
-/** ERASE_WR_BLK_START - sets the address of the first block to be erased */
-uint8_t const CMD32 = 0X20;
-/** ERASE_WR_BLK_END - sets the address of the last block of the continuous
- range to be erased*/
-uint8_t const CMD33 = 0X21;
-/** ERASE - erase all previously selected blocks */
-uint8_t const CMD38 = 0X26;
-/** APP_CMD - escape for application specific command */
-uint8_t const CMD55 = 0X37;
-/** READ_OCR - read the OCR register of a card */
-uint8_t const CMD58 = 0X3A;
-/** SET_WR_BLK_ERASE_COUNT - Set the number of write blocks to be
- pre-erased before writing */
-uint8_t const ACMD23 = 0X17;
-/** SD_SEND_OP_COMD - Sends host capacity support information and
- activates the card's initialization process */
-uint8_t const ACMD41 = 0X29;
-//------------------------------------------------------------------------------
-/** status for card in the ready state */
-uint8_t const R1_READY_STATE = 0X00;
-/** status for card in the idle state */
-uint8_t const R1_IDLE_STATE = 0X01;
-/** status bit for illegal command */
-uint8_t const R1_ILLEGAL_COMMAND = 0X04;
-/** start data token for read or write single block*/
-uint8_t const DATA_START_BLOCK = 0XFE;
-/** stop token for write multiple blocks*/
-uint8_t const STOP_TRAN_TOKEN = 0XFD;
-/** start data token for write multiple blocks*/
-uint8_t const WRITE_MULTIPLE_TOKEN = 0XFC;
-/** mask for data response tokens after a write block operation */
-uint8_t const DATA_RES_MASK = 0X1F;
-/** write data accepted token */
-uint8_t const DATA_RES_ACCEPTED = 0X05;
-//------------------------------------------------------------------------------
-/** Card IDentification (CID) register */
-typedef struct CID {
- // byte 0
- /** Manufacturer ID */
- unsigned char mid;
- // byte 1-2
- /** OEM/Application ID */
- char oid[2];
- // byte 3-7
- /** Product name */
- char pnm[5];
- // byte 8
- /** Product revision least significant digit */
- unsigned char prv_m : 4;
- /** Product revision most significant digit */
- unsigned char prv_n : 4;
- // byte 9-12
- /** Product serial number */
- uint32_t psn;
- // byte 13
- /** Manufacturing date year low digit */
- unsigned char mdt_year_high : 4;
- /** not used */
- unsigned char reserved : 4;
- // byte 14
- /** Manufacturing date month */
- unsigned char mdt_month : 4;
- /** Manufacturing date year low digit */
- unsigned char mdt_year_low : 4;
- // byte 15
- /** not used always 1 */
- unsigned char always1 : 1;
- /** CRC7 checksum */
- unsigned char crc : 7;
-} cid_t;
-//------------------------------------------------------------------------------
-/** CSD for version 1.00 cards */
-typedef struct CSDV1 {
- // byte 0
- unsigned char reserved1 : 6;
- unsigned char csd_ver : 2;
- // byte 1
- unsigned char taac;
- // byte 2
- unsigned char nsac;
- // byte 3
- unsigned char tran_speed;
- // byte 4
- unsigned char ccc_high;
- // byte 5
- unsigned char read_bl_len : 4;
- unsigned char ccc_low : 4;
- // byte 6
- unsigned char c_size_high : 2;
- unsigned char reserved2 : 2;
- unsigned char dsr_imp : 1;
- unsigned char read_blk_misalign : 1;
- unsigned char write_blk_misalign : 1;
- unsigned char read_bl_partial : 1;
- // byte 7
- unsigned char c_size_mid;
- // byte 8
- unsigned char vdd_r_curr_max : 3;
- unsigned char vdd_r_curr_min : 3;
- unsigned char c_size_low : 2;
- // byte 9
- unsigned char c_size_mult_high : 2;
- unsigned char vdd_w_cur_max : 3;
- unsigned char vdd_w_curr_min : 3;
- // byte 10
- unsigned char sector_size_high : 6;
- unsigned char erase_blk_en : 1;
- unsigned char c_size_mult_low : 1;
- // byte 11
- unsigned char wp_grp_size : 7;
- unsigned char sector_size_low : 1;
- // byte 12
- unsigned char write_bl_len_high : 2;
- unsigned char r2w_factor : 3;
- unsigned char reserved3 : 2;
- unsigned char wp_grp_enable : 1;
- // byte 13
- unsigned char reserved4 : 5;
- unsigned char write_partial : 1;
- unsigned char write_bl_len_low : 2;
- // byte 14
- unsigned char reserved5: 2;
- unsigned char file_format : 2;
- unsigned char tmp_write_protect : 1;
- unsigned char perm_write_protect : 1;
- unsigned char copy : 1;
- /** Indicates the file format on the card */
- unsigned char file_format_grp : 1;
- // byte 15
- unsigned char always1 : 1;
- unsigned char crc : 7;
-} csd1_t;
-//------------------------------------------------------------------------------
-/** CSD for version 2.00 cards */
-typedef struct CSDV2 {
- // byte 0
- unsigned char reserved1 : 6;
- unsigned char csd_ver : 2;
- // byte 1
- /** fixed to 0X0E */
- unsigned char taac;
- // byte 2
- /** fixed to 0 */
- unsigned char nsac;
- // byte 3
- unsigned char tran_speed;
- // byte 4
- unsigned char ccc_high;
- // byte 5
- /** This field is fixed to 9h, which indicates READ_BL_LEN=512 Byte */
- unsigned char read_bl_len : 4;
- unsigned char ccc_low : 4;
- // byte 6
- /** not used */
- unsigned char reserved2 : 4;
- unsigned char dsr_imp : 1;
- /** fixed to 0 */
- unsigned char read_blk_misalign : 1;
- /** fixed to 0 */
- unsigned char write_blk_misalign : 1;
- /** fixed to 0 - no partial read */
- unsigned char read_bl_partial : 1;
- // byte 7
- /** not used */
- unsigned char reserved3 : 2;
- /** high part of card size */
- unsigned char c_size_high : 6;
- // byte 8
- /** middle part of card size */
- unsigned char c_size_mid;
- // byte 9
- /** low part of card size */
- unsigned char c_size_low;
- // byte 10
- /** sector size is fixed at 64 KB */
- unsigned char sector_size_high : 6;
- /** fixed to 1 - erase single is supported */
- unsigned char erase_blk_en : 1;
- /** not used */
- unsigned char reserved4 : 1;
- // byte 11
- unsigned char wp_grp_size : 7;
- /** sector size is fixed at 64 KB */
- unsigned char sector_size_low : 1;
- // byte 12
- /** write_bl_len fixed for 512 byte blocks */
- unsigned char write_bl_len_high : 2;
- /** fixed value of 2 */
- unsigned char r2w_factor : 3;
- /** not used */
- unsigned char reserved5 : 2;
- /** fixed value of 0 - no write protect groups */
- unsigned char wp_grp_enable : 1;
- // byte 13
- unsigned char reserved6 : 5;
- /** always zero - no partial block read*/
- unsigned char write_partial : 1;
- /** write_bl_len fixed for 512 byte blocks */
- unsigned char write_bl_len_low : 2;
- // byte 14
- unsigned char reserved7: 2;
- /** Do not use always 0 */
- unsigned char file_format : 2;
- unsigned char tmp_write_protect : 1;
- unsigned char perm_write_protect : 1;
- unsigned char copy : 1;
- /** Do not use always 0 */
- unsigned char file_format_grp : 1;
- // byte 15
- /** not used always 1 */
- unsigned char always1 : 1;
- /** checksum */
- unsigned char crc : 7;
-} csd2_t;
-//------------------------------------------------------------------------------
-/** union of old and new style CSD register */
-union csd_t {
- csd1_t v1;
- csd2_t v2;
-};
-#endif // SdInfo_h
-
-#endif
diff --git a/Marlin/SdVolume.cpp b/Marlin/SdVolume.cpp
deleted file mode 100644
index 4166c06..0000000
--- a/Marlin/SdVolume.cpp
+++ /dev/null
@@ -1,420 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Arduino SdFat Library
- * Copyright (C) 2009 by William Greiman
- *
- * This file is part of the Arduino Sd2Card Library
- */
-#include "Marlin.h"
-#if ENABLED(SDSUPPORT)
-
-#include "SdVolume.h"
-//------------------------------------------------------------------------------
-#if !USE_MULTIPLE_CARDS
- // raw block cache
- uint32_t SdVolume::cacheBlockNumber_; // current block number
- cache_t SdVolume::cacheBuffer_; // 512 byte cache for Sd2Card
- Sd2Card* SdVolume::sdCard_; // pointer to SD card object
- bool SdVolume::cacheDirty_; // cacheFlush() will write block if true
- uint32_t SdVolume::cacheMirrorBlock_; // mirror block for second FAT
-#endif // USE_MULTIPLE_CARDS
-//------------------------------------------------------------------------------
-// find a contiguous group of clusters
-bool SdVolume::allocContiguous(uint32_t count, uint32_t* curCluster) {
- // start of group
- uint32_t bgnCluster;
- // end of group
- uint32_t endCluster;
- // last cluster of FAT
- uint32_t fatEnd = clusterCount_ + 1;
-
- // flag to save place to start next search
- bool setStart;
-
- // set search start cluster
- if (*curCluster) {
- // try to make file contiguous
- bgnCluster = *curCluster + 1;
-
- // don't save new start location
- setStart = false;
- }
- else {
- // start at likely place for free cluster
- bgnCluster = allocSearchStart_;
-
- // save next search start if one cluster
- setStart = count == 1;
- }
- // end of group
- endCluster = bgnCluster;
-
- // search the FAT for free clusters
- for (uint32_t n = 0;; n++, endCluster++) {
- // can't find space checked all clusters
- if (n >= clusterCount_) goto fail;
-
- // past end - start from beginning of FAT
- if (endCluster > fatEnd) {
- bgnCluster = endCluster = 2;
- }
- uint32_t f;
- if (!fatGet(endCluster, &f)) goto fail;
-
- if (f != 0) {
- // cluster in use try next cluster as bgnCluster
- bgnCluster = endCluster + 1;
- }
- else if ((endCluster - bgnCluster + 1) == count) {
- // done - found space
- break;
- }
- }
- // mark end of chain
- if (!fatPutEOC(endCluster)) goto fail;
-
- // link clusters
- while (endCluster > bgnCluster) {
- if (!fatPut(endCluster - 1, endCluster)) goto fail;
- endCluster--;
- }
- if (*curCluster != 0) {
- // connect chains
- if (!fatPut(*curCluster, bgnCluster)) goto fail;
- }
- // return first cluster number to caller
- *curCluster = bgnCluster;
-
- // remember possible next free cluster
- if (setStart) allocSearchStart_ = bgnCluster + 1;
-
- return true;
-fail:
- return false;
-}
-//------------------------------------------------------------------------------
-bool SdVolume::cacheFlush() {
- if (cacheDirty_) {
- if (!sdCard_->writeBlock(cacheBlockNumber_, cacheBuffer_.data)) {
- goto fail;
- }
- // mirror FAT tables
- if (cacheMirrorBlock_) {
- if (!sdCard_->writeBlock(cacheMirrorBlock_, cacheBuffer_.data)) {
- goto fail;
- }
- cacheMirrorBlock_ = 0;
- }
- cacheDirty_ = 0;
- }
- return true;
-fail:
- return false;
-}
-//------------------------------------------------------------------------------
-bool SdVolume::cacheRawBlock(uint32_t blockNumber, bool dirty) {
- if (cacheBlockNumber_ != blockNumber) {
- if (!cacheFlush()) goto fail;
- if (!sdCard_->readBlock(blockNumber, cacheBuffer_.data)) goto fail;
- cacheBlockNumber_ = blockNumber;
- }
- if (dirty) cacheDirty_ = true;
- return true;
-fail:
- return false;
-}
-//------------------------------------------------------------------------------
-// return the size in bytes of a cluster chain
-bool SdVolume::chainSize(uint32_t cluster, uint32_t* size) {
- uint32_t s = 0;
- do {
- if (!fatGet(cluster, &cluster)) goto fail;
- s += 512UL << clusterSizeShift_;
- } while (!isEOC(cluster));
- *size = s;
- return true;
-fail:
- return false;
-}
-//------------------------------------------------------------------------------
-// Fetch a FAT entry
-bool SdVolume::fatGet(uint32_t cluster, uint32_t* value) {
- uint32_t lba;
- if (cluster > (clusterCount_ + 1)) goto fail;
- if (FAT12_SUPPORT && fatType_ == 12) {
- uint16_t index = cluster;
- index += index >> 1;
- lba = fatStartBlock_ + (index >> 9);
- if (!cacheRawBlock(lba, CACHE_FOR_READ)) goto fail;
- index &= 0X1FF;
- uint16_t tmp = cacheBuffer_.data[index];
- index++;
- if (index == 512) {
- if (!cacheRawBlock(lba + 1, CACHE_FOR_READ)) goto fail;
- index = 0;
- }
- tmp |= cacheBuffer_.data[index] << 8;
- *value = cluster & 1 ? tmp >> 4 : tmp & 0XFFF;
- return true;
- }
- if (fatType_ == 16) {
- lba = fatStartBlock_ + (cluster >> 8);
- }
- else if (fatType_ == 32) {
- lba = fatStartBlock_ + (cluster >> 7);
- }
- else {
- goto fail;
- }
- if (lba != cacheBlockNumber_) {
- if (!cacheRawBlock(lba, CACHE_FOR_READ)) goto fail;
- }
- if (fatType_ == 16) {
- *value = cacheBuffer_.fat16[cluster & 0XFF];
- }
- else {
- *value = cacheBuffer_.fat32[cluster & 0X7F] & FAT32MASK;
- }
- return true;
-fail:
- return false;
-}
-//------------------------------------------------------------------------------
-// Store a FAT entry
-bool SdVolume::fatPut(uint32_t cluster, uint32_t value) {
- uint32_t lba;
- // error if reserved cluster
- if (cluster < 2) goto fail;
-
- // error if not in FAT
- if (cluster > (clusterCount_ + 1)) goto fail;
-
- if (FAT12_SUPPORT && fatType_ == 12) {
- uint16_t index = cluster;
- index += index >> 1;
- lba = fatStartBlock_ + (index >> 9);
- if (!cacheRawBlock(lba, CACHE_FOR_WRITE)) goto fail;
- // mirror second FAT
- if (fatCount_ > 1) cacheMirrorBlock_ = lba + blocksPerFat_;
- index &= 0X1FF;
- uint8_t tmp = value;
- if (cluster & 1) {
- tmp = (cacheBuffer_.data[index] & 0XF) | tmp << 4;
- }
- cacheBuffer_.data[index] = tmp;
- index++;
- if (index == 512) {
- lba++;
- index = 0;
- if (!cacheRawBlock(lba, CACHE_FOR_WRITE)) goto fail;
- // mirror second FAT
- if (fatCount_ > 1) cacheMirrorBlock_ = lba + blocksPerFat_;
- }
- tmp = value >> 4;
- if (!(cluster & 1)) {
- tmp = ((cacheBuffer_.data[index] & 0XF0)) | tmp >> 4;
- }
- cacheBuffer_.data[index] = tmp;
- return true;
- }
- if (fatType_ == 16) {
- lba = fatStartBlock_ + (cluster >> 8);
- }
- else if (fatType_ == 32) {
- lba = fatStartBlock_ + (cluster >> 7);
- }
- else {
- goto fail;
- }
- if (!cacheRawBlock(lba, CACHE_FOR_WRITE)) goto fail;
- // store entry
- if (fatType_ == 16) {
- cacheBuffer_.fat16[cluster & 0XFF] = value;
- }
- else {
- cacheBuffer_.fat32[cluster & 0X7F] = value;
- }
- // mirror second FAT
- if (fatCount_ > 1) cacheMirrorBlock_ = lba + blocksPerFat_;
- return true;
-fail:
- return false;
-}
-//------------------------------------------------------------------------------
-// free a cluster chain
-bool SdVolume::freeChain(uint32_t cluster) {
- uint32_t next;
-
- // clear free cluster location
- allocSearchStart_ = 2;
-
- do {
- if (!fatGet(cluster, &next)) goto fail;
-
- // free cluster
- if (!fatPut(cluster, 0)) goto fail;
-
- cluster = next;
- } while (!isEOC(cluster));
-
- return true;
-fail:
- return false;
-}
-//------------------------------------------------------------------------------
-/** Volume free space in clusters.
- *
- * \return Count of free clusters for success or -1 if an error occurs.
- */
-int32_t SdVolume::freeClusterCount() {
- uint32_t free = 0;
- uint16_t n;
- uint32_t todo = clusterCount_ + 2;
-
- if (fatType_ == 16) {
- n = 256;
- }
- else if (fatType_ == 32) {
- n = 128;
- }
- else {
- // put FAT12 here
- return -1;
- }
-
- for (uint32_t lba = fatStartBlock_; todo; todo -= n, lba++) {
- if (!cacheRawBlock(lba, CACHE_FOR_READ)) return -1;
- NOMORE(n, todo);
- if (fatType_ == 16) {
- for (uint16_t i = 0; i < n; i++) {
- if (cacheBuffer_.fat16[i] == 0) free++;
- }
- }
- else {
- for (uint16_t i = 0; i < n; i++) {
- if (cacheBuffer_.fat32[i] == 0) free++;
- }
- }
- }
- return free;
-}
-//------------------------------------------------------------------------------
-/** Initialize a FAT volume.
- *
- * \param[in] dev The SD card where the volume is located.
- *
- * \param[in] part The partition to be used. Legal values for \a part are
- * 1-4 to use the corresponding partition on a device formatted with
- * a MBR, Master Boot Record, or zero if the device is formatted as
- * a super floppy with the FAT boot sector in block zero.
- *
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure. Reasons for
- * failure include not finding a valid partition, not finding a valid
- * FAT file system in the specified partition or an I/O error.
- */
-bool SdVolume::init(Sd2Card* dev, uint8_t part) {
- uint32_t totalBlocks;
- uint32_t volumeStartBlock = 0;
- fat32_boot_t* fbs;
-
- sdCard_ = dev;
- fatType_ = 0;
- allocSearchStart_ = 2;
- cacheDirty_ = 0; // cacheFlush() will write block if true
- cacheMirrorBlock_ = 0;
- cacheBlockNumber_ = 0XFFFFFFFF;
-
- // if part == 0 assume super floppy with FAT boot sector in block zero
- // if part > 0 assume mbr volume with partition table
- if (part) {
- if (part > 4)goto fail;
- if (!cacheRawBlock(volumeStartBlock, CACHE_FOR_READ)) goto fail;
- part_t* p = &cacheBuffer_.mbr.part[part - 1];
- if ((p->boot & 0X7F) != 0 ||
- p->totalSectors < 100 ||
- p->firstSector == 0) {
- // not a valid partition
- goto fail;
- }
- volumeStartBlock = p->firstSector;
- }
- if (!cacheRawBlock(volumeStartBlock, CACHE_FOR_READ)) goto fail;
- fbs = &cacheBuffer_.fbs32;
- if (fbs->bytesPerSector != 512 ||
- fbs->fatCount == 0 ||
- fbs->reservedSectorCount == 0 ||
- fbs->sectorsPerCluster == 0) {
- // not valid FAT volume
- goto fail;
- }
- fatCount_ = fbs->fatCount;
- blocksPerCluster_ = fbs->sectorsPerCluster;
- // determine shift that is same as multiply by blocksPerCluster_
- clusterSizeShift_ = 0;
- while (blocksPerCluster_ != _BV(clusterSizeShift_)) {
- // error if not power of 2
- if (clusterSizeShift_++ > 7) goto fail;
- }
- blocksPerFat_ = fbs->sectorsPerFat16 ?
- fbs->sectorsPerFat16 : fbs->sectorsPerFat32;
-
- fatStartBlock_ = volumeStartBlock + fbs->reservedSectorCount;
-
- // count for FAT16 zero for FAT32
- rootDirEntryCount_ = fbs->rootDirEntryCount;
-
- // directory start for FAT16 dataStart for FAT32
- rootDirStart_ = fatStartBlock_ + fbs->fatCount * blocksPerFat_;
-
- // data start for FAT16 and FAT32
- dataStartBlock_ = rootDirStart_ + ((32 * fbs->rootDirEntryCount + 511) / 512);
-
- // total blocks for FAT16 or FAT32
- totalBlocks = fbs->totalSectors16 ?
- fbs->totalSectors16 : fbs->totalSectors32;
-
- // total data blocks
- clusterCount_ = totalBlocks - (dataStartBlock_ - volumeStartBlock);
-
- // divide by cluster size to get cluster count
- clusterCount_ >>= clusterSizeShift_;
-
- // FAT type is determined by cluster count
- if (clusterCount_ < 4085) {
- fatType_ = 12;
- if (!FAT12_SUPPORT) goto fail;
- }
- else if (clusterCount_ < 65525) {
- fatType_ = 16;
- }
- else {
- rootDirStart_ = fbs->fat32RootCluster;
- fatType_ = 32;
- }
- return true;
-fail:
- return false;
-}
-#endif
diff --git a/Marlin/SdVolume.h b/Marlin/SdVolume.h
deleted file mode 100644
index 990248d..0000000
--- a/Marlin/SdVolume.h
+++ /dev/null
@@ -1,227 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Arduino SdFat Library
- * Copyright (C) 2009 by William Greiman
- *
- * This file is part of the Arduino Sd2Card Library
- */
-#include "Marlin.h"
-#if ENABLED(SDSUPPORT)
-#ifndef SdVolume_h
-#define SdVolume_h
-/**
- * \file
- * \brief SdVolume class
- */
-#include "SdFatConfig.h"
-#include "Sd2Card.h"
-#include "SdFatStructs.h"
-
-//==============================================================================
-// SdVolume class
-/**
- * \brief Cache for an SD data block
- */
-union cache_t {
- /** Used to access cached file data blocks. */
- uint8_t data[512];
- /** Used to access cached FAT16 entries. */
- uint16_t fat16[256];
- /** Used to access cached FAT32 entries. */
- uint32_t fat32[128];
- /** Used to access cached directory entries. */
- dir_t dir[16];
- /** Used to access a cached Master Boot Record. */
- mbr_t mbr;
- /** Used to access to a cached FAT boot sector. */
- fat_boot_t fbs;
- /** Used to access to a cached FAT32 boot sector. */
- fat32_boot_t fbs32;
- /** Used to access to a cached FAT32 FSINFO sector. */
- fat32_fsinfo_t fsinfo;
-};
-//------------------------------------------------------------------------------
-/**
- * \class SdVolume
- * \brief Access FAT16 and FAT32 volumes on SD and SDHC cards.
- */
-class SdVolume {
- public:
- /** Create an instance of SdVolume */
- SdVolume() : fatType_(0) {}
- /** Clear the cache and returns a pointer to the cache. Used by the WaveRP
- * recorder to do raw write to the SD card. Not for normal apps.
- * \return A pointer to the cache buffer or zero if an error occurs.
- */
- cache_t* cacheClear() {
- if (!cacheFlush()) return 0;
- cacheBlockNumber_ = 0XFFFFFFFF;
- return &cacheBuffer_;
- }
- /** Initialize a FAT volume. Try partition one first then try super
- * floppy format.
- *
- * \param[in] dev The Sd2Card where the volume is located.
- *
- * \return The value one, true, is returned for success and
- * the value zero, false, is returned for failure. Reasons for
- * failure include not finding a valid partition, not finding a valid
- * FAT file system or an I/O error.
- */
- bool init(Sd2Card* dev) { return init(dev, 1) ? true : init(dev, 0);}
- bool init(Sd2Card* dev, uint8_t part);
-
- // inline functions that return volume info
- /** \return The volume's cluster size in blocks. */
- uint8_t blocksPerCluster() const {return blocksPerCluster_;}
- /** \return The number of blocks in one FAT. */
- uint32_t blocksPerFat() const {return blocksPerFat_;}
- /** \return The total number of clusters in the volume. */
- uint32_t clusterCount() const {return clusterCount_;}
- /** \return The shift count required to multiply by blocksPerCluster. */
- uint8_t clusterSizeShift() const {return clusterSizeShift_;}
- /** \return The logical block number for the start of file data. */
- uint32_t dataStartBlock() const {return dataStartBlock_;}
- /** \return The number of FAT structures on the volume. */
- uint8_t fatCount() const {return fatCount_;}
- /** \return The logical block number for the start of the first FAT. */
- uint32_t fatStartBlock() const {return fatStartBlock_;}
- /** \return The FAT type of the volume. Values are 12, 16 or 32. */
- uint8_t fatType() const {return fatType_;}
- int32_t freeClusterCount();
- /** \return The number of entries in the root directory for FAT16 volumes. */
- uint32_t rootDirEntryCount() const {return rootDirEntryCount_;}
- /** \return The logical block number for the start of the root directory
- on FAT16 volumes or the first cluster number on FAT32 volumes. */
- uint32_t rootDirStart() const {return rootDirStart_;}
- /** Sd2Card object for this volume
- * \return pointer to Sd2Card object.
- */
- Sd2Card* sdCard() {return sdCard_;}
- /** Debug access to FAT table
- *
- * \param[in] n cluster number.
- * \param[out] v value of entry
- * \return true for success or false for failure
- */
- bool dbgFat(uint32_t n, uint32_t* v) {return fatGet(n, v);}
- //------------------------------------------------------------------------------
- private:
- // Allow SdBaseFile access to SdVolume private data.
- friend class SdBaseFile;
-
- // value for dirty argument in cacheRawBlock to indicate read from cache
- static bool const CACHE_FOR_READ = false;
- // value for dirty argument in cacheRawBlock to indicate write to cache
- static bool const CACHE_FOR_WRITE = true;
-
-#if USE_MULTIPLE_CARDS
- cache_t cacheBuffer_; // 512 byte cache for device blocks
- uint32_t cacheBlockNumber_; // Logical number of block in the cache
- Sd2Card* sdCard_; // Sd2Card object for cache
- bool cacheDirty_; // cacheFlush() will write block if true
- uint32_t cacheMirrorBlock_; // block number for mirror FAT
-#else // USE_MULTIPLE_CARDS
- static cache_t cacheBuffer_; // 512 byte cache for device blocks
- static uint32_t cacheBlockNumber_; // Logical number of block in the cache
- static Sd2Card* sdCard_; // Sd2Card object for cache
- static bool cacheDirty_; // cacheFlush() will write block if true
- static uint32_t cacheMirrorBlock_; // block number for mirror FAT
-#endif // USE_MULTIPLE_CARDS
- uint32_t allocSearchStart_; // start cluster for alloc search
- uint8_t blocksPerCluster_; // cluster size in blocks
- uint32_t blocksPerFat_; // FAT size in blocks
- uint32_t clusterCount_; // clusters in one FAT
- uint8_t clusterSizeShift_; // shift to convert cluster count to block count
- uint32_t dataStartBlock_; // first data block number
- uint8_t fatCount_; // number of FATs on volume
- uint32_t fatStartBlock_; // start block for first FAT
- uint8_t fatType_; // volume type (12, 16, OR 32)
- uint16_t rootDirEntryCount_; // number of entries in FAT16 root dir
- uint32_t rootDirStart_; // root start block for FAT16, cluster for FAT32
- //----------------------------------------------------------------------------
- bool allocContiguous(uint32_t count, uint32_t* curCluster);
- uint8_t blockOfCluster(uint32_t position) const {
- return (position >> 9) & (blocksPerCluster_ - 1);
- }
- uint32_t clusterStartBlock(uint32_t cluster) const {
- return dataStartBlock_ + ((cluster - 2) << clusterSizeShift_);
- }
- uint32_t blockNumber(uint32_t cluster, uint32_t position) const {
- return clusterStartBlock(cluster) + blockOfCluster(position);
- }
- cache_t* cache() {return &cacheBuffer_;}
- uint32_t cacheBlockNumber() {return cacheBlockNumber_;}
-#if USE_MULTIPLE_CARDS
- bool cacheFlush();
- bool cacheRawBlock(uint32_t blockNumber, bool dirty);
-#else // USE_MULTIPLE_CARDS
- static bool cacheFlush();
- static bool cacheRawBlock(uint32_t blockNumber, bool dirty);
-#endif // USE_MULTIPLE_CARDS
- // used by SdBaseFile write to assign cache to SD location
- void cacheSetBlockNumber(uint32_t blockNumber, bool dirty) {
- cacheDirty_ = dirty;
- cacheBlockNumber_ = blockNumber;
- }
- void cacheSetDirty() {cacheDirty_ |= CACHE_FOR_WRITE;}
- bool chainSize(uint32_t beginCluster, uint32_t* size);
- bool fatGet(uint32_t cluster, uint32_t* value);
- bool fatPut(uint32_t cluster, uint32_t value);
- bool fatPutEOC(uint32_t cluster) {
- return fatPut(cluster, 0x0FFFFFFF);
- }
- bool freeChain(uint32_t cluster);
- bool isEOC(uint32_t cluster) const {
- if (FAT12_SUPPORT && fatType_ == 12) return cluster >= FAT12EOC_MIN;
- if (fatType_ == 16) return cluster >= FAT16EOC_MIN;
- return cluster >= FAT32EOC_MIN;
- }
- bool readBlock(uint32_t block, uint8_t* dst) {
- return sdCard_->readBlock(block, dst);
- }
- bool writeBlock(uint32_t block, const uint8_t* dst) {
- return sdCard_->writeBlock(block, dst);
- }
- //------------------------------------------------------------------------------
- // Deprecated functions - suppress cpplint warnings with NOLINT comment
-#if ALLOW_DEPRECATED_FUNCTIONS && !defined(DOXYGEN)
- public:
- /** \deprecated Use: bool SdVolume::init(Sd2Card* dev);
- * \param[in] dev The SD card where the volume is located.
- * \return true for success or false for failure.
- */
- bool init(Sd2Card& dev) {return init(&dev);} // NOLINT
- /** \deprecated Use: bool SdVolume::init(Sd2Card* dev, uint8_t vol);
- * \param[in] dev The SD card where the volume is located.
- * \param[in] part The partition to be used.
- * \return true for success or false for failure.
- */
- bool init(Sd2Card& dev, uint8_t part) { // NOLINT
- return init(&dev, part);
- }
-#endif // ALLOW_DEPRECATED_FUNCTIONS
-};
-#endif // SdVolume
-#endif
diff --git a/Marlin/Ultrasonic.cpp b/Marlin/Ultrasonic.cpp
deleted file mode 100644
index 0387771..0000000
--- a/Marlin/Ultrasonic.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- Ultrasonic.h - Ultrasonic driver Library
- 2011 Copyright (c) Seeed Technology Inc. All right reserved.
- For Ultrasonic v1.0 firmware.
-
- Original Author: LG
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-*/
-#include
-#include
-#include
-#include "Ultrasonic.h"
-
-#if defined(ARDUINO) && ARDUINO >= 100
-#include "Arduino.h"
-#else
-#include "WProgram.h"
-#endif
-
-Ultrasonic::Ultrasonic(int pin)
-{
- _pin = pin;
-}
-void Ultrasonic::MeasureInCentimeters(void)
-{
- pinMode(_pin, OUTPUT);
- digitalWrite(_pin, LOW);
- delayMicroseconds(2);
- digitalWrite(_pin, HIGH);
- delayMicroseconds(5);
- digitalWrite(_pin,LOW);
- pinMode(_pin,INPUT);
- duration = pulseIn(_pin,HIGH);
- RangeInCentimeters = duration/29/2;
-}
-void Ultrasonic::MeasureInInches(void)
-{
- pinMode(_pin, OUTPUT);
- digitalWrite(_pin, LOW);
- delayMicroseconds(2);
- digitalWrite(_pin, HIGH);
- delayMicroseconds(5);
- digitalWrite(_pin,LOW);
- pinMode(_pin,INPUT);
- duration = pulseIn(_pin,HIGH);
- RangeInInches = duration/74/2;
-}
\ No newline at end of file
diff --git a/Marlin/Ultrasonic.h b/Marlin/Ultrasonic.h
deleted file mode 100644
index 9006a41..0000000
--- a/Marlin/Ultrasonic.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- Ultrasonic.h - Ultrasonic driver Library
- 2011 Copyright (c) Seeed Technology Inc. All right reserved.
- For Ultrasonic v1.0 firmware.
-
- Original Author: LG
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-*/
-#ifndef Ultrasonic_H
-#define Ultrasonic_H
-
-class Ultrasonic
-{
- public:
- Ultrasonic(int pin);
- long RangeInCentimeters;
- long RangeInInches;
- long duration;
- void MeasureInCentimeters(void);
- void MeasureInInches(void);
- private:
- int _pin;
-};
-#endif
diff --git a/Marlin/Version.h b/Marlin/Version.h
deleted file mode 100644
index 520835e..0000000
--- a/Marlin/Version.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * This file is the standard Marlin version identifier file, all fields can be
- * overriden by the ones defined on _Version.h by using the Configuration.h
- * directive USE_AUTOMATIC_VERSIONING.
- */
-
-#if ENABLED(USE_AUTOMATIC_VERSIONING)
-
- #include "_Version.h"
-
-#else
-
- /**
- * Marlin release version identifier
- */
- #define SHORT_BUILD_VERSION "1.1.0-RC7"
-
- /**
- * Verbose version identifier which should contain a reference to the location
- * from where the binary was downloaded or the source code was compiled.
- */
- #define DETAILED_BUILD_VERSION SHORT_BUILD_VERSION " (Github)"
-
- /**
- * The STRING_DISTRIBUTION_DATE represents when the binary file was built,
- * here we define this default string as the date where the latest release
- * version was tagged.
- */
- #define STRING_DISTRIBUTION_DATE "2016-07-31 12:00"
-
- /**
- * Required minimum Configuration.h and Configuration_adv.h file versions.
- *
- * You must increment this version number for every significant change such as,
- * but not limited to: ADD, DELETE RENAME OR REPURPOSE any directive/option on
- * the configuration files.
- */
- #define REQUIRED_CONFIGURATION_H_VERSION 010100
- #define REQUIRED_CONFIGURATION_ADV_H_VERSION 010100
-
- /**
- * @todo: Missing documentation block
- */
- #define PROTOCOL_VERSION "1.0"
-
- /**
- * Defines a generic printer name to be output to the LCD after booting Marlin.
- */
- #define MACHINE_NAME "3D Printer"
-
- /**
- * The SOURCE_CODE_URL is the location where users will find the Marlin Source
- * Code which is installed on the device. In most cases —unless the manufacturer
- * has a distinct Github fork— the Source Code URL should just be the main
- * Marlin repository.
- */
- #define SOURCE_CODE_URL "https://github.com/MarlinFirmware/Marlin"
-
- /**
- * Default generic printer UUID.
- */
- #define DEFAULT_MACHINE_UUID "cede2a2f-41a2-4748-9b12-c55c62f367ff"
-
- /**
- * The WEBSITE_URL is the location where users can get more information such as
- * documentation about a specific Marlin release.
- */
- #define WEBSITE_URL "http://marlinfw.org"
-
-#endif // USE_AUTOMATIC_VERSIONING
diff --git a/Marlin/X_IIC.cpp b/Marlin/X_IIC.cpp
deleted file mode 100644
index 74969f6..0000000
--- a/Marlin/X_IIC.cpp
+++ /dev/null
@@ -1,217 +0,0 @@
-#include "X_IIC.h"
-
-#define X_SDA_SET PORTD |= 0x20
-#define X_SDA_CLEAR PORTD &= 0xDF
-#define X_SCL_SET PORTD |= 0x40
-#define X_SCL_CLEAR PORTD &= 0xBF
-
-#define X_SDA_INPUT DDRD &= 0xDF
-#define X_SDA_OUTPUT DDRD |= 0x20
-
-#define X_SCL_INPUT DDRD &= 0xBF
-#define X_SCL_OUTPUT DDRD |= 0x40
-
-#define X_SDA_READ PIND & 0x20
-
-#define X_PORT_DDR DDRD
-
-
-#define X_SCK_H {X_SCL_SET; }
-#define X_SCK_L {X_SCL_CLEAR; }
-#define X_SDA_H {X_SDA_OUTPUT;X_SDA_SET; }
-#define X_SDA_L {X_SDA_OUTPUT;X_SDA_CLEAR; }
-
-#define X_READ_SDA X_SDA_READ
-
-#define AS5600_DEFAULT_ADDRESS 0x36
-
-
-
-
-void X_IIC_Init(void)
-{
-
-X_SDA_OUTPUT;
-X_SCL_OUTPUT;
-X_SDA_SET;
-X_SCL_SET;
-}
-
-
-void X_IIC_Start(void)
-{
- X_SDA_H;
- X_SCK_H;
- delayMicroseconds(5);
- X_SDA_L;
- delayMicroseconds(5);
-
- X_SCK_L;
- delayMicroseconds(2);
-
-}
-
-
-void X_IIC_Stop(void)
-{
- X_SCK_L;
- X_SDA_L;
- delayMicroseconds(5);
- X_SCK_H;
- delayMicroseconds(5);
- X_SDA_H;
- delayMicroseconds(5);
-
-
-}
-
-
-u8 X_IIC_Wait_Ack(void)
-{
- u8 ucErrTime=0;
- X_SDA_H;delayMicroseconds(2);
- X_SCK_H;delayMicroseconds(2);
-
-
- X_SDA_INPUT;
-
- while(X_READ_SDA)
- {
- ucErrTime++;
- if(ucErrTime>250)
- {
- X_IIC_Stop();
- return 1;
- }
- }
-
- X_SCK_L;
- delayMicroseconds(2);
- return 0;
-}
-
-
-void X_IIC_Ack(void)
-{
- X_SCK_L;
- X_SDA_L;
- delayMicroseconds(2);
- X_SCK_H;
- delayMicroseconds(5);
-
- X_SCK_L;
- delayMicroseconds(2);
- X_SDA_H;
- delayMicroseconds(2);
-}
-
-
-void X_IIC_Nack(void)
-{
- X_SCK_L;
- X_SDA_H;
- delayMicroseconds(2);
- X_SCK_H;
- delayMicroseconds(5);
-
- X_SCK_L;
- delayMicroseconds(2);
- X_SDA_H;
- delayMicroseconds(2);
-}
-
-
-void X_IIC_SendByte(u8 Txdata)
-{
- u8 i;
- for(i=0;i<8;i++)
- {
- X_SCK_L;
- if(Txdata&0x80)
- X_SDA_H
- else
- X_SDA_L
- delayMicroseconds(5);
- X_SCK_H;
- delayMicroseconds(5);
- X_SCK_L;
- Txdata<<=1;
- delayMicroseconds(5);
- }
-
- delayMicroseconds(2);
- X_SDA_H;
- delayMicroseconds(2);
-}
-
-u8 X_IIC_ReadByte(u8 ack)
-{
- u8 i,receive=0;
-
- delayMicroseconds(2);
- X_SDA_H;
- delayMicroseconds(2);
-
- for(i=0;i<8;i++)
- {
- X_SCK_L;
- delayMicroseconds(5);
- X_SCK_H;
- receive<<=1;
- delayMicroseconds(5);
- X_SDA_INPUT;
-
- if(X_READ_SDA)
- receive|=0x01;
- else
- receive&=0xfe;
- delayMicroseconds(5);
- }
- if(!ack)
- X_IIC_Nack();
- else
- X_IIC_Ack();
-
- X_SCK_L;
- delayMicroseconds(2);
-
- return receive;
-}
-
-void X_IIC_Write_OneByte(u8 deviceaddr,u8 writeaddr,u8 writedata)
-{
- X_IIC_Start();
- X_IIC_SendByte(deviceaddr&0xfe);
- X_IIC_Wait_Ack();
- X_IIC_SendByte(writeaddr);
- X_IIC_Wait_Ack();
- X_IIC_SendByte(writedata);
- X_IIC_Wait_Ack();
- X_IIC_Stop();
- delay(10);
-}
-
-
-
-u8 X_IIC_Read_OneByte(u8 deviceaddr,u8 readaddr)
-{
- u8 temp;
- X_IIC_Start();
- X_IIC_SendByte(deviceaddr&0xfe);
- X_IIC_Wait_Ack();
- X_IIC_SendByte(readaddr);
- X_IIC_Wait_Ack();
-
- X_IIC_Start();
- X_IIC_SendByte(deviceaddr|0x01);
- X_IIC_Wait_Ack();
- temp=X_IIC_ReadByte(0);
- X_IIC_Stop();
- return temp;
-}
-
-
-
-
-
-
diff --git a/Marlin/X_IIC.h b/Marlin/X_IIC.h
deleted file mode 100644
index b56a030..0000000
--- a/Marlin/X_IIC.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _X_IIC_H
-#define _X_IIC_H
-
-#include
-
-void X_IIC_Init(void);
-
-void X_IIC_Write_OneByte(u8 deviceaddr,u8 writeaddr,u8 writedata);
-
-u8 X_IIC_Read_OneByte(u8 deviceaddr,u8 readaddr);
-
-
-#endif // _X_IIC_H
\ No newline at end of file
diff --git a/Marlin/Y_IIC.cpp b/Marlin/Y_IIC.cpp
deleted file mode 100644
index 39d2342..0000000
--- a/Marlin/Y_IIC.cpp
+++ /dev/null
@@ -1,202 +0,0 @@
-
-#include "Y_IIC.h"
-
-#define Y_SCK_PIN 34
-#define Y_SDA_PIN 36
-#define Y_SCK_H {digitalWrite(Y_SCK_PIN,1); }
-#define Y_SCK_L {digitalWrite(Y_SCK_PIN,0); }
-#define Y_SDA_H {pinMode(Y_SDA_PIN,OUTPUT);digitalWrite(Y_SDA_PIN,1); }
-#define Y_SDA_L {pinMode(Y_SDA_PIN,OUTPUT);digitalWrite(Y_SDA_PIN,0); }
-
-#define Y_READ_SDA digitalRead(Y_SDA_PIN)
-
-#define AS5600_DEFAULT_ADDRESS 0x36
-
-
-
-
-
-
-void Y_IIC_Init(void)
-{
- pinMode(Y_SCK_PIN, OUTPUT);
- pinMode(Y_SDA_PIN, OUTPUT);//INPUT,
- digitalWrite(Y_SCK_PIN,1);
- digitalWrite(Y_SDA_PIN,1);//digitalRead()
-}
-
-
-void Y_IIC_Start(void)
-{
- Y_SDA_H;
- Y_SCK_H;
- delayMicroseconds(5);
- Y_SDA_L;
- delayMicroseconds(5);
-
- Y_SCK_L;
- delayMicroseconds(2);
-
-}
-
-
-void Y_IIC_Stop(void)
-{
- Y_SCK_L;
- Y_SDA_L;
- delayMicroseconds(5);
- Y_SCK_H;
- delayMicroseconds(5);
- Y_SDA_H;
- delayMicroseconds(5);
-
-
-}
-
-
-u8 Y_IIC_Wait_Ack(void)
-{
- u8 ucErrTime=0;
- Y_SDA_H;delayMicroseconds(2);
- Y_SCK_H;delayMicroseconds(2);
-
- pinMode(Y_SDA_PIN, INPUT);
- while(Y_READ_SDA)
- {
- ucErrTime++;
- if(ucErrTime>250)
- {
- Y_IIC_Stop();
- return 1;
- }
- }
-
- Y_SCK_L;
- delayMicroseconds(2);
- return 0;
-}
-
-
-void Y_IIC_Ack(void)
-{
- Y_SCK_L;
- Y_SDA_L;
- delayMicroseconds(2);
- Y_SCK_H;
- delayMicroseconds(5);
-
- Y_SCK_L;
- delayMicroseconds(2);
- Y_SDA_H;
- delayMicroseconds(2);
-}
-
-
-void Y_IIC_Nack(void)
-{
- Y_SCK_L;
- Y_SDA_H;
- delayMicroseconds(2);
- Y_SCK_H;
- delayMicroseconds(5);
-
- Y_SCK_L;
- delayMicroseconds(2);
- Y_SDA_H;
- delayMicroseconds(2);
-}
-
-
-void Y_IIC_SendByte(u8 Txdata)
-{
- u8 i;
- for(i=0;i<8;i++)
- {
- Y_SCK_L;
- if(Txdata&0x80)
- Y_SDA_H
- else
- Y_SDA_L
- delayMicroseconds(5);
- Y_SCK_H;
- delayMicroseconds(5);
- Y_SCK_L;
- Txdata<<=1;
- delayMicroseconds(5);
- }
-
- delayMicroseconds(2);
- Y_SDA_H;
- delayMicroseconds(2);
-}
-
-u8 Y_IIC_ReadByte(u8 ack)
-{
- u8 i,receive=0;
-
- delayMicroseconds(2);
- Y_SDA_H;
- delayMicroseconds(2);
-
- for(i=0;i<8;i++)
- {
- Y_SCK_L;
- delayMicroseconds(5);
- Y_SCK_H;
- receive<<=1;
- delayMicroseconds(5);
- pinMode(Y_SDA_PIN, INPUT);
- if(Y_READ_SDA)
- receive|=0x01;
- else
- receive&=0xfe;
- delayMicroseconds(5);
- }
- if(!ack)
- Y_IIC_Nack();
- else
- Y_IIC_Ack();
-
- Y_SCK_L;
- delayMicroseconds(2);
-
- return receive;
-}
-
-void Y_IIC_Write_OneByte(u8 deviceaddr,u8 writeaddr,u8 writedata)
-{
- Y_IIC_Start();
- Y_IIC_SendByte(deviceaddr&0xfe);
- Y_IIC_Wait_Ack();
- Y_IIC_SendByte(writeaddr);
- Y_IIC_Wait_Ack();
- Y_IIC_SendByte(writedata);
- Y_IIC_Wait_Ack();
- Y_IIC_Stop();
- delay(10);
-}
-
-
-//res1 = Y_IIC_Read_OneByte((0x36<<1),0x0f);
-u8 Y_IIC_Read_OneByte(u8 deviceaddr,u8 readaddr)
-{
- u8 temp;
- Y_IIC_Start();
- Y_IIC_SendByte(deviceaddr&0xfe);
- Y_IIC_Wait_Ack();
- Y_IIC_SendByte(readaddr);
- Y_IIC_Wait_Ack();
-
- Y_IIC_Start();
- Y_IIC_SendByte(deviceaddr|0x01);
- Y_IIC_Wait_Ack();
- temp=Y_IIC_ReadByte(0);
- Y_IIC_Stop();
- return temp;
-}
-
-
-
-
-
-
diff --git a/Marlin/Y_IIC.h b/Marlin/Y_IIC.h
deleted file mode 100644
index 300f27c..0000000
--- a/Marlin/Y_IIC.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _Y_IIC_H
-#define _Y_IIC_H
-
-#include
-
-void Y_IIC_Init(void);
-
-void Y_IIC_Write_OneByte(u8 deviceaddr,u8 writeaddr,u8 writedata);
-
-u8 Y_IIC_Read_OneByte(u8 deviceaddr,u8 readaddr);
-
-
-#endif // _Y_IIC_H
\ No newline at end of file
diff --git a/Marlin/Z_IIC.cpp b/Marlin/Z_IIC.cpp
deleted file mode 100644
index dbc6222..0000000
--- a/Marlin/Z_IIC.cpp
+++ /dev/null
@@ -1,213 +0,0 @@
-#include "Z_IIC.h"
-
-#define Z_SDA_SET PORTH |= 0x04
-#define Z_SDA_CLEAR PORTH &= 0xFB
-#define Z_SCL_SET PORTH |= 0x80
-#define Z_SCL_CLEAR PORTH &= 0x7F
-
-#define Z_SDA_INPUT DDRH &= 0xFB
-#define Z_SDA_OUTPUT DDRH |= 0x04
-
-#define Z_SCL_INPUT DDRH &= 0x7F
-#define Z_SCL_OUTPUT DDRH |= 0x80
-
-#define Z_SDA_READ PINH & 0x04
-
-#define Z_PORT_DDR DDRH
-
-#define Z_SCK_H {Z_SCL_SET; }
-#define Z_SCK_L {Z_SCL_CLEAR; }
-#define Z_SDA_H {Z_SDA_OUTPUT;Z_SDA_SET; }
-#define Z_SDA_L {Z_SDA_OUTPUT;Z_SDA_CLEAR; }
-
-#define Z_READ_SDA Z_SDA_READ
-
-#define AS5600_DEFAULT_ADDRESS 0x36
-
-
-void Z_IIC_Init(void)
-{
- Z_SDA_OUTPUT;
- Z_SCL_OUTPUT;
- Z_SDA_SET;
- Z_SCL_SET;
-}
-
-
-void Z_IIC_Start(void)
-{
- Z_SDA_H;
- Z_SCK_H;
- delayMicroseconds(5);
- Z_SDA_L;
- delayMicroseconds(5);
-
- Z_SCK_L;
- delayMicroseconds(2);
-
-}
-
-
-void Z_IIC_Stop(void)
-{
- Z_SCK_L;
- Z_SDA_L;
- delayMicroseconds(5);
- Z_SCK_H;
- delayMicroseconds(5);
- Z_SDA_H;
- delayMicroseconds(5);
-
-
-}
-
-
-u8 Z_IIC_Wait_Ack(void)
-{
- u8 ucErrTime=0;
- Z_SDA_H;delayMicroseconds(2);
- Z_SCK_H;delayMicroseconds(2);
-
-
- Z_SDA_INPUT;
-
- while(Z_READ_SDA)
- {
- ucErrTime++;
- if(ucErrTime>250)
- {
- Z_IIC_Stop();
- return 1;
- }
- }
-
- Z_SCK_L;
- delayMicroseconds(2);
- return 0;
-}
-
-
-void Z_IIC_Ack(void)
-{
- Z_SCK_L;
- Z_SDA_L;
- delayMicroseconds(2);
- Z_SCK_H;
- delayMicroseconds(5);
-
- Z_SCK_L;
- delayMicroseconds(2);
- Z_SDA_H;
- delayMicroseconds(2);
-}
-
-
-void Z_IIC_Nack(void)
-{
- Z_SCK_L;
- Z_SDA_H;
- delayMicroseconds(2);
- Z_SCK_H;
- delayMicroseconds(5);
-
- Z_SCK_L;
- delayMicroseconds(2);
- Z_SDA_H;
- delayMicroseconds(2);
-}
-
-
-void Z_IIC_SendByte(u8 Txdata)
-{
- u8 i;
- for(i=0;i<8;i++)
- {
- Z_SCK_L;
- if(Txdata&0x80)
- Z_SDA_H
- else
- Z_SDA_L
- delayMicroseconds(5);
- Z_SCK_H;
- delayMicroseconds(5);
- Z_SCK_L;
- Txdata<<=1;
- delayMicroseconds(5);
- }
-
- delayMicroseconds(2);
- Z_SDA_H;
- delayMicroseconds(2);
-}
-
-u8 Z_IIC_ReadByte(u8 ack)
-{
- u8 i,receive=0;
-
- delayMicroseconds(2);
- Z_SDA_H;
- delayMicroseconds(2);
-
- for(i=0;i<8;i++)
- {
- Z_SCK_L;
- delayMicroseconds(5);
- Z_SCK_H;
- receive<<=1;
- delayMicroseconds(5);
- Z_SDA_INPUT;
-
- if(Z_READ_SDA)
- receive|=0x01;
- else
- receive&=0xfe;
- delayMicroseconds(5);
- }
- if(!ack)
- Z_IIC_Nack();
- else
- Z_IIC_Ack();
-
- Z_SCK_L;
- delayMicroseconds(2);
-
- return receive;
-}
-
-void Z_IIC_Write_OneByte(u8 deviceaddr,u8 writeaddr,u8 writedata)
-{
- Z_IIC_Start();
- Z_IIC_SendByte(deviceaddr&0xfe);
- Z_IIC_Wait_Ack();
- Z_IIC_SendByte(writeaddr);
- Z_IIC_Wait_Ack();
- Z_IIC_SendByte(writedata);
- Z_IIC_Wait_Ack();
- Z_IIC_Stop();
- delay(10);
-}
-
-
-
-u8 Z_IIC_Read_OneByte(u8 deviceaddr,u8 readaddr)
-{
- u8 temp;
- Z_IIC_Start();
- Z_IIC_SendByte(deviceaddr&0xfe);
- Z_IIC_Wait_Ack();
- Z_IIC_SendByte(readaddr);
- Z_IIC_Wait_Ack();
-
- Z_IIC_Start();
- Z_IIC_SendByte(deviceaddr|0x01);
- Z_IIC_Wait_Ack();
- temp=Z_IIC_ReadByte(0);
- Z_IIC_Stop();
- return temp;
-}
-
-
-
-
-
-
diff --git a/Marlin/Z_IIC.h b/Marlin/Z_IIC.h
deleted file mode 100644
index 2846424..0000000
--- a/Marlin/Z_IIC.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _Z_IIC_H
-#define _Z_IIC_H
-
-#include
-
-void Z_IIC_Init(void);
-
-void Z_IIC_Write_OneByte(u8 deviceaddr,u8 writeaddr,u8 writedata);
-
-u8 Z_IIC_Read_OneByte(u8 deviceaddr,u8 readaddr);
-
-
-#endif // _Z_IIC_H
\ No newline at end of file
diff --git a/Marlin/blinkm.cpp b/Marlin/blinkm.cpp
deleted file mode 100644
index c495a5d..0000000
--- a/Marlin/blinkm.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * blinkm.cpp - Library for controlling a BlinkM over i2c
- * Created by Tim Koster, August 21 2013.
- */
-
-#include "Marlin.h"
-
-#if ENABLED(BLINKM)
-
-#include "blinkm.h"
-
-void SendColors(byte red, byte grn, byte blu) {
- Wire.begin();
- Wire.beginTransmission(0x09);
- Wire.write('o'); //to disable ongoing script, only needs to be used once
- Wire.write('n');
- Wire.write(red);
- Wire.write(grn);
- Wire.write(blu);
- Wire.endTransmission();
-}
-
-#endif //BLINKM
-
diff --git a/Marlin/blinkm.h b/Marlin/blinkm.h
deleted file mode 100644
index ed2ad79..0000000
--- a/Marlin/blinkm.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * blinkm.h - Library for controlling a BlinkM over i2c
- * Created by Tim Koster, August 21 2013.
- */
-
-#include "Arduino.h"
-#include "Wire.h"
-
-void SendColors(byte red, byte grn, byte blu);
diff --git a/Marlin/boards.h b/Marlin/boards.h
deleted file mode 100644
index dae3a1c..0000000
--- a/Marlin/boards.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-#ifndef BOARDS_H
-#define BOARDS_H
-
-#define BOARD_UNKNOWN -1
-
-#define BOARD_GEN7_CUSTOM 10 // Gen7 custom (Alfons3 Version) "https://github.com/Alfons3/Generation_7_Electronics"
-#define BOARD_GEN7_12 11 // Gen7 v1.1, v1.2
-#define BOARD_GEN7_13 12 // Gen7 v1.3
-#define BOARD_GEN7_14 13 // Gen7 v1.4
-#define BOARD_CNCONTROLS_11 111 // Cartesio CN Controls V11
-#define BOARD_CNCONTROLS_12 112 // Cartesio CN Controls V12
-#define BOARD_CHEAPTRONIC 2 // Cheaptronic v1.0
-#define BOARD_SETHI 20 // Sethi 3D_1
-#define BOARD_RAMPS_OLD 3 // MEGA/RAMPS up to 1.2
-#define BOARD_RAMPS_13_EFB 33 // RAMPS 1.3 (Power outputs: Hotend, Fan, Bed)
-#define BOARD_RAMPS_13_EEB 34 // RAMPS 1.3 (Power outputs: Hotend0, Hotend1, Bed)
-#define BOARD_RAMPS_13_EFF 35 // RAMPS 1.3 (Power outputs: Hotend, Fan0, Fan1)
-#define BOARD_RAMPS_13_EEF 36 // RAMPS 1.3 (Power outputs: Hotend0, Hotend1, Fan)
-#define BOARD_RAMPS_13_SF 38 // RAMPS 1.3 (Power outputs: Spindle, Controller Fan)
-#define BOARD_FELIX2 37 // Felix 2.0+ Electronics Board (RAMPS like)
-#define BOARD_RIGIDBOARD 42 // Invent-A-Part RigidBoard
-#define BOARD_RIGIDBOARD_V2 52 // Invent-A-Part RigidBoard V2
-#define BOARD_RAMPS_14_EFB 43 // RAMPS 1.4 (Power outputs: Hotend, Fan, Bed)
-#define BOARD_RAMPS_14_EEB 44 // RAMPS 1.4 (Power outputs: Hotend0, Hotend1, Bed)
-#define BOARD_RAMPS_14_EFF 45 // RAMPS 1.4 (Power outputs: Hotend, Fan0, Fan1)
-#define BOARD_RAMPS_14_EEF 46 // RAMPS 1.4 (Power outputs: Hotend0, Hotend1, Fan)
-#define BOARD_RAMPS_14_SF 48 // RAMPS 1.4 (Power outputs: Spindle, Controller Fan)
-#define BOARD_GEN6 5 // Gen6
-#define BOARD_GEN6_DELUXE 51 // Gen6 deluxe
-#define BOARD_SANGUINOLOLU_11 6 // Sanguinololu < 1.2
-#define BOARD_SANGUINOLOLU_12 62 // Sanguinololu 1.2 and above
-#define BOARD_MELZI 63 // Melzi
-#define BOARD_STB_11 64 // STB V1.1
-#define BOARD_AZTEEG_X1 65 // Azteeg X1
-#define BOARD_MELZI_MAKR3D 66 // Melzi with ATmega1284 (MaKr3d version)
-#define BOARD_AZTEEG_X3 67 // Azteeg X3
-#define BOARD_AZTEEG_X3_PRO 68 // Azteeg X3 Pro
-#define BOARD_ULTIMAKER 7 // Ultimaker
-#define BOARD_ULTIMAKER_OLD 71 // Ultimaker (Older electronics. Pre 1.5.4. This is rare)
-#define BOARD_ULTIMAIN_2 72 // Ultimainboard 2.x (Uses TEMP_SENSOR 20)
-#define BOARD_3DRAG 77 // 3Drag Controller
-#define BOARD_K8200 78 // Velleman K8200 Controller (derived from 3Drag Controller)
-#define BOARD_K8400 79 // Velleman K8400 Controller (derived from 3Drag Controller)
-#define BOARD_TEENSYLU 8 // Teensylu
-#define BOARD_RUMBA 80 // Rumba
-#define BOARD_PRINTRBOARD 81 // Printrboard (AT90USB1286)
-#define BOARD_PRINTRBOARD_REVF 811 // Printrboard Revision F (AT90USB1286)
-#define BOARD_BRAINWAVE 82 // Brainwave (AT90USB646)
-#define BOARD_SAV_MKI 83 // SAV Mk-I (AT90USB1286)
-#define BOARD_TEENSY2 84 // Teensy++2.0 (AT90USB1286) - CLI compile: DEFINES=AT90USBxx_TEENSYPP_ASSIGNMENTS HARDWARE_MOTHERBOARD=84 make
-#define BOARD_BRAINWAVE_PRO 85 // Brainwave Pro (AT90USB1286)
-#define BOARD_GEN3_PLUS 9 // Gen3+
-#define BOARD_GEN3_MONOLITHIC 22 // Gen3 Monolithic Electronics
-#define BOARD_MEGATRONICS 70 // Megatronics
-#define BOARD_MEGATRONICS_2 701 // Megatronics v2.0
-#define BOARD_MINITRONICS 702 // Minitronics v1.0/1.1
-#define BOARD_MEGATRONICS_3 703 // Megatronics v3.0
-#define BOARD_OMCA_A 90 // Alpha OMCA board
-#define BOARD_OMCA 91 // Final OMCA board
-#define BOARD_RAMBO 301 // Rambo
-#define BOARD_MINIRAMBO 302 // Mini-Rambo
-#define BOARD_AJ4P 303 // AJ4P
-#define BOARD_MEGACONTROLLER 310 // Mega controller
-#define BOARD_ELEFU_3 21 // Elefu Ra Board (v3)
-#define BOARD_5DPRINT 88 // 5DPrint D8 Driver Board
-#define BOARD_LEAPFROG 999 // Leapfrog
-#define BOARD_MKS_BASE 40 // MKS BASE 1.0
-#define BOARD_MKS_13 47 // MKS v1.3 or 1.4 (maybe higher)
-#define BOARD_SAINSMART_2IN1 49 // Sainsmart 2-in-1 board
-#define BOARD_BAM_DICE 401 // 2PrintBeta BAM&DICE with STK drivers
-#define BOARD_BAM_DICE_DUE 402 // 2PrintBeta BAM&DICE Due with STK drivers
-#define BOARD_BQ_ZUM_MEGA_3D 503 // bq ZUM Mega 3D
-
-#define BOARD_SWIFT_10 510 // Swift
-
-#define BOARD_99 99 // This is in pins.h but...?
-
-#define MB(board) (MOTHERBOARD==BOARD_##board)
-
-#endif //__BOARDS_H
diff --git a/Marlin/buzzer.h b/Marlin/buzzer.h
deleted file mode 100644
index 199d64e..0000000
--- a/Marlin/buzzer.h
+++ /dev/null
@@ -1,145 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-#ifndef __BUZZER_H__
-#define __BUZZER_H__
-
-#include "types.h"
-#include "fastio.h"
-#include "circularqueue.h"
-#include "temperature.h"
-
-#include "MarlinConfig.h"
-
-#define TONE_QUEUE_LENGTH 4
-
-/**
- * @brief Tone structure
- * @details Simple abstraction of a tone based on a duration and a frequency.
- */
-struct tone_t {
- uint16_t duration;
- uint16_t frequency;
-};
-
-/**
- * @brief Buzzer class
- */
-class Buzzer {
- private:
- struct state_t {
- tone_t tone;
- uint32_t endtime;
- } state;
-
- protected:
- CircularQueue buffer;
-
- /**
- * @brief Inverts the sate of a digital PIN
- * @details This will invert the current state of an digital IO pin.
- */
- void invert() {
- TOGGLE(BEEPER_PIN);
- }
-
- /**
- * @brief Turn off a digital PIN
- * @details Alias of digitalWrite(PIN, LOW) using FastIO
- */
- void off() {
- WRITE(BEEPER_PIN, LOW);
- }
-
- /**
- * @brief Turn on a digital PIN
- * @details Alias of digitalWrite(PIN, HIGH) using FastIO
- */
- void on() {
- WRITE(BEEPER_PIN, HIGH);
- }
-
- /**
- * @brief Resets the state of the class
- * @details Brings the class state to a known one.
- */
- void reset() {
- this->off();
- this->state.endtime = 0;
- }
-
- public:
- /**
- * @brief Class constructor
- */
- Buzzer() {
- SET_OUTPUT(BEEPER_PIN);
- this->reset();
- }
-
- /**
- * @brief Add a tone to the queue
- * @details Adds a tone_t structure to the ring buffer, will block IO if the
- * queue is full waiting for one slot to get available.
- *
- * @param duration Duration of the tone in milliseconds
- * @param frequency Frequency of the tone in hertz
- */
- void tone(uint16_t const &duration, uint16_t const &frequency = 0) {
- while (buffer.isFull()) {
- this->tick();
- thermalManager.manage_heater();
- }
- this->buffer.enqueue((tone_t) { duration, frequency });
- }
-
- /**
- * @brief Loop function
- * @details This function should be called at loop, it will take care of
- * playing the tones in the queue.
- */
- virtual void tick() {
- const millis_t now = millis();
-
- if (!this->state.endtime) {
- if (this->buffer.isEmpty()) return;
-
- this->state.tone = this->buffer.dequeue();
- this->state.endtime = now + this->state.tone.duration;
-
- if (this->state.tone.frequency > 0) {
- #if ENABLED(SPEAKER)
- CRITICAL_SECTION_START;
- ::tone(BEEPER_PIN, this->state.tone.frequency, this->state.tone.duration);
- CRITICAL_SECTION_END;
- #else
- this->on();
- #endif
- }
- }
- else if (ELAPSED(now, this->state.endtime)) this->reset();
- }
-};
-
-extern Buzzer buzzer;
-
-#endif
diff --git a/Marlin/cardreader.cpp b/Marlin/cardreader.cpp
deleted file mode 100644
index 65b4093..0000000
--- a/Marlin/cardreader.cpp
+++ /dev/null
@@ -1,624 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-#include "cardreader.h"
-
-#include "ultralcd.h"
-#include "stepper.h"
-#include "temperature.h"
-#include "language.h"
-
-#include "Marlin.h"
-
-#if ENABLED(SDSUPPORT)
-
-CardReader::CardReader() {
- filesize = 0;
- sdpos = 0;
- sdprinting = false;
- cardOK = false;
- saving = false;
- logging = false;
- workDirDepth = 0;
- file_subcall_ctr = 0;
- memset(workDirParents, 0, sizeof(workDirParents));
-
- autostart_stilltocheck = true; //the SD start is delayed, because otherwise the serial cannot answer fast enough to make contact with the host software.
- autostart_index = 0;
-
- //power to SD reader
- #if SDPOWER > -1
- OUT_WRITE(SDPOWER, HIGH);
- #endif //SDPOWER
-
- next_autostart_ms = millis() + 5000;
-}
-
-char *createFilename(char *buffer, const dir_t &p) { //buffer > 12characters
- char *pos = buffer;
- for (uint8_t i = 0; i < 11; i++) {
- if (p.name[i] == ' ') continue;
- if (i == 8) *pos++ = '.';
- *pos++ = p.name[i];
- }
- *pos++ = 0;
- return buffer;
-}
-
-/**
- * Dive into a folder and recurse depth-first to perform a pre-set operation lsAction:
- * LS_Count - Add +1 to nrFiles for every file within the parent
- * LS_GetFilename - Get the filename of the file indexed by nrFiles
- * LS_SerialPrint - Print the full path of each file to serial output
- */
-void CardReader::lsDive(const char *prepend, SdFile parent, const char * const match/*=NULL*/) {
- dir_t p;
- uint8_t cnt = 0;
-
- // Read the next entry from a directory
- while (parent.readDir(p, longFilename) > 0) {
-
- // If the entry is a directory and the action is LS_SerialPrint
- if (DIR_IS_SUBDIR(&p) && lsAction != LS_Count && lsAction != LS_GetFilename) {
-
- // Get the short name for the item, which we know is a folder
- char lfilename[FILENAME_LENGTH];
- createFilename(lfilename, p);
-
- // Allocate enough stack space for the full path to a folder, trailing slash, and nul
- boolean prepend_is_empty = (prepend[0] == '\0');
- int len = (prepend_is_empty ? 1 : strlen(prepend)) + strlen(lfilename) + 1 + 1;
- char path[len];
-
- // Append the FOLDERNAME12/ to the passed string.
- // It contains the full path to the "parent" argument.
- // We now have the full path to the item in this folder.
- strcpy(path, prepend_is_empty ? "/" : prepend); // root slash if prepend is empty
- strcat(path, lfilename); // FILENAME_LENGTH-1 characters maximum
- strcat(path, "/"); // 1 character
-
- // Serial.print(path);
-
- // Get a new directory object using the full path
- // and dive recursively into it.
- SdFile dir;
- if (!dir.open(parent, lfilename, O_READ)) {
- if (lsAction == LS_SerialPrint) {
- SERIAL_ECHO_START;
- SERIAL_ECHOPGM(MSG_SD_CANT_OPEN_SUBDIR);
- SERIAL_ECHOLN(lfilename);
- }
- }
- lsDive(path, dir);
- // close() is done automatically by destructor of SdFile
- }
- else {
- uint8_t pn0 = p.name[0];
- if (pn0 == DIR_NAME_FREE) break;
- if (pn0 == DIR_NAME_DELETED || pn0 == '.') continue;
- if (longFilename[0] == '.') continue;
-
- if (!DIR_IS_FILE_OR_SUBDIR(&p)) continue;
-
- filenameIsDir = DIR_IS_SUBDIR(&p);
-
- if (!filenameIsDir && (p.name[8] != 'G' || p.name[9] == '~')) continue;
-
- switch (lsAction) {
- case LS_Count:
- nrFiles++;
- break;
- case LS_SerialPrint:
- createFilename(filename, p);
- SERIAL_PROTOCOL(prepend);
- SERIAL_PROTOCOLLN(filename);
- break;
- case LS_GetFilename:
- createFilename(filename, p);
- if (match != NULL) {
- if (strcasecmp(match, filename) == 0) return;
- }
- else if (cnt == nrFiles) return;
- cnt++;
- break;
- }
-
- }
- } // while readDir
-}
-
-void CardReader::ls() {
- lsAction = LS_SerialPrint;
- root.rewind();
- lsDive("", root);
-}
-
-#if ENABLED(LONG_FILENAME_HOST_SUPPORT)
-
- /**
- * Get a long pretty path based on a DOS 8.3 path
- */
- void CardReader::printLongPath(char *path) {
- lsAction = LS_GetFilename;
-
- int i, pathLen = strlen(path);
-
- // SERIAL_ECHOPGM("Full Path: "); SERIAL_ECHOLN(path);
-
- // Zero out slashes to make segments
- for (i = 0; i < pathLen; i++) if (path[i] == '/') path[i] = '\0';
-
- SdFile diveDir = root; // start from the root for segment 1
- for (i = 0; i < pathLen;) {
-
- if (path[i] == '\0') i++; // move past a single nul
-
- char *segment = &path[i]; // The segment after most slashes
-
- // If a segment is empty (extra-slash) then exit
- if (!*segment) break;
-
- // Go to the next segment
- while (path[++i]) { }
-
- // SERIAL_ECHOPGM("Looking for segment: "); SERIAL_ECHOLN(segment);
-
- // Find the item, setting the long filename
- diveDir.rewind();
- lsDive("", diveDir, segment);
-
- // Print /LongNamePart to serial output
- SERIAL_PROTOCOLCHAR('/');
- SERIAL_PROTOCOL(longFilename[0] ? longFilename : "???");
-
- // If the filename was printed then that's it
- if (!filenameIsDir) break;
-
- // SERIAL_ECHOPGM("Opening dir: "); SERIAL_ECHOLN(segment);
-
- // Open the sub-item as the new dive parent
- SdFile dir;
- if (!dir.open(diveDir, segment, O_READ)) {
- SERIAL_EOL;
- SERIAL_ECHO_START;
- SERIAL_ECHOPGM(MSG_SD_CANT_OPEN_SUBDIR);
- SERIAL_ECHO(segment);
- break;
- }
-
- diveDir.close();
- diveDir = dir;
-
- } // while i SD_PROCEDURE_DEPTH - 1) {
- SERIAL_ERROR_START;
- SERIAL_ERRORPGM("trying to call sub-gcode files with too many levels. MAX level is:");
- SERIAL_ERRORLN(SD_PROCEDURE_DEPTH);
- kill(PSTR(MSG_KILLED));
- return;
- }
-
- SERIAL_ECHO_START;
- SERIAL_ECHOPGM("SUBROUTINE CALL target:\"");
- SERIAL_ECHO(name);
- SERIAL_ECHOPGM("\" parent:\"");
-
- //store current filename and position
- getAbsFilename(proc_filenames[file_subcall_ctr]);
-
- SERIAL_ECHO(proc_filenames[file_subcall_ctr]);
- SERIAL_ECHOPGM("\" pos");
- SERIAL_ECHOLN(sdpos);
- filespos[file_subcall_ctr] = sdpos;
- file_subcall_ctr++;
- }
- else {
- SERIAL_ECHO_START;
- SERIAL_ECHOPGM("Now doing file: ");
- SERIAL_ECHOLN(name);
- }
- file.close();
- }
- else { //opening fresh file
- file_subcall_ctr = 0; //resetting procedure depth in case user cancels print while in procedure
- SERIAL_ECHO_START;
- SERIAL_ECHOPGM("Now fresh file: ");
- SERIAL_ECHOLN(name);
- }
- sdprinting = false;
-
- SdFile myDir;
- curDir = &root;
- char *fname = name;
-
- char *dirname_start, *dirname_end;
- if (name[0] == '/') {
- dirname_start = &name[1];
- while (dirname_start != NULL) {
- dirname_end = strchr(dirname_start, '/');
- //SERIAL_ECHOPGM("start:");SERIAL_ECHOLN((int)(dirname_start - name));
- //SERIAL_ECHOPGM("end :");SERIAL_ECHOLN((int)(dirname_end - name));
- if (dirname_end != NULL && dirname_end > dirname_start) {
- char subdirname[FILENAME_LENGTH];
- strncpy(subdirname, dirname_start, dirname_end - dirname_start);
- subdirname[dirname_end - dirname_start] = 0;
- SERIAL_ECHOLN(subdirname);
- if (!myDir.open(curDir, subdirname, O_READ)) {
- SERIAL_PROTOCOLPGM(MSG_SD_OPEN_FILE_FAIL);
- SERIAL_PROTOCOL(subdirname);
- SERIAL_PROTOCOLCHAR('.');
- return;
- }
- else {
- //SERIAL_ECHOLNPGM("dive ok");
- }
-
- curDir = &myDir;
- dirname_start = dirname_end + 1;
- }
- else { // the remainder after all /fsa/fdsa/ is the filename
- fname = dirname_start;
- //SERIAL_ECHOLNPGM("remainder");
- //SERIAL_ECHOLN(fname);
- break;
- }
- }
- }
- else { //relative path
- curDir = &workDir;
- }
-
- if (read) {
- if (file.open(curDir, fname, O_READ)) {
- filesize = file.fileSize();
- SERIAL_PROTOCOLPAIR(MSG_SD_FILE_OPENED, fname);
- SERIAL_PROTOCOLPAIR(MSG_SD_SIZE, filesize);
- SERIAL_EOL;
- sdpos = 0;
-
- SERIAL_PROTOCOLLNPGM(MSG_SD_FILE_SELECTED);
- getfilename(0, fname);
- lcd_setstatus(longFilename[0] ? longFilename : fname);
- }
- else {
- SERIAL_PROTOCOLPAIR(MSG_SD_OPEN_FILE_FAIL, fname);
- SERIAL_PROTOCOLCHAR('.');
- SERIAL_EOL;
- }
- }
- else { //write
- if (!file.open(curDir, fname, O_CREAT | O_APPEND | O_WRITE | O_TRUNC)) {
- SERIAL_PROTOCOLPAIR(MSG_SD_OPEN_FILE_FAIL, fname);
- SERIAL_PROTOCOLCHAR('.');
- SERIAL_EOL;
- }
- else {
- saving = true;
- SERIAL_PROTOCOLPAIR(MSG_SD_WRITE_TO_FILE, name);
- SERIAL_EOL;
- lcd_setstatus(fname);
- }
- }
-}
-
-void CardReader::removeFile(char* name) {
- if (!cardOK) return;
-
- file.close();
- sdprinting = false;
-
- SdFile myDir;
- curDir = &root;
- char *fname = name;
-
- char *dirname_start, *dirname_end;
- if (name[0] == '/') {
- dirname_start = strchr(name, '/') + 1;
- while (dirname_start != NULL) {
- dirname_end = strchr(dirname_start, '/');
- //SERIAL_ECHOPGM("start:");SERIAL_ECHOLN((int)(dirname_start - name));
- //SERIAL_ECHOPGM("end :");SERIAL_ECHOLN((int)(dirname_end - name));
- if (dirname_end != NULL && dirname_end > dirname_start) {
- char subdirname[FILENAME_LENGTH];
- strncpy(subdirname, dirname_start, dirname_end - dirname_start);
- subdirname[dirname_end - dirname_start] = 0;
- SERIAL_ECHOLN(subdirname);
- if (!myDir.open(curDir, subdirname, O_READ)) {
- SERIAL_PROTOCOLPAIR("open failed, File: ", subdirname);
- SERIAL_PROTOCOLCHAR('.');
- return;
- }
- else {
- //SERIAL_ECHOLNPGM("dive ok");
- }
-
- curDir = &myDir;
- dirname_start = dirname_end + 1;
- }
- else { // the remainder after all /fsa/fdsa/ is the filename
- fname = dirname_start;
- //SERIAL_ECHOLNPGM("remainder");
- //SERIAL_ECHOLN(fname);
- break;
- }
- }
- }
- else { // relative path
- curDir = &workDir;
- }
-
- if (file.remove(curDir, fname)) {
- SERIAL_PROTOCOLPGM("File deleted:");
- SERIAL_PROTOCOLLN(fname);
- sdpos = 0;
- }
- else {
- SERIAL_PROTOCOLPGM("Deletion failed, File: ");
- SERIAL_PROTOCOL(fname);
- SERIAL_PROTOCOLCHAR('.');
- }
-}
-
-void CardReader::getStatus() {
- if (cardOK) {
- SERIAL_PROTOCOLPGM(MSG_SD_PRINTING_BYTE);
- SERIAL_PROTOCOL(sdpos);
- SERIAL_PROTOCOLCHAR('/');
- SERIAL_PROTOCOLLN(filesize);
- }
- else {
- SERIAL_PROTOCOLLNPGM(MSG_SD_NOT_PRINTING);
- }
-}
-
-void CardReader::write_command(char *buf) {
- char* begin = buf;
- char* npos = 0;
- char* end = buf + strlen(buf) - 1;
-
- file.writeError = false;
- if ((npos = strchr(buf, 'N')) != NULL) {
- begin = strchr(npos, ' ') + 1;
- end = strchr(npos, '*') - 1;
- }
- end[1] = '\r';
- end[2] = '\n';
- end[3] = '\0';
- file.write(begin);
- if (file.writeError) {
- SERIAL_ERROR_START;
- SERIAL_ERRORLNPGM(MSG_SD_ERR_WRITE_TO_FILE);
- }
-}
-
-void CardReader::checkautostart(bool force) {
- if (!force && (!autostart_stilltocheck || ELAPSED(millis(), next_autostart_ms)))
- return;
-
- autostart_stilltocheck = false;
-
- if (!cardOK) {
- initsd();
- if (!cardOK) return; // fail
- }
-
- char autoname[10];
- sprintf_P(autoname, PSTR("auto%i.g"), autostart_index);
- for (int8_t i = 0; i < (int8_t)strlen(autoname); i++) autoname[i] = tolower(autoname[i]);
-
- dir_t p;
-
- root.rewind();
-
- bool found = false;
- while (root.readDir(p, NULL) > 0) {
- for (int8_t i = 0; i < (int8_t)strlen((char*)p.name); i++) p.name[i] = tolower(p.name[i]);
- if (p.name[9] != '~' && strncmp((char*)p.name, autoname, 5) == 0) {
- openAndPrintFile(autoname);
- found = true;
- }
- }
- if (!found)
- autostart_index = -1;
- else
- autostart_index++;
-}
-
-void CardReader::closefile(bool store_location) {
- file.sync();
- file.close();
- saving = logging = false;
-
- if (store_location) {
- //future: store printer state, filename and position for continuing a stopped print
- // so one can unplug the printer and continue printing the next day.
- }
-}
-
-/**
- * Get the name of a file in the current directory by index
- */
-void CardReader::getfilename(uint16_t nr, const char * const match/*=NULL*/) {
- curDir = &workDir;
- lsAction = LS_GetFilename;
- nrFiles = nr;
- curDir->rewind();
- lsDive("", *curDir, match);
-}
-
-uint16_t CardReader::getnrfilenames() {
- curDir = &workDir;
- lsAction = LS_Count;
- nrFiles = 0;
- curDir->rewind();
- lsDive("", *curDir);
- //SERIAL_ECHOLN(nrFiles);
- return nrFiles;
-}
-
-void CardReader::chdir(const char * relpath) {
- SdFile newfile;
- SdFile *parent = &root;
-
- if (workDir.isOpen()) parent = &workDir;
-
- if (!newfile.open(*parent, relpath, O_READ)) {
- SERIAL_ECHO_START;
- SERIAL_ECHOPGM(MSG_SD_CANT_ENTER_SUBDIR);
- SERIAL_ECHOLN(relpath);
- }
- else {
- if (workDirDepth < MAX_DIR_DEPTH)
- workDirParents[workDirDepth++] = *parent;
- workDir = newfile;
- }
-}
-
-void CardReader::updir() {
- if (workDirDepth > 0)
- workDir = workDirParents[--workDirDepth];
-}
-
-void CardReader::printingHasFinished() {
- stepper.synchronize();
- file.close();
- if (file_subcall_ctr > 0) { // Heading up to a parent file that called current as a procedure.
- file_subcall_ctr--;
- openFile(proc_filenames[file_subcall_ctr], true, true);
- setIndex(filespos[file_subcall_ctr]);
- startFileprint();
- }
- else {
- sdprinting = false;
- if (SD_FINISHED_STEPPERRELEASE)
- enqueue_and_echo_commands_P(PSTR(SD_FINISHED_RELEASECOMMAND));
- print_job_timer.stop();
- if (print_job_timer.duration() > 60)
- enqueue_and_echo_commands_P(PSTR("M31"));
- }
-}
-
-#endif //SDSUPPORT
diff --git a/Marlin/cardreader.h b/Marlin/cardreader.h
deleted file mode 100644
index 8c22e58..0000000
--- a/Marlin/cardreader.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-#ifndef CARDREADER_H
-#define CARDREADER_H
-
-#include "MarlinConfig.h"
-
-#if ENABLED(SDSUPPORT)
-
-#define MAX_DIR_DEPTH 10 // Maximum folder depth
-
-#include "SdFile.h"
-
-#include "types.h"
-#include "enum.h"
-
-class CardReader {
-public:
- CardReader();
-
- void initsd();
- void write_command(char *buf);
- //files auto[0-9].g on the sd card are performed in a row
- //this is to delay autostart and hence the initialisaiton of the sd card to some seconds after the normal init, so the device is available quick after a reset
-
- void checkautostart(bool x);
- void openFile(char* name, bool read, bool push_current=false);
- void openLogFile(char* name);
- void removeFile(char* name);
- void closefile(bool store_location=false);
- void release();
- void openAndPrintFile(const char *name);
- void startFileprint();
- void pauseSDPrint();
- void stopSDPrint();
- void getStatus();
- void printingHasFinished();
-
- #if ENABLED(LONG_FILENAME_HOST_SUPPORT)
- void printLongPath(char *path);
- #endif
-
- void getfilename(uint16_t nr, const char* const match=NULL);
- uint16_t getnrfilenames();
-
- void getAbsFilename(char *t);
-
- void ls();
- void chdir(const char *relpath);
- void updir();
- void setroot();
-
- FORCE_INLINE bool isFileOpen() { return file.isOpen(); }
- FORCE_INLINE bool eof() { return sdpos >= filesize; }
- FORCE_INLINE int16_t get() { sdpos = file.curPosition(); return (int16_t)file.read(); }
- FORCE_INLINE void setIndex(long index) { sdpos = index; file.seekSet(index); }
- FORCE_INLINE uint8_t percentDone() { return (isFileOpen() && filesize) ? sdpos / ((filesize + 99) / 100) : 0; }
- FORCE_INLINE char* getWorkDirName() { workDir.getFilename(filename); return filename; }
-
-public:
- bool saving, logging, sdprinting, cardOK, filenameIsDir;
- char filename[FILENAME_LENGTH], longFilename[LONG_FILENAME_LENGTH];
- int autostart_index;
-private:
- SdFile root, *curDir, workDir, workDirParents[MAX_DIR_DEPTH];
- uint8_t workDirDepth;
- Sd2Card card;
- SdVolume volume;
- SdFile file;
-
- #define SD_PROCEDURE_DEPTH 1
- #define MAXPATHNAMELENGTH (FILENAME_LENGTH*MAX_DIR_DEPTH + MAX_DIR_DEPTH + 1)
- uint8_t file_subcall_ctr;
- uint32_t filespos[SD_PROCEDURE_DEPTH];
- char proc_filenames[SD_PROCEDURE_DEPTH][MAXPATHNAMELENGTH];
- uint32_t filesize;
- uint32_t sdpos;
-
- millis_t next_autostart_ms;
- bool autostart_stilltocheck; //the sd start is delayed, because otherwise the serial cannot answer fast enought to make contact with the hostsoftware.
-
- LsAction lsAction; //stored for recursion.
- uint16_t nrFiles; //counter for the files in the current directory and recycled as position counter for getting the nrFiles'th name in the directory.
- char* diveDirName;
- void lsDive(const char *prepend, SdFile parent, const char * const match=NULL);
-};
-
-extern CardReader card;
-
-#define IS_SD_PRINTING (card.sdprinting)
-
-#if PIN_EXISTS(SD_DETECT)
- #if ENABLED(SD_DETECT_INVERTED)
- #define IS_SD_INSERTED (READ(SD_DETECT_PIN) != 0)
- #else
- #define IS_SD_INSERTED (READ(SD_DETECT_PIN) == 0)
- #endif
-#else
- //No card detect line? Assume the card is inserted.
- #define IS_SD_INSERTED true
-#endif
-
-#else
-
-#define IS_SD_PRINTING (false)
-
-#endif //SDSUPPORT
-
-#endif //__CARDREADER_H
diff --git a/Marlin/circularqueue.h b/Marlin/circularqueue.h
deleted file mode 100644
index 9aafb99..0000000
--- a/Marlin/circularqueue.h
+++ /dev/null
@@ -1,145 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-#ifndef __CIRCULARQUEUE_H__
-#define __CIRCULARQUEUE_H__
-
-#include
-
-/**
- * @brief Circular Queue class
- * @details Implementation of the classic ring buffer data structure
- */
-template
-class CircularQueue {
- private:
-
- /**
- * @brief Buffer structure
- * @details This structure consolidates all the overhead required to handle
- * a circular queue such as the pointers and the buffer vector.
- */
- struct buffer_t {
- uint8_t head;
- uint8_t tail;
- uint8_t count;
- uint8_t size;
- T queue[N];
- } buffer;
-
- public:
- /**
- * @brief Class constructor
- * @details This class requires two template parameters, T defines the type
- * of item this queue will handle and N defines the maximum number of
- * items that can be stored on the queue.
- */
- CircularQueue() {
- this->buffer.size = N;
- this->buffer.count = this->buffer.head = this->buffer.tail = 0;
- }
-
- /**
- * @brief Removes and returns a item from the queue
- * @details Removes the oldest item on the queue, pointed to by the
- * buffer_t head field. The item is returned to the caller.
- * @return type T item
- */
- T dequeue() {
- if (this->isEmpty()) return T();
-
- uint8_t index = this->buffer.head;
-
- --this->buffer.count;
- if (++this->buffer.head == this->buffer.size)
- this->buffer.head = 0;
-
- return this->buffer.queue[index];
- }
-
- /**
- * @brief Adds an item to the queue
- * @details Adds an item to the queue on the location pointed by the buffer_t
- * tail variable. Returns false if no queue space is available.
- * @param item Item to be added to the queue
- * @return true if the operation was successful
- */
- bool enqueue(T const &item) {
- if (this->isFull()) return false;
-
- this->buffer.queue[this->buffer.tail] = item;
-
- ++this->buffer.count;
- if (++this->buffer.tail == this->buffer.size)
- this->buffer.tail = 0;
-
- return true;
- }
-
- /**
- * @brief Checks if the queue has no items
- * @details Returns true if there are no items on the queue, false otherwise.
- * @return true if queue is empty
- */
- bool isEmpty() {
- return this->buffer.count == 0;
- }
-
- /**
- * @brief Checks if the queue is full
- * @details Returns true if the queue is full, false otherwise.
- * @return true if queue is full
- */
- bool isFull() {
- return this->buffer.count == this->buffer.size;
- }
-
- /**
- * @brief Gets the queue size
- * @details Returns the maximum number of items a queue can have.
- * @return the queue size
- */
- uint8_t size() {
- return this->buffer.size;
- }
-
- /**
- * @brief Gets the next item from the queue without removing it
- * @details Returns the next item in the queue without removing it
- * or updating the pointers.
- * @return first item in the queue
- */
- T peek() {
- return this->buffer.queue[this->buffer.head];
- }
-
- /**
- * @brief Gets the number of items on the queue
- * @details Returns the current number of items stored on the queue.
- * @return number of items in the queue
- */
- uint8_t count() {
- return this->buffer.count;
- }
-};
-
-#endif
diff --git a/Marlin/configuration_store.cpp b/Marlin/configuration_store.cpp
deleted file mode 100644
index db10bba..0000000
--- a/Marlin/configuration_store.cpp
+++ /dev/null
@@ -1,994 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * configuration_store.cpp
- *
- * Configuration and EEPROM storage
- *
- * IMPORTANT: Whenever there are changes made to the variables stored in EEPROM
- * in the functions below, also increment the version number. This makes sure that
- * the default values are used whenever there is a change to the data, to prevent
- * wrong data being written to the variables.
- *
- * ALSO: Variables in the Store and Retrieve sections must be in the same order.
- * If a feature is disabled, some data must still be written that, when read,
- * either sets a Sane Default, or results in No Change to the existing value.
- *
- */
-
-#define EEPROM_VERSION "V24"
-
-// Change EEPROM version if these are changed:
-#define EEPROM_OFFSET 100
-#define MAX_EXTRUDERS 4
-
-/**
- * V24 EEPROM Layout:
- *
- * 100 Version (char x4)
- * 104 EEPROM Checksum (uint16_t)
- *
- * 106 M92 XYZE planner.axis_steps_per_mm (float x4)
- * 122 M203 XYZE planner.max_feedrate_mm_s (float x4)
- * 138 M201 XYZE planner.max_acceleration_mm_per_s2 (uint32_t x4)
- * 154 M204 P planner.acceleration (float)
- * 158 M204 R planner.retract_acceleration (float)
- * 162 M204 T planner.travel_acceleration (float)
- * 166 M205 S planner.min_feedrate_mm_s (float)
- * 170 M205 T planner.min_travel_feedrate_mm_s (float)
- * 174 M205 B planner.min_segment_time (ulong)
- * 178 M205 X planner.max_xy_jerk (float)
- * 182 M205 Z planner.max_z_jerk (float)
- * 186 M205 E planner.max_e_jerk (float)
- * 190 M206 XYZ home_offset (float x3)
- *
- * Mesh bed leveling:
- * 202 M420 S status (uint8)
- * 203 z_offset (float)
- * 207 mesh_num_x (uint8 as set in firmware)
- * 208 mesh_num_y (uint8 as set in firmware)
- * 209 G29 S3 XYZ z_values[][] (float x9, by default, up to float x 81)
- *
- * AUTO BED LEVELING
- * 245 M851 zprobe_zoffset (float)
- *
- * DELTA:
- * 249 M666 XYZ endstop_adj (float x3)
- * 261 M665 R delta_radius (float)
- * 265 M665 L delta_diagonal_rod (float)
- * 269 M665 S delta_segments_per_second (float)
- * 273 M665 A delta_diagonal_rod_trim_tower_1 (float)
- * 277 M665 B delta_diagonal_rod_trim_tower_2 (float)
- * 281 M665 C delta_diagonal_rod_trim_tower_3 (float)
- *
- * Z_DUAL_ENDSTOPS:
- * 285 M666 Z z_endstop_adj (float)
- *
- * ULTIPANEL:
- * 289 M145 S0 H preheatHotendTemp1 (int)
- * 291 M145 S0 B preheatBedTemp1 (int)
- * 293 M145 S0 F preheatFanSpeed1 (int)
- * 295 M145 S1 H preheatHotendTemp2 (int)
- * 297 M145 S1 B preheatBedTemp2 (int)
- * 299 M145 S1 F preheatFanSpeed2 (int)
- *
- * PIDTEMP:
- * 301 M301 E0 PIDC Kp[0], Ki[0], Kd[0], Kc[0] (float x4)
- * 317 M301 E1 PIDC Kp[1], Ki[1], Kd[1], Kc[1] (float x4)
- * 333 M301 E2 PIDC Kp[2], Ki[2], Kd[2], Kc[2] (float x4)
- * 349 M301 E3 PIDC Kp[3], Ki[3], Kd[3], Kc[3] (float x4)
- * 365 M301 L lpq_len (int)
- *
- * PIDTEMPBED:
- * 367 M304 PID thermalManager.bedKp, thermalManager.bedKi, thermalManager.bedKd (float x3)
- *
- * DOGLCD:
- * 379 M250 C lcd_contrast (int)
- *
- * SCARA:
- * 381 M365 XYZ axis_scaling (float x3)
- *
- * FWRETRACT:
- * 393 M209 S autoretract_enabled (bool)
- * 394 M207 S retract_length (float)
- * 398 M207 W retract_length_swap (float)
- * 402 M207 F retract_feedrate_mm_s (float)
- * 406 M207 Z retract_zlift (float)
- * 410 M208 S retract_recover_length (float)
- * 414 M208 W retract_recover_length_swap (float)
- * 418 M208 F retract_recover_feedrate_mm_s (float)
- *
- * Volumetric Extrusion:
- * 422 M200 D volumetric_enabled (bool)
- * 423 M200 T D filament_size (float x4) (T0..3)
- *
- * 439 This Slot is Available!
- *
- */
-#include "Marlin.h"
-#include "language.h"
-#include "endstops.h"
-#include "planner.h"
-#include "temperature.h"
-#include "ultralcd.h"
-#include "configuration_store.h"
-
-#if ENABLED(MESH_BED_LEVELING)
- #include "mesh_bed_leveling.h"
-#endif
-
-uint16_t eeprom_checksum;
-const char version[4] = EEPROM_VERSION;
-
-void _EEPROM_writeData(int &pos, uint8_t* value, uint8_t size) {
- uint8_t c;
- while (size--) {
- eeprom_write_byte((unsigned char*)pos, *value);
- c = eeprom_read_byte((unsigned char*)pos);
- if (c != *value) {
- SERIAL_ECHO_START;
- SERIAL_ECHOLNPGM(MSG_ERR_EEPROM_WRITE);
- }
- eeprom_checksum += c;
- pos++;
- value++;
- };
-}
-void _EEPROM_readData(int &pos, uint8_t* value, uint8_t size) {
- do {
- uint8_t c = eeprom_read_byte((unsigned char*)pos);
- *value = c;
- eeprom_checksum += c;
- pos++;
- value++;
- } while (--size);
-}
-
-/**
- * Post-process after Retrieve or Reset
- */
-void Config_Postprocess() {
- // steps per s2 needs to be updated to agree with units per s2
- planner.reset_acceleration_rates();
-
- // Make sure delta kinematics are updated before refreshing the
- // planner position so the stepper counts will be set correctly.
- #if ENABLED(DELTA)
- recalc_delta_settings(delta_radius, delta_diagonal_rod);
- #endif
-
- // Refresh steps_to_mm with the reciprocal of axis_steps_per_mm
- // and init stepper.count[], planner.position[] with current_position
- planner.refresh_positioning();
-
- #if ENABLED(PIDTEMP)
- thermalManager.updatePID();
- #endif
-
- calculate_volumetric_multipliers();
-}
-
-#if ENABLED(EEPROM_SETTINGS)
-
- #define DUMMY_PID_VALUE 3000.0f
- #define EEPROM_START() int eeprom_index = EEPROM_OFFSET
- #define EEPROM_SKIP(VAR) eeprom_index += sizeof(VAR)
- #define EEPROM_WRITE(VAR) _EEPROM_writeData(eeprom_index, (uint8_t*)&VAR, sizeof(VAR))
- #define EEPROM_READ(VAR) _EEPROM_readData(eeprom_index, (uint8_t*)&VAR, sizeof(VAR))
-
-/**
- * M500 - Store Configuration
- */
-void Config_StoreSettings() {
- float dummy = 0.0f;
- char ver[4] = "000";
-
- EEPROM_START();
-
- EEPROM_WRITE(ver); // invalidate data first
- EEPROM_SKIP(eeprom_checksum); // Skip the checksum slot
-
- eeprom_checksum = 0; // clear before first "real data"
-
- EEPROM_WRITE(planner.axis_steps_per_mm);
- EEPROM_WRITE(planner.max_feedrate_mm_s);
- EEPROM_WRITE(planner.max_acceleration_mm_per_s2);
- EEPROM_WRITE(planner.acceleration);
- EEPROM_WRITE(planner.retract_acceleration);
- EEPROM_WRITE(planner.travel_acceleration);
- EEPROM_WRITE(planner.min_feedrate_mm_s);
- EEPROM_WRITE(planner.min_travel_feedrate_mm_s);
- EEPROM_WRITE(planner.min_segment_time);
- EEPROM_WRITE(planner.max_xy_jerk);
- EEPROM_WRITE(planner.max_z_jerk);
- EEPROM_WRITE(planner.max_e_jerk);
- EEPROM_WRITE(home_offset);
-
- #if ENABLED(MESH_BED_LEVELING)
- // Compile time test that sizeof(mbl.z_values) is as expected
- typedef char c_assert[(sizeof(mbl.z_values) == (MESH_NUM_X_POINTS) * (MESH_NUM_Y_POINTS) * sizeof(dummy)) ? 1 : -1];
- uint8_t mesh_num_x = MESH_NUM_X_POINTS,
- mesh_num_y = MESH_NUM_Y_POINTS,
- dummy_uint8 = mbl.status & _BV(MBL_STATUS_HAS_MESH_BIT);
- EEPROM_WRITE(dummy_uint8);
- EEPROM_WRITE(mbl.z_offset);
- EEPROM_WRITE(mesh_num_x);
- EEPROM_WRITE(mesh_num_y);
- EEPROM_WRITE(mbl.z_values);
- #else
- // For disabled MBL write a default mesh
- uint8_t mesh_num_x = 3,
- mesh_num_y = 3,
- dummy_uint8 = 0;
- dummy = 0.0f;
- EEPROM_WRITE(dummy_uint8);
- EEPROM_WRITE(dummy);
- EEPROM_WRITE(mesh_num_x);
- EEPROM_WRITE(mesh_num_y);
- for (uint8_t q = 0; q < mesh_num_x * mesh_num_y; q++) EEPROM_WRITE(dummy);
- #endif // MESH_BED_LEVELING
-
- #if !HAS_BED_PROBE
- float zprobe_zoffset = 0;
- #endif
- EEPROM_WRITE(zprobe_zoffset);
-
- // 9 floats for DELTA / Z_DUAL_ENDSTOPS
- #if ENABLED(DELTA)
- EEPROM_WRITE(endstop_adj); // 3 floats
- EEPROM_WRITE(delta_radius); // 1 float
- EEPROM_WRITE(delta_diagonal_rod); // 1 float
- EEPROM_WRITE(delta_segments_per_second); // 1 float
- EEPROM_WRITE(delta_diagonal_rod_trim_tower_1); // 1 float
- EEPROM_WRITE(delta_diagonal_rod_trim_tower_2); // 1 float
- EEPROM_WRITE(delta_diagonal_rod_trim_tower_3); // 1 float
- #elif ENABLED(Z_DUAL_ENDSTOPS)
- EEPROM_WRITE(z_endstop_adj); // 1 float
- dummy = 0.0f;
- for (uint8_t q = 8; q--;) EEPROM_WRITE(dummy);
- #else
- dummy = 0.0f;
- for (uint8_t q = 9; q--;) EEPROM_WRITE(dummy);
- #endif
-
- #if DISABLED(ULTIPANEL)
- int preheatHotendTemp1 = PREHEAT_1_TEMP_HOTEND, preheatBedTemp1 = PREHEAT_1_TEMP_BED, preheatFanSpeed1 = PREHEAT_1_FAN_SPEED,
- preheatHotendTemp2 = PREHEAT_2_TEMP_HOTEND, preheatBedTemp2 = PREHEAT_2_TEMP_BED, preheatFanSpeed2 = PREHEAT_2_FAN_SPEED;
- #endif // !ULTIPANEL
-
- EEPROM_WRITE(preheatHotendTemp1);
- EEPROM_WRITE(preheatBedTemp1);
- EEPROM_WRITE(preheatFanSpeed1);
- EEPROM_WRITE(preheatHotendTemp2);
- EEPROM_WRITE(preheatBedTemp2);
- EEPROM_WRITE(preheatFanSpeed2);
-
- for (uint8_t e = 0; e < MAX_EXTRUDERS; e++) {
-
- #if ENABLED(PIDTEMP)
- if (e < HOTENDS) {
- EEPROM_WRITE(PID_PARAM(Kp, e));
- EEPROM_WRITE(PID_PARAM(Ki, e));
- EEPROM_WRITE(PID_PARAM(Kd, e));
- #if ENABLED(PID_EXTRUSION_SCALING)
- EEPROM_WRITE(PID_PARAM(Kc, e));
- #else
- dummy = 1.0f; // 1.0 = default kc
- EEPROM_WRITE(dummy);
- #endif
- }
- else
- #endif // !PIDTEMP
- {
- dummy = DUMMY_PID_VALUE; // When read, will not change the existing value
- EEPROM_WRITE(dummy); // Kp
- dummy = 0.0f;
- for (uint8_t q = 3; q--;) EEPROM_WRITE(dummy); // Ki, Kd, Kc
- }
-
- } // Hotends Loop
-
- #if DISABLED(PID_EXTRUSION_SCALING)
- int lpq_len = 20;
- #endif
- EEPROM_WRITE(lpq_len);
-
- #if DISABLED(PIDTEMPBED)
- dummy = DUMMY_PID_VALUE;
- for (uint8_t q = 3; q--;) EEPROM_WRITE(dummy);
- #else
- EEPROM_WRITE(thermalManager.bedKp);
- EEPROM_WRITE(thermalManager.bedKi);
- EEPROM_WRITE(thermalManager.bedKd);
- #endif
-
- #if !HAS_LCD_CONTRAST
- const int lcd_contrast = 32;
- #endif
- EEPROM_WRITE(lcd_contrast);
-
- #if ENABLED(SCARA)
- EEPROM_WRITE(axis_scaling); // 3 floats
- #else
- dummy = 1.0f;
- EEPROM_WRITE(dummy);
- #endif
-
- #if ENABLED(FWRETRACT)
- EEPROM_WRITE(autoretract_enabled);
- EEPROM_WRITE(retract_length);
- #if EXTRUDERS > 1
- EEPROM_WRITE(retract_length_swap);
- #else
- dummy = 0.0f;
- EEPROM_WRITE(dummy);
- #endif
- EEPROM_WRITE(retract_feedrate_mm_s);
- EEPROM_WRITE(retract_zlift);
- EEPROM_WRITE(retract_recover_length);
- #if EXTRUDERS > 1
- EEPROM_WRITE(retract_recover_length_swap);
- #else
- dummy = 0.0f;
- EEPROM_WRITE(dummy);
- #endif
- EEPROM_WRITE(retract_recover_feedrate_mm_s);
- #endif // FWRETRACT
-
- EEPROM_WRITE(volumetric_enabled);
-
- // Save filament sizes
- for (uint8_t q = 0; q < MAX_EXTRUDERS; q++) {
- if (q < COUNT(filament_size)) dummy = filament_size[q];
- EEPROM_WRITE(dummy);
- }
-
- uint16_t final_checksum = eeprom_checksum,
- eeprom_size = eeprom_index;
-
- eeprom_index = EEPROM_OFFSET;
- EEPROM_WRITE(version);
- EEPROM_WRITE(final_checksum);
-
- // Report storage size
- SERIAL_ECHO_START;
- SERIAL_ECHOPAIR("Settings Stored (", eeprom_size);
- SERIAL_ECHOLNPGM(" bytes)");
-}
-
-/**
- * M501 - Retrieve Configuration
- */
-void Config_RetrieveSettings() {
-
- EEPROM_START();
-
- char stored_ver[4];
- EEPROM_READ(stored_ver);
-
- uint16_t stored_checksum;
- EEPROM_READ(stored_checksum);
-
- // SERIAL_ECHOPAIR("Version: [", ver);
- // SERIAL_ECHOPAIR("] Stored version: [", stored_ver);
- // SERIAL_ECHOLNPGM("]");
-
- if (strncmp(version, stored_ver, 3) != 0) {
- Config_ResetDefault();
- }
- else {
- float dummy = 0;
-
- eeprom_checksum = 0; // clear before reading first "real data"
-
- // version number match
- EEPROM_READ(planner.axis_steps_per_mm);
- EEPROM_READ(planner.max_feedrate_mm_s);
- EEPROM_READ(planner.max_acceleration_mm_per_s2);
-
- EEPROM_READ(planner.acceleration);
- EEPROM_READ(planner.retract_acceleration);
- EEPROM_READ(planner.travel_acceleration);
- EEPROM_READ(planner.min_feedrate_mm_s);
- EEPROM_READ(planner.min_travel_feedrate_mm_s);
- EEPROM_READ(planner.min_segment_time);
- EEPROM_READ(planner.max_xy_jerk);
- EEPROM_READ(planner.max_z_jerk);
- EEPROM_READ(planner.max_e_jerk);
- EEPROM_READ(home_offset);
-
- uint8_t dummy_uint8 = 0, mesh_num_x = 0, mesh_num_y = 0;
- EEPROM_READ(dummy_uint8);
- EEPROM_READ(dummy);
- EEPROM_READ(mesh_num_x);
- EEPROM_READ(mesh_num_y);
- #if ENABLED(MESH_BED_LEVELING)
- mbl.status = dummy_uint8;
- mbl.z_offset = dummy;
- if (mesh_num_x == MESH_NUM_X_POINTS && mesh_num_y == MESH_NUM_Y_POINTS) {
- // EEPROM data fits the current mesh
- EEPROM_READ(mbl.z_values);
- }
- else {
- // EEPROM data is stale
- mbl.reset();
- for (uint8_t q = 0; q < mesh_num_x * mesh_num_y; q++) EEPROM_READ(dummy);
- }
- #else
- // MBL is disabled - skip the stored data
- for (uint8_t q = 0; q < mesh_num_x * mesh_num_y; q++) EEPROM_READ(dummy);
- #endif // MESH_BED_LEVELING
-
- #if !HAS_BED_PROBE
- float zprobe_zoffset = 0;
- #endif
- EEPROM_READ(zprobe_zoffset);
-
- #if ENABLED(DELTA)
- EEPROM_READ(endstop_adj); // 3 floats
- EEPROM_READ(delta_radius); // 1 float
- EEPROM_READ(delta_diagonal_rod); // 1 float
- EEPROM_READ(delta_segments_per_second); // 1 float
- EEPROM_READ(delta_diagonal_rod_trim_tower_1); // 1 float
- EEPROM_READ(delta_diagonal_rod_trim_tower_2); // 1 float
- EEPROM_READ(delta_diagonal_rod_trim_tower_3); // 1 float
- #elif ENABLED(Z_DUAL_ENDSTOPS)
- EEPROM_READ(z_endstop_adj);
- dummy = 0.0f;
- for (uint8_t q=8; q--;) EEPROM_READ(dummy);
- #else
- dummy = 0.0f;
- for (uint8_t q=9; q--;) EEPROM_READ(dummy);
- #endif
-
- #if DISABLED(ULTIPANEL)
- int preheatHotendTemp1, preheatBedTemp1, preheatFanSpeed1,
- preheatHotendTemp2, preheatBedTemp2, preheatFanSpeed2;
- #endif
-
- EEPROM_READ(preheatHotendTemp1);
- EEPROM_READ(preheatBedTemp1);
- EEPROM_READ(preheatFanSpeed1);
- EEPROM_READ(preheatHotendTemp2);
- EEPROM_READ(preheatBedTemp2);
- EEPROM_READ(preheatFanSpeed2);
-
- #if ENABLED(PIDTEMP)
- for (uint8_t e = 0; e < MAX_EXTRUDERS; e++) {
- EEPROM_READ(dummy); // Kp
- if (e < HOTENDS && dummy != DUMMY_PID_VALUE) {
- // do not need to scale PID values as the values in EEPROM are already scaled
- PID_PARAM(Kp, e) = dummy;
- EEPROM_READ(PID_PARAM(Ki, e));
- EEPROM_READ(PID_PARAM(Kd, e));
- #if ENABLED(PID_EXTRUSION_SCALING)
- EEPROM_READ(PID_PARAM(Kc, e));
- #else
- EEPROM_READ(dummy);
- #endif
- }
- else {
- for (uint8_t q=3; q--;) EEPROM_READ(dummy); // Ki, Kd, Kc
- }
- }
- #else // !PIDTEMP
- // 4 x 4 = 16 slots for PID parameters
- for (uint8_t q = MAX_EXTRUDERS * 4; q--;) EEPROM_READ(dummy); // Kp, Ki, Kd, Kc
- #endif // !PIDTEMP
-
- #if DISABLED(PID_EXTRUSION_SCALING)
- int lpq_len;
- #endif
- EEPROM_READ(lpq_len);
-
- #if ENABLED(PIDTEMPBED)
- EEPROM_READ(dummy); // bedKp
- if (dummy != DUMMY_PID_VALUE) {
- thermalManager.bedKp = dummy;
- EEPROM_READ(thermalManager.bedKi);
- EEPROM_READ(thermalManager.bedKd);
- }
- #else
- for (uint8_t q=3; q--;) EEPROM_READ(dummy); // bedKp, bedKi, bedKd
- #endif
-
- #if !HAS_LCD_CONTRAST
- int lcd_contrast;
- #endif
- EEPROM_READ(lcd_contrast);
-
- #if ENABLED(SCARA)
- EEPROM_READ(axis_scaling); // 3 floats
- #else
- EEPROM_READ(dummy);
- #endif
-
- #if ENABLED(FWRETRACT)
- EEPROM_READ(autoretract_enabled);
- EEPROM_READ(retract_length);
- #if EXTRUDERS > 1
- EEPROM_READ(retract_length_swap);
- #else
- EEPROM_READ(dummy);
- #endif
- EEPROM_READ(retract_feedrate_mm_s);
- EEPROM_READ(retract_zlift);
- EEPROM_READ(retract_recover_length);
- #if EXTRUDERS > 1
- EEPROM_READ(retract_recover_length_swap);
- #else
- EEPROM_READ(dummy);
- #endif
- EEPROM_READ(retract_recover_feedrate_mm_s);
- #endif // FWRETRACT
-
- EEPROM_READ(volumetric_enabled);
-
- for (uint8_t q = 0; q < MAX_EXTRUDERS; q++) {
- EEPROM_READ(dummy);
- if (q < COUNT(filament_size)) filament_size[q] = dummy;
- }
-
- if (eeprom_checksum == stored_checksum) {
- Config_Postprocess();
- SERIAL_ECHO_START;
- SERIAL_ECHO(version);
- SERIAL_ECHOPAIR(" stored settings retrieved (", eeprom_index);
- SERIAL_ECHOLNPGM(" bytes)");
- }
- else {
- SERIAL_ERROR_START;
- SERIAL_ERRORLNPGM("EEPROM checksum mismatch");
- Config_ResetDefault();
- }
- }
-
- #if ENABLED(EEPROM_CHITCHAT)
- Config_PrintSettings();
- #endif
-}
-
-#endif // EEPROM_SETTINGS
-
-/**
- * M502 - Reset Configuration
- */
-void Config_ResetDefault() {
- float tmp1[] = DEFAULT_AXIS_STEPS_PER_UNIT;
- float tmp2[] = DEFAULT_MAX_FEEDRATE;
- long tmp3[] = DEFAULT_MAX_ACCELERATION;
- LOOP_XYZE(i) {
- planner.axis_steps_per_mm[i] = tmp1[i];
- planner.max_feedrate_mm_s[i] = tmp2[i];
- planner.max_acceleration_mm_per_s2[i] = tmp3[i];
- #if ENABLED(SCARA)
- if (i < COUNT(axis_scaling))
- axis_scaling[i] = 1;
- #endif
- }
-
- planner.acceleration = DEFAULT_ACCELERATION;
- planner.retract_acceleration = DEFAULT_RETRACT_ACCELERATION;
- planner.travel_acceleration = DEFAULT_TRAVEL_ACCELERATION;
- planner.min_feedrate_mm_s = DEFAULT_MINIMUMFEEDRATE;
- planner.min_segment_time = DEFAULT_MINSEGMENTTIME;
- planner.min_travel_feedrate_mm_s = DEFAULT_MINTRAVELFEEDRATE;
- planner.max_xy_jerk = DEFAULT_XYJERK;
- planner.max_z_jerk = DEFAULT_ZJERK;
- planner.max_e_jerk = DEFAULT_EJERK;
- home_offset[X_AXIS] = home_offset[Y_AXIS] = home_offset[Z_AXIS] = 0;
-
- #if ENABLED(MESH_BED_LEVELING)
- mbl.reset();
- #endif
-
- #if HAS_BED_PROBE
- zprobe_zoffset = Z_PROBE_OFFSET_FROM_EXTRUDER;
- #endif
-
- #if ENABLED(DELTA)
- endstop_adj[X_AXIS] = endstop_adj[Y_AXIS] = endstop_adj[Z_AXIS] = 0;
- delta_radius = DELTA_RADIUS;
- delta_diagonal_rod = DELTA_DIAGONAL_ROD;
- delta_segments_per_second = DELTA_SEGMENTS_PER_SECOND;
- delta_diagonal_rod_trim_tower_1 = DELTA_DIAGONAL_ROD_TRIM_TOWER_1;
- delta_diagonal_rod_trim_tower_2 = DELTA_DIAGONAL_ROD_TRIM_TOWER_2;
- delta_diagonal_rod_trim_tower_3 = DELTA_DIAGONAL_ROD_TRIM_TOWER_3;
- #elif ENABLED(Z_DUAL_ENDSTOPS)
- z_endstop_adj = 0;
- #endif
-
- #if ENABLED(ULTIPANEL)
- preheatHotendTemp1 = PREHEAT_1_TEMP_HOTEND;
- preheatBedTemp1 = PREHEAT_1_TEMP_BED;
- preheatFanSpeed1 = PREHEAT_1_FAN_SPEED;
- preheatHotendTemp2 = PREHEAT_2_TEMP_HOTEND;
- preheatBedTemp2 = PREHEAT_2_TEMP_BED;
- preheatFanSpeed2 = PREHEAT_2_FAN_SPEED;
- #endif
-
- #if HAS_LCD_CONTRAST
- lcd_contrast = DEFAULT_LCD_CONTRAST;
- #endif
-
- #if ENABLED(PIDTEMP)
- #if ENABLED(PID_PARAMS_PER_HOTEND) && HOTENDS > 1
- HOTEND_LOOP()
- #else
- int e = 0; UNUSED(e); // only need to write once
- #endif
- {
- PID_PARAM(Kp, e) = DEFAULT_Kp;
- PID_PARAM(Ki, e) = scalePID_i(DEFAULT_Ki);
- PID_PARAM(Kd, e) = scalePID_d(DEFAULT_Kd);
- #if ENABLED(PID_EXTRUSION_SCALING)
- PID_PARAM(Kc, e) = DEFAULT_Kc;
- #endif
- }
- #if ENABLED(PID_EXTRUSION_SCALING)
- lpq_len = 20; // default last-position-queue size
- #endif
- #endif // PIDTEMP
-
- #if ENABLED(PIDTEMPBED)
- thermalManager.bedKp = DEFAULT_bedKp;
- thermalManager.bedKi = scalePID_i(DEFAULT_bedKi);
- thermalManager.bedKd = scalePID_d(DEFAULT_bedKd);
- #endif
-
- #if ENABLED(FWRETRACT)
- autoretract_enabled = false;
- retract_length = RETRACT_LENGTH;
- #if EXTRUDERS > 1
- retract_length_swap = RETRACT_LENGTH_SWAP;
- #endif
- retract_feedrate_mm_s = RETRACT_FEEDRATE;
- retract_zlift = RETRACT_ZLIFT;
- retract_recover_length = RETRACT_RECOVER_LENGTH;
- #if EXTRUDERS > 1
- retract_recover_length_swap = RETRACT_RECOVER_LENGTH_SWAP;
- #endif
- retract_recover_feedrate_mm_s = RETRACT_RECOVER_FEEDRATE;
- #endif
-
- volumetric_enabled = false;
- for (uint8_t q = 0; q < COUNT(filament_size); q++)
- filament_size[q] = DEFAULT_NOMINAL_FILAMENT_DIA;
-
- endstops.enable_globally(
- #if ENABLED(ENDSTOPS_ALWAYS_ON_DEFAULT)
- (true)
- #else
- (false)
- #endif
- );
-
- Config_Postprocess();
-
- SERIAL_ECHO_START;
- SERIAL_ECHOLNPGM("Hardcoded Default Settings Loaded");
-}
-
-#if DISABLED(DISABLE_M503)
-
-#define CONFIG_ECHO_START do{ if (!forReplay) SERIAL_ECHO_START; }while(0)
-
-/**
- * M503 - Print Configuration
- */
-void Config_PrintSettings(bool forReplay) {
- // Always have this function, even with EEPROM_SETTINGS disabled, the current values will be shown
-
- CONFIG_ECHO_START;
-
- if (!forReplay) {
- SERIAL_ECHOLNPGM("Steps per unit:");
- CONFIG_ECHO_START;
- }
- SERIAL_ECHOPAIR(" M92 X", planner.axis_steps_per_mm[X_AXIS]);
- SERIAL_ECHOPAIR(" Y", planner.axis_steps_per_mm[Y_AXIS]);
- SERIAL_ECHOPAIR(" Z", planner.axis_steps_per_mm[Z_AXIS]);
- SERIAL_ECHOPAIR(" E", planner.axis_steps_per_mm[E_AXIS]);
- SERIAL_EOL;
-
- CONFIG_ECHO_START;
-
- #if ENABLED(SCARA)
- if (!forReplay) {
- SERIAL_ECHOLNPGM("Scaling factors:");
- CONFIG_ECHO_START;
- }
- SERIAL_ECHOPAIR(" M365 X", axis_scaling[X_AXIS]);
- SERIAL_ECHOPAIR(" Y", axis_scaling[Y_AXIS]);
- SERIAL_ECHOPAIR(" Z", axis_scaling[Z_AXIS]);
- SERIAL_EOL;
- CONFIG_ECHO_START;
- #endif // SCARA
-
- if (!forReplay) {
- SERIAL_ECHOLNPGM("Maximum feedrates (mm/s):");
- CONFIG_ECHO_START;
- }
- SERIAL_ECHOPAIR(" M203 X", planner.max_feedrate_mm_s[X_AXIS]);
- SERIAL_ECHOPAIR(" Y", planner.max_feedrate_mm_s[Y_AXIS]);
- SERIAL_ECHOPAIR(" Z", planner.max_feedrate_mm_s[Z_AXIS]);
- SERIAL_ECHOPAIR(" E", planner.max_feedrate_mm_s[E_AXIS]);
- SERIAL_EOL;
-
- CONFIG_ECHO_START;
- if (!forReplay) {
- SERIAL_ECHOLNPGM("Maximum Acceleration (mm/s2):");
- CONFIG_ECHO_START;
- }
- SERIAL_ECHOPAIR(" M201 X", planner.max_acceleration_mm_per_s2[X_AXIS]);
- SERIAL_ECHOPAIR(" Y", planner.max_acceleration_mm_per_s2[Y_AXIS]);
- SERIAL_ECHOPAIR(" Z", planner.max_acceleration_mm_per_s2[Z_AXIS]);
- SERIAL_ECHOPAIR(" E", planner.max_acceleration_mm_per_s2[E_AXIS]);
- SERIAL_EOL;
- CONFIG_ECHO_START;
- if (!forReplay) {
- SERIAL_ECHOLNPGM("Accelerations: P=printing, R=retract and T=travel");
- CONFIG_ECHO_START;
- }
- SERIAL_ECHOPAIR(" M204 P", planner.acceleration);
- SERIAL_ECHOPAIR(" R", planner.retract_acceleration);
- SERIAL_ECHOPAIR(" T", planner.travel_acceleration);
- SERIAL_EOL;
-
- CONFIG_ECHO_START;
- if (!forReplay) {
- SERIAL_ECHOLNPGM("Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum XY jerk (mm/s), Z=maximum Z jerk (mm/s), E=maximum E jerk (mm/s)");
- CONFIG_ECHO_START;
- }
- SERIAL_ECHOPAIR(" M205 S", planner.min_feedrate_mm_s);
- SERIAL_ECHOPAIR(" T", planner.min_travel_feedrate_mm_s);
- SERIAL_ECHOPAIR(" B", planner.min_segment_time);
- SERIAL_ECHOPAIR(" X", planner.max_xy_jerk);
- SERIAL_ECHOPAIR(" Z", planner.max_z_jerk);
- SERIAL_ECHOPAIR(" E", planner.max_e_jerk);
- SERIAL_EOL;
-
- CONFIG_ECHO_START;
- if (!forReplay) {
- SERIAL_ECHOLNPGM("Home offset (mm)");
- CONFIG_ECHO_START;
- }
- SERIAL_ECHOPAIR(" M206 X", home_offset[X_AXIS]);
- SERIAL_ECHOPAIR(" Y", home_offset[Y_AXIS]);
- SERIAL_ECHOPAIR(" Z", home_offset[Z_AXIS]);
- SERIAL_EOL;
-
- #if ENABLED(MESH_BED_LEVELING)
- if (!forReplay) {
- SERIAL_ECHOLNPGM("Mesh bed leveling:");
- CONFIG_ECHO_START;
- }
- SERIAL_ECHOPAIR(" M420 S", mbl.has_mesh() ? 1 : 0);
- SERIAL_ECHOPAIR(" X", MESH_NUM_X_POINTS);
- SERIAL_ECHOPAIR(" Y", MESH_NUM_Y_POINTS);
- SERIAL_EOL;
- for (uint8_t py = 1; py <= MESH_NUM_Y_POINTS; py++) {
- for (uint8_t px = 1; px <= MESH_NUM_X_POINTS; px++) {
- CONFIG_ECHO_START;
- SERIAL_ECHOPAIR(" G29 S3 X", px);
- SERIAL_ECHOPAIR(" Y", py);
- SERIAL_ECHOPGM(" Z");
- SERIAL_PROTOCOL_F(mbl.z_values[py-1][px-1], 5);
- SERIAL_EOL;
- }
- }
- #endif
-
- #if ENABLED(DELTA)
- CONFIG_ECHO_START;
- if (!forReplay) {
- SERIAL_ECHOLNPGM("Endstop adjustment (mm):");
- CONFIG_ECHO_START;
- }
- SERIAL_ECHOPAIR(" M666 X", endstop_adj[X_AXIS]);
- SERIAL_ECHOPAIR(" Y", endstop_adj[Y_AXIS]);
- SERIAL_ECHOPAIR(" Z", endstop_adj[Z_AXIS]);
- SERIAL_EOL;
- CONFIG_ECHO_START;
- if (!forReplay) {
- SERIAL_ECHOLNPGM("Delta settings: L=diagonal_rod, R=radius, S=segments_per_second, ABC=diagonal_rod_trim_tower_[123]");
- CONFIG_ECHO_START;
- }
- SERIAL_ECHOPAIR(" M665 L", delta_diagonal_rod);
- SERIAL_ECHOPAIR(" R", delta_radius);
- SERIAL_ECHOPAIR(" S", delta_segments_per_second);
- SERIAL_ECHOPAIR(" A", delta_diagonal_rod_trim_tower_1);
- SERIAL_ECHOPAIR(" B", delta_diagonal_rod_trim_tower_2);
- SERIAL_ECHOPAIR(" C", delta_diagonal_rod_trim_tower_3);
- SERIAL_EOL;
- #elif ENABLED(Z_DUAL_ENDSTOPS)
- CONFIG_ECHO_START;
- if (!forReplay) {
- SERIAL_ECHOLNPGM("Z2 Endstop adjustment (mm):");
- CONFIG_ECHO_START;
- }
- SERIAL_ECHOPAIR(" M666 Z", z_endstop_adj);
- SERIAL_EOL;
- #endif // DELTA
-
- #if ENABLED(ULTIPANEL)
- CONFIG_ECHO_START;
- if (!forReplay) {
- SERIAL_ECHOLNPGM("Material heatup parameters:");
- CONFIG_ECHO_START;
- }
- SERIAL_ECHOPAIR(" M145 S0 H", preheatHotendTemp1);
- SERIAL_ECHOPAIR(" B", preheatBedTemp1);
- SERIAL_ECHOPAIR(" F", preheatFanSpeed1);
- SERIAL_EOL;
- CONFIG_ECHO_START;
- SERIAL_ECHOPAIR(" M145 S1 H", preheatHotendTemp2);
- SERIAL_ECHOPAIR(" B", preheatBedTemp2);
- SERIAL_ECHOPAIR(" F", preheatFanSpeed2);
- SERIAL_EOL;
- #endif // ULTIPANEL
-
- #if HAS_PID_HEATING
-
- CONFIG_ECHO_START;
- if (!forReplay) {
- SERIAL_ECHOLNPGM("PID settings:");
- }
- #if ENABLED(PIDTEMP)
- #if HOTENDS > 1
- if (forReplay) {
- HOTEND_LOOP() {
- CONFIG_ECHO_START;
- SERIAL_ECHOPAIR(" M301 E", e);
- SERIAL_ECHOPAIR(" P", PID_PARAM(Kp, e));
- SERIAL_ECHOPAIR(" I", unscalePID_i(PID_PARAM(Ki, e)));
- SERIAL_ECHOPAIR(" D", unscalePID_d(PID_PARAM(Kd, e)));
- #if ENABLED(PID_EXTRUSION_SCALING)
- SERIAL_ECHOPAIR(" C", PID_PARAM(Kc, e));
- if (e == 0) SERIAL_ECHOPAIR(" L", lpq_len);
- #endif
- SERIAL_EOL;
- }
- }
- else
- #endif // HOTENDS > 1
- // !forReplay || HOTENDS == 1
- {
- CONFIG_ECHO_START;
- SERIAL_ECHOPAIR(" M301 P", PID_PARAM(Kp, 0)); // for compatibility with hosts, only echo values for E0
- SERIAL_ECHOPAIR(" I", unscalePID_i(PID_PARAM(Ki, 0)));
- SERIAL_ECHOPAIR(" D", unscalePID_d(PID_PARAM(Kd, 0)));
- #if ENABLED(PID_EXTRUSION_SCALING)
- SERIAL_ECHOPAIR(" C", PID_PARAM(Kc, 0));
- SERIAL_ECHOPAIR(" L", lpq_len);
- #endif
- SERIAL_EOL;
- }
- #endif // PIDTEMP
-
- #if ENABLED(PIDTEMPBED)
- CONFIG_ECHO_START;
- SERIAL_ECHOPAIR(" M304 P", thermalManager.bedKp);
- SERIAL_ECHOPAIR(" I", unscalePID_i(thermalManager.bedKi));
- SERIAL_ECHOPAIR(" D", unscalePID_d(thermalManager.bedKd));
- SERIAL_EOL;
- #endif
-
- #endif // PIDTEMP || PIDTEMPBED
-
- #if HAS_LCD_CONTRAST
- CONFIG_ECHO_START;
- if (!forReplay) {
- SERIAL_ECHOLNPGM("LCD Contrast:");
- CONFIG_ECHO_START;
- }
- SERIAL_ECHOPAIR(" M250 C", lcd_contrast);
- SERIAL_EOL;
- #endif
-
- #if ENABLED(FWRETRACT)
-
- CONFIG_ECHO_START;
- if (!forReplay) {
- SERIAL_ECHOLNPGM("Retract: S=Length (mm) F:Speed (mm/m) Z: ZLift (mm)");
- CONFIG_ECHO_START;
- }
- SERIAL_ECHOPAIR(" M207 S", retract_length);
- #if EXTRUDERS > 1
- SERIAL_ECHOPAIR(" W", retract_length_swap);
- #endif
- SERIAL_ECHOPAIR(" F", MMS_TO_MMM(retract_feedrate_mm_s));
- SERIAL_ECHOPAIR(" Z", retract_zlift);
- SERIAL_EOL;
- CONFIG_ECHO_START;
- if (!forReplay) {
- SERIAL_ECHOLNPGM("Recover: S=Extra length (mm) F:Speed (mm/m)");
- CONFIG_ECHO_START;
- }
- SERIAL_ECHOPAIR(" M208 S", retract_recover_length);
- #if EXTRUDERS > 1
- SERIAL_ECHOPAIR(" W", retract_recover_length_swap);
- #endif
- SERIAL_ECHOPAIR(" F", MMS_TO_MMM(retract_recover_feedrate_mm_s));
- SERIAL_EOL;
- CONFIG_ECHO_START;
- if (!forReplay) {
- SERIAL_ECHOLNPGM("Auto-Retract: S=0 to disable, 1 to interpret extrude-only moves as retracts or recoveries");
- CONFIG_ECHO_START;
- }
- SERIAL_ECHOPAIR(" M209 S", autoretract_enabled ? 1 : 0);
- SERIAL_EOL;
-
- #endif // FWRETRACT
-
- /**
- * Volumetric extrusion M200
- */
- if (!forReplay) {
- CONFIG_ECHO_START;
- SERIAL_ECHOPGM("Filament settings:");
- if (volumetric_enabled)
- SERIAL_EOL;
- else
- SERIAL_ECHOLNPGM(" Disabled");
- }
-
- CONFIG_ECHO_START;
- SERIAL_ECHOPAIR(" M200 D", filament_size[0]);
- SERIAL_EOL;
- #if EXTRUDERS > 1
- CONFIG_ECHO_START;
- SERIAL_ECHOPAIR(" M200 T1 D", filament_size[1]);
- SERIAL_EOL;
- #if EXTRUDERS > 2
- CONFIG_ECHO_START;
- SERIAL_ECHOPAIR(" M200 T2 D", filament_size[2]);
- SERIAL_EOL;
- #if EXTRUDERS > 3
- CONFIG_ECHO_START;
- SERIAL_ECHOPAIR(" M200 T3 D", filament_size[3]);
- SERIAL_EOL;
- #endif
- #endif
- #endif
-
- if (!volumetric_enabled) {
- CONFIG_ECHO_START;
- SERIAL_ECHOLNPGM(" M200 D0");
- }
-
- /**
- * Auto Bed Leveling
- */
- #if HAS_BED_PROBE
- if (!forReplay) {
- CONFIG_ECHO_START;
- SERIAL_ECHOLNPGM("Z-Probe Offset (mm):");
- }
- CONFIG_ECHO_START;
- SERIAL_ECHOPAIR(" M851 Z", zprobe_zoffset);
- SERIAL_EOL;
- #endif
-}
-
-#endif // !DISABLE_M503
diff --git a/Marlin/configuration_store.h b/Marlin/configuration_store.h
deleted file mode 100644
index 891f19f..0000000
--- a/Marlin/configuration_store.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-#ifndef CONFIGURATION_STORE_H
-#define CONFIGURATION_STORE_H
-
-#include "MarlinConfig.h"
-
-void Config_ResetDefault();
-
-#if DISABLED(DISABLE_M503)
- void Config_PrintSettings(bool forReplay=false);
-#else
- FORCE_INLINE void Config_PrintSettings(bool forReplay=false) {}
-#endif
-
-#if ENABLED(EEPROM_SETTINGS)
- void Config_StoreSettings();
- void Config_RetrieveSettings();
-#else
- FORCE_INLINE void Config_StoreSettings() {}
- FORCE_INLINE void Config_RetrieveSettings() { Config_ResetDefault(); Config_PrintSettings(); }
-#endif
-
-#endif //CONFIGURATION_STORE_H
diff --git a/Marlin/dac_mcp4728.cpp b/Marlin/dac_mcp4728.cpp
deleted file mode 100644
index 01e38ed..0000000
--- a/Marlin/dac_mcp4728.cpp
+++ /dev/null
@@ -1,138 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * mcp4728.cpp - Arduino library for MicroChip MCP4728 I2C D/A converter
- *
- * For implementation details, please take a look at the datasheet:
- * http://ww1.microchip.com/downloads/en/DeviceDoc/22187a.pdf
- *
- * For discussion and feedback, please go to:
- * http://arduino.cc/forum/index.php/topic,51842.0.html
- */
-
-#include "dac_mcp4728.h"
-
-#if ENABLED(DAC_STEPPER_CURRENT)
-
-uint16_t mcp4728_values[4];
-
-/**
- * Begin I2C, get current values (input register and eeprom) of mcp4728
- */
-void mcp4728_init() {
- Wire.begin();
- Wire.requestFrom(int(DAC_DEV_ADDRESS), 24);
- while(Wire.available()) {
- int deviceID = Wire.read();
- int hiByte = Wire.read();
- int loByte = Wire.read();
-
- int isEEPROM = (deviceID & 0B00001000) >> 3;
- int channel = (deviceID & 0B00110000) >> 4;
- if (isEEPROM != 1) {
- mcp4728_values[channel] = word((hiByte & 0B00001111), loByte);
- }
- }
-}
-
-/**
- * Write input resister value to specified channel using fastwrite method.
- * Channel : 0-3, Values : 0-4095
- */
-uint8_t mcp4728_analogWrite(uint8_t channel, uint16_t value) {
- mcp4728_values[channel] = value;
- return mcp4728_fastWrite();
-}
-/**
- * Write all input resistor values to EEPROM using SequencialWrite method.
- * This will update both input register and EEPROM value
- * This will also write current Vref, PowerDown, Gain settings to EEPROM
- */
-uint8_t mcp4728_eepromWrite() {
- Wire.beginTransmission(DAC_DEV_ADDRESS);
- Wire.write(SEQWRITE);
- for (uint8_t channel=0; channel <= 3; channel++) {
- Wire.write(DAC_STEPPER_VREF << 7 | 0 << 5 | DAC_STEPPER_GAIN << 4 | highByte(mcp4728_values[channel]));
- Wire.write(lowByte(mcp4728_values[channel]));
- }
- return Wire.endTransmission();
-}
-
-/**
- * Write Voltage reference setting to all input regiters
- */
-uint8_t mcp4728_setVref_all(uint8_t value) {
- Wire.beginTransmission(DAC_DEV_ADDRESS);
- Wire.write(VREFWRITE | value << 3 | value << 2 | value << 1 | value);
- return Wire.endTransmission();
-}
-/**
- * Write Gain setting to all input regiters
- */
-uint8_t mcp4728_setGain_all(uint8_t value) {
- Wire.beginTransmission(DAC_DEV_ADDRESS);
- Wire.write(GAINWRITE | value << 3 | value << 2 | value << 1 | value);
- return Wire.endTransmission();
-}
-
-/**
- * Return Input Regiter value
- */
-uint16_t mcp4728_getValue(uint8_t channel) { return mcp4728_values[channel]; }
-
-/**
- * Steph: Might be useful in the future
- * Return Vout
- *
-uint16_t mcp4728_getVout(uint8_t channel) {
- uint32_t vref = 2048;
- uint32_t vOut = (vref * mcp4728_values[channel] * (_DAC_STEPPER_GAIN + 1)) / 4096;
- if (vOut > defaultVDD) vOut = defaultVDD;
- return vOut;
-}
-*/
-
-/**
- * FastWrite input register values - All DAC ouput update. refer to DATASHEET 5.6.1
- * DAC Input and PowerDown bits update.
- * No EEPROM update
- */
-uint8_t mcp4728_fastWrite() {
- Wire.beginTransmission(DAC_DEV_ADDRESS);
- for (uint8_t channel=0; channel <= 3; channel++) {
- Wire.write(highByte(mcp4728_values[channel]));
- Wire.write(lowByte(mcp4728_values[channel]));
- }
- return Wire.endTransmission();
-}
-
-/**
- * Common function for simple general commands
- */
-uint8_t mcp4728_simpleCommand(byte simpleCommand) {
- Wire.beginTransmission(GENERALCALL);
- Wire.write(simpleCommand);
- return Wire.endTransmission();
-}
-
-#endif // DAC_STEPPER_CURRENT
diff --git a/Marlin/dac_mcp4728.h b/Marlin/dac_mcp4728.h
deleted file mode 100644
index c096c85..0000000
--- a/Marlin/dac_mcp4728.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Arduino library for MicroChip MCP4728 I2C D/A converter.
- */
-
-#ifndef mcp4728_h
-#define mcp4728_h
-
-#include "MarlinConfig.h"
-
-#if ENABLED(DAC_STEPPER_CURRENT)
-#include "Wire.h"
-
-#define defaultVDD 5000
-#define BASE_ADDR 0x60
-#define RESET 0B00000110
-#define WAKE 0B00001001
-#define UPDATE 0B00001000
-#define MULTIWRITE 0B01000000
-#define SINGLEWRITE 0B01011000
-#define SEQWRITE 0B01010000
-#define VREFWRITE 0B10000000
-#define GAINWRITE 0B11000000
-#define POWERDOWNWRITE 0B10100000
-#define GENERALCALL 0B00000000
-#define GAINWRITE 0B11000000
-
-// This is taken from the original lib, makes it easy to edit if needed
-// DAC_OR_ADDRESS defined in pins_BOARD.h file
-#define DAC_DEV_ADDRESS (BASE_ADDR | DAC_OR_ADDRESS)
-
-
-void mcp4728_init();
-uint8_t mcp4728_analogWrite(uint8_t channel, uint16_t value);
-uint8_t mcp4728_eepromWrite();
-uint8_t mcp4728_setVref_all(uint8_t value);
-uint8_t mcp4728_setGain_all(uint8_t value);
-uint16_t mcp4728_getValue(uint8_t channel);
-uint8_t mcp4728_fastWrite();
-uint8_t mcp4728_simpleCommand(byte simpleCommand);
-
-#endif
-#endif
-
diff --git a/Marlin/digipot_mcp4451.cpp b/Marlin/digipot_mcp4451.cpp
deleted file mode 100644
index c6a0191..0000000
--- a/Marlin/digipot_mcp4451.cpp
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-#include "MarlinConfig.h"
-
-#if ENABLED(DIGIPOT_I2C)
-
-#include "Stream.h"
-#include "utility/twi.h"
-#include "Wire.h"
-
-// Settings for the I2C based DIGIPOT (MCP4451) on Azteeg X3 Pro
-#if MB(5DPRINT)
- #define DIGIPOT_I2C_FACTOR 117.96
- #define DIGIPOT_I2C_MAX_CURRENT 1.736
-#else
- #define DIGIPOT_I2C_FACTOR 106.7
- #define DIGIPOT_I2C_MAX_CURRENT 2.5
-#endif
-
-static byte current_to_wiper(float current) {
- return byte(ceil(float((DIGIPOT_I2C_FACTOR * current))));
-}
-
-static void i2c_send(byte addr, byte a, byte b) {
- Wire.beginTransmission(addr);
- Wire.write(a);
- Wire.write(b);
- Wire.endTransmission();
-}
-
-// This is for the MCP4451 I2C based digipot
-void digipot_i2c_set_current(int channel, float current) {
- current = min((float) max(current, 0.0f), DIGIPOT_I2C_MAX_CURRENT);
- // these addresses are specific to Azteeg X3 Pro, can be set to others,
- // In this case first digipot is at address A0=0, A1= 0, second one is at A0=0, A1= 1
- byte addr = 0x2C; // channel 0-3
- if (channel >= 4) {
- addr = 0x2E; // channel 4-7
- channel -= 4;
- }
-
- // Initial setup
- i2c_send(addr, 0x40, 0xff);
- i2c_send(addr, 0xA0, 0xff);
-
- // Set actual wiper value
- byte addresses[4] = { 0x00, 0x10, 0x60, 0x70 };
- i2c_send(addr, addresses[channel], current_to_wiper(current));
-}
-
-void digipot_i2c_init() {
- const float digipot_motor_current[] = DIGIPOT_I2C_MOTOR_CURRENTS;
- Wire.begin();
- // setup initial currents as defined in Configuration_adv.h
- for (int i = 0; i < COUNT(digipot_motor_current); i++)
- digipot_i2c_set_current(i, digipot_motor_current[i]);
-}
-
-#endif //DIGIPOT_I2C
diff --git a/Marlin/dogm_bitmaps.h b/Marlin/dogm_bitmaps.h
deleted file mode 100644
index e020d24..0000000
--- a/Marlin/dogm_bitmaps.h
+++ /dev/null
@@ -1,422 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Standard Marlin Bitmap for splashscreen
- *
- * You may use one of the following tools to generate the C++ bitmap array from
- * a black and white image:
- *
- * - http://www.marlinfw.org/tools/u8glib/converter.html
- * - http://www.digole.com/tools/PicturetoC_Hex_converter.php
- *
- * Please note that using the high-res version takes 402Bytes of PROGMEM.
- */
-
-//#define START_BMPHIGH
-
-#if ENABLED(SHOW_BOOTSCREEN)
- #if ENABLED(START_BMPHIGH)
- #define START_BMPWIDTH 112
- #define START_BMPHEIGHT 38
- #define START_BMPBYTEWIDTH 14
- #define START_BMPBYTES 532 // START_BMPWIDTH * START_BMPHEIGHT / 8
-
- const unsigned char start_bmp[START_BMPBYTES] PROGMEM = {
- 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF,
- 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF,
- 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF,
- 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
- 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF,
- 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3F, 0xFF,
- 0xC0, 0x0F, 0xC0, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x18, 0x00, 0x1F, 0xFF,
- 0xC0, 0x3F, 0xE1, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x3C, 0x00, 0x0F, 0xFF,
- 0xC0, 0x7F, 0xF3, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x78, 0x3C, 0x00, 0x07, 0xFF,
- 0xC0, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x78, 0x3C, 0x00, 0x03, 0xFF,
- 0xC1, 0xF8, 0x7F, 0x87, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x01, 0xFF,
- 0xC1, 0xF0, 0x3F, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xFF,
- 0xC1, 0xE0, 0x1E, 0x01, 0xE0, 0x1F, 0x00, 0x03, 0xE0, 0x78, 0x3C, 0x03, 0xF0, 0x7F,
- 0xC1, 0xE0, 0x1E, 0x01, 0xE0, 0x7F, 0xC0, 0x0F, 0xF8, 0x78, 0x3C, 0x07, 0xFC, 0x3F,
- 0xC1, 0xE0, 0x1E, 0x01, 0xE1, 0xFF, 0xE0, 0x1F, 0xFC, 0x78, 0x3C, 0x0F, 0xFE, 0x1F,
- 0xC1, 0xE0, 0x1E, 0x01, 0xE3, 0xFF, 0xF0, 0x3F, 0xFE, 0x78, 0x3C, 0x1F, 0xFE, 0x0F,
- 0xC1, 0xE0, 0x1E, 0x01, 0xE3, 0xF3, 0xF8, 0x3F, 0x3E, 0x78, 0x3C, 0x3F, 0x3F, 0x07,
- 0xC1, 0xE0, 0x1E, 0x01, 0xE7, 0xE0, 0xFC, 0x7C, 0x1F, 0x78, 0x3C, 0x3E, 0x1F, 0x07,
- 0xC1, 0xE0, 0x1E, 0x01, 0xE7, 0xC0, 0x7C, 0x7C, 0x0F, 0x78, 0x3C, 0x3C, 0x0F, 0x03,
- 0xC1, 0xE0, 0x1E, 0x01, 0xE7, 0x80, 0x7C, 0x78, 0x0F, 0x78, 0x3C, 0x3C, 0x0F, 0x03,
- 0xC1, 0xE0, 0x1E, 0x01, 0xE7, 0x80, 0x3C, 0x78, 0x00, 0x78, 0x3C, 0x3C, 0x0F, 0x03,
- 0xC1, 0xE0, 0x1E, 0x01, 0xE7, 0x80, 0x3C, 0x78, 0x00, 0x78, 0x3C, 0x3C, 0x0F, 0x03,
- 0xC1, 0xE0, 0x1E, 0x01, 0xE7, 0x80, 0x3C, 0x78, 0x00, 0x78, 0x3C, 0x3C, 0x0F, 0x03,
- 0xC1, 0xE0, 0x1E, 0x01, 0xE7, 0xC0, 0x3C, 0x78, 0x00, 0x78, 0x3C, 0x3C, 0x0F, 0x03,
- 0xC1, 0xE0, 0x1E, 0x01, 0xE3, 0xE0, 0x3C, 0x78, 0x00, 0x7C, 0x3C, 0x3C, 0x0F, 0x03,
- 0xC1, 0xE0, 0x1E, 0x01, 0xE3, 0xFF, 0x3F, 0xF8, 0x00, 0x7F, 0xBC, 0x3C, 0x0F, 0x03,
- 0xC1, 0xE0, 0x1E, 0x01, 0xE1, 0xFF, 0x3F, 0xF8, 0x00, 0x3F, 0xBF, 0xFC, 0x0F, 0x03,
- 0xC1, 0xE0, 0x1E, 0x01, 0xE0, 0xFF, 0x3F, 0xF8, 0x00, 0x1F, 0xBF, 0xFC, 0x0F, 0x03,
- 0xC1, 0xE0, 0x1E, 0x01, 0xE0, 0x7F, 0x3F, 0xF8, 0x00, 0x0F, 0xBF, 0xFC, 0x0F, 0x03,
- 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
- 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,
- 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E,
- 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C,
- 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78,
- 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
- 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80 };
- #else
- #define START_BMPWIDTH 56
- #define START_BMPHEIGHT 19
- #define START_BMPBYTEWIDTH 7
- #define START_BMPBYTES 133 // START_BMPWIDTH * START_BMPHEIGHT / 8
-
- const unsigned char start_bmp[START_BMPBYTES] PROGMEM = {
- 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0x60, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF,
- 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
- 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F,
- 0x83, 0xCF, 0x00, 0x00, 0x0C, 0x30, 0x3F,
- 0x87, 0xFF, 0x80, 0x00, 0x0C, 0x30, 0x1F,
- 0x86, 0x79, 0x80, 0x00, 0x0C, 0x00, 0x0F,
- 0x8C, 0x30, 0xC7, 0x83, 0x8C, 0x30, 0xE7,
- 0x8C, 0x30, 0xCF, 0xC7, 0xCC, 0x31, 0xF3,
- 0x8C, 0x30, 0xDC, 0xEC, 0xEC, 0x33, 0xB9,
- 0x8C, 0x30, 0xD8, 0x6C, 0x6C, 0x33, 0x19,
- 0x8C, 0x30, 0xD0, 0x6C, 0x0C, 0x33, 0x19,
- 0x8C, 0x30, 0xD8, 0x6C, 0x0C, 0x33, 0x19,
- 0x8C, 0x30, 0xDC, 0x6C, 0x0E, 0x3B, 0x19,
- 0x8C, 0x30, 0xCF, 0x7C, 0x07, 0x9F, 0x19,
- 0x8C, 0x30, 0xC7, 0x7C, 0x03, 0x8F, 0x19,
- 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
- 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,
- 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8 };
- #endif
-#endif
-
-// Here comes a compile-time operation to match the extruder symbols
-// on the info screen to the set number of extruders in configuration.h
-//
-// When only one extruder is selected, the "1" on the symbol will not
-// be displayed.
-
-#if HAS_TEMP_BED
- #if HOTENDS == 1
- #define STATUS_SCREENWIDTH 115 //Width in pixels
- #define STATUS_SCREENHEIGHT 19 //Height in pixels
- #define STATUS_SCREENBYTEWIDTH 15 //Width in bytes
- const unsigned char status_screen0_bmp[] PROGMEM = { //AVR-GCC, WinAVR
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x0C, 0x60,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x0E, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x0F, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x0F, 0xA0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x07, 0xA0,
- 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x40, 0x60, 0x20,
- 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x00, 0x40, 0xF0, 0x20,
- 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x00, 0x40, 0xF0, 0x20,
- 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x40, 0x60, 0x20,
- 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x08, 0x00, 0x5E, 0x07, 0xA0,
- 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x10, 0x00, 0x5F, 0x0F, 0xA0,
- 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x10, 0x00, 0x4F, 0x0F, 0x20,
- 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x08, 0x00, 0x47, 0x0E, 0x20,
- 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x63, 0x0C, 0x60,
- 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
- 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xE0,
- 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00
- };
-
- #define STATUS_SCREENWIDTH 115 //Width in pixels
- #define STATUS_SCREENHEIGHT 19 //Height in pixels
- #define STATUS_SCREENBYTEWIDTH 15 //Width in bytes
- const unsigned char status_screen1_bmp[] PROGMEM = { //AVR-GCC, WinAVR
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xF8, 0x60,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xF8, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xF0, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x60, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x01, 0xA0,
- 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x5C, 0x63, 0xA0,
- 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x00, 0x5E, 0xF7, 0xA0,
- 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x00, 0x5E, 0xF7, 0xA0,
- 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x5C, 0x63, 0xA0,
- 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x08, 0x00, 0x58, 0x01, 0xA0,
- 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x10, 0x00, 0x40, 0x60, 0x20,
- 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x10, 0x00, 0x40, 0xF0, 0x20,
- 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x08, 0x00, 0x41, 0xF8, 0x20,
- 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x61, 0xF8, 0x60,
- 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
- 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xE0,
- 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00
- };
- #elif HOTENDS == 2
- #define STATUS_SCREENWIDTH 115 //Width in pixels
- #define STATUS_SCREENHEIGHT 19 //Height in pixels
- #define STATUS_SCREENBYTEWIDTH 15 //Width in bytes
- const unsigned char status_screen0_bmp[] PROGMEM = { //AVR-GCC, WinAVR
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x0C, 0x60,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x0E, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x0F, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x0F, 0xA0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x07, 0xA0,
- 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x40, 0x60, 0x20,
- 0xFB, 0xC0, 0x00, 0x79, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x00, 0x40, 0xF0, 0x20,
- 0xF3, 0xC0, 0x00, 0x76, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x00, 0x40, 0xF0, 0x20,
- 0xEB, 0xC0, 0x00, 0x7E, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x40, 0x60, 0x20,
- 0x7B, 0x80, 0x00, 0x3D, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x82, 0x08, 0x00, 0x5E, 0x07, 0xA0,
- 0x7B, 0x80, 0x00, 0x3B, 0xC0, 0x00, 0x00, 0x00, 0x01, 0x04, 0x10, 0x00, 0x5F, 0x0F, 0xA0,
- 0xFB, 0xC0, 0x00, 0x77, 0xE0, 0x00, 0x00, 0x00, 0x01, 0x04, 0x10, 0x00, 0x4F, 0x0F, 0x20,
- 0xFB, 0xC0, 0x00, 0x70, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x82, 0x08, 0x00, 0x47, 0x0E, 0x20,
- 0xFF, 0xC0, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x63, 0x0C, 0x60,
- 0x3F, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
- 0x1E, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xE0,
- 0x0C, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00
- };
-
- #define STATUS_SCREENWIDTH 115 //Width in pixels
- #define STATUS_SCREENHEIGHT 19 //Height in pixels
- #define STATUS_SCREENBYTEWIDTH 15 //Width in bytes
- const unsigned char status_screen1_bmp[] PROGMEM = { //AVR-GCC, WinAVR
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xF8, 0x60,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xF8, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xF0, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x60, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x01, 0xA0,
- 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x5C, 0x63, 0xA0,
- 0xFB, 0xC0, 0x00, 0x79, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x00, 0x5E, 0xF7, 0xA0,
- 0xF3, 0xC0, 0x00, 0x76, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x00, 0x5E, 0xF7, 0xA0,
- 0xEB, 0xC0, 0x00, 0x7E, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x5C, 0x63, 0xA0,
- 0x7B, 0x80, 0x00, 0x3D, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x82, 0x08, 0x00, 0x58, 0x01, 0xA0,
- 0x7B, 0x80, 0x00, 0x3B, 0xC0, 0x00, 0x00, 0x00, 0x01, 0x04, 0x10, 0x00, 0x40, 0x60, 0x20,
- 0xFB, 0xC0, 0x00, 0x77, 0xE0, 0x00, 0x00, 0x00, 0x01, 0x04, 0x10, 0x00, 0x40, 0xF0, 0x20,
- 0xFB, 0xC0, 0x00, 0x70, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x82, 0x08, 0x00, 0x41, 0xF8, 0x20,
- 0xFF, 0xC0, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x61, 0xF8, 0x60,
- 0x3F, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
- 0x1E, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xE0,
- 0x0C, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00
- };
- #else
- #define STATUS_SCREENWIDTH 115 //Width in pixels
- #define STATUS_SCREENHEIGHT 19 //Height in pixels
- #define STATUS_SCREENBYTEWIDTH 15 //Width in bytes
- const unsigned char status_screen0_bmp[] PROGMEM = { //AVR-GCC, WinAVR
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x0C, 0x60,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x0E, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x0F, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x0F, 0xA0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x07, 0xA0,
- 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x3F, 0xC0, 0x00, 0x41, 0x04, 0x00, 0x40, 0x60, 0x20,
- 0xFB, 0xC0, 0x00, 0x79, 0xE0, 0x00, 0x79, 0xE0, 0x00, 0x20, 0x82, 0x00, 0x40, 0xF0, 0x20,
- 0xF3, 0xC0, 0x00, 0x76, 0xE0, 0x00, 0x76, 0xE0, 0x00, 0x20, 0x82, 0x00, 0x40, 0xF0, 0x20,
- 0xEB, 0xC0, 0x00, 0x7E, 0xE0, 0x00, 0x7E, 0xE0, 0x00, 0x41, 0x04, 0x00, 0x40, 0x60, 0x20,
- 0x7B, 0x80, 0x00, 0x3D, 0xC0, 0x00, 0x39, 0xC0, 0x00, 0x82, 0x08, 0x00, 0x5E, 0x07, 0xA0,
- 0x7B, 0x80, 0x00, 0x3B, 0xC0, 0x00, 0x3E, 0xC0, 0x01, 0x04, 0x10, 0x00, 0x5F, 0x0F, 0xA0,
- 0xFB, 0xC0, 0x00, 0x77, 0xE0, 0x00, 0x76, 0xE0, 0x01, 0x04, 0x10, 0x00, 0x4F, 0x0F, 0x20,
- 0xFB, 0xC0, 0x00, 0x70, 0xE0, 0x00, 0x79, 0xE0, 0x00, 0x82, 0x08, 0x00, 0x47, 0x0E, 0x20,
- 0xFF, 0xC0, 0x00, 0x7F, 0xE0, 0x00, 0x7F, 0xE0, 0x00, 0x41, 0x04, 0x00, 0x63, 0x0C, 0x60,
- 0x3F, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
- 0x1E, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xE0,
- 0x0C, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00
- };
-
- #define STATUS_SCREENWIDTH 115 //Width in pixels
- #define STATUS_SCREENHEIGHT 19 //Height in pixels
- #define STATUS_SCREENBYTEWIDTH 15 //Width in bytes
- const unsigned char status_screen1_bmp[] PROGMEM = { //AVR-GCC, WinAVR
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xF8, 0x60,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xF8, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xF0, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x60, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x01, 0xA0,
- 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x3F, 0xC0, 0x00, 0x41, 0x04, 0x00, 0x5C, 0x63, 0xA0,
- 0xFB, 0xC0, 0x00, 0x79, 0xE0, 0x00, 0x79, 0xE0, 0x00, 0x20, 0x82, 0x00, 0x5E, 0xF7, 0xA0,
- 0xF3, 0xC0, 0x00, 0x76, 0xE0, 0x00, 0x76, 0xE0, 0x00, 0x20, 0x82, 0x00, 0x5E, 0xF7, 0xA0,
- 0xEB, 0xC0, 0x00, 0x7E, 0xE0, 0x00, 0x7E, 0xE0, 0x00, 0x41, 0x04, 0x00, 0x5C, 0x63, 0xA0,
- 0x7B, 0x80, 0x00, 0x3D, 0xC0, 0x00, 0x39, 0xC0, 0x00, 0x82, 0x08, 0x00, 0x58, 0x01, 0xA0,
- 0x7B, 0x80, 0x00, 0x3B, 0xC0, 0x00, 0x3E, 0xC0, 0x01, 0x04, 0x10, 0x00, 0x40, 0x60, 0x20,
- 0xFB, 0xC0, 0x00, 0x77, 0xE0, 0x00, 0x76, 0xE0, 0x01, 0x04, 0x10, 0x00, 0x40, 0xF0, 0x20,
- 0xFB, 0xC0, 0x00, 0x70, 0xE0, 0x00, 0x79, 0xE0, 0x00, 0x82, 0x08, 0x00, 0x41, 0xF8, 0x20,
- 0xFF, 0xC0, 0x00, 0x7F, 0xE0, 0x00, 0x7F, 0xE0, 0x00, 0x41, 0x04, 0x00, 0x61, 0xF8, 0x60,
- 0x3F, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
- 0x1E, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xE0,
- 0x0C, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00
- };
- #endif // Extruders
-#else
- #if HOTENDS == 1
- #define STATUS_SCREENWIDTH 115 //Width in pixels
- #define STATUS_SCREENHEIGHT 19 //Height in pixels
- #define STATUS_SCREENBYTEWIDTH 15 //Width in bytes
- const unsigned char status_screen0_bmp[] PROGMEM = { //AVR-GCC, WinAVR
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x0C, 0x60,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x0E, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x0F, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x0F, 0xA0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x07, 0xA0,
- 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x60, 0x20,
- 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xF0, 0x20,
- 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xF0, 0x20,
- 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x60, 0x20,
- 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x07, 0xA0,
- 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x0F, 0xA0,
- 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x0F, 0x20,
- 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x0E, 0x20,
- 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x0C, 0x60,
- 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
- 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0,
- 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- };
-
- #define STATUS_SCREENWIDTH 115 //Width in pixels
- #define STATUS_SCREENHEIGHT 19 //Height in pixels
- #define STATUS_SCREENBYTEWIDTH 15 //Width in bytes
- const unsigned char status_screen1_bmp[] PROGMEM = { //AVR-GCC, WinAVR
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xF8, 0x60,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xF8, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xF0, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x60, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x01, 0xA0,
- 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x63, 0xA0,
- 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5E, 0xF7, 0xA0,
- 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5E, 0xF7, 0xA0,
- 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x63, 0xA0,
- 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x01, 0xA0,
- 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x60, 0x20,
- 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xF0, 0x20,
- 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xF8, 0x20,
- 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xF8, 0x60,
- 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
- 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0,
- 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- };
- #elif HOTENDS == 2
- #define STATUS_SCREENWIDTH 115 //Width in pixels
- #define STATUS_SCREENHEIGHT 19 //Height in pixels
- #define STATUS_SCREENBYTEWIDTH 15 //Width in bytes
- const unsigned char status_screen0_bmp[] PROGMEM = { //AVR-GCC, WinAVR
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x0C, 0x60,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x0E, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x0F, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x0F, 0xA0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x07, 0xA0,
- 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x60, 0x20,
- 0xFB, 0xC0, 0x00, 0x79, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xF0, 0x20,
- 0xF3, 0xC0, 0x00, 0x76, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xF0, 0x20,
- 0xEB, 0xC0, 0x00, 0x7E, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x60, 0x20,
- 0x7B, 0x80, 0x00, 0x3D, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x07, 0xA0,
- 0x7B, 0x80, 0x00, 0x3B, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x0F, 0xA0,
- 0xFB, 0xC0, 0x00, 0x77, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x0F, 0x20,
- 0xFB, 0xC0, 0x00, 0x70, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x0E, 0x20,
- 0xFF, 0xC0, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x0C, 0x60,
- 0x3F, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
- 0x1E, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0,
- 0x0C, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- };
-
- #define STATUS_SCREENWIDTH 115 //Width in pixels
- #define STATUS_SCREENHEIGHT 19 //Height in pixels
- #define STATUS_SCREENBYTEWIDTH 15 //Width in bytes
- const unsigned char status_screen1_bmp[] PROGMEM = { //AVR-GCC, WinAVR
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xF8, 0x60,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xF8, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xF0, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x60, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x01, 0xA0,
- 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x63, 0xA0,
- 0xFB, 0xC0, 0x00, 0x79, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5E, 0xF7, 0xA0,
- 0xF3, 0xC0, 0x00, 0x76, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5E, 0xF7, 0xA0,
- 0xEB, 0xC0, 0x00, 0x7E, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x63, 0xA0,
- 0x7B, 0x80, 0x00, 0x3D, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x01, 0xA0,
- 0x7B, 0x80, 0x00, 0x3B, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x60, 0x20,
- 0xFB, 0xC0, 0x00, 0x77, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xF0, 0x20,
- 0xFB, 0xC0, 0x00, 0x70, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xF8, 0x20,
- 0xFF, 0xC0, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xF8, 0x60,
- 0x3F, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
- 0x1E, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0,
- 0x0C, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- };
- #else
- #define STATUS_SCREENWIDTH 115 //Width in pixels
- #define STATUS_SCREENHEIGHT 19 //Height in pixels
- #define STATUS_SCREENBYTEWIDTH 15 //Width in bytes
- const unsigned char status_screen0_bmp[] PROGMEM = { //AVR-GCC, WinAVR
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x0C, 0x60,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x0E, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x0F, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x0F, 0xA0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x07, 0xA0,
- 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x40, 0x60, 0x20,
- 0xFB, 0xC0, 0x00, 0x79, 0xE0, 0x00, 0x79, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x40, 0xF0, 0x20,
- 0xF3, 0xC0, 0x00, 0x76, 0xE0, 0x00, 0x76, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x40, 0xF0, 0x20,
- 0xEB, 0xC0, 0x00, 0x7E, 0xE0, 0x00, 0x7E, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x40, 0x60, 0x20,
- 0x7B, 0x80, 0x00, 0x3D, 0xC0, 0x00, 0x39, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x07, 0xA0,
- 0x7B, 0x80, 0x00, 0x3B, 0xC0, 0x00, 0x3E, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x0F, 0xA0,
- 0xFB, 0xC0, 0x00, 0x77, 0xE0, 0x00, 0x76, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x0F, 0x20,
- 0xFB, 0xC0, 0x00, 0x70, 0xE0, 0x00, 0x79, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x47, 0x0E, 0x20,
- 0xFF, 0xC0, 0x00, 0x7F, 0xE0, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x63, 0x0C, 0x60,
- 0x3F, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
- 0x1E, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0,
- 0x0C, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- };
-
- #define STATUS_SCREENWIDTH 115 //Width in pixels
- #define STATUS_SCREENHEIGHT 19 //Height in pixels
- #define STATUS_SCREENBYTEWIDTH 15 //Width in bytes
- const unsigned char status_screen1_bmp[] PROGMEM = { //AVR-GCC, WinAVR
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xF8, 0x60,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xF8, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xF0, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x60, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x01, 0xA0,
- 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x63, 0xA0,
- 0xFB, 0xC0, 0x00, 0x79, 0xE0, 0x00, 0x79, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5E, 0xF7, 0xA0,
- 0xF3, 0xC0, 0x00, 0x76, 0xE0, 0x00, 0x76, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5E, 0xF7, 0xA0,
- 0xEB, 0xC0, 0x00, 0x7E, 0xE0, 0x00, 0x7E, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x63, 0xA0,
- 0x7B, 0x80, 0x00, 0x3D, 0xC0, 0x00, 0x39, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x58, 0x01, 0xA0,
- 0x7B, 0x80, 0x00, 0x3B, 0xC0, 0x00, 0x3E, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x40, 0x60, 0x20,
- 0xFB, 0xC0, 0x00, 0x77, 0xE0, 0x00, 0x76, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x40, 0xF0, 0x20,
- 0xFB, 0xC0, 0x00, 0x70, 0xE0, 0x00, 0x79, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x41, 0xF8, 0x20,
- 0xFF, 0xC0, 0x00, 0x7F, 0xE0, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x61, 0xF8, 0x60,
- 0x3F, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xE0,
- 0x1E, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0,
- 0x0C, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- };
- #endif // Extruders
-#endif // HAS_TEMP_BED
diff --git a/Marlin/dogm_font_data_6x9_marlin.h b/Marlin/dogm_font_data_6x9_marlin.h
deleted file mode 100644
index f298a6a..0000000
--- a/Marlin/dogm_font_data_6x9_marlin.h
+++ /dev/null
@@ -1,180 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- Fontname: -Misc-Fixed-Medium-R-Normal--9-90-75-75-C-60-ISO10646-1
- Copyright: Public domain font. Share and enjoy.
- Capital A Height: 6, '1' Height: 6
- Calculated Max Values w= 6 h= 9 x= 2 y= 7 dx= 6 dy= 0 ascent= 7 len= 9
- Font Bounding box w= 6 h= 9 x= 0 y=-2
- Calculated Min Values x= 0 y=-2 dx= 0 dy= 0
- Pure Font ascent = 6 descent=-2
- X Font ascent = 6 descent=-2
- Max Font ascent = 7 descent=-2
-*/
-#include
-const u8g_fntpgm_uint8_t u8g_font_6x9[2300] U8G_SECTION(".progmem.u8g_font_6x9") = {
- 0, 6, 9, 0, 254, 6, 1, 137, 2, 254, 32, 255, 254, 7, 254, 6,
- 254, 0, 0, 0, 6, 0, 7, 1, 6, 6, 6, 2, 0, 128, 128, 128,
- 128, 0, 128, 3, 3, 3, 6, 1, 3, 160, 160, 160, 5, 7, 7, 6,
- 0, 255, 80, 80, 248, 80, 248, 80, 80, 5, 9, 9, 6, 0, 254, 32,
- 112, 168, 160, 112, 40, 168, 112, 32, 6, 8, 8, 6, 0, 255, 64, 168,
- 72, 16, 32, 72, 84, 8, 5, 7, 7, 6, 0, 255, 96, 144, 144, 96,
- 152, 144, 104, 1, 3, 3, 6, 2, 3, 128, 128, 128, 2, 7, 7, 6,
- 2, 255, 64, 128, 128, 128, 128, 128, 64, 2, 7, 7, 6, 2, 255, 128,
- 64, 64, 64, 64, 64, 128, 5, 5, 5, 6, 0, 0, 136, 80, 248, 80,
- 136, 5, 5, 5, 6, 0, 0, 32, 32, 248, 32, 32, 2, 4, 4, 6,
- 2, 254, 192, 64, 64, 128, 5, 1, 1, 6, 0, 2, 248, 2, 2, 2,
- 6, 2, 0, 192, 192, 4, 6, 6, 6, 1, 0, 16, 16, 32, 64, 128,
- 128, 4, 6, 6, 6, 1, 0, 96, 144, 144, 144, 144, 96, 3, 6, 6,
- 6, 1, 0, 64, 192, 64, 64, 64, 224, 4, 6, 6, 6, 1, 0, 96,
- 144, 16, 32, 64, 240, 4, 6, 6, 6, 1, 0, 240, 32, 96, 16, 16,
- 224, 5, 6, 6, 6, 0, 0, 16, 48, 80, 144, 248, 16, 4, 6, 6,
- 6, 1, 0, 240, 128, 224, 16, 16, 224, 4, 6, 6, 6, 1, 0, 96,
- 128, 224, 144, 144, 96, 4, 6, 6, 6, 1, 0, 240, 16, 16, 32, 64,
- 64, 4, 6, 6, 6, 1, 0, 96, 144, 96, 144, 144, 96, 4, 6, 6,
- 6, 1, 0, 96, 144, 144, 112, 16, 96, 2, 5, 5, 6, 2, 0, 192,
- 192, 0, 192, 192, 2, 7, 7, 6, 2, 254, 192, 192, 0, 192, 64, 64,
- 128, 5, 5, 5, 6, 0, 0, 24, 96, 128, 96, 24, 5, 3, 3, 6,
- 0, 1, 248, 0, 248, 5, 5, 5, 6, 0, 0, 192, 48, 8, 48, 192,
- 4, 7, 7, 6, 1, 0, 96, 144, 16, 96, 64, 0, 64, 5, 6, 6,
- 6, 0, 0, 112, 144, 168, 176, 128, 112, 5, 6, 6, 6, 0, 0, 32,
- 80, 136, 248, 136, 136, 5, 6, 6, 6, 0, 0, 240, 136, 240, 136, 136,
- 240, 4, 6, 6, 6, 1, 0, 96, 144, 128, 128, 144, 96, 4, 6, 6,
- 6, 1, 0, 224, 144, 144, 144, 144, 224, 4, 6, 6, 6, 1, 0, 240,
- 128, 224, 128, 128, 240, 4, 6, 6, 6, 1, 0, 240, 128, 224, 128, 128,
- 128, 4, 6, 6, 6, 1, 0, 96, 144, 128, 176, 144, 96, 4, 6, 6,
- 6, 1, 0, 144, 144, 240, 144, 144, 144, 3, 6, 6, 6, 1, 0, 224,
- 64, 64, 64, 64, 224, 5, 6, 6, 6, 0, 0, 56, 16, 16, 16, 144,
- 96, 4, 6, 6, 6, 1, 0, 144, 160, 192, 160, 144, 144, 4, 6, 6,
- 6, 1, 0, 128, 128, 128, 128, 128, 240, 5, 6, 6, 6, 0, 0, 136,
- 216, 168, 168, 136, 136, 4, 6, 6, 6, 1, 0, 144, 208, 176, 144, 144,
- 144, 5, 6, 6, 6, 0, 0, 112, 136, 136, 136, 136, 112, 4, 6, 6,
- 6, 1, 0, 224, 144, 144, 224, 128, 128, 4, 7, 7, 6, 1, 255, 96,
- 144, 144, 208, 176, 96, 16, 4, 6, 6, 6, 1, 0, 224, 144, 144, 224,
- 144, 144, 4, 6, 6, 6, 1, 0, 96, 144, 64, 32, 144, 96, 5, 6,
- 6, 6, 0, 0, 248, 32, 32, 32, 32, 32, 4, 6, 6, 6, 1, 0,
- 144, 144, 144, 144, 144, 96, 4, 6, 6, 6, 1, 0, 144, 144, 144, 240,
- 96, 96, 5, 6, 6, 6, 0, 0, 136, 136, 168, 168, 216, 136, 5, 6,
- 6, 6, 0, 0, 136, 80, 32, 32, 80, 136, 5, 6, 6, 6, 0, 0,
- 136, 136, 80, 32, 32, 32, 4, 6, 6, 6, 1, 0, 240, 16, 32, 64,
- 128, 240, 3, 6, 6, 6, 1, 0, 224, 128, 128, 128, 128, 224, 4, 6,
- 6, 6, 1, 0, 128, 128, 64, 32, 16, 16, 3, 6, 6, 6, 1, 0,
- 224, 32, 32, 32, 32, 224, 5, 3, 3, 6, 0, 3, 32, 80, 136, 5,
- 1, 1, 6, 0, 254, 248, 2, 2, 2, 6, 2, 4, 128, 64, 4, 4,
- 4, 6, 1, 0, 112, 144, 144, 112, 4, 6, 6, 6, 1, 0, 128, 128,
- 224, 144, 144, 224, 4, 4, 4, 6, 1, 0, 112, 128, 128, 112, 4, 6,
- 6, 6, 1, 0, 16, 16, 112, 144, 144, 112, 4, 4, 4, 6, 1, 0,
- 96, 176, 192, 112, 4, 6, 6, 6, 1, 0, 32, 80, 64, 224, 64, 64,
- 4, 6, 6, 6, 1, 254, 96, 144, 144, 112, 16, 96, 4, 6, 6, 6,
- 1, 0, 128, 128, 224, 144, 144, 144, 3, 6, 6, 6, 1, 0, 64, 0,
- 192, 64, 64, 224, 3, 8, 8, 6, 1, 254, 32, 0, 96, 32, 32, 32,
- 160, 64, 4, 6, 6, 6, 1, 0, 128, 128, 160, 192, 160, 144, 3, 6,
- 6, 6, 1, 0, 192, 64, 64, 64, 64, 224, 5, 4, 4, 6, 0, 0,
- 208, 168, 168, 136, 4, 4, 4, 6, 1, 0, 224, 144, 144, 144, 4, 4,
- 4, 6, 1, 0, 96, 144, 144, 96, 4, 6, 6, 6, 1, 254, 224, 144,
- 144, 224, 128, 128, 4, 6, 6, 6, 1, 254, 112, 144, 144, 112, 16, 16,
- 4, 4, 4, 6, 1, 0, 160, 208, 128, 128, 4, 4, 4, 6, 1, 0,
- 112, 192, 48, 224, 4, 6, 6, 6, 1, 0, 64, 64, 224, 64, 80, 32,
- 4, 4, 4, 6, 1, 0, 144, 144, 144, 112, 4, 4, 4, 6, 1, 0,
- 144, 144, 96, 96, 5, 4, 4, 6, 0, 0, 136, 168, 168, 80, 4, 4,
- 4, 6, 1, 0, 144, 96, 96, 144, 4, 6, 6, 6, 1, 254, 144, 144,
- 144, 112, 144, 96, 4, 4, 4, 6, 1, 0, 240, 32, 64, 240, 3, 7,
- 7, 6, 1, 0, 32, 64, 64, 128, 64, 64, 32, 1, 7, 7, 6, 2,
- 255, 128, 128, 128, 128, 128, 128, 128, 3, 7, 7, 6, 1, 0, 128, 64,
- 64, 32, 64, 64, 128, 4, 2, 2, 6, 1, 3, 80, 160, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0,
- 0, 6, 0, 7, 1, 6, 6, 6, 2, 0, 128, 0, 128, 128, 128, 128,
- 4, 6, 6, 6, 1, 255, 32, 112, 160, 160, 112, 32, 5, 7, 7, 6,
- 0, 255, 48, 72, 64, 240, 64, 64, 248, 5, 5, 5, 6, 0, 0, 168,
- 80, 136, 80, 168, 5, 6, 6, 6, 0, 0, 136, 80, 248, 32, 248, 32,
- 1, 7, 7, 6, 2, 255, 128, 128, 128, 0, 128, 128, 128, 4, 7, 7,
- 6, 1, 255, 112, 128, 96, 144, 96, 16, 224, 3, 1, 1, 6, 1, 5,
- 160, 6, 7, 7, 6, 0, 0, 120, 132, 148, 164, 148, 132, 120, 3, 5,
- 5, 6, 1, 1, 96, 160, 96, 0, 224, 5, 5, 5, 6, 0, 0, 40,
- 80, 160, 80, 40, 4, 3, 3, 6, 1, 0, 240, 16, 16, 4, 1, 1,
- 6, 1, 2, 240, 6, 7, 7, 6, 0, 0, 120, 132, 180, 164, 164, 132,
- 120, 4, 1, 1, 6, 1, 5, 240, 4, 3, 3, 6, 1, 2, 96, 144,
- 96, 5, 7, 7, 6, 0, 255, 32, 32, 248, 32, 32, 0, 248, 3, 5,
- 5, 6, 1, 1, 64, 160, 32, 64, 224, 3, 5, 5, 6, 1, 1, 192,
- 32, 64, 32, 192, 2, 2, 2, 6, 2, 4, 64, 128, 4, 5, 5, 6,
- 1, 255, 144, 144, 176, 208, 128, 5, 6, 6, 6, 0, 0, 120, 232, 232,
- 104, 40, 40, 1, 1, 1, 6, 2, 2, 128, 2, 2, 2, 6, 2, 254,
- 64, 128, 3, 5, 5, 6, 1, 1, 64, 192, 64, 64, 224, 3, 5, 5,
- 6, 1, 1, 64, 160, 64, 0, 224, 5, 5, 5, 6, 0, 0, 160, 80,
- 40, 80, 160, 5, 8, 8, 6, 0, 255, 64, 192, 64, 80, 112, 48, 120,
- 16, 5, 8, 8, 6, 0, 255, 64, 192, 64, 80, 104, 8, 16, 56, 5,
- 8, 8, 6, 0, 255, 192, 32, 64, 48, 240, 48, 120, 16, 4, 7, 7,
- 6, 1, 0, 32, 0, 32, 96, 128, 144, 96, 5, 7, 7, 6, 0, 0,
- 64, 32, 32, 80, 112, 136, 136, 5, 7, 7, 6, 0, 0, 16, 32, 32,
- 80, 112, 136, 136, 5, 7, 7, 6, 0, 0, 32, 80, 32, 80, 112, 136,
- 136, 5, 7, 7, 6, 0, 0, 40, 80, 32, 80, 112, 136, 136, 5, 7,
- 7, 6, 0, 0, 80, 0, 32, 80, 112, 136, 136, 5, 7, 7, 6, 0,
- 0, 32, 80, 32, 80, 112, 136, 136, 5, 6, 6, 6, 0, 0, 120, 160,
- 240, 160, 160, 184, 4, 8, 8, 6, 1, 254, 96, 144, 128, 128, 144, 96,
- 32, 64, 4, 7, 7, 6, 1, 0, 64, 32, 240, 128, 224, 128, 240, 4,
- 7, 7, 6, 1, 0, 32, 64, 240, 128, 224, 128, 240, 4, 7, 7, 6,
- 1, 0, 32, 80, 240, 128, 224, 128, 240, 4, 7, 7, 6, 1, 0, 80,
- 0, 240, 128, 224, 128, 240, 3, 7, 7, 6, 1, 0, 128, 64, 224, 64,
- 64, 64, 224, 3, 7, 7, 6, 1, 0, 32, 64, 224, 64, 64, 64, 224,
- 3, 7, 7, 6, 1, 0, 64, 160, 224, 64, 64, 64, 224, 3, 7, 7,
- 6, 1, 0, 160, 0, 224, 64, 64, 64, 224, 5, 6, 6, 6, 0, 0,
- 112, 72, 232, 72, 72, 112, 4, 7, 7, 6, 1, 0, 80, 160, 144, 208,
- 176, 144, 144, 4, 7, 7, 6, 1, 0, 64, 32, 96, 144, 144, 144, 96,
- 4, 7, 7, 6, 1, 0, 32, 64, 96, 144, 144, 144, 96, 4, 7, 7,
- 6, 1, 0, 32, 80, 96, 144, 144, 144, 96, 4, 7, 7, 6, 1, 0,
- 80, 160, 96, 144, 144, 144, 96, 4, 7, 7, 6, 1, 0, 80, 0, 96,
- 144, 144, 144, 96, 5, 5, 5, 6, 0, 0, 136, 80, 32, 80, 136, 4,
- 8, 8, 6, 1, 255, 16, 112, 176, 176, 208, 208, 224, 128, 4, 7, 7,
- 6, 1, 0, 64, 32, 144, 144, 144, 144, 96, 4, 7, 7, 6, 1, 0,
- 32, 64, 144, 144, 144, 144, 96, 4, 7, 7, 6, 1, 0, 32, 80, 144,
- 144, 144, 144, 96, 4, 7, 7, 6, 1, 0, 80, 0, 144, 144, 144, 144,
- 96, 5, 7, 7, 6, 0, 0, 16, 32, 136, 80, 32, 32, 32, 4, 6,
- 6, 6, 1, 0, 128, 224, 144, 144, 224, 128, 4, 6, 6, 6, 1, 0,
- 96, 144, 160, 160, 144, 160, 4, 7, 7, 6, 1, 0, 64, 32, 0, 112,
- 144, 144, 112, 4, 7, 7, 6, 1, 0, 32, 64, 0, 112, 144, 144, 112,
- 4, 7, 7, 6, 1, 0, 32, 80, 0, 112, 144, 144, 112, 4, 7, 7,
- 6, 1, 0, 80, 160, 0, 112, 144, 144, 112, 4, 6, 6, 6, 1, 0,
- 80, 0, 112, 144, 144, 112, 4, 7, 7, 6, 1, 0, 32, 80, 32, 112,
- 144, 144, 112, 5, 4, 4, 6, 0, 0, 112, 168, 176, 120, 4, 6, 6,
- 6, 1, 254, 112, 128, 128, 112, 32, 64, 4, 7, 7, 6, 1, 0, 64,
- 32, 0, 96, 176, 192, 112, 4, 7, 7, 6, 1, 0, 32, 64, 0, 96,
- 176, 192, 112, 4, 7, 7, 6, 1, 0, 32, 80, 0, 96, 176, 192, 112,
- 4, 6, 6, 6, 1, 0, 80, 0, 96, 176, 192, 112, 3, 7, 7, 6,
- 1, 0, 128, 64, 0, 192, 64, 64, 224, 3, 7, 7, 6, 1, 0, 32,
- 64, 0, 192, 64, 64, 224, 3, 7, 7, 6, 1, 0, 64, 160, 0, 192,
- 64, 64, 224, 3, 6, 6, 6, 1, 0, 160, 0, 192, 64, 64, 224, 4,
- 7, 7, 6, 1, 0, 48, 96, 16, 112, 144, 144, 96, 4, 7, 7, 6,
- 1, 0, 80, 160, 0, 224, 144, 144, 144, 4, 7, 7, 6, 1, 0, 64,
- 32, 0, 96, 144, 144, 96, 4, 7, 7, 6, 1, 0, 32, 64, 0, 96,
- 144, 144, 96, 4, 7, 7, 6, 1, 0, 32, 80, 0, 96, 144, 144, 96,
- 4, 7, 7, 6, 1, 0, 80, 160, 0, 96, 144, 144, 96, 4, 6, 6,
- 6, 1, 0, 80, 0, 96, 144, 144, 96, 5, 5, 5, 6, 0, 0, 32,
- 0, 248, 0, 32, 4, 4, 4, 6, 1, 0, 112, 176, 208, 224, 4, 7,
- 7, 6, 1, 0, 64, 32, 0, 144, 144, 144, 112, 4, 7, 7, 6, 1,
- 0, 32, 64, 0, 144, 144, 144, 112, 4, 7, 7, 6, 1, 0, 32, 80,
- 0, 144, 144, 144, 112, 4, 6, 6, 6, 1, 0, 80, 0, 144, 144, 144,
- 112, 4, 9, 9, 6, 1, 254, 32, 64, 0, 144, 144, 144, 112, 144, 96,
- 4, 8, 8, 6, 1, 254, 128, 128, 224, 144, 144, 224, 128, 128, 4, 8,
- 8, 6, 1, 254, 80, 0, 144, 144, 144, 112, 144, 96
-};
diff --git a/Marlin/dogm_font_data_HD44780_C.h b/Marlin/dogm_font_data_HD44780_C.h
deleted file mode 100644
index 21d4aaa..0000000
--- a/Marlin/dogm_font_data_HD44780_C.h
+++ /dev/null
@@ -1,194 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- Fontname: HD44780_C v1.2
- Copyright: A. Hardtung, public domain
- Capital A Height: 7, '1' Height: 7
- Calculated Max Values w= 5 h= 8 x= 2 y= 7 dx= 6 dy= 0 ascent= 8 len= 8
- Font Bounding box w= 6 h= 9 x= 0 y=-2
- Calculated Min Values x= 0 y=-1 dx= 0 dy= 0
- Pure Font ascent = 7 descent=-1
- X Font ascent = 7 descent=-1
- Max Font ascent = 8 descent=-1
-*/
-#include
-const u8g_fntpgm_uint8_t HD44780_C_5x7[2522] U8G_SECTION(".progmem.HD44780_C_5x7") = {
- 0, 6, 9, 0, 254, 7, 1, 145, 3, 34, 32, 255, 255, 8, 255, 7,
- 255, 0, 0, 0, 6, 0, 0, 1, 7, 7, 6, 2, 0, 128, 128, 128,
- 128, 128, 0, 128, 3, 2, 2, 6, 1, 5, 160, 160, 5, 7, 7, 6,
- 0, 0, 80, 80, 248, 80, 248, 80, 80, 5, 7, 7, 6, 0, 0, 32,
- 120, 160, 112, 40, 240, 32, 5, 7, 7, 6, 0, 0, 192, 200, 16, 32,
- 64, 152, 24, 5, 7, 7, 6, 0, 0, 96, 144, 160, 64, 168, 144, 104,
- 2, 3, 3, 6, 1, 4, 192, 64, 128, 3, 7, 7, 6, 1, 0, 32,
- 64, 128, 128, 128, 64, 32, 3, 7, 7, 6, 1, 0, 128, 64, 32, 32,
- 32, 64, 128, 5, 5, 5, 6, 0, 1, 32, 168, 112, 168, 32, 5, 5,
- 5, 6, 0, 1, 32, 32, 248, 32, 32, 2, 3, 3, 6, 2, 255, 192,
- 64, 128, 5, 1, 1, 6, 0, 3, 248, 2, 2, 2, 6, 2, 0, 192,
- 192, 5, 5, 5, 6, 0, 1, 8, 16, 32, 64, 128, 5, 7, 7, 6,
- 0, 0, 112, 136, 152, 168, 200, 136, 112, 3, 7, 7, 6, 1, 0, 64,
- 192, 64, 64, 64, 64, 224, 5, 7, 7, 6, 0, 0, 112, 136, 8, 112,
- 128, 128, 248, 5, 7, 7, 6, 0, 0, 248, 16, 32, 16, 8, 8, 240,
- 5, 7, 7, 6, 0, 0, 16, 48, 80, 144, 248, 16, 16, 5, 7, 7,
- 6, 0, 0, 248, 128, 240, 8, 8, 136, 112, 5, 7, 7, 6, 0, 0,
- 48, 64, 128, 240, 136, 136, 112, 5, 7, 7, 6, 0, 0, 248, 8, 16,
- 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 112, 136, 136, 112, 136, 136,
- 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 120, 8, 16, 96, 2, 5,
- 5, 6, 2, 0, 192, 192, 0, 192, 192, 2, 6, 6, 6, 2, 255, 192,
- 192, 0, 192, 64, 128, 4, 7, 7, 6, 0, 0, 16, 32, 64, 128, 64,
- 32, 16, 5, 3, 3, 6, 0, 2, 248, 0, 248, 4, 7, 7, 6, 1,
- 0, 128, 64, 32, 16, 32, 64, 128, 5, 7, 7, 6, 0, 0, 112, 136,
- 8, 16, 32, 0, 32, 5, 6, 6, 6, 0, 0, 112, 136, 8, 104, 168,
- 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 248, 136, 136, 136, 5, 7,
- 7, 6, 0, 0, 240, 136, 136, 240, 136, 136, 240, 5, 7, 7, 6, 0,
- 0, 112, 136, 128, 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 224, 144,
- 136, 136, 136, 144, 224, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128,
- 128, 248, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128, 128, 128, 5,
- 7, 7, 6, 0, 0, 112, 136, 128, 184, 136, 136, 112, 5, 7, 7, 6,
- 0, 0, 136, 136, 136, 248, 136, 136, 136, 1, 7, 7, 6, 2, 0, 128,
- 128, 128, 128, 128, 128, 128, 5, 7, 7, 6, 0, 0, 56, 16, 16, 16,
- 16, 144, 96, 5, 7, 7, 6, 0, 0, 136, 144, 160, 192, 160, 144, 136,
- 5, 7, 7, 6, 0, 0, 128, 128, 128, 128, 128, 128, 248, 5, 7, 7,
- 6, 0, 0, 136, 216, 168, 136, 136, 136, 136, 5, 7, 7, 6, 0, 0,
- 136, 136, 200, 168, 152, 136, 136, 5, 7, 7, 6, 0, 0, 112, 136, 136,
- 136, 136, 136, 112, 5, 7, 7, 6, 0, 0, 240, 136, 136, 240, 128, 128,
- 128, 5, 7, 7, 6, 0, 0, 112, 136, 136, 136, 168, 144, 104, 5, 7,
- 7, 6, 0, 0, 240, 136, 136, 240, 160, 144, 136, 5, 7, 7, 6, 0,
- 0, 120, 128, 128, 112, 8, 8, 240, 5, 7, 7, 6, 0, 0, 248, 32,
- 32, 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136,
- 136, 112, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 80, 32, 5,
- 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 168, 80, 5, 7, 7, 6,
- 0, 0, 136, 136, 80, 32, 80, 136, 136, 5, 7, 7, 6, 0, 0, 136,
- 136, 136, 80, 32, 32, 32, 5, 7, 7, 6, 0, 0, 248, 8, 16, 32,
- 64, 128, 248, 3, 7, 7, 6, 1, 0, 224, 128, 128, 128, 128, 128, 224,
- 5, 7, 7, 6, 0, 0, 32, 112, 160, 160, 168, 112, 32, 3, 7, 7,
- 6, 1, 0, 224, 32, 32, 32, 32, 32, 224, 5, 3, 3, 6, 0, 4,
- 32, 80, 136, 5, 1, 1, 6, 0, 0, 248, 2, 2, 2, 6, 2, 5,
- 128, 64, 5, 5, 5, 6, 0, 0, 112, 8, 120, 136, 120, 5, 7, 7,
- 6, 0, 0, 128, 128, 176, 200, 136, 136, 240, 5, 5, 5, 6, 0, 0,
- 112, 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 8, 8, 104, 152, 136,
- 136, 120, 5, 5, 5, 6, 0, 0, 112, 136, 248, 128, 112, 5, 7, 7,
- 6, 0, 0, 48, 72, 224, 64, 64, 64, 64, 5, 6, 6, 6, 0, 255,
- 112, 136, 136, 120, 8, 112, 5, 7, 7, 6, 0, 0, 128, 128, 176, 200,
- 136, 136, 136, 1, 7, 7, 6, 2, 0, 128, 0, 128, 128, 128, 128, 128,
- 3, 8, 8, 6, 1, 255, 32, 0, 32, 32, 32, 32, 160, 64, 4, 7,
- 7, 6, 0, 0, 128, 128, 144, 160, 192, 160, 144, 3, 7, 7, 6, 1,
- 0, 192, 64, 64, 64, 64, 64, 224, 5, 5, 5, 6, 0, 0, 208, 168,
- 168, 168, 168, 5, 5, 5, 6, 0, 0, 176, 200, 136, 136, 136, 5, 5,
- 5, 6, 0, 0, 112, 136, 136, 136, 112, 5, 6, 6, 6, 0, 255, 240,
- 136, 136, 240, 128, 128, 5, 6, 6, 6, 0, 255, 120, 136, 136, 120, 8,
- 8, 5, 5, 5, 6, 0, 0, 176, 200, 128, 128, 128, 5, 5, 5, 6,
- 0, 0, 112, 128, 112, 8, 240, 5, 7, 7, 6, 0, 0, 64, 64, 224,
- 64, 64, 72, 48, 5, 5, 5, 6, 0, 0, 136, 136, 136, 152, 104, 5,
- 5, 5, 6, 0, 0, 136, 136, 136, 80, 32, 5, 5, 5, 6, 0, 0,
- 136, 136, 168, 168, 80, 5, 5, 5, 6, 0, 0, 136, 80, 32, 80, 136,
- 5, 6, 6, 6, 0, 255, 136, 136, 136, 120, 8, 112, 5, 5, 5, 6,
- 0, 0, 248, 16, 32, 64, 248, 5, 5, 5, 6, 0, 2, 184, 168, 168,
- 168, 184, 5, 5, 5, 6, 0, 2, 184, 136, 184, 160, 184, 5, 5, 5,
- 6, 0, 2, 184, 160, 184, 136, 184, 5, 6, 6, 6, 0, 1, 8, 40,
- 72, 248, 64, 32, 5, 5, 5, 6, 0, 0, 56, 112, 224, 136, 240, 0,
- 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0,
- 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
- 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0,
- 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0,
- 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
- 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0,
- 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0,
- 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
- 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0,
- 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0,
- 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
- 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 5,
- 7, 7, 6, 0, 0, 248, 136, 128, 240, 136, 136, 240, 5, 7, 7, 6,
- 0, 0, 248, 136, 128, 128, 128, 128, 128, 5, 7, 7, 6, 0, 0, 80,
- 0, 248, 128, 240, 128, 248, 5, 7, 7, 6, 0, 0, 168, 168, 168, 112,
- 168, 168, 168, 5, 7, 7, 6, 0, 0, 240, 8, 8, 112, 8, 8, 240,
- 5, 7, 7, 6, 0, 0, 136, 136, 152, 168, 200, 136, 136, 5, 8, 8,
- 6, 0, 0, 80, 32, 136, 152, 168, 168, 200, 136, 5, 7, 7, 6, 0,
- 0, 120, 40, 40, 40, 40, 168, 72, 5, 7, 7, 6, 0, 0, 248, 136,
- 136, 136, 136, 136, 136, 5, 7, 7, 6, 0, 0, 136, 136, 136, 80, 32,
- 64, 128, 5, 7, 7, 6, 0, 0, 32, 112, 168, 168, 168, 112, 32, 5,
- 7, 7, 6, 0, 0, 136, 136, 136, 120, 8, 8, 8, 5, 7, 7, 6,
- 0, 0, 168, 168, 168, 168, 168, 168, 248, 5, 7, 7, 6, 0, 0, 192,
- 64, 64, 112, 72, 72, 112, 5, 7, 7, 6, 0, 0, 136, 136, 136, 200,
- 168, 168, 200, 5, 7, 7, 6, 0, 0, 112, 136, 8, 56, 8, 136, 112,
- 5, 7, 7, 6, 0, 0, 144, 168, 168, 232, 168, 168, 144, 5, 7, 7,
- 6, 0, 0, 120, 136, 136, 120, 40, 72, 136, 5, 7, 7, 6, 0, 0,
- 24, 96, 128, 240, 136, 136, 112, 4, 5, 5, 6, 0, 0, 224, 144, 224,
- 144, 224, 5, 5, 5, 6, 0, 0, 248, 136, 128, 128, 128, 5, 7, 7,
- 6, 0, 0, 80, 0, 112, 136, 248, 128, 112, 5, 5, 5, 6, 0, 0,
- 168, 168, 112, 168, 168, 5, 5, 5, 6, 0, 0, 240, 8, 48, 8, 240,
- 5, 5, 5, 6, 0, 0, 136, 152, 168, 200, 136, 5, 7, 7, 6, 0,
- 0, 80, 32, 136, 152, 168, 200, 136, 4, 5, 5, 6, 0, 0, 144, 160,
- 192, 160, 144, 5, 5, 5, 6, 0, 0, 248, 40, 40, 168, 72, 5, 5,
- 5, 6, 0, 0, 136, 216, 168, 136, 136, 5, 5, 5, 6, 0, 0, 136,
- 136, 248, 136, 136, 5, 5, 5, 6, 0, 0, 248, 136, 136, 136, 136, 5,
- 5, 5, 6, 0, 0, 248, 32, 32, 32, 32, 5, 5, 5, 6, 0, 0,
- 136, 136, 120, 8, 8, 5, 5, 5, 6, 0, 0, 168, 168, 168, 168, 248,
- 5, 5, 5, 6, 0, 0, 192, 64, 112, 72, 112, 5, 5, 5, 6, 0,
- 0, 136, 136, 200, 168, 200, 4, 5, 5, 6, 0, 0, 128, 128, 224, 144,
- 224, 5, 5, 5, 6, 0, 0, 112, 136, 56, 136, 112, 5, 5, 5, 6,
- 0, 0, 144, 168, 232, 168, 144, 5, 5, 5, 6, 0, 0, 120, 136, 120,
- 40, 72, 5, 5, 5, 6, 0, 1, 32, 72, 144, 72, 32, 5, 5, 5,
- 6, 0, 1, 32, 144, 72, 144, 32, 5, 3, 3, 6, 0, 0, 72, 144,
- 216, 5, 3, 3, 6, 0, 4, 216, 72, 144, 5, 7, 7, 6, 0, 0,
- 144, 208, 176, 144, 56, 40, 56, 5, 7, 7, 6, 0, 0, 32, 0, 32,
- 64, 128, 136, 112, 5, 7, 7, 6, 0, 0, 24, 32, 32, 112, 32, 32,
- 192, 5, 7, 7, 6, 0, 0, 32, 80, 64, 240, 64, 64, 120, 1, 2,
- 2, 6, 2, 0, 128, 128, 1, 4, 4, 6, 2, 0, 128, 128, 128, 128,
- 3, 5, 5, 6, 1, 0, 160, 160, 160, 0, 224, 3, 5, 5, 6, 1,
- 0, 160, 160, 160, 0, 160, 5, 7, 7, 6, 0, 0, 160, 0, 232, 16,
- 32, 64, 128, 5, 5, 5, 6, 0, 1, 216, 112, 32, 112, 216, 5, 7,
- 7, 6, 0, 0, 160, 64, 168, 16, 32, 64, 128, 3, 6, 6, 6, 1,
- 1, 224, 64, 64, 64, 64, 224, 5, 6, 6, 6, 0, 1, 248, 80, 80,
- 80, 80, 248, 5, 7, 7, 6, 0, 0, 32, 112, 168, 32, 32, 32, 32,
- 5, 7, 7, 6, 0, 0, 32, 32, 32, 32, 168, 112, 32, 5, 7, 7,
- 6, 0, 0, 128, 144, 176, 248, 176, 144, 128, 5, 7, 7, 6, 0, 0,
- 8, 72, 104, 248, 104, 72, 8, 5, 7, 7, 6, 0, 0, 128, 136, 168,
- 248, 168, 136, 128, 5, 7, 7, 6, 0, 0, 128, 224, 136, 16, 32, 64,
- 128, 2, 2, 2, 6, 2, 2, 192, 192, 5, 8, 8, 6, 0, 255, 120,
- 40, 40, 40, 72, 136, 248, 136, 5, 8, 8, 6, 0, 255, 136, 136, 136,
- 136, 136, 136, 248, 8, 5, 8, 8, 6, 0, 255, 168, 168, 168, 168, 168,
- 168, 248, 8, 5, 6, 6, 6, 0, 255, 120, 40, 72, 136, 248, 136, 5,
- 7, 7, 6, 0, 255, 32, 32, 112, 168, 168, 112, 32, 5, 6, 6, 6,
- 0, 255, 136, 136, 136, 136, 248, 8, 5, 6, 6, 6, 0, 255, 168, 168,
- 168, 168, 248, 8, 2, 2, 2, 6, 2, 6, 64, 128, 3, 1, 1, 6,
- 1, 7, 160, 5, 2, 2, 6, 0, 6, 72, 176, 5, 8, 8, 6, 0,
- 0, 16, 32, 0, 112, 136, 248, 128, 112, 5, 6, 6, 6, 0, 255, 112,
- 128, 136, 112, 32, 96, 3, 7, 7, 6, 1, 0, 160, 0, 160, 160, 160,
- 32, 192, 5, 6, 6, 6, 0, 1, 32, 112, 112, 112, 248, 32, 5, 5,
- 5, 6, 0, 1, 80, 0, 136, 0, 80, 5, 5, 5, 6, 0, 1, 112,
- 136, 136, 136, 112, 5, 7, 7, 6, 0, 0, 136, 144, 168, 88, 184, 8,
- 8, 5, 7, 7, 6, 0, 0, 136, 144, 184, 72, 184, 8, 56, 5, 7,
- 7, 6, 0, 0, 136, 144, 184, 72, 152, 32, 56, 5, 8, 8, 6, 0,
- 0, 192, 64, 192, 72, 216, 56, 8, 8, 5, 7, 7, 6, 0, 0, 136,
- 248, 136, 248, 136, 248, 136, 4, 5, 5, 6, 0, 2, 192, 0, 48, 0,
- 96, 5, 8, 8, 6, 0, 0, 64, 160, 224, 168, 8, 40, 120, 32, 5,
- 8, 8, 6, 0, 0, 64, 112, 64, 120, 64, 112, 64, 224, 5, 8, 8,
- 6, 0, 0, 32, 112, 32, 248, 32, 112, 32, 112, 5, 7, 7, 6, 0,
- 0, 104, 0, 232, 0, 104, 16, 56, 5, 8, 8, 6, 0, 0, 16, 112,
- 16, 240, 16, 112, 16, 56, 5, 7, 7, 6, 0, 1, 32, 112, 32, 248,
- 32, 112, 32, 5, 8, 8, 6, 0, 0, 16, 144, 80, 48, 80, 144, 16,
- 56, 5, 8, 8, 6, 0, 0, 48, 72, 32, 80, 80, 32, 144, 96, 5,
- 7, 7, 6, 0, 0, 120, 168, 168, 120, 40, 40, 40, 5, 8, 8, 6,
- 0, 0, 248, 248, 248, 248, 248, 248, 248, 248
-};
diff --git a/Marlin/dogm_font_data_HD44780_J.h b/Marlin/dogm_font_data_HD44780_J.h
deleted file mode 100644
index e4884c7..0000000
--- a/Marlin/dogm_font_data_HD44780_J.h
+++ /dev/null
@@ -1,192 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- Fontname: HD44780_J
- Copyright: A. Hardtung, public domain
- Capital A Height: 7, '1' Height: 7
- Calculated Max Values w= 6 h=10 x= 2 y= 5 dx= 6 dy= 0 ascent= 8 len= 8
- Font Bounding box w= 6 h= 9 x= 0 y=-2
- Calculated Min Values x= 0 y=-2 dx= 0 dy= 0
- Pure Font ascent = 7 descent=-1
- X Font ascent = 7 descent=-1
- Max Font ascent = 8 descent=-2
-*/
-#include
-const u8g_fntpgm_uint8_t HD44780_J_5x7[2492] U8G_SECTION(".progmem.HD44780_J_5x7") = {
- 0, 6, 9, 0, 254, 7, 1, 145, 3, 34, 32, 255, 255, 8, 254, 7,
- 255, 0, 0, 0, 6, 0, 0, 1, 7, 7, 6, 2, 0, 128, 128, 128,
- 128, 128, 0, 128, 3, 2, 2, 6, 1, 5, 160, 160, 5, 7, 7, 6,
- 0, 0, 80, 80, 248, 80, 248, 80, 80, 5, 7, 7, 6, 0, 0, 32,
- 120, 160, 112, 40, 240, 32, 5, 7, 7, 6, 0, 0, 192, 200, 16, 32,
- 64, 152, 24, 5, 7, 7, 6, 0, 0, 96, 144, 160, 64, 168, 144, 104,
- 2, 3, 3, 6, 1, 4, 192, 64, 128, 3, 7, 7, 6, 1, 0, 32,
- 64, 128, 128, 128, 64, 32, 3, 7, 7, 6, 1, 0, 128, 64, 32, 32,
- 32, 64, 128, 5, 5, 5, 6, 0, 1, 32, 168, 112, 168, 32, 5, 5,
- 5, 6, 0, 1, 32, 32, 248, 32, 32, 2, 3, 3, 6, 2, 255, 192,
- 64, 128, 5, 1, 1, 6, 0, 3, 248, 2, 2, 2, 6, 2, 0, 192,
- 192, 5, 5, 5, 6, 0, 1, 8, 16, 32, 64, 128, 5, 7, 7, 6,
- 0, 0, 112, 136, 152, 168, 200, 136, 112, 3, 7, 7, 6, 1, 0, 64,
- 192, 64, 64, 64, 64, 224, 5, 7, 7, 6, 0, 0, 112, 136, 8, 112,
- 128, 128, 248, 5, 7, 7, 6, 0, 0, 248, 16, 32, 16, 8, 8, 240,
- 5, 7, 7, 6, 0, 0, 16, 48, 80, 144, 248, 16, 16, 5, 7, 7,
- 6, 0, 0, 248, 128, 240, 8, 8, 136, 112, 5, 7, 7, 6, 0, 0,
- 48, 64, 128, 240, 136, 136, 112, 5, 7, 7, 6, 0, 0, 248, 8, 16,
- 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 112, 136, 136, 112, 136, 136,
- 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 120, 8, 16, 96, 2, 5,
- 5, 6, 2, 0, 192, 192, 0, 192, 192, 2, 6, 6, 6, 2, 255, 192,
- 192, 0, 192, 64, 128, 4, 7, 7, 6, 0, 0, 16, 32, 64, 128, 64,
- 32, 16, 5, 3, 3, 6, 0, 2, 248, 0, 248, 4, 7, 7, 6, 1,
- 0, 128, 64, 32, 16, 32, 64, 128, 5, 7, 7, 6, 0, 0, 112, 136,
- 8, 16, 32, 0, 32, 5, 6, 6, 6, 0, 0, 112, 136, 8, 104, 168,
- 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 248, 136, 136, 136, 5, 7,
- 7, 6, 0, 0, 240, 136, 136, 240, 136, 136, 240, 5, 7, 7, 6, 0,
- 0, 112, 136, 128, 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 224, 144,
- 136, 136, 136, 144, 224, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128,
- 128, 248, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128, 128, 128, 5,
- 7, 7, 6, 0, 0, 112, 136, 128, 184, 136, 136, 112, 5, 7, 7, 6,
- 0, 0, 136, 136, 136, 248, 136, 136, 136, 1, 7, 7, 6, 2, 0, 128,
- 128, 128, 128, 128, 128, 128, 5, 7, 7, 6, 0, 0, 56, 16, 16, 16,
- 16, 144, 96, 5, 7, 7, 6, 0, 0, 136, 144, 160, 192, 160, 144, 136,
- 5, 7, 7, 6, 0, 0, 128, 128, 128, 128, 128, 128, 248, 5, 7, 7,
- 6, 0, 0, 136, 216, 168, 136, 136, 136, 136, 5, 7, 7, 6, 0, 0,
- 136, 136, 200, 168, 152, 136, 136, 5, 7, 7, 6, 0, 0, 112, 136, 136,
- 136, 136, 136, 112, 5, 7, 7, 6, 0, 0, 240, 136, 136, 240, 128, 128,
- 128, 5, 7, 7, 6, 0, 0, 112, 136, 136, 136, 168, 144, 104, 5, 7,
- 7, 6, 0, 0, 240, 136, 136, 240, 160, 144, 136, 5, 7, 7, 6, 0,
- 0, 120, 128, 128, 112, 8, 8, 240, 5, 7, 7, 6, 0, 0, 248, 32,
- 32, 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136,
- 136, 112, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 80, 32, 5,
- 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 168, 80, 5, 7, 7, 6,
- 0, 0, 136, 136, 80, 32, 80, 136, 136, 5, 7, 7, 6, 0, 0, 136,
- 136, 136, 80, 32, 32, 32, 5, 7, 7, 6, 0, 0, 248, 8, 16, 32,
- 64, 128, 248, 3, 7, 7, 6, 1, 0, 224, 128, 128, 128, 128, 128, 224,
- 5, 7, 7, 6, 0, 0, 136, 80, 248, 32, 248, 32, 32, 3, 7, 7,
- 6, 1, 0, 224, 32, 32, 32, 32, 32, 224, 5, 3, 3, 6, 0, 4,
- 32, 80, 136, 5, 1, 1, 6, 0, 0, 248, 2, 2, 2, 6, 2, 5,
- 128, 64, 5, 5, 5, 6, 0, 0, 112, 8, 120, 136, 120, 5, 7, 7,
- 6, 0, 0, 128, 128, 176, 200, 136, 136, 240, 5, 5, 5, 6, 0, 0,
- 112, 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 8, 8, 104, 152, 136,
- 136, 120, 5, 5, 5, 6, 0, 0, 112, 136, 248, 128, 112, 5, 7, 7,
- 6, 0, 0, 48, 72, 224, 64, 64, 64, 64, 5, 6, 6, 6, 0, 255,
- 112, 136, 136, 120, 8, 112, 5, 7, 7, 6, 0, 0, 128, 128, 176, 200,
- 136, 136, 136, 1, 7, 7, 6, 2, 0, 128, 0, 128, 128, 128, 128, 128,
- 3, 8, 8, 6, 1, 255, 32, 0, 32, 32, 32, 32, 160, 64, 4, 7,
- 7, 6, 0, 0, 128, 128, 144, 160, 192, 160, 144, 3, 7, 7, 6, 1,
- 0, 192, 64, 64, 64, 64, 64, 224, 5, 5, 5, 6, 0, 0, 208, 168,
- 168, 168, 168, 5, 5, 5, 6, 0, 0, 176, 200, 136, 136, 136, 5, 5,
- 5, 6, 0, 0, 112, 136, 136, 136, 112, 5, 6, 6, 6, 0, 255, 240,
- 136, 136, 240, 128, 128, 5, 6, 6, 6, 0, 255, 120, 136, 136, 120, 8,
- 8, 5, 5, 5, 6, 0, 0, 176, 200, 128, 128, 128, 5, 5, 5, 6,
- 0, 0, 112, 128, 112, 8, 240, 5, 7, 7, 6, 0, 0, 64, 64, 224,
- 64, 64, 72, 48, 5, 5, 5, 6, 0, 0, 136, 136, 136, 152, 104, 5,
- 5, 5, 6, 0, 0, 136, 136, 136, 80, 32, 5, 5, 5, 6, 0, 0,
- 136, 136, 168, 168, 80, 5, 5, 5, 6, 0, 0, 136, 80, 32, 80, 136,
- 5, 6, 6, 6, 0, 255, 136, 136, 136, 120, 8, 112, 5, 5, 5, 6,
- 0, 0, 248, 16, 32, 64, 248, 3, 7, 7, 6, 1, 0, 32, 64, 64,
- 128, 64, 64, 32, 1, 7, 7, 6, 2, 0, 128, 128, 128, 128, 128, 128,
- 128, 3, 7, 7, 6, 1, 0, 128, 64, 64, 32, 64, 64, 128, 5, 5,
- 5, 6, 0, 1, 32, 16, 248, 16, 32, 5, 5, 5, 6, 0, 1, 32,
- 64, 248, 64, 32, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
- 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
- 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
- 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
- 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
- 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
- 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
- 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
- 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 3, 3, 3, 6, 0, 0,
- 224, 160, 224, 3, 4, 4, 6, 2, 3, 224, 128, 128, 128, 3, 4, 4,
- 6, 0, 0, 32, 32, 32, 224, 3, 3, 3, 6, 0, 0, 128, 64, 32,
- 2, 2, 2, 6, 1, 2, 192, 192, 5, 6, 6, 6, 0, 0, 248, 8,
- 248, 8, 16, 32, 5, 5, 5, 6, 0, 0, 248, 8, 48, 32, 64, 4,
- 5, 5, 6, 0, 0, 16, 32, 96, 160, 32, 5, 5, 5, 6, 0, 0,
- 32, 248, 136, 8, 48, 5, 4, 4, 6, 0, 0, 248, 32, 32, 248, 5,
- 5, 5, 6, 0, 0, 16, 248, 48, 80, 144, 5, 5, 5, 6, 0, 0,
- 64, 248, 72, 80, 64, 5, 4, 4, 6, 0, 0, 112, 16, 16, 248, 4,
- 5, 5, 6, 0, 0, 240, 16, 240, 16, 240, 5, 4, 4, 6, 0, 0,
- 168, 168, 8, 48, 5, 1, 1, 6, 0, 3, 248, 5, 7, 7, 6, 0,
- 0, 248, 8, 40, 48, 32, 32, 64, 5, 7, 7, 6, 0, 0, 8, 16,
- 32, 96, 160, 32, 32, 5, 7, 7, 6, 0, 0, 32, 248, 136, 136, 8,
- 16, 32, 5, 6, 6, 6, 0, 0, 248, 32, 32, 32, 32, 248, 5, 7,
- 7, 6, 0, 0, 16, 248, 16, 48, 80, 144, 16, 5, 7, 7, 6, 0,
- 0, 64, 248, 72, 72, 72, 72, 144, 5, 7, 7, 6, 0, 0, 32, 248,
- 32, 248, 32, 32, 32, 5, 6, 6, 6, 0, 0, 120, 72, 136, 8, 16,
- 96, 5, 7, 7, 6, 0, 0, 64, 120, 144, 16, 16, 16, 32, 5, 6,
- 6, 6, 0, 0, 248, 8, 8, 8, 8, 248, 5, 7, 7, 6, 0, 0,
- 80, 248, 80, 80, 16, 32, 64, 5, 6, 6, 6, 0, 0, 192, 8, 200,
- 8, 16, 224, 5, 6, 6, 6, 0, 0, 248, 8, 16, 32, 80, 136, 5,
- 7, 7, 6, 0, 0, 64, 248, 72, 80, 64, 64, 56, 5, 6, 6, 6,
- 0, 0, 136, 136, 72, 8, 16, 96, 5, 6, 6, 6, 0, 0, 120, 72,
- 168, 24, 16, 96, 5, 7, 7, 6, 0, 0, 16, 224, 32, 248, 32, 32,
- 64, 5, 6, 6, 6, 0, 0, 168, 168, 168, 8, 16, 32, 5, 7, 7,
- 6, 0, 0, 112, 0, 248, 32, 32, 32, 64, 3, 7, 7, 6, 1, 0,
- 128, 128, 128, 192, 160, 128, 128, 5, 7, 7, 6, 0, 0, 32, 32, 248,
- 32, 32, 64, 128, 5, 6, 6, 6, 0, 0, 112, 0, 0, 0, 0, 248,
- 5, 6, 6, 6, 0, 0, 248, 8, 80, 32, 80, 128, 5, 7, 7, 6,
- 0, 0, 32, 248, 16, 32, 112, 168, 32, 3, 7, 7, 6, 1, 0, 32,
- 32, 32, 32, 32, 64, 128, 5, 6, 6, 6, 0, 0, 32, 16, 136, 136,
- 136, 136, 5, 7, 7, 6, 0, 0, 128, 128, 248, 128, 128, 128, 120, 5,
- 6, 6, 6, 0, 0, 248, 8, 8, 8, 16, 96, 5, 5, 5, 6, 0,
- 1, 64, 160, 16, 8, 8, 5, 7, 7, 6, 0, 0, 32, 248, 32, 32,
- 168, 168, 32, 5, 6, 6, 6, 0, 0, 248, 8, 8, 80, 32, 16, 4,
- 6, 6, 6, 1, 0, 224, 0, 224, 0, 224, 16, 5, 6, 6, 6, 0,
- 0, 32, 64, 128, 136, 248, 8, 5, 6, 6, 6, 0, 0, 8, 8, 80,
- 32, 80, 128, 5, 6, 6, 6, 0, 0, 248, 64, 248, 64, 64, 56, 5,
- 7, 7, 6, 0, 0, 64, 64, 248, 72, 80, 64, 64, 5, 7, 7, 6,
- 0, 0, 112, 16, 16, 16, 16, 16, 248, 5, 6, 6, 6, 0, 0, 248,
- 8, 248, 8, 8, 248, 5, 7, 7, 6, 0, 0, 112, 0, 248, 8, 8,
- 16, 32, 4, 7, 7, 6, 0, 0, 144, 144, 144, 144, 16, 32, 64, 5,
- 6, 6, 6, 0, 0, 32, 160, 160, 168, 168, 176, 5, 7, 7, 6, 0,
- 0, 128, 128, 128, 136, 144, 160, 192, 5, 6, 6, 6, 0, 0, 248, 136,
- 136, 136, 136, 248, 5, 6, 6, 6, 0, 0, 248, 136, 136, 8, 16, 32,
- 5, 6, 6, 6, 0, 0, 192, 0, 8, 8, 16, 224, 4, 3, 3, 6,
- 0, 4, 32, 144, 64, 3, 3, 3, 6, 0, 4, 224, 160, 224, 5, 5,
- 5, 6, 0, 1, 72, 168, 144, 144, 104, 5, 7, 7, 6, 0, 0, 80,
- 0, 112, 8, 120, 136, 120, 4, 8, 8, 6, 1, 255, 96, 144, 144, 224,
- 144, 144, 224, 128, 5, 5, 5, 6, 0, 0, 112, 128, 96, 136, 112, 5,
- 6, 6, 6, 0, 255, 136, 136, 152, 232, 136, 128, 5, 5, 5, 6, 0,
- 0, 120, 160, 144, 136, 112, 5, 7, 7, 6, 0, 254, 48, 72, 136, 136,
- 240, 128, 128, 5, 8, 8, 6, 0, 254, 120, 136, 136, 136, 120, 8, 8,
- 112, 5, 5, 5, 6, 0, 1, 56, 32, 32, 160, 64, 4, 3, 3, 6,
- 0, 3, 16, 208, 16, 4, 8, 8, 6, 0, 255, 16, 0, 48, 16, 16,
- 16, 144, 96, 3, 3, 3, 6, 0, 4, 160, 64, 160, 5, 7, 7, 6,
- 0, 0, 32, 112, 160, 160, 168, 112, 32, 5, 7, 7, 6, 0, 0, 64,
- 64, 224, 64, 224, 64, 120, 5, 7, 7, 6, 0, 0, 112, 0, 176, 200,
- 136, 136, 136, 5, 7, 7, 6, 0, 0, 80, 0, 112, 136, 136, 136, 112,
- 5, 7, 7, 6, 0, 255, 176, 200, 136, 136, 240, 128, 128, 5, 7, 7,
- 6, 0, 255, 104, 152, 136, 136, 120, 8, 8, 5, 6, 6, 6, 0, 0,
- 112, 136, 248, 136, 136, 112, 5, 3, 3, 6, 0, 2, 88, 168, 208, 5,
- 5, 5, 6, 0, 0, 112, 136, 136, 80, 216, 5, 7, 7, 6, 0, 0,
- 80, 0, 136, 136, 136, 152, 104, 5, 7, 7, 6, 0, 0, 248, 128, 64,
- 32, 64, 128, 248, 5, 5, 5, 6, 0, 0, 248, 80, 80, 80, 152, 5,
- 7, 7, 6, 0, 0, 248, 0, 136, 80, 32, 80, 136, 5, 7, 7, 6,
- 0, 255, 136, 136, 136, 136, 120, 8, 112, 5, 6, 6, 6, 0, 0, 8,
- 240, 32, 248, 32, 32, 5, 5, 5, 6, 0, 0, 248, 64, 120, 72, 136,
- 5, 5, 5, 6, 0, 0, 248, 168, 248, 136, 136, 5, 5, 5, 6, 0,
- 1, 32, 0, 248, 0, 32, 0, 0, 0, 6, 0, 0, 6, 10, 10, 6,
- 0, 254, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252
-};
diff --git a/Marlin/dogm_font_data_HD44780_W.h b/Marlin/dogm_font_data_HD44780_W.h
deleted file mode 100644
index 86b4bf4..0000000
--- a/Marlin/dogm_font_data_HD44780_W.h
+++ /dev/null
@@ -1,226 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- Fontname: HD44780_W
- Copyright: A.Hardtung, public domain
- Capital A Height: 7, '1' Height: 7
- Calculated Max Values w= 5 h= 9 x= 2 y= 5 dx= 6 dy= 0 ascent= 8 len= 9
- Font Bounding box w= 6 h= 9 x= 0 y=-2
- Calculated Min Values x= 0 y=-1 dx= 0 dy= 0
- Pure Font ascent = 7 descent=-1
- X Font ascent = 7 descent=-1
- Max Font ascent = 8 descent=-1
-*/
-#include
-const u8g_fntpgm_uint8_t HD44780_W_5x7[3034] U8G_SECTION(".progmem.HD44780_W_5x7") = {
- 0, 6, 9, 0, 254, 7, 2, 79, 3, 222, 16, 255, 255, 8, 255, 7,
- 255, 4, 7, 7, 6, 0, 0, 16, 48, 112, 240, 112, 48, 16, 4, 7,
- 7, 6, 1, 0, 128, 192, 224, 240, 224, 192, 128, 5, 3, 3, 6, 0,
- 4, 216, 72, 144, 5, 3, 3, 6, 0, 4, 216, 144, 72, 5, 7, 7,
- 6, 0, 0, 32, 112, 248, 0, 32, 112, 248, 5, 7, 7, 6, 0, 0,
- 248, 112, 32, 0, 248, 112, 32, 5, 5, 5, 6, 0, 1, 112, 248, 248,
- 248, 112, 5, 7, 7, 6, 0, 0, 8, 8, 40, 72, 248, 64, 32, 5,
- 7, 7, 6, 0, 0, 32, 112, 168, 32, 32, 32, 32, 5, 7, 7, 6,
- 0, 0, 32, 32, 32, 32, 168, 112, 32, 5, 5, 5, 6, 0, 1, 32,
- 64, 248, 64, 32, 5, 5, 5, 6, 0, 1, 32, 16, 248, 16, 32, 5,
- 7, 7, 6, 0, 0, 16, 32, 64, 32, 16, 0, 248, 5, 7, 7, 6,
- 0, 0, 64, 32, 16, 32, 64, 0, 248, 5, 5, 5, 6, 0, 1, 32,
- 32, 112, 112, 248, 5, 5, 5, 6, 0, 0, 248, 112, 112, 32, 32, 0,
- 0, 0, 6, 0, 0, 1, 7, 7, 6, 2, 0, 128, 128, 128, 128, 128,
- 0, 128, 3, 2, 2, 6, 1, 5, 160, 160, 5, 7, 7, 6, 0, 0,
- 80, 80, 248, 80, 248, 80, 80, 5, 7, 7, 6, 0, 0, 32, 120, 160,
- 112, 40, 240, 32, 5, 7, 7, 6, 0, 0, 192, 200, 16, 32, 64, 152,
- 24, 5, 7, 7, 6, 0, 0, 96, 144, 160, 64, 168, 144, 104, 2, 3,
- 3, 6, 1, 4, 192, 64, 128, 3, 7, 7, 6, 1, 0, 32, 64, 128,
- 128, 128, 64, 32, 3, 7, 7, 6, 1, 0, 128, 64, 32, 32, 32, 64,
- 128, 5, 5, 5, 6, 0, 1, 32, 168, 112, 168, 32, 5, 5, 5, 6,
- 0, 1, 32, 32, 248, 32, 32, 2, 3, 3, 6, 2, 255, 192, 64, 128,
- 5, 1, 1, 6, 0, 3, 248, 2, 2, 2, 6, 2, 0, 192, 192, 5,
- 5, 5, 6, 0, 1, 8, 16, 32, 64, 128, 5, 7, 7, 6, 0, 0,
- 112, 136, 152, 168, 200, 136, 112, 3, 7, 7, 6, 1, 0, 64, 192, 64,
- 64, 64, 64, 224, 5, 7, 7, 6, 0, 0, 112, 136, 8, 112, 128, 128,
- 248, 5, 7, 7, 6, 0, 0, 248, 16, 32, 16, 8, 8, 240, 5, 7,
- 7, 6, 0, 0, 16, 48, 80, 144, 248, 16, 16, 5, 7, 7, 6, 0,
- 0, 248, 128, 240, 8, 8, 136, 112, 5, 7, 7, 6, 0, 0, 48, 64,
- 128, 240, 136, 136, 112, 5, 7, 7, 6, 0, 0, 248, 8, 16, 32, 32,
- 32, 32, 5, 7, 7, 6, 0, 0, 112, 136, 136, 112, 136, 136, 112, 5,
- 7, 7, 6, 0, 0, 112, 136, 136, 120, 8, 16, 96, 2, 5, 5, 6,
- 2, 0, 192, 192, 0, 192, 192, 2, 6, 6, 6, 2, 255, 192, 192, 0,
- 192, 64, 128, 4, 7, 7, 6, 0, 0, 16, 32, 64, 128, 64, 32, 16,
- 5, 3, 3, 6, 0, 2, 248, 0, 248, 4, 7, 7, 6, 1, 0, 128,
- 64, 32, 16, 32, 64, 128, 5, 7, 7, 6, 0, 0, 112, 136, 8, 16,
- 32, 0, 32, 5, 6, 6, 6, 0, 0, 112, 136, 8, 104, 168, 112, 5,
- 7, 7, 6, 0, 0, 112, 136, 136, 248, 136, 136, 136, 5, 7, 7, 6,
- 0, 0, 240, 136, 136, 240, 136, 136, 240, 5, 7, 7, 6, 0, 0, 112,
- 136, 128, 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 224, 144, 136, 136,
- 136, 144, 224, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128, 128, 248,
- 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128, 128, 128, 5, 7, 7,
- 6, 0, 0, 112, 136, 128, 184, 136, 136, 112, 5, 7, 7, 6, 0, 0,
- 136, 136, 136, 248, 136, 136, 136, 1, 7, 7, 6, 2, 0, 128, 128, 128,
- 128, 128, 128, 128, 5, 7, 7, 6, 0, 0, 56, 16, 16, 16, 16, 144,
- 96, 5, 7, 7, 6, 0, 0, 136, 144, 160, 192, 160, 144, 136, 5, 7,
- 7, 6, 0, 0, 128, 128, 128, 128, 128, 128, 248, 5, 7, 7, 6, 0,
- 0, 136, 216, 168, 136, 136, 136, 136, 5, 7, 7, 6, 0, 0, 136, 136,
- 200, 168, 152, 136, 136, 5, 7, 7, 6, 0, 0, 112, 136, 136, 136, 136,
- 136, 112, 5, 7, 7, 6, 0, 0, 240, 136, 136, 240, 128, 128, 128, 5,
- 7, 7, 6, 0, 0, 112, 136, 136, 136, 168, 144, 104, 5, 7, 7, 6,
- 0, 0, 240, 136, 136, 240, 160, 144, 136, 5, 7, 7, 6, 0, 0, 120,
- 128, 128, 112, 8, 8, 240, 5, 7, 7, 6, 0, 0, 248, 32, 32, 32,
- 32, 32, 32, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 136, 112,
- 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 80, 32, 5, 7, 7,
- 6, 0, 0, 136, 136, 136, 136, 136, 168, 80, 5, 7, 7, 6, 0, 0,
- 136, 136, 80, 32, 80, 136, 136, 5, 7, 7, 6, 0, 0, 136, 136, 136,
- 80, 32, 32, 32, 5, 7, 7, 6, 0, 0, 248, 8, 16, 32, 64, 128,
- 248, 3, 7, 7, 6, 1, 0, 224, 128, 128, 128, 128, 128, 224, 5, 5,
- 5, 6, 0, 1, 128, 64, 32, 16, 8, 3, 7, 7, 6, 1, 0, 224,
- 32, 32, 32, 32, 32, 224, 5, 3, 3, 6, 0, 4, 32, 80, 136, 5,
- 1, 1, 6, 0, 0, 248, 2, 2, 2, 6, 2, 5, 128, 64, 5, 5,
- 5, 6, 0, 0, 112, 8, 120, 136, 120, 5, 7, 7, 6, 0, 0, 128,
- 128, 176, 200, 136, 136, 240, 5, 5, 5, 6, 0, 0, 112, 128, 128, 136,
- 112, 5, 7, 7, 6, 0, 0, 8, 8, 104, 152, 136, 136, 120, 5, 5,
- 5, 6, 0, 0, 112, 136, 248, 128, 112, 5, 7, 7, 6, 0, 0, 48,
- 72, 224, 64, 64, 64, 64, 5, 6, 6, 6, 0, 255, 112, 136, 136, 120,
- 8, 112, 5, 7, 7, 6, 0, 0, 128, 128, 176, 200, 136, 136, 136, 1,
- 7, 7, 6, 2, 0, 128, 0, 128, 128, 128, 128, 128, 3, 8, 8, 6,
- 1, 255, 32, 0, 32, 32, 32, 32, 160, 64, 4, 7, 7, 6, 0, 0,
- 128, 128, 144, 160, 192, 160, 144, 3, 7, 7, 6, 1, 0, 192, 64, 64,
- 64, 64, 64, 224, 5, 5, 5, 6, 0, 0, 208, 168, 168, 168, 168, 5,
- 5, 5, 6, 0, 0, 176, 200, 136, 136, 136, 5, 5, 5, 6, 0, 0,
- 112, 136, 136, 136, 112, 5, 6, 6, 6, 0, 255, 240, 136, 136, 240, 128,
- 128, 5, 6, 6, 6, 0, 255, 120, 136, 136, 120, 8, 8, 5, 5, 5,
- 6, 0, 0, 176, 200, 128, 128, 128, 5, 5, 5, 6, 0, 0, 112, 128,
- 112, 8, 240, 5, 7, 7, 6, 0, 0, 64, 64, 224, 64, 64, 72, 48,
- 5, 5, 5, 6, 0, 0, 136, 136, 136, 152, 104, 5, 5, 5, 6, 0,
- 0, 136, 136, 136, 80, 32, 5, 5, 5, 6, 0, 0, 136, 136, 168, 168,
- 80, 5, 5, 5, 6, 0, 0, 136, 80, 32, 80, 136, 5, 6, 6, 6,
- 0, 255, 136, 136, 136, 120, 8, 112, 5, 5, 5, 6, 0, 0, 248, 16,
- 32, 64, 248, 3, 7, 7, 6, 1, 0, 32, 64, 64, 128, 64, 64, 32,
- 1, 7, 7, 6, 2, 0, 128, 128, 128, 128, 128, 128, 128, 3, 7, 7,
- 6, 1, 0, 128, 64, 64, 32, 64, 64, 128, 5, 6, 6, 6, 0, 1,
- 8, 40, 72, 248, 64, 32, 5, 7, 7, 6, 0, 0, 32, 80, 136, 136,
- 136, 136, 248, 5, 7, 7, 6, 0, 0, 248, 136, 128, 240, 136, 136, 240,
- 5, 8, 8, 6, 0, 255, 120, 40, 40, 40, 72, 136, 248, 136, 5, 7,
- 7, 6, 0, 0, 168, 168, 168, 112, 168, 168, 168, 5, 7, 7, 6, 0,
- 0, 240, 8, 8, 112, 8, 8, 240, 5, 7, 7, 6, 0, 0, 136, 136,
- 152, 168, 200, 136, 136, 5, 8, 8, 6, 0, 0, 80, 32, 136, 152, 168,
- 168, 200, 136, 5, 7, 7, 6, 0, 0, 120, 40, 40, 40, 40, 168, 72,
- 5, 7, 7, 6, 0, 0, 248, 136, 136, 136, 136, 136, 136, 5, 7, 7,
- 6, 0, 0, 136, 136, 136, 80, 32, 64, 128, 5, 8, 8, 6, 0, 255,
- 136, 136, 136, 136, 136, 136, 248, 8, 5, 7, 7, 6, 0, 0, 136, 136,
- 136, 120, 8, 8, 8, 5, 7, 7, 6, 0, 0, 168, 168, 168, 168, 168,
- 168, 248, 5, 8, 8, 6, 0, 255, 168, 168, 168, 168, 168, 168, 248, 8,
- 5, 7, 7, 6, 0, 0, 192, 64, 64, 112, 72, 72, 112, 5, 7, 7,
- 6, 0, 0, 136, 136, 136, 200, 168, 168, 200, 5, 7, 7, 6, 0, 0,
- 112, 136, 40, 80, 8, 136, 112, 5, 5, 5, 6, 0, 0, 64, 160, 144,
- 144, 104, 5, 7, 7, 6, 0, 0, 32, 48, 40, 40, 32, 224, 224, 5,
- 7, 7, 6, 0, 0, 248, 136, 128, 128, 128, 128, 128, 5, 5, 5, 6,
- 0, 0, 248, 80, 80, 80, 152, 5, 7, 7, 6, 0, 0, 248, 128, 64,
- 32, 64, 128, 248, 5, 5, 5, 6, 0, 0, 120, 144, 144, 144, 96, 5,
- 7, 7, 6, 0, 0, 48, 40, 56, 40, 200, 216, 24, 5, 6, 6, 6,
- 0, 0, 8, 112, 160, 32, 32, 16, 5, 6, 6, 6, 0, 1, 32, 112,
- 112, 112, 248, 32, 5, 7, 7, 6, 0, 0, 112, 136, 136, 248, 136, 136,
- 112, 5, 5, 5, 6, 0, 0, 112, 136, 136, 80, 216, 5, 7, 7, 6,
- 0, 0, 48, 72, 32, 80, 136, 136, 112, 5, 3, 3, 6, 0, 2, 88,
- 168, 208, 5, 6, 6, 6, 0, 0, 80, 248, 248, 248, 112, 32, 5, 5,
- 5, 6, 0, 0, 112, 128, 96, 136, 112, 5, 7, 7, 6, 0, 0, 112,
- 136, 136, 136, 136, 136, 136, 5, 7, 7, 6, 0, 0, 216, 216, 216, 216,
- 216, 216, 216, 1, 7, 7, 6, 2, 0, 128, 0, 128, 128, 128, 128, 128,
- 5, 7, 7, 6, 0, 0, 32, 112, 160, 160, 168, 112, 32, 5, 7, 7,
- 6, 0, 0, 48, 64, 64, 224, 64, 80, 168, 5, 5, 5, 6, 0, 0,
- 136, 112, 80, 112, 136, 5, 7, 7, 6, 0, 0, 136, 80, 248, 32, 248,
- 32, 32, 1, 7, 7, 6, 2, 0, 128, 128, 128, 0, 128, 128, 128, 5,
- 8, 8, 6, 0, 0, 48, 72, 32, 80, 80, 32, 144, 96, 5, 7, 7,
- 6, 0, 0, 24, 32, 32, 112, 32, 32, 192, 5, 7, 7, 6, 0, 0,
- 248, 136, 184, 184, 184, 136, 248, 5, 7, 7, 6, 0, 0, 112, 8, 120,
- 136, 120, 0, 248, 5, 5, 5, 6, 0, 1, 40, 80, 160, 80, 40, 5,
- 7, 7, 6, 0, 0, 144, 168, 168, 232, 168, 168, 144, 5, 7, 7, 6,
- 0, 0, 120, 136, 136, 120, 40, 72, 136, 5, 7, 7, 6, 0, 0, 248,
- 136, 168, 136, 152, 168, 248, 2, 3, 3, 6, 2, 4, 64, 128, 192, 4,
- 5, 5, 6, 0, 3, 96, 144, 144, 144, 96, 5, 7, 7, 6, 0, 0,
- 32, 32, 248, 32, 32, 0, 248, 4, 5, 5, 6, 0, 3, 96, 144, 32,
- 64, 240, 3, 5, 5, 6, 0, 3, 224, 32, 224, 32, 224, 5, 8, 8,
- 6, 0, 0, 224, 144, 224, 128, 144, 184, 144, 24, 5, 8, 8, 6, 0,
- 255, 136, 136, 136, 136, 152, 232, 128, 128, 5, 7, 7, 6, 0, 0, 120,
- 152, 152, 120, 24, 24, 24, 2, 2, 2, 6, 2, 2, 192, 192, 5, 5,
- 5, 6, 0, 0, 80, 136, 168, 168, 80, 3, 5, 5, 6, 0, 3, 64,
- 192, 64, 64, 224, 5, 7, 7, 6, 0, 0, 112, 136, 136, 136, 112, 0,
- 248, 5, 5, 5, 6, 0, 1, 160, 80, 40, 80, 160, 5, 7, 7, 6,
- 0, 0, 136, 144, 168, 88, 184, 8, 8, 5, 7, 7, 6, 0, 0, 136,
- 144, 184, 72, 152, 32, 56, 5, 8, 8, 6, 0, 0, 192, 64, 192, 72,
- 216, 56, 8, 8, 5, 7, 7, 6, 0, 0, 32, 0, 32, 64, 128, 136,
- 112, 5, 8, 8, 6, 0, 0, 64, 32, 32, 80, 136, 248, 136, 136, 5,
- 8, 8, 6, 0, 0, 16, 32, 32, 80, 136, 248, 136, 136, 5, 8, 8,
- 6, 0, 0, 32, 80, 0, 112, 136, 248, 136, 136, 5, 8, 8, 6, 0,
- 0, 104, 144, 0, 112, 136, 248, 136, 136, 5, 8, 8, 6, 0, 0, 80,
- 0, 32, 80, 136, 248, 136, 136, 5, 8, 8, 6, 0, 0, 32, 80, 32,
- 112, 136, 248, 136, 136, 5, 7, 7, 6, 0, 0, 56, 96, 160, 184, 224,
- 160, 184, 5, 8, 8, 6, 0, 255, 112, 136, 128, 128, 136, 112, 32, 96,
- 5, 8, 8, 6, 0, 0, 64, 32, 0, 248, 128, 240, 128, 248, 5, 8,
- 8, 6, 0, 0, 8, 16, 0, 248, 128, 240, 128, 248, 5, 8, 8, 6,
- 0, 0, 32, 80, 0, 248, 128, 240, 128, 248, 5, 7, 7, 6, 0, 0,
- 80, 0, 248, 128, 240, 128, 248, 3, 8, 8, 6, 1, 0, 128, 64, 0,
- 224, 64, 64, 64, 224, 3, 8, 8, 6, 1, 0, 32, 64, 0, 224, 64,
- 64, 64, 224, 3, 8, 8, 6, 1, 0, 64, 160, 0, 224, 64, 64, 64,
- 224, 3, 7, 7, 6, 1, 0, 160, 0, 224, 64, 64, 64, 224, 5, 7,
- 7, 6, 0, 0, 112, 72, 72, 232, 72, 72, 112, 5, 8, 8, 6, 0,
- 0, 104, 144, 0, 136, 200, 168, 152, 136, 5, 8, 8, 6, 0, 0, 64,
- 32, 112, 136, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 16, 32, 112,
- 136, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 32, 80, 0, 112, 136,
- 136, 136, 112, 5, 8, 8, 6, 0, 0, 104, 144, 0, 112, 136, 136, 136,
- 112, 5, 8, 8, 6, 0, 0, 80, 0, 112, 136, 136, 136, 136, 112, 5,
- 5, 5, 6, 0, 1, 136, 80, 32, 80, 136, 5, 7, 7, 6, 0, 0,
- 112, 32, 112, 168, 112, 32, 112, 5, 8, 8, 6, 0, 0, 64, 32, 136,
- 136, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 16, 32, 136, 136, 136,
- 136, 136, 112, 5, 8, 8, 6, 0, 0, 32, 80, 0, 136, 136, 136, 136,
- 112, 5, 8, 8, 6, 0, 0, 80, 0, 136, 136, 136, 136, 136, 112, 5,
- 8, 8, 6, 0, 0, 16, 32, 136, 80, 32, 32, 32, 32, 5, 8, 8,
- 6, 0, 0, 192, 64, 112, 72, 72, 112, 64, 224, 5, 7, 7, 6, 0,
- 0, 48, 72, 72, 112, 72, 72, 176, 5, 8, 8, 6, 0, 0, 64, 32,
- 0, 112, 8, 120, 136, 120, 5, 8, 8, 6, 0, 0, 16, 32, 0, 112,
- 8, 120, 136, 120, 5, 8, 8, 6, 0, 0, 32, 80, 0, 112, 8, 120,
- 136, 120, 5, 8, 8, 6, 0, 0, 104, 144, 0, 112, 8, 120, 136, 120,
- 5, 7, 7, 6, 0, 0, 80, 0, 112, 8, 120, 136, 120, 5, 8, 8,
- 6, 0, 0, 32, 80, 32, 112, 8, 120, 136, 120, 5, 6, 6, 6, 0,
- 0, 208, 40, 120, 160, 168, 80, 5, 6, 6, 6, 0, 255, 112, 128, 136,
- 112, 32, 96, 5, 8, 8, 6, 0, 0, 64, 32, 0, 112, 136, 248, 128,
- 112, 5, 8, 8, 6, 0, 0, 16, 32, 0, 112, 136, 248, 128, 112, 5,
- 8, 8, 6, 0, 0, 32, 80, 0, 112, 136, 248, 128, 112, 5, 7, 7,
- 6, 0, 0, 80, 0, 112, 136, 248, 128, 112, 3, 8, 8, 6, 1, 0,
- 128, 64, 0, 64, 192, 64, 64, 224, 3, 8, 8, 6, 1, 0, 32, 64,
- 0, 64, 192, 64, 64, 224, 3, 8, 8, 6, 1, 0, 64, 160, 0, 64,
- 192, 64, 64, 224, 3, 7, 7, 6, 1, 0, 160, 0, 64, 192, 64, 64,
- 224, 5, 7, 7, 6, 0, 0, 160, 64, 160, 16, 120, 136, 112, 5, 8,
- 8, 6, 0, 0, 104, 144, 0, 176, 200, 136, 136, 136, 5, 8, 8, 6,
- 0, 0, 64, 32, 0, 112, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0,
- 16, 32, 0, 112, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 32, 80,
- 0, 112, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 104, 144, 0, 112,
- 136, 136, 136, 112, 5, 7, 7, 6, 0, 0, 80, 0, 112, 136, 136, 136,
- 112, 5, 5, 5, 6, 0, 1, 32, 0, 248, 0, 32, 5, 7, 7, 6,
- 0, 0, 16, 32, 112, 168, 112, 32, 64, 5, 8, 8, 6, 0, 0, 64,
- 32, 0, 136, 136, 136, 152, 104, 5, 8, 8, 6, 0, 0, 16, 32, 0,
- 136, 136, 136, 152, 104, 5, 8, 8, 6, 0, 0, 32, 80, 0, 136, 136,
- 136, 152, 104, 5, 7, 7, 6, 0, 0, 80, 0, 136, 136, 136, 152, 104,
- 5, 9, 9, 6, 0, 255, 16, 32, 0, 136, 136, 136, 248, 8, 112, 4,
- 7, 7, 6, 1, 0, 192, 64, 96, 80, 96, 64, 224, 5, 8, 8, 6,
- 0, 255, 80, 0, 136, 136, 136, 248, 8, 112
-};
diff --git a/Marlin/dogm_font_data_ISO10646_1.h b/Marlin/dogm_font_data_ISO10646_1.h
deleted file mode 100644
index 8ff40d0..0000000
--- a/Marlin/dogm_font_data_ISO10646_1.h
+++ /dev/null
@@ -1,198 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- Fontname: ISO10646-1
- Copyright: A.Hardtung, public domain
- Capital A Height: 7, '1' Height: 7
- Calculated Max Values w= 5 h= 9 x= 2 y= 7 dx= 6 dy= 0 ascent= 8 len= 9
- Font Bounding box w= 6 h= 9 x= 0 y=-2
- Calculated Min Values x= 0 y=-1 dx= 0 dy= 0
- Pure Font ascent = 7 descent=-1
- X Font ascent = 7 descent=-1
- Max Font ascent = 8 descent=-1
-*/
-#include
-const u8g_fntpgm_uint8_t ISO10646_1_5x7[2592] U8G_SECTION(".progmem.ISO10646_1_5x7") = {
- 0, 6, 9, 0, 254, 7, 1, 146, 3, 33, 32, 255, 255, 8, 255, 7,
- 255, 0, 0, 0, 6, 0, 0, 1, 7, 7, 6, 2, 0, 128, 128, 128,
- 128, 128, 0, 128, 3, 2, 2, 6, 1, 5, 160, 160, 5, 7, 7, 6,
- 0, 0, 80, 80, 248, 80, 248, 80, 80, 5, 7, 7, 6, 0, 0, 32,
- 120, 160, 112, 40, 240, 32, 5, 7, 7, 6, 0, 0, 192, 200, 16, 32,
- 64, 152, 24, 5, 7, 7, 6, 0, 0, 96, 144, 160, 64, 168, 144, 104,
- 2, 3, 3, 6, 1, 4, 192, 64, 128, 3, 7, 7, 6, 1, 0, 32,
- 64, 128, 128, 128, 64, 32, 3, 7, 7, 6, 1, 0, 128, 64, 32, 32,
- 32, 64, 128, 5, 5, 5, 6, 0, 1, 32, 168, 112, 168, 32, 5, 5,
- 5, 6, 0, 1, 32, 32, 248, 32, 32, 2, 3, 3, 6, 2, 255, 192,
- 64, 128, 5, 1, 1, 6, 0, 3, 248, 2, 2, 2, 6, 2, 0, 192,
- 192, 5, 5, 5, 6, 0, 1, 8, 16, 32, 64, 128, 5, 7, 7, 6,
- 0, 0, 112, 136, 136, 136, 136, 136, 112, 3, 7, 7, 6, 1, 0, 64,
- 192, 64, 64, 64, 64, 224, 5, 7, 7, 6, 0, 0, 112, 136, 8, 112,
- 128, 128, 248, 5, 7, 7, 6, 0, 0, 248, 16, 32, 16, 8, 8, 240,
- 5, 7, 7, 6, 0, 0, 16, 48, 80, 144, 248, 16, 16, 5, 7, 7,
- 6, 0, 0, 248, 128, 240, 8, 8, 136, 112, 5, 7, 7, 6, 0, 0,
- 112, 128, 128, 240, 136, 136, 112, 5, 7, 7, 6, 0, 0, 248, 8, 16,
- 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 112, 136, 136, 112, 136, 136,
- 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 120, 8, 8, 112, 2, 5,
- 5, 6, 2, 0, 192, 192, 0, 192, 192, 2, 6, 6, 6, 2, 255, 192,
- 192, 0, 192, 64, 128, 4, 7, 7, 6, 0, 0, 16, 32, 64, 128, 64,
- 32, 16, 5, 3, 3, 6, 0, 2, 248, 0, 248, 4, 7, 7, 6, 1,
- 0, 128, 64, 32, 16, 32, 64, 128, 5, 7, 7, 6, 0, 0, 112, 136,
- 8, 16, 32, 0, 32, 5, 7, 7, 6, 0, 0, 112, 136, 8, 104, 168,
- 168, 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 248, 136, 136, 136, 5,
- 7, 7, 6, 0, 0, 240, 136, 136, 240, 136, 136, 240, 5, 7, 7, 6,
- 0, 0, 112, 136, 128, 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 240,
- 136, 136, 136, 136, 136, 240, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240,
- 128, 128, 248, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128, 128, 128,
- 5, 7, 7, 6, 0, 0, 112, 136, 128, 184, 136, 136, 112, 5, 7, 7,
- 6, 0, 0, 136, 136, 136, 248, 136, 136, 136, 1, 7, 7, 6, 2, 0,
- 128, 128, 128, 128, 128, 128, 128, 5, 7, 7, 6, 0, 0, 56, 16, 16,
- 16, 16, 144, 96, 5, 7, 7, 6, 0, 0, 136, 144, 160, 192, 160, 144,
- 136, 5, 7, 7, 6, 0, 0, 128, 128, 128, 128, 128, 128, 248, 5, 7,
- 7, 6, 0, 0, 136, 216, 168, 136, 136, 136, 136, 5, 7, 7, 6, 0,
- 0, 136, 136, 200, 168, 152, 136, 136, 5, 7, 7, 6, 0, 0, 112, 136,
- 136, 136, 136, 136, 112, 5, 7, 7, 6, 0, 0, 240, 136, 136, 240, 128,
- 128, 128, 5, 7, 7, 6, 0, 0, 112, 136, 136, 136, 168, 144, 104, 5,
- 7, 7, 6, 0, 0, 240, 136, 136, 240, 160, 144, 136, 5, 7, 7, 6,
- 0, 0, 120, 128, 128, 112, 8, 8, 240, 5, 7, 7, 6, 0, 0, 248,
- 32, 32, 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136,
- 136, 136, 112, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 80, 32,
- 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 168, 80, 5, 7, 7,
- 6, 0, 0, 136, 136, 80, 32, 80, 136, 136, 5, 7, 7, 6, 0, 0,
- 136, 136, 136, 80, 32, 32, 32, 5, 7, 7, 6, 0, 0, 248, 8, 16,
- 32, 64, 128, 248, 3, 7, 7, 6, 1, 0, 224, 128, 128, 128, 128, 128,
- 224, 5, 5, 5, 6, 0, 1, 128, 64, 32, 16, 8, 3, 7, 7, 6,
- 1, 0, 224, 32, 32, 32, 32, 32, 224, 5, 3, 3, 6, 0, 4, 32,
- 80, 136, 5, 1, 1, 6, 0, 0, 248, 2, 2, 2, 6, 2, 5, 128,
- 64, 5, 5, 5, 6, 0, 0, 112, 8, 120, 136, 120, 5, 7, 7, 6,
- 0, 0, 128, 128, 176, 200, 136, 136, 240, 5, 5, 5, 6, 0, 0, 112,
- 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 8, 8, 104, 152, 136, 136,
- 120, 5, 5, 5, 6, 0, 0, 112, 136, 248, 128, 112, 5, 7, 7, 6,
- 0, 0, 48, 72, 224, 64, 64, 64, 64, 5, 6, 6, 6, 0, 255, 112,
- 136, 136, 120, 8, 112, 5, 7, 7, 6, 0, 0, 128, 128, 176, 200, 136,
- 136, 136, 1, 7, 7, 6, 2, 0, 128, 0, 128, 128, 128, 128, 128, 3,
- 8, 8, 6, 1, 255, 32, 0, 32, 32, 32, 32, 160, 64, 4, 7, 7,
- 6, 0, 0, 128, 128, 144, 160, 192, 160, 144, 3, 7, 7, 6, 1, 0,
- 192, 64, 64, 64, 64, 64, 224, 5, 5, 5, 6, 0, 0, 208, 168, 168,
- 168, 168, 5, 5, 5, 6, 0, 0, 176, 200, 136, 136, 136, 5, 5, 5,
- 6, 0, 0, 112, 136, 136, 136, 112, 5, 6, 6, 6, 0, 255, 240, 136,
- 136, 240, 128, 128, 5, 6, 6, 6, 0, 255, 120, 136, 136, 120, 8, 8,
- 5, 5, 5, 6, 0, 0, 176, 200, 128, 128, 128, 5, 5, 5, 6, 0,
- 0, 112, 128, 112, 8, 240, 4, 7, 7, 6, 0, 0, 64, 64, 224, 64,
- 64, 64, 48, 5, 5, 5, 6, 0, 0, 136, 136, 136, 152, 104, 5, 5,
- 5, 6, 0, 0, 136, 136, 136, 80, 32, 5, 5, 5, 6, 0, 0, 136,
- 136, 168, 168, 80, 5, 5, 5, 6, 0, 0, 136, 80, 32, 80, 136, 5,
- 6, 6, 6, 0, 255, 136, 136, 136, 120, 8, 112, 5, 5, 5, 6, 0,
- 0, 248, 16, 32, 64, 248, 3, 7, 7, 6, 1, 0, 32, 64, 64, 128,
- 64, 64, 32, 1, 7, 7, 6, 2, 0, 128, 128, 128, 128, 128, 128, 128,
- 3, 7, 7, 6, 1, 0, 128, 64, 64, 32, 64, 64, 128, 5, 2, 2,
- 6, 0, 2, 104, 144, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0,
- 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
- 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0,
- 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0,
- 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
- 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0,
- 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0,
- 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
- 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0,
- 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0,
- 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
- 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0,
- 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0,
- 0, 1, 7, 7, 6, 2, 0, 128, 0, 128, 128, 128, 128, 128, 5, 7,
- 7, 6, 0, 0, 32, 112, 168, 160, 168, 112, 32, 5, 7, 7, 6, 0,
- 0, 48, 64, 64, 224, 64, 80, 168, 5, 5, 5, 6, 0, 0, 136, 112,
- 80, 112, 136, 5, 7, 7, 6, 0, 0, 136, 80, 32, 248, 32, 248, 32,
- 1, 7, 7, 6, 2, 0, 128, 128, 128, 0, 128, 128, 128, 5, 8, 8,
- 6, 0, 0, 48, 72, 32, 80, 80, 32, 144, 96, 3, 1, 1, 6, 1,
- 7, 160, 5, 7, 7, 6, 0, 0, 248, 136, 184, 184, 184, 136, 248, 5,
- 7, 7, 6, 0, 1, 112, 8, 120, 136, 120, 0, 248, 5, 5, 5, 6,
- 0, 1, 40, 80, 160, 80, 40, 5, 3, 3, 6, 0, 1, 248, 8, 8,
- 2, 2, 2, 6, 2, 6, 64, 128, 5, 7, 7, 6, 0, 0, 248, 136,
- 168, 136, 152, 168, 248, 5, 1, 1, 6, 0, 6, 248, 4, 4, 4, 6,
- 0, 3, 96, 144, 144, 96, 5, 7, 7, 6, 0, 0, 32, 32, 248, 32,
- 32, 0, 248, 4, 5, 5, 6, 0, 3, 96, 144, 32, 64, 240, 3, 5,
- 5, 6, 0, 3, 224, 32, 224, 32, 224, 2, 2, 2, 6, 2, 6, 64,
- 128, 5, 8, 8, 6, 0, 255, 136, 136, 136, 136, 152, 232, 128, 128, 5,
- 7, 7, 6, 0, 0, 120, 152, 152, 120, 24, 24, 24, 2, 2, 2, 6,
- 2, 2, 192, 192, 2, 2, 2, 6, 2, 255, 64, 128, 3, 5, 5, 6,
- 0, 3, 64, 192, 64, 64, 224, 5, 7, 7, 6, 0, 1, 112, 136, 136,
- 136, 112, 0, 248, 5, 5, 5, 6, 0, 1, 160, 80, 40, 80, 160, 5,
- 7, 7, 6, 0, 0, 136, 144, 168, 88, 184, 8, 8, 5, 7, 7, 6,
- 0, 0, 136, 144, 184, 72, 152, 32, 56, 5, 8, 8, 6, 0, 0, 192,
- 64, 192, 72, 216, 56, 8, 8, 5, 7, 7, 6, 0, 0, 32, 0, 32,
- 64, 128, 136, 112, 5, 8, 8, 6, 0, 0, 64, 32, 0, 112, 136, 248,
- 136, 136, 5, 8, 8, 6, 0, 0, 16, 32, 0, 112, 136, 248, 136, 136,
- 5, 8, 8, 6, 0, 0, 32, 80, 0, 112, 136, 248, 136, 136, 5, 8,
- 8, 6, 0, 0, 104, 144, 0, 112, 136, 248, 136, 136, 5, 8, 8, 6,
- 0, 0, 80, 0, 112, 136, 136, 248, 136, 136, 5, 8, 8, 6, 0, 0,
- 32, 80, 32, 112, 136, 248, 136, 136, 5, 7, 7, 6, 0, 0, 56, 96,
- 160, 184, 224, 160, 184, 5, 8, 8, 6, 0, 255, 112, 136, 128, 128, 136,
- 112, 32, 96, 5, 8, 8, 6, 0, 0, 64, 32, 0, 248, 128, 240, 128,
- 248, 5, 8, 8, 6, 0, 0, 8, 16, 0, 248, 128, 240, 128, 248, 5,
- 8, 8, 6, 0, 0, 32, 80, 0, 248, 128, 240, 128, 248, 5, 7, 7,
- 6, 0, 0, 80, 0, 248, 128, 240, 128, 248, 3, 8, 8, 6, 1, 0,
- 128, 64, 0, 224, 64, 64, 64, 224, 3, 8, 8, 6, 1, 0, 32, 64,
- 0, 224, 64, 64, 64, 224, 3, 8, 8, 6, 1, 0, 64, 160, 0, 224,
- 64, 64, 64, 224, 3, 7, 7, 6, 1, 0, 160, 0, 224, 64, 64, 64,
- 224, 5, 7, 7, 6, 0, 0, 112, 72, 72, 232, 72, 72, 112, 5, 8,
- 8, 6, 0, 0, 104, 144, 0, 136, 200, 168, 152, 136, 5, 8, 8, 6,
- 0, 0, 64, 32, 112, 136, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0,
- 16, 32, 112, 136, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 32, 80,
- 0, 112, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 104, 144, 0, 112,
- 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 80, 0, 112, 136, 136, 136,
- 136, 112, 5, 5, 5, 6, 0, 1, 136, 80, 32, 80, 136, 5, 8, 8,
- 6, 0, 255, 16, 112, 168, 168, 168, 168, 112, 64, 5, 8, 8, 6, 0,
- 0, 64, 32, 136, 136, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 16,
- 32, 136, 136, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 32, 80, 0,
- 136, 136, 136, 136, 112, 5, 8, 8, 6, 0, 0, 80, 0, 136, 136, 136,
- 136, 136, 112, 5, 8, 8, 6, 0, 0, 16, 32, 136, 80, 32, 32, 32,
- 32, 5, 9, 9, 6, 0, 255, 192, 64, 112, 72, 72, 112, 64, 64, 224,
- 4, 8, 8, 6, 1, 255, 96, 144, 144, 160, 144, 144, 224, 128, 5, 8,
- 8, 6, 0, 0, 64, 32, 0, 112, 8, 120, 136, 120, 5, 8, 8, 6,
- 0, 0, 16, 32, 0, 112, 8, 120, 136, 120, 5, 8, 8, 6, 0, 0,
- 32, 80, 0, 112, 8, 120, 136, 120, 5, 8, 8, 6, 0, 0, 104, 144,
- 0, 112, 8, 120, 136, 120, 5, 7, 7, 6, 0, 0, 80, 0, 112, 8,
- 120, 136, 120, 5, 8, 8, 6, 0, 0, 32, 80, 32, 112, 8, 120, 136,
- 120, 5, 6, 6, 6, 0, 0, 208, 40, 120, 160, 168, 80, 5, 6, 6,
- 6, 0, 255, 112, 128, 136, 112, 32, 96, 5, 8, 8, 6, 0, 0, 64,
- 32, 0, 112, 136, 248, 128, 112, 5, 8, 8, 6, 0, 0, 16, 32, 0,
- 112, 136, 248, 128, 112, 5, 8, 8, 6, 0, 0, 32, 80, 0, 112, 136,
- 248, 128, 112, 5, 7, 7, 6, 0, 0, 80, 0, 112, 136, 248, 128, 112,
- 3, 8, 8, 6, 1, 0, 128, 64, 0, 64, 192, 64, 64, 224, 3, 8,
- 8, 6, 1, 0, 32, 64, 0, 64, 192, 64, 64, 224, 3, 8, 8, 6,
- 1, 0, 64, 160, 0, 64, 192, 64, 64, 224, 3, 7, 7, 6, 1, 0,
- 160, 0, 64, 192, 64, 64, 224, 5, 7, 7, 6, 0, 0, 160, 64, 160,
- 16, 120, 136, 112, 5, 8, 8, 6, 0, 0, 104, 144, 0, 176, 200, 136,
- 136, 136, 5, 8, 8, 6, 0, 0, 64, 32, 0, 112, 136, 136, 136, 112,
- 5, 8, 8, 6, 0, 0, 16, 32, 0, 112, 136, 136, 136, 112, 5, 8,
- 8, 6, 0, 0, 32, 80, 0, 112, 136, 136, 136, 112, 5, 8, 8, 6,
- 0, 0, 104, 144, 0, 112, 136, 136, 136, 112, 5, 7, 7, 6, 0, 0,
- 80, 0, 112, 136, 136, 136, 112, 5, 5, 5, 6, 0, 1, 32, 0, 248,
- 0, 32, 5, 7, 7, 6, 0, 255, 16, 112, 168, 168, 168, 112, 64, 5,
- 8, 8, 6, 0, 0, 64, 32, 0, 136, 136, 136, 152, 104, 5, 8, 8,
- 6, 0, 0, 16, 32, 0, 136, 136, 136, 152, 104, 5, 8, 8, 6, 0,
- 0, 32, 80, 0, 136, 136, 136, 152, 104, 5, 7, 7, 6, 0, 0, 80,
- 0, 136, 136, 136, 152, 104, 5, 9, 9, 6, 0, 255, 16, 32, 0, 136,
- 136, 136, 248, 8, 112, 4, 7, 7, 6, 1, 255, 192, 64, 96, 80, 96,
- 64, 224, 5, 8, 8, 6, 0, 255, 80, 0, 136, 136, 136, 120, 8, 112
-};
diff --git a/Marlin/dogm_font_data_ISO10646_5_Cyrillic.h b/Marlin/dogm_font_data_ISO10646_5_Cyrillic.h
deleted file mode 100644
index 75e779f..0000000
--- a/Marlin/dogm_font_data_ISO10646_5_Cyrillic.h
+++ /dev/null
@@ -1,196 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- Fontname: ISO10646_5_Cyrillic
- Copyright: A. Hardtung, public domain
- Capital A Height: 7, '1' Height: 7
- Calculated Max Values w= 5 h= 9 x= 2 y= 5 dx= 6 dy= 0 ascent= 8 len= 9
- Font Bounding box w= 6 h= 9 x= 0 y=-2
- Calculated Min Values x= 0 y=-1 dx= 0 dy= 0
- Pure Font ascent = 7 descent=-1
- X Font ascent = 7 descent=-1
- Max Font ascent = 8 descent=-1
-*/
-#include
-const u8g_fntpgm_uint8_t ISO10646_5_Cyrillic_5x7[2560] U8G_SECTION(".progmem.ISO10646_5_Cyrillic_5x7") = {
- 0, 6, 9, 0, 254, 7, 1, 145, 3, 32, 32, 255, 255, 8, 255, 7,
- 255, 0, 0, 0, 6, 0, 0, 1, 7, 7, 6, 2, 0, 128, 128, 128,
- 128, 128, 0, 128, 3, 2, 2, 6, 1, 5, 160, 160, 5, 7, 7, 6,
- 0, 0, 80, 80, 248, 80, 248, 80, 80, 5, 7, 7, 6, 0, 0, 32,
- 120, 160, 112, 40, 240, 32, 5, 7, 7, 6, 0, 0, 192, 200, 16, 32,
- 64, 152, 24, 5, 7, 7, 6, 0, 0, 96, 144, 160, 64, 168, 144, 104,
- 2, 3, 3, 6, 1, 4, 192, 64, 128, 3, 7, 7, 6, 1, 0, 32,
- 64, 128, 128, 128, 64, 32, 3, 7, 7, 6, 1, 0, 128, 64, 32, 32,
- 32, 64, 128, 5, 5, 5, 6, 0, 1, 32, 168, 112, 168, 32, 5, 5,
- 5, 6, 0, 1, 32, 32, 248, 32, 32, 2, 3, 3, 6, 2, 255, 192,
- 64, 128, 5, 1, 1, 6, 0, 3, 248, 2, 2, 2, 6, 2, 0, 192,
- 192, 5, 5, 5, 6, 0, 1, 8, 16, 32, 64, 128, 5, 7, 7, 6,
- 0, 0, 112, 136, 152, 168, 200, 136, 112, 3, 7, 7, 6, 1, 0, 64,
- 192, 64, 64, 64, 64, 224, 5, 7, 7, 6, 0, 0, 112, 136, 8, 112,
- 128, 128, 248, 5, 7, 7, 6, 0, 0, 248, 16, 32, 16, 8, 8, 240,
- 5, 7, 7, 6, 0, 0, 16, 48, 80, 144, 248, 16, 16, 5, 7, 7,
- 6, 0, 0, 248, 128, 240, 8, 8, 136, 112, 5, 7, 7, 6, 0, 0,
- 48, 64, 128, 240, 136, 136, 112, 5, 7, 7, 6, 0, 0, 248, 8, 16,
- 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 112, 136, 136, 112, 136, 136,
- 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 120, 8, 16, 96, 2, 5,
- 5, 6, 2, 0, 192, 192, 0, 192, 192, 2, 6, 6, 6, 2, 255, 192,
- 192, 0, 192, 64, 128, 4, 7, 7, 6, 0, 0, 16, 32, 64, 128, 64,
- 32, 16, 5, 3, 3, 6, 0, 2, 248, 0, 248, 4, 7, 7, 6, 1,
- 0, 128, 64, 32, 16, 32, 64, 128, 5, 7, 7, 6, 0, 0, 112, 136,
- 8, 16, 32, 0, 32, 5, 6, 6, 6, 0, 0, 112, 136, 8, 104, 168,
- 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 248, 136, 136, 136, 5, 7,
- 7, 6, 0, 0, 240, 136, 136, 240, 136, 136, 240, 5, 7, 7, 6, 0,
- 0, 112, 136, 128, 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 224, 144,
- 136, 136, 136, 144, 224, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128,
- 128, 248, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128, 128, 128, 5,
- 7, 7, 6, 0, 0, 112, 136, 128, 184, 136, 136, 112, 5, 7, 7, 6,
- 0, 0, 136, 136, 136, 248, 136, 136, 136, 1, 7, 7, 6, 2, 0, 128,
- 128, 128, 128, 128, 128, 128, 5, 7, 7, 6, 0, 0, 56, 16, 16, 16,
- 16, 144, 96, 5, 7, 7, 6, 0, 0, 136, 144, 160, 192, 160, 144, 136,
- 5, 7, 7, 6, 0, 0, 128, 128, 128, 128, 128, 128, 248, 5, 7, 7,
- 6, 0, 0, 136, 216, 168, 136, 136, 136, 136, 5, 7, 7, 6, 0, 0,
- 136, 136, 200, 168, 152, 136, 136, 5, 7, 7, 6, 0, 0, 112, 136, 136,
- 136, 136, 136, 112, 5, 7, 7, 6, 0, 0, 240, 136, 136, 240, 128, 128,
- 128, 5, 7, 7, 6, 0, 0, 112, 136, 136, 136, 168, 144, 104, 5, 7,
- 7, 6, 0, 0, 240, 136, 136, 240, 160, 144, 136, 5, 7, 7, 6, 0,
- 0, 120, 128, 128, 112, 8, 8, 240, 5, 7, 7, 6, 0, 0, 248, 32,
- 32, 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136,
- 136, 112, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 80, 32, 5,
- 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 168, 80, 5, 7, 7, 6,
- 0, 0, 136, 136, 80, 32, 80, 136, 136, 5, 7, 7, 6, 0, 0, 136,
- 136, 136, 80, 32, 32, 32, 5, 7, 7, 6, 0, 0, 248, 8, 16, 32,
- 64, 128, 248, 3, 7, 7, 6, 1, 0, 224, 128, 128, 128, 128, 128, 224,
- 5, 5, 5, 6, 0, 1, 128, 64, 32, 16, 8, 3, 7, 7, 6, 1,
- 0, 224, 32, 32, 32, 32, 32, 224, 5, 3, 3, 6, 0, 4, 32, 80,
- 136, 5, 1, 1, 6, 0, 0, 248, 2, 2, 2, 6, 2, 5, 128, 64,
- 5, 5, 5, 6, 0, 0, 112, 8, 120, 136, 120, 5, 7, 7, 6, 0,
- 0, 128, 128, 176, 200, 136, 136, 240, 5, 5, 5, 6, 0, 0, 112, 128,
- 128, 136, 112, 5, 7, 7, 6, 0, 0, 8, 8, 104, 152, 136, 136, 120,
- 5, 5, 5, 6, 0, 0, 112, 136, 248, 128, 112, 5, 7, 7, 6, 0,
- 0, 48, 72, 224, 64, 64, 64, 64, 5, 6, 6, 6, 0, 255, 112, 136,
- 136, 120, 8, 112, 5, 7, 7, 6, 0, 0, 128, 128, 176, 200, 136, 136,
- 136, 1, 7, 7, 6, 2, 0, 128, 0, 128, 128, 128, 128, 128, 3, 8,
- 8, 6, 1, 255, 32, 0, 32, 32, 32, 32, 160, 64, 4, 7, 7, 6,
- 0, 0, 128, 128, 144, 160, 192, 160, 144, 3, 7, 7, 6, 1, 0, 192,
- 64, 64, 64, 64, 64, 224, 5, 5, 5, 6, 0, 0, 208, 168, 168, 168,
- 168, 5, 5, 5, 6, 0, 0, 176, 200, 136, 136, 136, 5, 5, 5, 6,
- 0, 0, 112, 136, 136, 136, 112, 5, 6, 6, 6, 0, 255, 240, 136, 136,
- 240, 128, 128, 5, 6, 6, 6, 0, 255, 120, 136, 136, 120, 8, 8, 5,
- 5, 5, 6, 0, 0, 176, 200, 128, 128, 128, 5, 5, 5, 6, 0, 0,
- 112, 128, 112, 8, 240, 5, 7, 7, 6, 0, 0, 64, 64, 224, 64, 64,
- 72, 48, 5, 5, 5, 6, 0, 0, 136, 136, 136, 152, 104, 5, 5, 5,
- 6, 0, 0, 136, 136, 136, 80, 32, 5, 5, 5, 6, 0, 0, 136, 136,
- 168, 168, 80, 5, 5, 5, 6, 0, 0, 136, 80, 32, 80, 136, 5, 6,
- 6, 6, 0, 255, 136, 136, 136, 120, 8, 112, 5, 5, 5, 6, 0, 0,
- 248, 16, 32, 64, 248, 3, 7, 7, 6, 1, 0, 32, 64, 64, 128, 64,
- 64, 32, 1, 7, 7, 6, 2, 0, 128, 128, 128, 128, 128, 128, 128, 3,
- 7, 7, 6, 1, 0, 128, 64, 64, 32, 64, 64, 128, 5, 2, 2, 6,
- 0, 3, 104, 144, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
- 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
- 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
- 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
- 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
- 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
- 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
- 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
- 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 5, 8, 8, 6, 0, 0,
- 64, 248, 128, 128, 240, 128, 128, 248, 5, 8, 8, 6, 0, 0, 80, 248,
- 128, 128, 240, 128, 128, 248, 5, 7, 7, 6, 0, 0, 224, 64, 64, 112,
- 72, 72, 112, 5, 8, 8, 6, 0, 0, 16, 32, 248, 136, 128, 128, 128,
- 128, 5, 7, 7, 6, 0, 0, 48, 72, 128, 224, 128, 72, 48, 5, 7,
- 7, 6, 0, 0, 112, 136, 128, 112, 8, 136, 112, 3, 7, 7, 6, 1,
- 0, 224, 64, 64, 64, 64, 64, 224, 3, 8, 8, 6, 1, 0, 160, 0,
- 224, 64, 64, 64, 64, 224, 5, 7, 7, 6, 0, 0, 56, 16, 16, 16,
- 16, 144, 96, 5, 7, 7, 6, 0, 0, 160, 160, 160, 184, 168, 168, 184,
- 5, 7, 7, 6, 0, 0, 160, 160, 160, 248, 168, 168, 184, 4, 7, 7,
- 6, 0, 0, 224, 64, 112, 80, 80, 80, 80, 5, 8, 8, 6, 0, 0,
- 16, 32, 136, 144, 160, 224, 144, 136, 5, 8, 8, 6, 0, 0, 64, 32,
- 136, 152, 168, 200, 136, 136, 5, 9, 9, 6, 0, 255, 80, 32, 136, 136,
- 136, 80, 32, 32, 32, 5, 8, 8, 6, 0, 255, 136, 136, 136, 136, 136,
- 136, 248, 32, 5, 7, 7, 6, 0, 0, 112, 136, 136, 248, 136, 136, 136,
- 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 136, 136, 240, 5, 7, 7,
- 6, 0, 0, 240, 136, 136, 240, 136, 136, 240, 5, 7, 7, 6, 0, 0,
- 248, 136, 128, 128, 128, 128, 128, 5, 8, 8, 6, 0, 255, 120, 40, 40,
- 40, 72, 136, 248, 136, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128,
- 128, 248, 5, 7, 7, 6, 0, 0, 168, 168, 168, 112, 168, 168, 168, 5,
- 7, 7, 6, 0, 0, 240, 8, 8, 112, 8, 8, 240, 5, 7, 7, 6,
- 0, 0, 136, 136, 152, 168, 200, 136, 136, 5, 8, 8, 6, 0, 0, 80,
- 32, 136, 152, 168, 168, 200, 136, 5, 7, 7, 6, 0, 0, 136, 144, 160,
- 192, 160, 144, 136, 5, 7, 7, 6, 0, 0, 120, 40, 40, 40, 40, 168,
- 72, 5, 7, 7, 6, 0, 0, 136, 216, 168, 136, 136, 136, 136, 5, 7,
- 7, 6, 0, 0, 136, 136, 136, 248, 136, 136, 136, 5, 7, 7, 6, 0,
- 0, 112, 136, 136, 136, 136, 136, 112, 5, 7, 7, 6, 0, 0, 248, 136,
- 136, 136, 136, 136, 136, 5, 7, 7, 6, 0, 0, 240, 136, 136, 240, 128,
- 128, 128, 5, 7, 7, 6, 0, 0, 112, 136, 128, 128, 128, 136, 112, 5,
- 7, 7, 6, 0, 0, 248, 32, 32, 32, 32, 32, 32, 5, 7, 7, 6,
- 0, 0, 136, 136, 136, 80, 32, 64, 128, 5, 7, 7, 6, 0, 0, 32,
- 112, 168, 168, 168, 112, 32, 5, 7, 7, 6, 0, 0, 136, 136, 80, 32,
- 80, 136, 136, 5, 8, 8, 6, 0, 255, 136, 136, 136, 136, 136, 136, 248,
- 8, 5, 7, 7, 6, 0, 0, 136, 136, 136, 152, 104, 8, 8, 5, 7,
- 7, 6, 0, 0, 168, 168, 168, 168, 168, 168, 248, 5, 8, 8, 6, 0,
- 255, 168, 168, 168, 168, 168, 168, 248, 8, 5, 7, 7, 6, 0, 0, 192,
- 64, 64, 112, 72, 72, 112, 5, 7, 7, 6, 0, 0, 136, 136, 136, 200,
- 168, 168, 200, 5, 7, 7, 6, 0, 0, 128, 128, 128, 240, 136, 136, 240,
- 5, 7, 7, 6, 0, 0, 112, 136, 8, 56, 8, 136, 112, 5, 7, 7,
- 6, 0, 0, 144, 168, 168, 232, 168, 168, 144, 5, 7, 7, 6, 0, 0,
- 120, 136, 136, 120, 40, 72, 136, 5, 5, 5, 6, 0, 0, 112, 8, 120,
- 136, 120, 5, 7, 7, 6, 0, 0, 24, 96, 128, 240, 136, 136, 112, 4,
- 5, 5, 6, 0, 0, 224, 144, 224, 144, 224, 5, 5, 5, 6, 0, 0,
- 248, 136, 128, 128, 128, 5, 6, 6, 6, 0, 255, 120, 40, 72, 136, 248,
- 136, 5, 5, 5, 6, 0, 0, 112, 136, 248, 128, 112, 5, 5, 5, 6,
- 0, 0, 168, 168, 112, 168, 168, 5, 5, 5, 6, 0, 0, 240, 8, 48,
- 8, 240, 5, 5, 5, 6, 0, 0, 136, 152, 168, 200, 136, 5, 7, 7,
- 6, 0, 0, 80, 32, 136, 152, 168, 200, 136, 4, 5, 5, 6, 0, 0,
- 144, 160, 192, 160, 144, 5, 5, 5, 6, 0, 0, 248, 40, 40, 168, 72,
- 5, 5, 5, 6, 0, 0, 136, 216, 168, 136, 136, 5, 5, 5, 6, 0,
- 0, 136, 136, 248, 136, 136, 5, 5, 5, 6, 0, 0, 112, 136, 136, 136,
- 112, 5, 5, 5, 6, 0, 0, 248, 136, 136, 136, 136, 5, 6, 6, 6,
- 0, 255, 240, 136, 136, 240, 128, 128, 5, 5, 5, 6, 0, 0, 112, 128,
- 128, 136, 112, 5, 5, 5, 6, 0, 0, 248, 32, 32, 32, 32, 5, 6,
- 6, 6, 0, 255, 136, 136, 136, 120, 8, 112, 5, 6, 6, 6, 0, 0,
- 32, 112, 168, 168, 112, 32, 5, 5, 5, 6, 0, 0, 136, 80, 32, 80,
- 136, 5, 6, 6, 6, 0, 255, 136, 136, 136, 136, 248, 8, 5, 5, 5,
- 6, 0, 0, 136, 136, 248, 8, 8, 5, 5, 5, 6, 0, 0, 168, 168,
- 168, 168, 248, 5, 6, 6, 6, 0, 255, 168, 168, 168, 168, 248, 8, 5,
- 5, 5, 6, 0, 0, 192, 64, 112, 72, 112, 5, 5, 5, 6, 0, 0,
- 136, 136, 200, 168, 200, 3, 5, 5, 6, 1, 0, 128, 128, 192, 160, 192,
- 5, 5, 5, 6, 0, 0, 112, 136, 56, 136, 112, 5, 5, 5, 6, 0,
- 0, 144, 168, 232, 168, 144, 5, 5, 5, 6, 0, 0, 120, 136, 120, 40,
- 72, 5, 8, 8, 6, 0, 0, 64, 32, 0, 112, 136, 248, 128, 112, 5,
- 7, 7, 6, 0, 0, 80, 0, 112, 136, 248, 128, 112, 5, 9, 9, 6,
- 0, 255, 64, 224, 64, 64, 120, 72, 72, 72, 16, 5, 8, 8, 6, 0,
- 0, 16, 32, 0, 248, 136, 128, 128, 128, 5, 5, 5, 6, 0, 0, 112,
- 136, 96, 136, 112, 5, 5, 5, 6, 0, 0, 112, 128, 112, 8, 240, 1,
- 7, 7, 6, 2, 0, 128, 0, 128, 128, 128, 128, 128, 3, 7, 7, 6,
- 1, 0, 160, 0, 64, 64, 64, 64, 64, 3, 8, 8, 6, 1, 255, 32,
- 0, 32, 32, 32, 32, 160, 64, 5, 5, 5, 6, 0, 0, 160, 160, 184,
- 168, 184, 5, 5, 5, 6, 0, 0, 160, 160, 248, 168, 184, 5, 6, 6,
- 6, 0, 0, 64, 224, 64, 120, 72, 72, 4, 8, 8, 6, 0, 0, 16,
- 32, 0, 144, 160, 192, 160, 144, 5, 8, 8, 6, 0, 0, 64, 32, 0,
- 136, 152, 168, 200, 136, 5, 9, 9, 6, 0, 255, 80, 32, 0, 136, 136,
- 136, 120, 8, 112, 5, 6, 6, 6, 0, 255, 136, 136, 136, 136, 248, 32
-};
diff --git a/Marlin/dogm_font_data_ISO10646_CN.h b/Marlin/dogm_font_data_ISO10646_CN.h
deleted file mode 100644
index 11fdb22..0000000
--- a/Marlin/dogm_font_data_ISO10646_CN.h
+++ /dev/null
@@ -1,293 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- Fontname: ISO10646_CN
- Copyright: A. Hardtung, public domain
- Capital A Height: 7, '1' Height: 7
- Calculated Max Values w=11 h=11 x= 2 y=10 dx=12 dy= 0 ascent=10 len=22
- Font Bounding box w=12 h=11 x= 0 y=-2
- Calculated Min Values x= 0 y=-1 dx= 0 dy= 0
- Pure Font ascent = 7 descent=-1
- X Font ascent = 7 descent=-1
- Max Font ascent =10 descent=-1
-*/
-#include
-const u8g_fntpgm_uint8_t ISO10646_CN[4105] U8G_SECTION(".progmem.ISO10646_CN") = {
- 0, 12, 11, 0, 254, 7, 1, 146, 3, 33, 32, 255, 255, 10, 255, 7,
- 255, 0, 0, 0, 6, 0, 10, 1, 7, 7, 6, 2, 0, 128, 128, 128,
- 128, 128, 0, 128, 3, 2, 2, 6, 1, 5, 160, 160, 5, 7, 7, 6,
- 0, 0, 80, 80, 248, 80, 248, 80, 80, 5, 7, 7, 6, 0, 0, 32,
- 120, 160, 112, 40, 240, 32, 5, 7, 7, 6, 0, 0, 192, 200, 16, 32,
- 64, 152, 24, 5, 7, 7, 6, 0, 0, 96, 144, 160, 64, 168, 144, 104,
- 2, 3, 3, 6, 1, 4, 192, 64, 128, 3, 7, 7, 6, 1, 0, 32,
- 64, 128, 128, 128, 64, 32, 3, 7, 7, 6, 1, 0, 128, 64, 32, 32,
- 32, 64, 128, 5, 5, 5, 6, 0, 1, 32, 168, 112, 168, 32, 5, 5,
- 5, 6, 0, 1, 32, 32, 248, 32, 32, 2, 3, 3, 6, 2, 255, 192,
- 64, 128, 5, 1, 1, 6, 0, 3, 248, 2, 2, 2, 6, 2, 0, 192,
- 192, 5, 5, 5, 6, 0, 1, 8, 16, 32, 64, 128, 5, 7, 7, 6,
- 0, 0, 112, 136, 152, 168, 200, 136, 112, 3, 7, 7, 6, 1, 0, 64,
- 192, 64, 64, 64, 64, 224, 5, 7, 7, 6, 0, 0, 112, 136, 8, 112,
- 128, 128, 248, 5, 7, 7, 6, 0, 0, 248, 16, 32, 16, 8, 8, 240,
- 5, 7, 7, 6, 0, 0, 16, 48, 80, 144, 248, 16, 16, 5, 7, 7,
- 6, 0, 0, 248, 128, 240, 8, 8, 136, 112, 5, 7, 7, 6, 0, 0,
- 112, 128, 128, 240, 136, 136, 112, 5, 7, 7, 6, 0, 0, 248, 8, 16,
- 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 112, 136, 136, 112, 136, 136,
- 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 120, 8, 8, 112, 2, 5,
- 5, 6, 2, 0, 192, 192, 0, 192, 192, 2, 6, 6, 6, 2, 255, 192,
- 192, 0, 192, 64, 128, 4, 7, 7, 6, 0, 0, 16, 32, 64, 128, 64,
- 32, 16, 5, 3, 3, 6, 0, 2, 248, 0, 248, 4, 7, 7, 6, 0,
- 0, 128, 64, 32, 16, 32, 64, 128, 5, 7, 7, 6, 0, 0, 112, 136,
- 8, 16, 32, 0, 32, 5, 7, 7, 6, 0, 0, 112, 136, 8, 104, 168,
- 168, 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 248, 136, 136, 136, 5,
- 7, 7, 6, 0, 0, 240, 136, 136, 240, 136, 136, 240, 5, 7, 7, 6,
- 0, 0, 112, 136, 128, 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 240,
- 136, 136, 136, 136, 136, 240, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240,
- 128, 128, 248, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128, 128, 128,
- 5, 7, 7, 6, 0, 0, 112, 136, 128, 184, 136, 136, 112, 5, 7, 7,
- 6, 0, 0, 136, 136, 136, 248, 136, 136, 136, 1, 7, 7, 6, 2, 0,
- 128, 128, 128, 128, 128, 128, 128, 5, 7, 7, 6, 0, 0, 56, 16, 16,
- 16, 16, 144, 96, 5, 7, 7, 6, 0, 0, 136, 144, 160, 192, 160, 144,
- 136, 5, 7, 7, 6, 0, 0, 128, 128, 128, 128, 128, 128, 248, 5, 7,
- 7, 6, 0, 0, 136, 216, 168, 136, 136, 136, 136, 5, 7, 7, 6, 0,
- 0, 136, 136, 200, 168, 152, 136, 136, 5, 7, 7, 6, 0, 0, 112, 136,
- 136, 136, 136, 136, 112, 5, 7, 7, 6, 0, 0, 240, 136, 136, 240, 128,
- 128, 128, 5, 7, 7, 6, 0, 0, 112, 136, 136, 136, 168, 144, 104, 5,
- 7, 7, 6, 0, 0, 240, 136, 136, 240, 160, 144, 136, 5, 7, 7, 6,
- 0, 0, 120, 128, 128, 112, 8, 8, 240, 5, 7, 7, 6, 0, 0, 248,
- 32, 32, 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136,
- 136, 136, 112, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 80, 32,
- 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 168, 80, 5, 7, 7,
- 6, 0, 0, 136, 136, 80, 32, 80, 136, 136, 5, 7, 7, 6, 0, 0,
- 136, 136, 136, 80, 32, 32, 32, 5, 7, 7, 6, 0, 0, 248, 8, 16,
- 32, 64, 128, 248, 3, 7, 7, 6, 0, 0, 224, 128, 128, 128, 128, 128,
- 224, 5, 5, 5, 6, 0, 1, 128, 64, 32, 16, 8, 3, 7, 7, 6,
- 0, 0, 224, 32, 32, 32, 32, 32, 224, 5, 3, 3, 6, 0, 4, 32,
- 80, 136, 5, 1, 1, 6, 0, 0, 248, 2, 2, 2, 6, 2, 5, 128,
- 64, 5, 5, 5, 6, 0, 0, 112, 8, 120, 136, 120, 5, 7, 7, 6,
- 0, 0, 128, 128, 176, 200, 136, 136, 240, 5, 5, 5, 6, 0, 0, 112,
- 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 8, 8, 104, 152, 136, 136,
- 120, 5, 5, 5, 6, 0, 0, 112, 136, 248, 128, 112, 5, 7, 7, 6,
- 0, 0, 48, 72, 224, 64, 64, 64, 64, 5, 6, 6, 6, 0, 255, 112,
- 136, 136, 120, 8, 112, 5, 7, 7, 6, 0, 0, 128, 128, 176, 200, 136,
- 136, 136, 1, 7, 7, 6, 2, 0, 128, 0, 128, 128, 128, 128, 128, 3,
- 8, 8, 6, 1, 255, 32, 0, 32, 32, 32, 32, 160, 64, 4, 7, 7,
- 6, 1, 0, 128, 128, 144, 160, 192, 160, 144, 3, 7, 7, 6, 1, 0,
- 192, 64, 64, 64, 64, 64, 224, 5, 5, 5, 6, 0, 0, 208, 168, 168,
- 168, 168, 5, 5, 5, 6, 0, 0, 176, 200, 136, 136, 136, 5, 5, 5,
- 6, 0, 0, 112, 136, 136, 136, 112, 5, 6, 6, 6, 0, 255, 240, 136,
- 136, 240, 128, 128, 5, 6, 6, 6, 0, 255, 120, 136, 136, 120, 8, 8,
- 5, 5, 5, 6, 0, 0, 176, 200, 128, 128, 128, 5, 5, 5, 6, 0,
- 0, 112, 128, 112, 8, 240, 4, 7, 7, 6, 0, 0, 64, 64, 224, 64,
- 64, 64, 48, 5, 5, 5, 6, 0, 0, 136, 136, 136, 152, 104, 5, 5,
- 5, 6, 0, 0, 136, 136, 136, 80, 32, 5, 5, 5, 6, 0, 0, 136,
- 136, 168, 168, 80, 5, 5, 5, 6, 0, 0, 136, 80, 32, 80, 136, 5,
- 6, 6, 6, 0, 255, 136, 136, 136, 120, 8, 112, 5, 5, 5, 6, 0,
- 0, 248, 16, 32, 64, 248, 3, 7, 7, 6, 1, 0, 32, 64, 64, 128,
- 64, 64, 32, 1, 7, 7, 6, 2, 0, 128, 128, 128, 128, 128, 128, 128,
- 3, 7, 7, 6, 1, 0, 128, 64, 64, 32, 64, 64, 128, 5, 2, 2,
- 6, 0, 3, 104, 144, 0, 0, 0, 6, 0, 10, 0, 0, 0, 12, 0,
- 10, 0, 0, 0, 12, 0, 10, 0, 0, 0, 12, 0, 10, 0, 0, 0,
- 12, 0, 10, 0, 0, 0, 12, 0, 10, 0, 0, 0, 12, 0, 10, 0,
- 0, 0, 12, 0, 10, 0, 0, 0, 12, 0, 10, 0, 0, 0, 12, 0,
- 10, 0, 0, 0, 12, 0, 10, 0, 0, 0, 12, 0, 10, 0, 0, 0,
- 12, 0, 10, 0, 0, 0, 12, 0, 10, 0, 0, 0, 12, 0, 10, 0,
- 0, 0, 12, 0, 10, 0, 0, 0, 12, 0, 10, 0, 0, 0, 12, 0,
- 10, 0, 0, 0, 12, 0, 10, 0, 0, 0, 12, 0, 10, 0, 0, 0,
- 12, 0, 10, 0, 0, 0, 12, 0, 10, 0, 0, 0, 12, 0, 10, 0,
- 0, 0, 12, 0, 10, 0, 0, 0, 12, 0, 10, 0, 0, 0, 12, 0,
- 10, 0, 0, 0, 12, 0, 10, 0, 0, 0, 12, 0, 10, 0, 0, 0,
- 12, 0, 10, 0, 0, 0, 12, 0, 10, 11, 11, 22, 12, 0, 255, 255,
- 224, 2, 0, 2, 0, 4, 0, 13, 0, 20, 128, 36, 64, 196, 32, 4,
- 0, 4, 0, 4, 0, 11, 11, 22, 12, 0, 255, 249, 0, 138, 0, 171,
- 224, 172, 64, 170, 64, 170, 64, 170, 64, 170, 128, 33, 0, 82, 128, 140,
- 96, 11, 11, 22, 12, 0, 255, 36, 0, 36, 0, 63, 128, 68, 0, 132,
- 0, 4, 0, 255, 224, 10, 0, 17, 0, 32, 128, 192, 96, 11, 11, 22,
- 12, 0, 255, 36, 0, 36, 0, 63, 192, 68, 0, 4, 0, 255, 224, 9,
- 0, 9, 0, 17, 32, 33, 32, 64, 224, 11, 11, 22, 12, 0, 255, 32,
- 0, 61, 224, 81, 32, 145, 32, 17, 32, 255, 32, 17, 32, 41, 32, 37,
- 224, 69, 32, 128, 0, 11, 11, 22, 12, 0, 255, 32, 128, 127, 192, 8,
- 64, 255, 224, 17, 0, 32, 128, 95, 64, 128, 32, 63, 128, 0, 0, 127,
- 192, 11, 11, 22, 12, 0, 255, 34, 64, 71, 224, 148, 128, 228, 128, 47,
- 224, 68, 128, 244, 128, 7, 224, 52, 128, 196, 128, 7, 224, 11, 11, 22,
- 12, 0, 255, 4, 128, 143, 224, 73, 0, 25, 0, 47, 192, 9, 0, 9,
- 0, 47, 192, 73, 0, 137, 0, 15, 224, 11, 11, 22, 12, 0, 255, 16,
- 0, 63, 128, 81, 0, 14, 0, 49, 128, 192, 96, 63, 128, 36, 128, 63,
- 128, 36, 128, 63, 128, 11, 11, 22, 12, 0, 255, 34, 128, 250, 64, 7,
- 224, 250, 128, 138, 128, 138, 128, 250, 128, 34, 128, 178, 128, 170, 160, 100,
- 224, 11, 11, 22, 12, 0, 255, 34, 32, 71, 64, 146, 128, 239, 224, 34,
- 0, 71, 192, 236, 64, 7, 192, 52, 64, 199, 192, 4, 64, 11, 11, 22,
- 12, 0, 255, 8, 0, 15, 192, 8, 0, 8, 0, 255, 224, 8, 0, 14,
- 0, 9, 128, 8, 64, 8, 0, 8, 0, 10, 11, 22, 12, 0, 255, 255,
- 128, 0, 128, 0, 128, 128, 128, 128, 128, 255, 128, 128, 0, 128, 0, 128,
- 64, 128, 64, 127, 192, 11, 11, 22, 12, 0, 255, 71, 192, 65, 0, 239,
- 224, 65, 0, 69, 0, 105, 96, 201, 32, 77, 96, 73, 32, 79, 224, 200,
- 32, 11, 11, 22, 12, 0, 255, 8, 0, 4, 0, 4, 0, 10, 0, 10,
- 0, 10, 0, 17, 0, 17, 0, 32, 128, 64, 64, 128, 32, 11, 11, 22,
- 12, 0, 255, 34, 64, 34, 0, 247, 224, 34, 0, 35, 224, 53, 32, 229,
- 32, 37, 64, 40, 128, 41, 64, 114, 32, 11, 10, 20, 12, 0, 0, 68,
- 64, 68, 64, 68, 64, 127, 192, 4, 0, 4, 0, 132, 32, 132, 32, 132,
- 32, 255, 224, 11, 11, 22, 12, 0, 255, 4, 0, 0, 0, 127, 192, 4,
- 0, 4, 0, 4, 0, 127, 192, 4, 0, 4, 0, 4, 0, 255, 224, 11,
- 11, 22, 12, 0, 255, 255, 224, 17, 0, 1, 192, 254, 0, 72, 128, 37,
- 0, 4, 0, 255, 224, 21, 0, 36, 128, 196, 96, 11, 11, 22, 12, 0,
- 255, 17, 0, 127, 192, 68, 64, 127, 192, 68, 64, 127, 192, 4, 0, 255,
- 224, 4, 0, 4, 0, 4, 0, 9, 11, 22, 12, 0, 255, 16, 0, 255,
- 128, 128, 128, 128, 128, 255, 128, 128, 128, 128, 128, 255, 128, 128, 128, 128,
- 128, 255, 128, 11, 11, 22, 12, 0, 255, 113, 0, 1, 0, 3, 224, 249,
- 32, 33, 32, 65, 32, 81, 32, 137, 32, 250, 32, 2, 32, 4, 192, 11,
- 11, 22, 12, 0, 255, 127, 192, 17, 0, 17, 0, 17, 0, 17, 0, 255,
- 224, 17, 0, 17, 0, 33, 0, 33, 0, 65, 0, 11, 11, 22, 12, 0,
- 255, 33, 0, 34, 0, 244, 64, 87, 224, 80, 32, 87, 192, 148, 64, 84,
- 64, 36, 64, 87, 192, 148, 64, 11, 11, 22, 12, 0, 255, 17, 0, 10,
- 0, 127, 192, 4, 0, 4, 0, 255, 224, 4, 0, 10, 0, 17, 0, 32,
- 128, 192, 96, 10, 11, 22, 12, 0, 255, 95, 192, 0, 64, 132, 64, 132,
- 64, 191, 64, 132, 64, 140, 64, 148, 64, 164, 64, 140, 64, 129, 192, 11,
- 11, 22, 12, 0, 255, 36, 0, 39, 192, 36, 0, 36, 0, 255, 224, 0,
- 0, 20, 64, 36, 128, 71, 0, 12, 0, 112, 0, 11, 11, 22, 12, 0,
- 255, 36, 128, 4, 128, 15, 192, 228, 128, 36, 128, 63, 224, 36, 128, 36,
- 128, 40, 128, 80, 0, 143, 224, 11, 11, 22, 12, 0, 255, 8, 0, 8,
- 0, 255, 128, 136, 128, 136, 128, 255, 128, 136, 128, 136, 128, 255, 160, 136,
- 32, 7, 224, 11, 11, 22, 12, 0, 255, 39, 128, 36, 128, 244, 128, 36,
- 128, 116, 128, 108, 128, 164, 128, 36, 128, 36, 160, 40, 160, 48, 96, 10,
- 11, 22, 12, 0, 255, 255, 192, 128, 64, 128, 64, 158, 64, 146, 64, 146,
- 64, 158, 64, 128, 64, 128, 64, 255, 192, 128, 64, 11, 11, 22, 12, 0,
- 255, 127, 192, 68, 0, 95, 192, 80, 64, 95, 192, 80, 64, 95, 192, 66,
- 0, 74, 128, 82, 64, 166, 32, 11, 11, 22, 12, 0, 255, 4, 0, 7,
- 224, 4, 0, 127, 192, 64, 64, 64, 64, 64, 64, 127, 192, 0, 0, 82,
- 64, 137, 32, 11, 11, 22, 12, 0, 255, 71, 128, 36, 128, 4, 128, 4,
- 128, 232, 96, 32, 0, 47, 192, 36, 64, 34, 128, 49, 0, 38, 192, 11,
- 11, 22, 12, 0, 255, 127, 192, 74, 64, 127, 192, 4, 0, 255, 224, 4,
- 0, 63, 128, 32, 128, 36, 128, 36, 128, 255, 224, 11, 11, 22, 12, 0,
- 255, 34, 0, 79, 224, 72, 32, 79, 224, 200, 0, 79, 224, 74, 160, 90,
- 160, 111, 224, 74, 160, 72, 96, 11, 11, 22, 12, 0, 255, 243, 192, 36,
- 64, 42, 128, 241, 0, 34, 128, 101, 224, 114, 32, 165, 64, 32, 128, 35,
- 0, 44, 0, 11, 11, 22, 12, 0, 255, 4, 0, 255, 224, 128, 32, 0,
- 0, 255, 224, 4, 0, 36, 0, 39, 192, 36, 0, 84, 0, 143, 224, 11,
- 11, 22, 12, 0, 255, 115, 224, 16, 128, 81, 0, 35, 224, 250, 32, 42,
- 160, 34, 160, 34, 160, 32, 128, 33, 64, 98, 32, 11, 11, 22, 12, 0,
- 255, 34, 0, 247, 128, 34, 128, 54, 128, 226, 160, 37, 160, 36, 96, 104,
- 32, 0, 0, 82, 64, 137, 32, 11, 11, 22, 12, 0, 255, 115, 192, 66,
- 0, 66, 0, 123, 224, 74, 64, 74, 64, 122, 64, 74, 64, 66, 64, 68,
- 64, 136, 64, 11, 11, 22, 12, 0, 255, 8, 0, 255, 224, 8, 0, 31,
- 192, 48, 64, 95, 192, 144, 64, 31, 192, 16, 64, 16, 64, 16, 192, 11,
- 11, 22, 12, 0, 255, 2, 0, 127, 224, 66, 0, 66, 0, 95, 192, 66,
- 0, 71, 0, 74, 128, 82, 64, 98, 32, 130, 0, 11, 11, 22, 12, 0,
- 255, 243, 192, 150, 64, 145, 128, 166, 96, 161, 0, 151, 192, 145, 0, 149,
- 0, 231, 224, 129, 0, 129, 0, 11, 11, 22, 12, 0, 255, 15, 128, 136,
- 128, 79, 128, 8, 128, 143, 128, 64, 0, 31, 192, 53, 64, 85, 64, 149,
- 64, 63, 224, 11, 11, 22, 12, 0, 255, 39, 224, 32, 128, 248, 128, 32,
- 128, 32, 128, 56, 128, 224, 128, 32, 128, 32, 128, 32, 128, 97, 128, 11,
- 11, 22, 12, 0, 255, 31, 224, 145, 0, 87, 192, 20, 64, 23, 192, 148,
- 64, 87, 192, 17, 0, 85, 64, 153, 32, 35, 0, 11, 11, 22, 12, 0,
- 255, 32, 128, 39, 224, 242, 64, 33, 128, 34, 64, 52, 32, 226, 64, 34,
- 64, 34, 64, 34, 64, 100, 64, 11, 11, 22, 12, 0, 255, 65, 0, 65,
- 0, 79, 224, 233, 32, 73, 32, 73, 32, 111, 224, 201, 32, 73, 32, 73,
- 32, 207, 224, 11, 11, 22, 12, 0, 255, 33, 0, 241, 0, 79, 224, 169,
- 32, 249, 32, 47, 224, 57, 32, 233, 32, 41, 32, 47, 224, 40, 32, 11,
- 11, 22, 12, 0, 255, 143, 224, 73, 32, 9, 32, 203, 160, 73, 32, 79,
- 224, 72, 32, 75, 160, 74, 160, 107, 160, 80, 224, 11, 11, 22, 12, 0,
- 255, 127, 192, 4, 0, 68, 64, 36, 64, 36, 128, 4, 0, 255, 224, 4,
- 0, 4, 0, 4, 0, 4, 0, 11, 11, 22, 12, 0, 255, 130, 0, 66,
- 0, 31, 224, 194, 0, 95, 192, 82, 64, 95, 192, 71, 0, 74, 128, 82,
- 64, 191, 224, 11, 11, 22, 12, 0, 255, 4, 0, 127, 224, 72, 128, 127,
- 224, 72, 128, 79, 128, 64, 0, 95, 192, 72, 64, 71, 128, 152, 96, 11,
- 11, 22, 12, 0, 255, 1, 0, 239, 224, 161, 0, 164, 64, 175, 224, 164,
- 64, 175, 224, 169, 32, 233, 32, 2, 128, 12, 96, 11, 11, 22, 12, 0,
- 255, 20, 192, 246, 160, 188, 96, 167, 128, 168, 128, 191, 224, 169, 32, 239,
- 224, 9, 32, 15, 224, 9, 32, 11, 11, 22, 12, 0, 255, 127, 128, 64,
- 128, 66, 128, 98, 128, 84, 128, 72, 128, 72, 128, 84, 160, 98, 160, 64,
- 96, 128, 32, 11, 11, 22, 12, 0, 255, 4, 0, 127, 224, 64, 32, 127,
- 224, 64, 0, 125, 224, 84, 32, 76, 160, 84, 96, 100, 160, 141, 96, 11,
- 11, 22, 12, 0, 255, 130, 0, 95, 224, 4, 0, 8, 64, 159, 224, 64,
- 32, 10, 128, 10, 128, 74, 160, 146, 160, 34, 96, 11, 11, 22, 12, 0,
- 255, 65, 0, 79, 224, 232, 32, 66, 128, 68, 64, 104, 32, 199, 192, 65,
- 0, 65, 0, 65, 0, 207, 224, 11, 11, 22, 12, 0, 255, 80, 32, 125,
- 32, 145, 32, 255, 32, 17, 32, 125, 32, 85, 32, 85, 32, 84, 32, 92,
- 32, 16, 224, 11, 11, 22, 12, 0, 255, 63, 128, 32, 128, 63, 128, 32,
- 128, 255, 224, 72, 0, 123, 192, 73, 64, 121, 64, 72, 128, 251, 96, 11,
- 11, 22, 12, 0, 255, 4, 0, 4, 0, 4, 0, 36, 128, 36, 64, 68,
- 64, 68, 32, 132, 32, 4, 0, 4, 0, 28, 0, 11, 11, 22, 12, 0,
- 255, 4, 0, 4, 0, 4, 0, 255, 224, 4, 0, 10, 0, 10, 0, 17,
- 0, 17, 0, 32, 128, 192, 96, 9, 10, 20, 10, 0, 0, 136, 128, 73,
- 0, 8, 0, 255, 128, 0, 128, 0, 128, 127, 128, 0, 128, 0, 128, 255,
- 128, 11, 11, 22, 12, 0, 255, 33, 0, 18, 0, 255, 224, 0, 0, 120,
- 128, 74, 128, 122, 128, 74, 128, 122, 128, 72, 128, 89, 128, 11, 11, 22,
- 12, 0, 255, 39, 192, 0, 0, 0, 0, 239, 224, 33, 0, 34, 0, 36,
- 64, 47, 224, 32, 32, 80, 0, 143, 224, 11, 11, 22, 12, 0, 255, 32,
- 128, 39, 0, 249, 0, 33, 192, 119, 0, 33, 0, 249, 224, 39, 0, 113,
- 32, 169, 32, 32, 224, 11, 11, 22, 12, 0, 255, 16, 64, 16, 64, 253,
- 224, 16, 64, 56, 192, 53, 64, 82, 64, 148, 64, 16, 64, 16, 64, 16,
- 192, 11, 11, 22, 12, 0, 255, 0, 64, 248, 64, 11, 224, 8, 64, 136,
- 64, 82, 64, 81, 64, 33, 64, 80, 64, 72, 64, 137, 192, 10, 11, 22,
- 12, 0, 255, 132, 0, 132, 64, 132, 128, 245, 0, 134, 0, 132, 0, 132,
- 0, 148, 0, 164, 64, 196, 64, 131, 192, 11, 11, 22, 12, 0, 255, 17,
- 32, 125, 0, 17, 0, 255, 224, 41, 0, 253, 64, 73, 64, 124, 128, 8,
- 160, 253, 96, 10, 32, 11, 11, 22, 12, 0, 255, 23, 192, 36, 64, 36,
- 64, 103, 192, 161, 0, 47, 224, 33, 0, 35, 128, 37, 64, 41, 32, 33,
- 0, 11, 11, 22, 12, 0, 255, 8, 0, 255, 224, 16, 0, 39, 192, 32,
- 128, 97, 0, 175, 224, 33, 0, 33, 0, 33, 0, 35, 0, 11, 11, 22,
- 12, 0, 255, 36, 0, 47, 224, 180, 0, 164, 128, 164, 160, 170, 192, 42,
- 128, 40, 128, 41, 64, 50, 64, 36, 32, 11, 11, 22, 12, 0, 255, 127,
- 224, 128, 0, 63, 192, 32, 64, 63, 192, 16, 0, 31, 192, 16, 64, 40,
- 128, 71, 0, 56, 224, 11, 11, 22, 12, 0, 255, 127, 224, 64, 0, 64,
- 0, 64, 0, 64, 0, 64, 0, 64, 0, 64, 0, 64, 0, 64, 0, 128,
- 0, 11, 11, 22, 12, 0, 255, 255, 224, 4, 0, 127, 192, 68, 64, 127,
- 192, 68, 64, 127, 192, 68, 0, 36, 0, 24, 0, 231, 224, 11, 11, 22,
- 12, 0, 255, 17, 224, 253, 0, 69, 0, 41, 224, 253, 64, 17, 64, 125,
- 64, 17, 64, 85, 64, 146, 64, 52, 64, 11, 11, 22, 12, 0, 255, 33,
- 0, 95, 224, 64, 0, 207, 192, 64, 0, 79, 192, 64, 0, 79, 192, 72,
- 64, 79, 192, 72, 64, 11, 11, 22, 12, 0, 255, 4, 0, 127, 192, 64,
- 64, 127, 192, 64, 64, 127, 192, 64, 64, 127, 192, 4, 64, 82, 32, 191,
- 160, 11, 11, 22, 12, 0, 255, 127, 192, 68, 64, 127, 192, 68, 64, 127,
- 192, 4, 0, 27, 0, 224, 224, 17, 0, 17, 0, 97, 0, 11, 11, 22,
- 12, 0, 255, 255, 224, 4, 0, 8, 0, 127, 224, 73, 32, 79, 32, 73,
- 32, 79, 32, 73, 32, 73, 32, 127, 224, 11, 11, 22, 12, 0, 255, 253,
- 224, 86, 64, 121, 64, 56, 128, 85, 64, 146, 32, 255, 224, 4, 0, 39,
- 192, 36, 0, 255, 224, 11, 11, 22, 12, 0, 255, 251, 128, 82, 0, 123,
- 224, 18, 64, 250, 64, 20, 64, 63, 128, 32, 128, 63, 128, 32, 128, 63,
- 128, 11, 11, 22, 12, 0, 255, 31, 224, 32, 0, 39, 192, 100, 64, 167,
- 192, 32, 0, 47, 224, 40, 32, 39, 192, 33, 0, 35, 0, 11, 11, 22,
- 12, 0, 255, 243, 224, 130, 32, 130, 32, 250, 32, 130, 32, 130, 32, 138,
- 32, 178, 32, 194, 224, 2, 0, 2, 0, 11, 11, 22, 12, 0, 255, 36,
- 128, 70, 160, 149, 192, 228, 128, 39, 224, 68, 128, 245, 192, 6, 160, 52,
- 128, 196, 128, 7, 224, 11, 11, 22, 12, 0, 255, 39, 192, 65, 0, 135,
- 224, 224, 32, 34, 128, 69, 128, 242, 128, 15, 224, 48, 128, 193, 64, 2,
- 32, 11, 11, 22, 12, 0, 255, 2, 0, 2, 0, 34, 0, 35, 192, 34,
- 0, 34, 0, 34, 0, 34, 0, 34, 0, 34, 0, 255, 224, 9, 11, 22,
- 12, 0, 255, 8, 0, 8, 0, 255, 128, 136, 128, 136, 128, 136, 128, 255,
- 128, 136, 128, 136, 128, 136, 128, 255, 128, 11, 11, 22, 12, 0, 255, 33,
- 0, 83, 160, 65, 0, 247, 224, 81, 0, 83, 192, 86, 64, 83, 192, 90,
- 64, 83, 192, 66, 64, 11, 11, 22, 12, 0, 255, 127, 192, 4, 0, 4,
- 0, 4, 0, 255, 224, 10, 0, 10, 0, 18, 0, 34, 32, 66, 32, 129,
- 224, 11, 11, 22, 12, 0, 255, 17, 0, 33, 0, 47, 224, 97, 0, 163,
- 128, 35, 128, 37, 64, 37, 64, 41, 32, 33, 0, 33, 0, 11, 11, 22,
- 12, 0, 255, 247, 224, 148, 32, 244, 32, 151, 224, 148, 128, 244, 128, 151,
- 224, 148, 128, 244, 160, 150, 96, 4, 32, 11, 11, 22, 12, 0, 255, 123,
- 224, 148, 128, 4, 0, 127, 192, 4, 0, 255, 224, 1, 0, 255, 224, 33,
- 0, 17, 0, 7, 0, 11, 11, 22, 12, 0, 255, 33, 0, 71, 192, 145,
- 0, 47, 224, 96, 128, 175, 224, 32, 128, 36, 128, 34, 128, 32, 128, 35,
- 128, 11, 11, 22, 12, 0, 255, 39, 192, 36, 64, 247, 192, 46, 224, 42,
- 160, 62, 224, 225, 0, 47, 224, 35, 128, 37, 64, 105, 32, 11, 11, 22,
- 12, 0, 255, 20, 0, 39, 224, 42, 0, 98, 0, 163, 192, 34, 0, 34,
- 0, 35, 224, 34, 0, 34, 0, 34, 0
-};
diff --git a/Marlin/dogm_font_data_ISO10646_Greek.h b/Marlin/dogm_font_data_ISO10646_Greek.h
deleted file mode 100644
index 0abb08d..0000000
--- a/Marlin/dogm_font_data_ISO10646_Greek.h
+++ /dev/null
@@ -1,206 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/*
- Fontname: ISO10646_4_Greek
- Copyright: A. Hardtung, public domain
- Capital A Height: 7, '1' Height: 7
- Calculated Max Values w= 5 h=10 x= 2 y= 6 dx= 6 dy= 0 ascent= 8 len=10
- Font Bounding box w= 6 h= 9 x= 0 y=-2
- Calculated Min Values x= 0 y=-2 dx= 0 dy= 0
- Pure Font ascent = 7 descent=-1
- X Font ascent = 7 descent=-1
- Max Font ascent = 8 descent=-2
-*/
-#include
-const u8g_fntpgm_uint8_t ISO10646_Greek_5x7[2728] U8G_SECTION(".progmem.ISO10646_Greek_5x7") = {
- 0,6,9,0,254,7,1,145,3,32,32,255,255,8,254,7,
- 255,0,0,0,6,0,0,1,7,7,6,2,0,128,128,128,
- 128,128,0,128,3,2,2,6,1,5,160,160,5,7,7,6,
- 0,0,80,80,248,80,248,80,80,5,7,7,6,0,0,32,
- 120,160,112,40,240,32,5,7,7,6,0,0,192,200,16,32,
- 64,152,24,5,7,7,6,0,0,96,144,160,64,168,144,104,
- 2,3,3,6,1,4,192,64,128,3,7,7,6,1,0,32,
- 64,128,128,128,64,32,3,7,7,6,1,0,128,64,32,32,
- 32,64,128,5,5,5,6,0,1,32,168,112,168,32,5,5,
- 5,6,0,1,32,32,248,32,32,2,3,3,6,2,255,192,
- 64,128,5,1,1,6,0,3,248,2,2,2,6,2,0,192,
- 192,5,5,5,6,0,1,8,16,32,64,128,5,7,7,6,
- 0,0,112,136,152,168,200,136,112,3,7,7,6,1,0,64,
- 192,64,64,64,64,224,5,7,7,6,0,0,112,136,8,112,
- 128,128,248,5,7,7,6,0,0,248,16,32,16,8,8,240,
- 5,7,7,6,0,0,16,48,80,144,248,16,16,5,7,7,
- 6,0,0,248,128,240,8,8,136,112,5,7,7,6,0,0,
- 48,64,128,240,136,136,112,5,7,7,6,0,0,248,8,16,
- 32,32,32,32,5,7,7,6,0,0,112,136,136,112,136,136,
- 112,5,7,7,6,0,0,112,136,136,120,8,16,96,2,5,
- 5,6,2,0,192,192,0,192,192,2,6,6,6,2,255,192,
- 192,0,192,64,128,4,7,7,6,0,0,16,32,64,128,64,
- 32,16,5,3,3,6,0,2,248,0,248,4,7,7,6,1,
- 0,128,64,32,16,32,64,128,5,7,7,6,0,0,112,136,
- 8,16,32,0,32,5,6,6,6,0,0,112,136,8,104,168,
- 112,5,7,7,6,0,0,112,136,136,248,136,136,136,5,7,
- 7,6,0,0,240,136,136,240,136,136,240,5,7,7,6,0,
- 0,112,136,128,128,128,136,112,5,7,7,6,0,0,224,144,
- 136,136,136,144,224,5,7,7,6,0,0,248,128,128,240,128,
- 128,248,5,7,7,6,0,0,248,128,128,240,128,128,128,5,
- 7,7,6,0,0,112,136,128,184,136,136,112,5,7,7,6,
- 0,0,136,136,136,248,136,136,136,1,7,7,6,2,0,128,
- 128,128,128,128,128,128,5,7,7,6,0,0,56,16,16,16,
- 16,144,96,5,7,7,6,0,0,136,144,160,192,160,144,136,
- 5,7,7,6,0,0,128,128,128,128,128,128,248,5,7,7,
- 6,0,0,136,216,168,136,136,136,136,5,7,7,6,0,0,
- 136,136,200,168,152,136,136,5,7,7,6,0,0,112,136,136,
- 136,136,136,112,5,7,7,6,0,0,240,136,136,240,128,128,
- 128,5,7,7,6,0,0,112,136,136,136,168,144,104,5,7,
- 7,6,0,0,240,136,136,240,160,144,136,5,7,7,6,0,
- 0,120,128,128,112,8,8,240,5,7,7,6,0,0,248,32,
- 32,32,32,32,32,5,7,7,6,0,0,136,136,136,136,136,
- 136,112,5,7,7,6,0,0,136,136,136,136,136,80,32,5,
- 7,7,6,0,0,136,136,136,136,136,168,80,5,7,7,6,
- 0,0,136,136,80,32,80,136,136,5,7,7,6,0,0,136,
- 136,136,80,32,32,32,5,7,7,6,0,0,248,8,16,32,
- 64,128,248,3,7,7,6,1,0,224,128,128,128,128,128,224,
- 5,5,5,6,0,1,128,64,32,16,8,3,7,7,6,1,
- 0,224,32,32,32,32,32,224,5,3,3,6,0,4,32,80,
- 136,5,1,1,6,0,0,248,2,2,2,6,2,5,128,64,
- 5,5,5,6,0,0,112,8,120,136,120,5,7,7,6,0,
- 0,128,128,176,200,136,136,240,5,5,5,6,0,0,112,128,
- 128,136,112,5,7,7,6,0,0,8,8,104,152,136,136,120,
- 5,5,5,6,0,0,112,136,248,128,112,5,7,7,6,0,
- 0,48,72,224,64,64,64,64,5,6,6,6,0,255,112,136,
- 136,120,8,112,5,7,7,6,0,0,128,128,176,200,136,136,
- 136,1,7,7,6,2,0,128,0,128,128,128,128,128,3,8,
- 8,6,1,255,32,0,32,32,32,32,160,64,4,7,7,6,
- 0,0,128,128,144,160,192,160,144,3,7,7,6,1,0,192,
- 64,64,64,64,64,224,5,5,5,6,0,0,208,168,168,168,
- 168,5,5,5,6,0,0,176,200,136,136,136,5,5,5,6,
- 0,0,112,136,136,136,112,5,6,6,6,0,255,240,136,136,
- 240,128,128,5,6,6,6,0,255,120,136,136,120,8,8,5,
- 5,5,6,0,0,176,200,128,128,128,5,5,5,6,0,0,
- 112,128,112,8,240,5,7,7,6,0,0,64,64,224,64,64,
- 72,48,5,5,5,6,0,0,136,136,136,152,104,5,5,5,
- 6,0,0,136,136,136,80,32,5,5,5,6,0,0,136,136,
- 168,168,80,5,5,5,6,0,0,136,80,32,80,136,5,6,
- 6,6,0,255,136,136,136,120,8,112,5,5,5,6,0,0,
- 248,16,32,64,248,3,7,7,6,1,0,32,64,64,128,64,
- 64,32,1,7,7,6,2,0,128,128,128,128,128,128,128,3,
- 7,7,6,1,0,128,64,64,32,64,64,128,5,2,2,6,
- 0,3,104,144,0,0,0,6,0,0,0,0,0,6,0,0,
- 0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,
- 0,0,2,2,2,6,1,6,64,128,3,3,3,6,1,5,
- 32,64,160,5,8,8,6,0,0,64,160,80,80,136,248,136,
- 136,2,2,2,6,1,2,192,192,5,8,8,6,0,0,64,
- 128,248,128,240,128,128,248,5,8,8,6,0,0,64,128,136,
- 136,248,136,136,136,4,8,8,6,0,0,64,128,112,32,32,
- 32,32,112,0,0,0,6,0,0,5,8,8,6,0,0,64,
- 128,112,136,136,136,136,112,0,0,0,6,0,0,5,8,8,
- 6,0,0,64,128,8,136,112,32,32,32,5,8,8,6,0,
- 0,64,128,112,136,136,136,80,216,3,8,8,6,1,0,32,
- 64,160,0,64,64,64,32,5,7,7,6,0,0,32,80,136,
- 136,248,136,136,5,7,7,6,0,0,240,72,72,112,72,72,
- 240,5,7,7,6,0,0,248,128,128,128,128,128,128,5,6,
- 6,6,0,0,32,80,80,136,136,248,5,7,7,6,0,0,
- 248,128,128,240,128,128,248,5,7,7,6,0,0,248,8,16,
- 32,64,128,248,5,7,7,6,0,0,136,136,136,248,136,136,
- 136,5,7,7,6,0,0,112,136,136,168,136,136,112,3,7,
- 7,6,1,0,224,64,64,64,64,64,224,5,7,7,6,0,
- 0,136,144,160,192,160,144,136,5,7,7,6,0,0,32,80,
- 136,136,136,136,136,5,7,7,6,0,0,136,216,168,168,136,
- 136,136,5,7,7,6,0,0,136,200,200,168,152,152,136,5,
- 7,7,6,0,0,248,0,0,112,0,0,248,5,7,7,6,
- 0,0,112,136,136,136,136,136,112,5,7,7,6,0,0,248,
- 80,80,80,80,80,80,5,7,7,6,0,0,240,136,136,240,
- 128,128,128,0,0,0,6,0,0,5,7,7,6,0,0,248,
- 128,64,32,64,128,248,5,7,7,6,0,0,248,32,32,32,
- 32,32,32,5,7,7,6,0,0,136,136,80,32,32,32,32,
- 5,7,7,6,0,0,112,32,112,168,112,32,112,5,7,7,
- 6,0,0,136,136,80,32,80,136,136,5,7,7,6,0,0,
- 168,168,168,168,112,32,32,5,6,6,6,0,0,112,136,136,
- 80,80,216,3,8,8,6,1,0,160,0,224,64,64,64,64,
- 224,5,8,8,6,0,0,80,0,136,136,136,80,32,32,5,
- 8,8,6,0,0,32,64,8,104,152,144,144,104,5,8,8,
- 6,0,0,32,64,0,112,136,224,136,112,5,10,10,6,0,
- 254,32,64,0,112,136,136,136,136,8,8,2,8,8,6,1,
- 0,64,128,0,128,128,128,128,64,5,8,8,6,0,0,16,
- 32,80,0,136,136,136,112,5,6,6,6,0,0,8,104,152,
- 144,144,104,4,7,7,6,0,254,96,144,240,144,224,128,128,
- 5,6,6,6,0,255,136,72,80,32,32,64,5,6,6,6,
- 0,0,48,64,112,136,136,112,5,5,5,6,0,0,112,136,
- 224,136,112,5,9,9,6,0,254,128,112,64,128,128,128,112,
- 8,112,5,7,7,6,0,254,184,200,136,136,136,8,8,5,
- 5,5,6,0,0,112,136,248,136,112,3,5,5,6,1,0,
- 128,128,128,128,96,4,5,5,6,0,0,144,160,192,160,144,
- 5,6,6,6,0,0,64,32,32,80,80,136,5,7,7,6,
- 0,254,136,136,136,216,168,128,128,5,5,5,6,0,0,136,
- 136,80,96,32,5,10,10,6,0,254,128,224,128,112,32,64,
- 128,112,8,112,5,5,5,6,0,0,112,136,136,136,112,5,
- 5,5,6,0,0,248,80,80,80,80,5,7,7,6,0,254,
- 112,136,136,200,176,128,128,5,7,7,6,0,254,48,64,128,
- 64,48,8,112,5,5,5,6,0,0,104,144,144,144,96,4,
- 5,5,6,0,0,240,64,64,64,48,5,5,5,6,0,0,
- 136,136,144,144,224,5,8,8,6,0,254,48,168,168,168,168,
- 112,32,32,5,6,6,6,0,255,136,80,32,32,80,136,5,
- 7,7,6,0,254,168,168,168,168,112,32,32,5,5,5,6,
- 0,0,80,136,136,168,112,4,7,7,6,0,0,160,0,64,
- 64,64,64,48,5,7,7,6,0,0,80,0,136,136,144,144,
- 224,4,8,8,6,0,0,32,64,0,96,144,144,144,96,5,
- 8,8,6,0,0,32,64,0,136,136,144,144,96,5,8,8,
- 6,0,0,32,64,0,80,136,136,168,112,5,7,7,6,0,
- 255,144,160,192,160,144,136,16,5,8,8,6,0,0,96,144,
- 160,128,240,136,136,112,5,7,7,6,0,0,112,80,56,144,
- 144,144,96,5,6,6,6,0,0,152,80,32,32,32,32,5,
- 8,8,6,0,0,64,128,152,80,32,32,32,32,5,8,8,
- 6,0,0,80,0,152,80,32,32,32,32,5,7,7,6,0,
- 255,48,168,168,168,168,112,32,5,5,5,6,0,0,248,80,
- 80,80,88,5,6,6,6,0,255,136,80,112,80,136,16,5,
- 7,7,6,0,255,112,136,136,136,112,32,112,5,6,6,6,
- 0,255,112,136,136,112,32,112,5,6,6,6,0,0,112,136,
- 128,112,32,112,5,7,7,6,0,254,8,112,128,128,112,16,
- 96,5,6,6,6,0,0,248,128,128,240,128,128,4,5,5,
- 6,0,0,240,128,224,128,128,5,6,6,6,0,0,248,0,
- 0,112,0,248,4,5,5,6,0,0,64,128,240,16,32,5,
- 7,7,6,0,0,224,80,40,40,8,8,16,5,7,7,6,
- 0,0,192,32,80,40,8,8,8,5,8,8,6,0,254,168,
- 168,168,168,168,88,8,112,5,7,7,6,0,254,168,168,168,
- 168,88,8,112,5,6,6,6,0,0,104,136,136,120,8,8,
- 5,6,6,6,0,255,104,136,136,120,8,8,4,8,8,6,
- 0,254,128,224,144,144,144,144,32,192,5,5,5,6,0,0,
- 104,144,112,16,224,5,6,6,6,0,0,96,144,16,96,136,
- 112,4,6,6,6,0,0,96,144,16,96,128,112,5,6,6,
- 6,0,0,136,80,32,80,136,248,5,5,5,6,0,0,136,
- 80,32,80,112,5,6,6,6,0,0,120,128,240,136,136,112,
- 4,5,5,6,0,0,240,128,224,144,96,3,6,6,6,1,
- 0,64,224,64,64,64,64,3,6,6,6,1,255,64,224,64,
- 64,64,128,5,5,5,6,0,0,136,80,112,80,136,5,7,
- 7,6,0,254,112,136,136,136,240,128,112,4,5,5,6,0,
- 0,112,128,128,128,112,2,8,8,6,1,255,64,0,192,64,
- 64,64,64,128,5,7,7,6,0,0,112,136,136,248,136,136,
- 112,4,5,5,6,0,0,112,128,224,128,112,4,5,5,6,
- 0,0,224,16,112,16,224,5,7,7,6,0,0,128,240,136,
- 136,136,240,128,4,7,7,6,0,255,128,224,144,144,144,224,
- 128,5,6,6,6,0,0,112,136,128,128,136,112,5,6,6,
- 6,0,0,136,216,168,136,136,136,5,7,7,6,0,254,136,
- 216,168,136,136,128,128,5,8,8,6,0,254,112,136,136,136,
- 112,64,224,64,5,6,6,6,0,0,112,136,8,8,136,112,
- 5,6,6,6,0,0,112,136,160,128,136,112,5,6,6,6,
- 0,0,112,136,40,8,136,112};
diff --git a/Marlin/dogm_font_data_ISO10646_Kana.h b/Marlin/dogm_font_data_ISO10646_Kana.h
deleted file mode 100644
index 6968374..0000000
--- a/Marlin/dogm_font_data_ISO10646_Kana.h
+++ /dev/null
@@ -1,192 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- Fontname: ISO10646_Kana
- Copyright: A. Hardtung, public domain
- Capital A Height: 7, '1' Height: 7
- Calculated Max Values w= 5 h= 8 x= 2 y= 5 dx= 6 dy= 0 ascent= 8 len= 8
- Font Bounding box w= 6 h= 9 x= 0 y=-2
- Calculated Min Values x= 0 y=-1 dx= 0 dy= 0
- Pure Font ascent = 7 descent=-1
- X Font ascent = 7 descent=-1
- Max Font ascent = 8 descent=-1
-*/
-#include
-const u8g_fntpgm_uint8_t ISO10646_Kana_5x7[2482] U8G_SECTION(".progmem.ISO10646_Kana_5x7") = {
- 0, 6, 9, 0, 254, 7, 1, 145, 3, 32, 32, 255, 255, 8, 255, 7,
- 255, 0, 0, 0, 6, 0, 0, 1, 7, 7, 6, 2, 0, 128, 128, 128,
- 128, 128, 0, 128, 3, 2, 2, 6, 1, 5, 160, 160, 5, 7, 7, 6,
- 0, 0, 80, 80, 248, 80, 248, 80, 80, 5, 7, 7, 6, 0, 0, 32,
- 120, 160, 112, 40, 240, 32, 5, 7, 7, 6, 0, 0, 192, 200, 16, 32,
- 64, 152, 24, 5, 7, 7, 6, 0, 0, 96, 144, 160, 64, 168, 144, 104,
- 2, 3, 3, 6, 1, 4, 192, 64, 128, 3, 7, 7, 6, 1, 0, 32,
- 64, 128, 128, 128, 64, 32, 3, 7, 7, 6, 1, 0, 128, 64, 32, 32,
- 32, 64, 128, 5, 5, 5, 6, 0, 1, 32, 168, 112, 168, 32, 5, 5,
- 5, 6, 0, 1, 32, 32, 248, 32, 32, 2, 3, 3, 6, 2, 255, 192,
- 64, 128, 5, 1, 1, 6, 0, 3, 248, 2, 2, 2, 6, 2, 0, 192,
- 192, 5, 5, 5, 6, 0, 1, 8, 16, 32, 64, 128, 5, 7, 7, 6,
- 0, 0, 112, 136, 152, 168, 200, 136, 112, 3, 7, 7, 6, 1, 0, 64,
- 192, 64, 64, 64, 64, 224, 5, 7, 7, 6, 0, 0, 112, 136, 8, 112,
- 128, 128, 248, 5, 7, 7, 6, 0, 0, 248, 16, 32, 16, 8, 8, 240,
- 5, 7, 7, 6, 0, 0, 16, 48, 80, 144, 248, 16, 16, 5, 7, 7,
- 6, 0, 0, 248, 128, 240, 8, 8, 136, 112, 5, 7, 7, 6, 0, 0,
- 48, 64, 128, 240, 136, 136, 112, 5, 7, 7, 6, 0, 0, 248, 8, 16,
- 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 112, 136, 136, 112, 136, 136,
- 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 120, 8, 16, 96, 2, 5,
- 5, 6, 2, 0, 192, 192, 0, 192, 192, 2, 6, 6, 6, 2, 255, 192,
- 192, 0, 192, 64, 128, 4, 7, 7, 6, 0, 0, 16, 32, 64, 128, 64,
- 32, 16, 5, 3, 3, 6, 0, 2, 248, 0, 248, 4, 7, 7, 6, 1,
- 0, 128, 64, 32, 16, 32, 64, 128, 5, 7, 7, 6, 0, 0, 112, 136,
- 8, 16, 32, 0, 32, 5, 6, 6, 6, 0, 0, 112, 136, 8, 104, 168,
- 112, 5, 7, 7, 6, 0, 0, 112, 136, 136, 248, 136, 136, 136, 5, 7,
- 7, 6, 0, 0, 240, 136, 136, 240, 136, 136, 240, 5, 7, 7, 6, 0,
- 0, 112, 136, 128, 128, 128, 136, 112, 5, 7, 7, 6, 0, 0, 224, 144,
- 136, 136, 136, 144, 224, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128,
- 128, 248, 5, 7, 7, 6, 0, 0, 248, 128, 128, 240, 128, 128, 128, 5,
- 7, 7, 6, 0, 0, 112, 136, 128, 184, 136, 136, 112, 5, 7, 7, 6,
- 0, 0, 136, 136, 136, 248, 136, 136, 136, 1, 7, 7, 6, 2, 0, 128,
- 128, 128, 128, 128, 128, 128, 5, 7, 7, 6, 0, 0, 56, 16, 16, 16,
- 16, 144, 96, 5, 7, 7, 6, 0, 0, 136, 144, 160, 192, 160, 144, 136,
- 5, 7, 7, 6, 0, 0, 128, 128, 128, 128, 128, 128, 248, 5, 7, 7,
- 6, 0, 0, 136, 216, 168, 136, 136, 136, 136, 5, 7, 7, 6, 0, 0,
- 136, 136, 200, 168, 152, 136, 136, 5, 7, 7, 6, 0, 0, 112, 136, 136,
- 136, 136, 136, 112, 5, 7, 7, 6, 0, 0, 240, 136, 136, 240, 128, 128,
- 128, 5, 7, 7, 6, 0, 0, 112, 136, 136, 136, 168, 144, 104, 5, 7,
- 7, 6, 0, 0, 240, 136, 136, 240, 160, 144, 136, 5, 7, 7, 6, 0,
- 0, 120, 128, 128, 112, 8, 8, 240, 5, 7, 7, 6, 0, 0, 248, 32,
- 32, 32, 32, 32, 32, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136,
- 136, 112, 5, 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 80, 32, 5,
- 7, 7, 6, 0, 0, 136, 136, 136, 136, 136, 168, 80, 5, 7, 7, 6,
- 0, 0, 136, 136, 80, 32, 80, 136, 136, 5, 7, 7, 6, 0, 0, 136,
- 136, 136, 80, 32, 32, 32, 5, 7, 7, 6, 0, 0, 248, 8, 16, 32,
- 64, 128, 248, 3, 7, 7, 6, 1, 0, 224, 128, 128, 128, 128, 128, 224,
- 5, 5, 5, 6, 0, 1, 128, 64, 32, 16, 8, 3, 7, 7, 6, 1,
- 0, 224, 32, 32, 32, 32, 32, 224, 5, 3, 3, 6, 0, 4, 32, 80,
- 136, 5, 1, 1, 6, 0, 0, 248, 2, 2, 2, 6, 2, 5, 128, 64,
- 5, 5, 5, 6, 0, 0, 112, 8, 120, 136, 120, 5, 7, 7, 6, 0,
- 0, 128, 128, 176, 200, 136, 136, 240, 5, 5, 5, 6, 0, 0, 112, 128,
- 128, 136, 112, 5, 7, 7, 6, 0, 0, 8, 8, 104, 152, 136, 136, 120,
- 5, 5, 5, 6, 0, 0, 112, 136, 248, 128, 112, 5, 7, 7, 6, 0,
- 0, 48, 72, 224, 64, 64, 64, 64, 5, 6, 6, 6, 0, 255, 112, 136,
- 136, 120, 8, 112, 5, 7, 7, 6, 0, 0, 128, 128, 176, 200, 136, 136,
- 136, 1, 7, 7, 6, 2, 0, 128, 0, 128, 128, 128, 128, 128, 3, 8,
- 8, 6, 1, 255, 32, 0, 32, 32, 32, 32, 160, 64, 4, 7, 7, 6,
- 0, 0, 128, 128, 144, 160, 192, 160, 144, 3, 7, 7, 6, 1, 0, 192,
- 64, 64, 64, 64, 64, 224, 5, 5, 5, 6, 0, 0, 208, 168, 168, 168,
- 168, 5, 5, 5, 6, 0, 0, 176, 200, 136, 136, 136, 5, 5, 5, 6,
- 0, 0, 112, 136, 136, 136, 112, 5, 6, 6, 6, 0, 255, 240, 136, 136,
- 240, 128, 128, 5, 6, 6, 6, 0, 255, 120, 136, 136, 120, 8, 8, 5,
- 5, 5, 6, 0, 0, 176, 200, 128, 128, 128, 5, 5, 5, 6, 0, 0,
- 112, 128, 112, 8, 240, 5, 7, 7, 6, 0, 0, 64, 64, 224, 64, 64,
- 72, 48, 5, 5, 5, 6, 0, 0, 136, 136, 136, 152, 104, 5, 5, 5,
- 6, 0, 0, 136, 136, 136, 80, 32, 5, 5, 5, 6, 0, 0, 136, 136,
- 168, 168, 80, 5, 5, 5, 6, 0, 0, 136, 80, 32, 80, 136, 5, 6,
- 6, 6, 0, 255, 136, 136, 136, 120, 8, 112, 5, 5, 5, 6, 0, 0,
- 248, 16, 32, 64, 248, 3, 7, 7, 6, 1, 0, 32, 64, 64, 128, 64,
- 64, 32, 1, 7, 7, 6, 2, 0, 128, 128, 128, 128, 128, 128, 128, 3,
- 7, 7, 6, 1, 0, 128, 64, 64, 32, 64, 64, 128, 5, 2, 2, 6,
- 0, 3, 104, 144, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
- 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
- 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
- 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
- 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
- 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
- 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0,
- 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
- 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 5, 3, 3, 6, 0, 1,
- 248, 0, 248, 4, 4, 4, 6, 0, 0, 240, 16, 96, 64, 5, 6, 6,
- 6, 0, 0, 248, 8, 40, 48, 32, 64, 3, 4, 4, 6, 1, 0, 32,
- 64, 192, 64, 4, 6, 6, 6, 0, 0, 16, 32, 96, 160, 32, 32, 4,
- 4, 4, 6, 0, 0, 32, 240, 144, 32, 5, 6, 6, 6, 0, 0, 32,
- 248, 136, 8, 16, 32, 3, 4, 4, 6, 1, 0, 224, 64, 64, 224, 5,
- 5, 5, 6, 0, 0, 248, 32, 32, 32, 248, 4, 4, 4, 6, 0, 0,
- 32, 240, 96, 160, 5, 6, 6, 6, 0, 0, 16, 248, 48, 80, 144, 16,
- 5, 6, 6, 6, 0, 0, 64, 248, 72, 72, 72, 144, 5, 8, 8, 6,
- 0, 0, 40, 0, 64, 248, 72, 72, 72, 144, 5, 6, 6, 6, 0, 0,
- 32, 248, 32, 248, 32, 32, 5, 8, 8, 6, 0, 0, 40, 0, 32, 248,
- 32, 248, 32, 32, 4, 5, 5, 6, 0, 0, 112, 144, 16, 32, 192, 5,
- 7, 7, 6, 0, 0, 40, 0, 112, 144, 16, 32, 192, 5, 6, 6, 6,
- 0, 0, 64, 120, 144, 16, 16, 32, 5, 8, 8, 6, 0, 0, 40, 0,
- 64, 120, 144, 16, 16, 32, 5, 5, 5, 6, 0, 0, 248, 8, 8, 8,
- 248, 5, 7, 7, 6, 0, 0, 40, 0, 248, 8, 8, 8, 248, 5, 6,
- 6, 6, 0, 0, 80, 248, 80, 16, 32, 64, 5, 8, 8, 6, 0, 0,
- 40, 0, 80, 248, 80, 16, 32, 64, 5, 5, 5, 6, 0, 0, 192, 8,
- 200, 16, 224, 5, 7, 7, 6, 0, 0, 40, 0, 192, 8, 200, 16, 224,
- 5, 5, 5, 6, 0, 0, 248, 16, 32, 80, 136, 5, 7, 7, 6, 0,
- 0, 40, 0, 248, 16, 32, 80, 136, 5, 6, 6, 6, 0, 0, 64, 248,
- 72, 80, 64, 56, 5, 8, 8, 6, 0, 0, 40, 0, 64, 248, 72, 80,
- 64, 56, 5, 5, 5, 6, 0, 0, 136, 136, 72, 16, 96, 5, 7, 7,
- 6, 0, 0, 40, 0, 136, 136, 72, 16, 96, 5, 5, 5, 6, 0, 0,
- 120, 72, 168, 16, 96, 5, 7, 7, 6, 0, 0, 40, 0, 120, 72, 168,
- 16, 96, 5, 6, 6, 6, 0, 0, 16, 224, 32, 248, 32, 64, 5, 8,
- 8, 6, 0, 0, 40, 0, 16, 224, 32, 248, 32, 64, 5, 4, 4, 6,
- 0, 0, 168, 168, 8, 48, 5, 5, 5, 6, 0, 0, 168, 168, 8, 16,
- 32, 5, 7, 7, 6, 0, 0, 40, 0, 168, 168, 8, 16, 32, 5, 6,
- 6, 6, 0, 0, 112, 0, 248, 32, 32, 64, 5, 8, 8, 6, 0, 0,
- 40, 0, 112, 0, 248, 32, 32, 64, 3, 6, 6, 6, 1, 0, 128, 128,
- 192, 160, 128, 128, 4, 8, 8, 6, 1, 0, 80, 0, 128, 128, 192, 160,
- 128, 128, 5, 6, 6, 6, 0, 0, 32, 248, 32, 32, 64, 128, 5, 5,
- 5, 6, 0, 0, 112, 0, 0, 0, 248, 5, 5, 5, 6, 0, 0, 248,
- 8, 80, 32, 208, 5, 6, 6, 6, 0, 0, 32, 248, 16, 32, 112, 168,
- 3, 6, 6, 6, 1, 0, 32, 32, 32, 32, 64, 128, 5, 5, 5, 6,
- 0, 0, 16, 136, 136, 136, 136, 5, 7, 7, 6, 0, 0, 40, 0, 16,
- 136, 136, 136, 136, 5, 8, 8, 6, 0, 0, 24, 24, 0, 16, 136, 136,
- 136, 136, 5, 6, 6, 6, 0, 0, 128, 128, 248, 128, 128, 120, 5, 7,
- 7, 6, 0, 0, 40, 128, 128, 248, 128, 128, 120, 5, 7, 7, 6, 0,
- 0, 24, 152, 128, 248, 128, 128, 120, 5, 5, 5, 6, 0, 0, 248, 8,
- 8, 16, 96, 5, 7, 7, 6, 0, 0, 40, 0, 248, 8, 8, 16, 96,
- 5, 8, 8, 6, 0, 0, 24, 24, 0, 248, 8, 8, 16, 96, 5, 4,
- 4, 6, 0, 1, 64, 160, 16, 8, 5, 6, 6, 6, 0, 1, 40, 0,
- 64, 160, 16, 8, 5, 6, 6, 6, 0, 1, 24, 24, 64, 160, 16, 8,
- 5, 6, 6, 6, 0, 0, 32, 248, 32, 168, 168, 32, 5, 8, 8, 6,
- 0, 0, 40, 0, 32, 248, 32, 168, 168, 32, 5, 8, 8, 6, 0, 0,
- 24, 24, 32, 248, 32, 168, 168, 32, 5, 5, 5, 6, 0, 0, 248, 8,
- 80, 32, 16, 4, 5, 5, 6, 1, 0, 224, 0, 224, 0, 240, 5, 5,
- 5, 6, 0, 0, 32, 64, 136, 248, 8, 5, 5, 5, 6, 0, 0, 8,
- 40, 16, 40, 192, 5, 5, 5, 6, 0, 0, 248, 64, 248, 64, 56, 5,
- 4, 4, 6, 0, 0, 64, 248, 80, 64, 5, 6, 6, 6, 0, 0, 64,
- 248, 72, 80, 64, 64, 4, 4, 4, 6, 0, 0, 96, 32, 32, 240, 5,
- 5, 5, 6, 0, 0, 112, 16, 16, 16, 248, 4, 5, 5, 6, 0, 0,
- 240, 16, 240, 16, 240, 5, 5, 5, 6, 0, 0, 248, 8, 248, 8, 248,
- 5, 6, 6, 6, 0, 0, 112, 0, 248, 8, 16, 32, 4, 6, 6, 6,
- 0, 0, 144, 144, 144, 144, 16, 32, 5, 5, 5, 6, 0, 0, 32, 160,
- 168, 168, 176, 4, 5, 5, 6, 0, 0, 128, 128, 144, 160, 192, 5, 5,
- 5, 6, 0, 0, 248, 136, 136, 136, 248, 4, 4, 4, 6, 0, 0, 240,
- 144, 16, 32, 5, 5, 5, 6, 0, 0, 248, 136, 8, 16, 32, 5, 6,
- 6, 6, 0, 0, 16, 248, 80, 80, 248, 16, 5, 5, 5, 6, 0, 0,
- 248, 8, 48, 32, 248, 5, 5, 5, 6, 0, 0, 248, 8, 248, 8, 48,
- 5, 5, 5, 6, 0, 0, 192, 8, 8, 16, 224, 5, 8, 8, 6, 0,
- 0, 40, 0, 32, 248, 136, 8, 16, 32, 4, 4, 4, 6, 0, 0, 64,
- 240, 80, 160, 4, 4, 4, 6, 0, 0, 64, 240, 32, 64, 5, 7, 7,
- 6, 0, 0, 40, 0, 248, 136, 8, 16, 96, 5, 8, 8, 6, 0, 0,
- 40, 0, 16, 248, 80, 80, 248, 16, 5, 7, 7, 6, 0, 0, 40, 0,
- 248, 8, 48, 32, 248, 5, 7, 7, 6, 0, 0, 40, 0, 248, 8, 248,
- 8, 48, 2, 2, 2, 6, 2, 2, 192, 192, 5, 1, 1, 6, 0, 2,
- 248, 5, 4, 4, 6, 0, 1, 128, 96, 16, 8, 5, 5, 5, 6, 0,
- 1, 40, 128, 96, 16, 8, 5, 6, 6, 6, 0, 0, 248, 8, 8, 8,
- 8, 8
-};
diff --git a/Marlin/dogm_font_data_Marlin_symbols.h b/Marlin/dogm_font_data_Marlin_symbols.h
deleted file mode 100644
index ad9b983..0000000
--- a/Marlin/dogm_font_data_Marlin_symbols.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- Fontname: Marlin_symbols
- Copyright: Created with Fony 1.4.7
- Capital A Height: 0, '1' Height: 0
- Calculated Max Values w= 5 h=10 x= 0 y= 3 dx= 6 dy= 0 ascent= 8 len=10
- Font Bounding box w= 6 h= 9 x= 0 y=-2
- Calculated Min Values x= 0 y=-2 dx= 0 dy= 0
- Pure Font ascent = 0 descent= 0
- X Font ascent = 0 descent= 0
- Max Font ascent = 8 descent=-2
-*/
-#include
-const u8g_fntpgm_uint8_t Marlin_symbols[140] U8G_SECTION(".progmem.Marlin_symbols") = {
- 0, 6, 9, 0, 254, 0, 0, 0, 0, 0, 1, 9, 0, 8, 254, 0,
- 0, 5, 8, 8, 6, 0, 0, 64, 240, 200, 136, 136, 152, 120, 16, 5,
- 8, 8, 6, 0, 0, 192, 248, 136, 136, 136, 136, 136, 248, 5, 5, 5,
- 6, 0, 1, 32, 48, 248, 48, 32, 5, 8, 8, 6, 0, 0, 32, 112,
- 248, 32, 32, 32, 32, 224, 5, 9, 9, 6, 0, 255, 32, 112, 168, 168,
- 184, 136, 136, 112, 32, 5, 9, 9, 6, 0, 255, 224, 128, 192, 176, 168,
- 40, 48, 40, 40, 5, 9, 9, 6, 0, 255, 248, 168, 136, 136, 136, 136,
- 136, 168, 248, 5, 10, 10, 6, 0, 254, 32, 80, 80, 80, 80, 136, 168,
- 168, 136, 112, 3, 3, 3, 6, 0, 3, 64, 160, 64
-};
diff --git a/Marlin/duration_t.h b/Marlin/duration_t.h
deleted file mode 100644
index 25ea9bb..0000000
--- a/Marlin/duration_t.h
+++ /dev/null
@@ -1,155 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-#ifndef __DURATION_T__
-#define __DURATION_T__
-
-struct duration_t {
- /**
- * @brief Duration is stored in seconds
- */
- uint32_t value;
-
- /**
- * @brief Constructor
- */
- duration_t()
- : duration_t(0) {};
-
- /**
- * @brief Constructor
- *
- * @param seconds The number of seconds
- */
- duration_t(uint32_t const &seconds) {
- this->value = seconds;
- }
-
- /**
- * @brief Equality comparison
- * @details Overloads the equality comparison operator
- *
- * @param value The number of seconds to compare to
- * @return True if both durations are equal
- */
- bool operator==(const uint32_t &value) const {
- return (this->value == value);
- }
-
- /**
- * @brief Inequality comparison
- * @details Overloads the inequality comparison operator
- *
- * @param value The number of seconds to compare to
- * @return False if both durations are equal
- */
- bool operator!=(const uint32_t &value) const {
- return ! this->operator==(value);
- }
-
- /**
- * @brief Formats the duration as years
- * @return The number of years
- */
- inline uint8_t year() const {
- return this->day() / 365;
- }
-
- /**
- * @brief Formats the duration as days
- * @return The number of days
- */
- inline uint16_t day() const {
- return this->hour() / 24;
- }
-
- /**
- * @brief Formats the duration as hours
- * @return The number of hours
- */
- inline uint32_t hour() const {
- return this->minute() / 60;
- }
-
- /**
- * @brief Formats the duration as minutes
- * @return The number of minutes
- */
- inline uint32_t minute() const {
- return this->second() / 60;
- }
-
- /**
- * @brief Formats the duration as seconds
- * @return The number of seconds
- */
- inline uint32_t second() const {
- return this->value;
- }
-
- /**
- * @brief Formats the duration as a string
- * @details String will be formated using a "full" representation of duration
- *
- * @param buffer The array pointed to must be able to accommodate 21 bytes
- *
- * Output examples:
- * 123456789012345678901 (strlen)
- * 135y 364d 23h 59m 59s
- * 364d 23h 59m 59s
- * 23h 59m 59s
- * 59m 59s
- * 59s
- */
- void toString(char *buffer) const {
- int y = this->year(),
- d = this->day() % 365,
- h = this->hour() % 24,
- m = this->minute() % 60,
- s = this->second() % 60;
-
- if (y) sprintf_P(buffer, PSTR("%iy %id %ih %im %is"), y, d, h, m, s);
- else if (d) sprintf_P(buffer, PSTR("%id %ih %im %is"), d, h, m, s);
- else if (h) sprintf_P(buffer, PSTR("%ih %im %is"), h, m, s);
- else if (m) sprintf_P(buffer, PSTR("%im %is"), m, s);
- else sprintf_P(buffer, PSTR("%is"), s);
- }
-
- /**
- * @brief Formats the duration as a string
- * @details String will be formated using a "digital" representation of duration
- *
- * @param buffer The array pointed to must be able to accommodate 10 bytes
- *
- * Output examples:
- * 1234567890 (strlen)
- * 1193046:59
- */
- void toDigital(char *buffer) const {
- int h = this->hour() % 24,
- m = this->minute() % 60;
-
- sprintf_P(buffer, PSTR("%02i:%02i"), h, m);
- }
-};
-
-#endif // __DURATION_T__
diff --git a/Marlin/endstops.cpp b/Marlin/endstops.cpp
deleted file mode 100644
index 6cee905..0000000
--- a/Marlin/endstops.cpp
+++ /dev/null
@@ -1,382 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * endstops.cpp - A singleton object to manage endstops
- */
-
-#include "Marlin.h"
-#include "cardreader.h"
-#include "endstops.h"
-#include "temperature.h"
-#include "stepper.h"
-#include "ultralcd.h"
-
-// TEST_ENDSTOP: test the old and the current status of an endstop
-#define TEST_ENDSTOP(ENDSTOP) (TEST(current_endstop_bits & old_endstop_bits, ENDSTOP))
-
-Endstops endstops;
-
-// public:
-
-bool Endstops::enabled = true,
- Endstops::enabled_globally =
- #if ENABLED(ENDSTOPS_ALWAYS_ON_DEFAULT)
- (true)
- #else
- (false)
- #endif
- ;
-volatile char Endstops::endstop_hit_bits; // use X_MIN, Y_MIN, Z_MIN and Z_MIN_PROBE as BIT value
-
-#if ENABLED(Z_DUAL_ENDSTOPS)
- uint16_t
-#else
- byte
-#endif
- Endstops::current_endstop_bits = 0,
- Endstops::old_endstop_bits = 0;
-
-#if HAS_BED_PROBE
- volatile bool Endstops::z_probe_enabled = false;
-#endif
-
-/**
- * Class and Instance Methods
- */
-
-void Endstops::init() {
-
- #if HAS_X_MIN
- SET_INPUT(X_MIN_PIN);
- #if ENABLED(ENDSTOPPULLUP_XMIN)
- WRITE(X_MIN_PIN,HIGH);
- #endif
- #endif
-
- #if HAS_Y_MIN
- SET_INPUT(Y_MIN_PIN);
- #if ENABLED(ENDSTOPPULLUP_YMIN)
- WRITE(Y_MIN_PIN,HIGH);
- #endif
- #endif
-
- #if HAS_Z_MIN
- SET_INPUT(Z_MIN_PIN);
- #if ENABLED(ENDSTOPPULLUP_ZMIN)
- WRITE(Z_MIN_PIN,HIGH);
- #endif
- #endif
-
- #if HAS_Z2_MIN
- SET_INPUT(Z2_MIN_PIN);
- #if ENABLED(ENDSTOPPULLUP_ZMIN)
- WRITE(Z2_MIN_PIN,HIGH);
- #endif
- #endif
-
- #if HAS_X_MAX
- SET_INPUT(X_MAX_PIN);
- #if ENABLED(ENDSTOPPULLUP_XMAX)
- WRITE(X_MAX_PIN,HIGH);
- #endif
- #endif
-
- #if HAS_Y_MAX
- SET_INPUT(Y_MAX_PIN);
- #if ENABLED(ENDSTOPPULLUP_YMAX)
- WRITE(Y_MAX_PIN,HIGH);
- #endif
- #endif
-
- #if HAS_Z_MAX
- SET_INPUT(Z_MAX_PIN);
- #if ENABLED(ENDSTOPPULLUP_ZMAX)
- WRITE(Z_MAX_PIN,HIGH);
- #endif
- #endif
-
- #if HAS_Z2_MAX
- SET_INPUT(Z2_MAX_PIN);
- #if ENABLED(ENDSTOPPULLUP_ZMAX)
- WRITE(Z2_MAX_PIN,HIGH);
- #endif
- #endif
-
- #if HAS_Z_MIN_PROBE_PIN && ENABLED(Z_MIN_PROBE_ENDSTOP) // Check for Z_MIN_PROBE_ENDSTOP so we don't pull a pin high unless it's to be used.
- SET_INPUT(Z_MIN_PROBE_PIN);
- #if ENABLED(ENDSTOPPULLUP_ZMIN_PROBE)
- WRITE(Z_MIN_PROBE_PIN,HIGH);
- #endif
- #endif
-
-} // Endstops::init
-
-void Endstops::report_state() {
- if (endstop_hit_bits) {
- #if ENABLED(ULTRA_LCD)
- char chrX = ' ', chrY = ' ', chrZ = ' ', chrP = ' ';
- #define _SET_STOP_CHAR(A,C) (chr## A = C)
- #else
- #define _SET_STOP_CHAR(A,C) ;
- #endif
-
- #define _ENDSTOP_HIT_ECHO(A,C) do{ \
- SERIAL_ECHOPAIR(" " STRINGIFY(A) ":", stepper.triggered_position_mm(A ##_AXIS)); \
- _SET_STOP_CHAR(A,C); }while(0)
-
- #define _ENDSTOP_HIT_TEST(A,C) \
- if (TEST(endstop_hit_bits, A ##_MIN) || TEST(endstop_hit_bits, A ##_MAX)) \
- _ENDSTOP_HIT_ECHO(A,C)
-
- SERIAL_ECHO_START;
- SERIAL_ECHOPGM(MSG_ENDSTOPS_HIT);
- _ENDSTOP_HIT_TEST(X, 'X');
- _ENDSTOP_HIT_TEST(Y, 'Y');
- _ENDSTOP_HIT_TEST(Z, 'Z');
-
- #if ENABLED(Z_MIN_PROBE_ENDSTOP)
- #define P_AXIS Z_AXIS
- if (TEST(endstop_hit_bits, Z_MIN_PROBE)) _ENDSTOP_HIT_ECHO(P, 'P');
- #endif
- SERIAL_EOL;
-
- #if ENABLED(ULTRA_LCD)
- char msg[3 * strlen(MSG_LCD_ENDSTOPS) + 8 + 1]; // Room for a UTF 8 string
- sprintf_P(msg, PSTR(MSG_LCD_ENDSTOPS " %c %c %c %c"), chrX, chrY, chrZ, chrP);
- lcd_setstatus(msg);
- #endif
-
- hit_on_purpose();
-
- #if ENABLED(ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED) && ENABLED(SDSUPPORT)
- if (stepper.abort_on_endstop_hit) {
- card.sdprinting = false;
- card.closefile();
- quickstop_stepper();
- thermalManager.disable_all_heaters(); // switch off all heaters.
- }
- #endif
- }
-} // Endstops::report_state
-
-void Endstops::M119() {
- SERIAL_PROTOCOLLNPGM(MSG_M119_REPORT);
- #if HAS_X_MIN
- SERIAL_PROTOCOLPGM(MSG_X_MIN);
- SERIAL_PROTOCOLLN(((READ(X_MIN_PIN)^X_MIN_ENDSTOP_INVERTING) ? MSG_ENDSTOP_HIT : MSG_ENDSTOP_OPEN));
- #endif
- #if HAS_X_MAX
- SERIAL_PROTOCOLPGM(MSG_X_MAX);
- SERIAL_PROTOCOLLN(((READ(X_MAX_PIN)^X_MAX_ENDSTOP_INVERTING) ? MSG_ENDSTOP_HIT : MSG_ENDSTOP_OPEN));
- #endif
- #if HAS_Y_MIN
- SERIAL_PROTOCOLPGM(MSG_Y_MIN);
- SERIAL_PROTOCOLLN(((READ(Y_MIN_PIN)^Y_MIN_ENDSTOP_INVERTING) ? MSG_ENDSTOP_HIT : MSG_ENDSTOP_OPEN));
- #endif
- #if HAS_Y_MAX
- SERIAL_PROTOCOLPGM(MSG_Y_MAX);
- SERIAL_PROTOCOLLN(((READ(Y_MAX_PIN)^Y_MAX_ENDSTOP_INVERTING) ? MSG_ENDSTOP_HIT : MSG_ENDSTOP_OPEN));
- #endif
- #if HAS_Z_MIN
- SERIAL_PROTOCOLPGM(MSG_Z_MIN);
- SERIAL_PROTOCOLLN(((READ(Z_MIN_PIN)^Z_MIN_ENDSTOP_INVERTING) ? MSG_ENDSTOP_HIT : MSG_ENDSTOP_OPEN));
- #endif
- #if HAS_Z_MAX
- SERIAL_PROTOCOLPGM(MSG_Z_MAX);
- SERIAL_PROTOCOLLN(((READ(Z_MAX_PIN)^Z_MAX_ENDSTOP_INVERTING) ? MSG_ENDSTOP_HIT : MSG_ENDSTOP_OPEN));
- #endif
- #if HAS_Z2_MAX
- SERIAL_PROTOCOLPGM(MSG_Z2_MAX);
- SERIAL_PROTOCOLLN(((READ(Z2_MAX_PIN)^Z2_MAX_ENDSTOP_INVERTING) ? MSG_ENDSTOP_HIT : MSG_ENDSTOP_OPEN));
- #endif
- #if HAS_Z_MIN_PROBE_PIN
- SERIAL_PROTOCOLPGM(MSG_Z_PROBE);
- SERIAL_PROTOCOLLN(((READ(Z_MIN_PROBE_PIN)^Z_MIN_PROBE_ENDSTOP_INVERTING) ? MSG_ENDSTOP_HIT : MSG_ENDSTOP_OPEN));
- #endif
-} // Endstops::M119
-
-#if ENABLED(Z_DUAL_ENDSTOPS)
-
- // Pass the result of the endstop test
- void Endstops::test_dual_z_endstops(EndstopEnum es1, EndstopEnum es2) {
- byte z_test = TEST_ENDSTOP(es1) | (TEST_ENDSTOP(es2) << 1); // bit 0 for Z, bit 1 for Z2
- if (stepper.current_block->steps[Z_AXIS] > 0) {
- stepper.endstop_triggered(Z_AXIS);
- SBI(endstop_hit_bits, Z_MIN);
- if (!stepper.performing_homing || (z_test == 0x3)) //if not performing home or if both endstops were trigged during homing...
- stepper.kill_current_block();
- }
- }
-
-#endif
-
-// Check endstops - Called from ISR!
-void Endstops::update() {
-
- #ifdef UARM_SWIFT
- return;
- #endif
-
- #define _ENDSTOP_PIN(AXIS, MINMAX) AXIS ##_## MINMAX ##_PIN
- #define _ENDSTOP_INVERTING(AXIS, MINMAX) AXIS ##_## MINMAX ##_ENDSTOP_INVERTING
- #define _ENDSTOP_HIT(AXIS) SBI(endstop_hit_bits, _ENDSTOP(AXIS, MIN))
- #define _ENDSTOP(AXIS, MINMAX) AXIS ##_## MINMAX
-
- // UPDATE_ENDSTOP_BIT: set the current endstop bits for an endstop to its status
- #define UPDATE_ENDSTOP_BIT(AXIS, MINMAX) SET_BIT(current_endstop_bits, _ENDSTOP(AXIS, MINMAX), (READ(_ENDSTOP_PIN(AXIS, MINMAX)) != _ENDSTOP_INVERTING(AXIS, MINMAX)))
- // COPY_BIT: copy the value of COPY_BIT to BIT in bits
- #define COPY_BIT(bits, COPY_BIT, BIT) SET_BIT(bits, BIT, TEST(bits, COPY_BIT))
-
- #define UPDATE_ENDSTOP(AXIS,MINMAX) do { \
- UPDATE_ENDSTOP_BIT(AXIS, MINMAX); \
- if (TEST_ENDSTOP(_ENDSTOP(AXIS, MINMAX)) && stepper.current_block->steps[_AXIS(AXIS)] > 0) { \
- _ENDSTOP_HIT(AXIS); \
- stepper.endstop_triggered(_AXIS(AXIS)); \
- } \
- } while(0)
-
- #if ENABLED(COREXY) || ENABLED(COREXZ)
- // Head direction in -X axis for CoreXY and CoreXZ bots.
- // If DeltaA == -DeltaB, the movement is only in Y or Z axis
- if ((stepper.current_block->steps[CORE_AXIS_1] != stepper.current_block->steps[CORE_AXIS_2]) || (stepper.motor_direction(CORE_AXIS_1) == stepper.motor_direction(CORE_AXIS_2))) {
- if (stepper.motor_direction(X_HEAD))
- #else
- if (stepper.motor_direction(X_AXIS)) // stepping along -X axis (regular Cartesian bot)
- #endif
- { // -direction
- #if ENABLED(DUAL_X_CARRIAGE)
- // with 2 x-carriages, endstops are only checked in the homing direction for the active extruder
- if ((stepper.current_block->active_extruder == 0 && X_HOME_DIR == -1) || (stepper.current_block->active_extruder != 0 && X2_HOME_DIR == -1))
- #endif
- {
- #if HAS_X_MIN
- UPDATE_ENDSTOP(X, MIN);
- #endif
- }
- }
- else { // +direction
- #if ENABLED(DUAL_X_CARRIAGE)
- // with 2 x-carriages, endstops are only checked in the homing direction for the active extruder
- if ((stepper.current_block->active_extruder == 0 && X_HOME_DIR == 1) || (stepper.current_block->active_extruder != 0 && X2_HOME_DIR == 1))
- #endif
- {
- #if HAS_X_MAX
- UPDATE_ENDSTOP(X, MAX);
- #endif
- }
- }
- #if ENABLED(COREXY) || ENABLED(COREXZ)
- }
- #endif
-
- #if ENABLED(COREXY) || ENABLED(COREYZ)
- // Head direction in -Y axis for CoreXY / CoreYZ bots.
- // If DeltaA == DeltaB, the movement is only in X or Y axis
- if ((stepper.current_block->steps[CORE_AXIS_1] != stepper.current_block->steps[CORE_AXIS_2]) || (stepper.motor_direction(CORE_AXIS_1) != stepper.motor_direction(CORE_AXIS_2))) {
- if (stepper.motor_direction(Y_HEAD))
- #else
- if (stepper.motor_direction(Y_AXIS)) // -direction
- #endif
- { // -direction
- #if HAS_Y_MIN
- UPDATE_ENDSTOP(Y, MIN);
- #endif
- }
- else { // +direction
- #if HAS_Y_MAX
- UPDATE_ENDSTOP(Y, MAX);
- #endif
- }
- #if ENABLED(COREXY) || ENABLED(COREYZ)
- }
- #endif
-
- #if ENABLED(COREXZ) || ENABLED(COREYZ)
- // Head direction in -Z axis for CoreXZ or CoreYZ bots.
- // If DeltaA == DeltaB, the movement is only in X or Y axis
- if ((stepper.current_block->steps[CORE_AXIS_1] != stepper.current_block->steps[CORE_AXIS_2]) || (stepper.motor_direction(CORE_AXIS_1) != stepper.motor_direction(CORE_AXIS_2))) {
- if (stepper.motor_direction(Z_HEAD))
- #else
- if (stepper.motor_direction(Z_AXIS))
- #endif
- { // z -direction
- #if HAS_Z_MIN
-
- #if ENABLED(Z_DUAL_ENDSTOPS)
-
- UPDATE_ENDSTOP_BIT(Z, MIN);
- #if HAS_Z2_MIN
- UPDATE_ENDSTOP_BIT(Z2, MIN);
- #else
- COPY_BIT(current_endstop_bits, Z_MIN, Z2_MIN);
- #endif
-
- test_dual_z_endstops(Z_MIN, Z2_MIN);
-
- #else // !Z_DUAL_ENDSTOPS
-
- #if HAS_BED_PROBE && ENABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN)
- if (z_probe_enabled) UPDATE_ENDSTOP(Z, MIN);
- #else
- UPDATE_ENDSTOP(Z, MIN);
- #endif
-
- #endif // !Z_DUAL_ENDSTOPS
-
- #endif // HAS_Z_MIN
-
- #if HAS_BED_PROBE && ENABLED(Z_MIN_PROBE_ENDSTOP) && DISABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN)
- if (z_probe_enabled) {
- UPDATE_ENDSTOP(Z, MIN_PROBE);
- if (TEST_ENDSTOP(Z_MIN_PROBE)) SBI(endstop_hit_bits, Z_MIN_PROBE);
- }
- #endif
- }
- else { // z +direction
- #if HAS_Z_MAX
-
- #if ENABLED(Z_DUAL_ENDSTOPS)
-
- UPDATE_ENDSTOP_BIT(Z, MAX);
- #if HAS_Z2_MAX
- UPDATE_ENDSTOP_BIT(Z2, MAX);
- #else
- COPY_BIT(current_endstop_bits, Z_MAX, Z2_MAX);
- #endif
-
- test_dual_z_endstops(Z_MAX, Z2_MAX);
-
- #else // !Z_DUAL_ENDSTOPS
-
- UPDATE_ENDSTOP(Z, MAX);
-
- #endif // !Z_DUAL_ENDSTOPS
- #endif // Z_MAX_PIN
- }
- #if ENABLED(COREXZ)
- }
- #endif
-
- old_endstop_bits = current_endstop_bits;
-
-} // Endstops::update()
diff --git a/Marlin/endstops.h b/Marlin/endstops.h
deleted file mode 100644
index 22c2468..0000000
--- a/Marlin/endstops.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * endstops.h - manages endstops
- */
-
-#ifndef ENDSTOPS_H
-#define ENDSTOPS_H
-
-#include "enum.h"
-
-class Endstops {
-
- public:
-
- static bool enabled, enabled_globally;
- static volatile char endstop_hit_bits; // use X_MIN, Y_MIN, Z_MIN and Z_MIN_PROBE as BIT value
-
- #if ENABLED(Z_DUAL_ENDSTOPS)
- static uint16_t
- #else
- static byte
- #endif
- current_endstop_bits, old_endstop_bits;
-
- Endstops() {};
-
- /**
- * Initialize the endstop pins
- */
- void init();
-
- /**
- * Update the endstops bits from the pins
- */
- static void update();
-
- /**
- * Print an error message reporting the position when the endstops were last hit.
- */
- static void report_state(); //call from somewhere to create an serial error message with the locations the endstops where hit, in case they were triggered
-
- /**
- * Report endstop positions in response to M119
- */
- static void M119();
-
- // Enable / disable endstop checking globally
- static void enable_globally(bool onoff=true) { enabled_globally = enabled = onoff; }
-
- // Enable / disable endstop checking
- static void enable(bool onoff=true) { enabled = onoff; }
-
- // Disable / Enable endstops based on ENSTOPS_ONLY_FOR_HOMING and global enable
- static void not_homing() { enabled = enabled_globally; }
-
- // Clear endstops (i.e., they were hit intentionally) to suppress the report
- static void hit_on_purpose() { endstop_hit_bits = 0; }
-
- // Enable / disable endstop z-probe checking
- #if HAS_BED_PROBE
- static volatile bool z_probe_enabled;
- static void enable_z_probe(bool onoff=true) { z_probe_enabled = onoff; }
- #endif
-
- private:
-
- #if ENABLED(Z_DUAL_ENDSTOPS)
- static void test_dual_z_endstops(EndstopEnum es1, EndstopEnum es2);
- #endif
-};
-
-extern Endstops endstops;
-
-#endif // ENDSTOPS_H
diff --git a/Marlin/enum.h b/Marlin/enum.h
deleted file mode 100644
index a51d208..0000000
--- a/Marlin/enum.h
+++ /dev/null
@@ -1,193 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-#ifndef __ENUM_H__
-#define __ENUM_H__
-
-/**
- * Axis indices as enumerated constants
- *
- * Special axis:
- * - A_AXIS and B_AXIS are used by COREXY printers
- * - X_HEAD and Y_HEAD is used for systems that don't have a 1:1 relationship
- * between X_AXIS and X Head movement, like CoreXY bots
- */
-enum AxisEnum {
- NO_AXIS = -1,
- X_AXIS = 0,
- A_AXIS = 0,
- Y_AXIS = 1,
- B_AXIS = 1,
- Z_AXIS = 2,
- C_AXIS = 2,
- E_AXIS = 3,
- X_HEAD = 4,
- Y_HEAD = 5,
- Z_HEAD = 6
-};
-
-#define LOOP_XYZ(VAR) for (uint8_t VAR=X_AXIS; VAR<=Z_AXIS; VAR++)
-#define LOOP_XYZE(VAR) for (uint8_t VAR=X_AXIS; VAR<=E_AXIS; VAR++)
-
-typedef enum {
- LINEARUNIT_MM,
- LINEARUNIT_INCH
-} LinearUnit;
-
-typedef enum {
- TEMPUNIT_C,
- TEMPUNIT_K,
- TEMPUNIT_F
-} TempUnit;
-
-/**
- * Debug flags
- * Not yet widely applied
- */
-enum DebugFlags {
- DEBUG_NONE = 0,
- DEBUG_ECHO = _BV(0), ///< Echo commands in order as they are processed
- DEBUG_INFO = _BV(1), ///< Print messages for code that has debug output
- DEBUG_ERRORS = _BV(2), ///< Not implemented
- DEBUG_DRYRUN = _BV(3), ///< Ignore temperature setting and E movement commands
- DEBUG_COMMUNICATION = _BV(4), ///< Not implemented
- DEBUG_LEVELING = _BV(5) ///< Print detailed output for homing and leveling
-};
-
-enum EndstopEnum {
- X_MIN,
- Y_MIN,
- Z_MIN,
- Z_MIN_PROBE,
- X_MAX,
- Y_MAX,
- Z_MAX,
- Z2_MIN,
- Z2_MAX
-};
-
-/**
- * Temperature
- * Stages in the ISR loop
- */
-enum TempState {
- PrepareTemp_0,
- MeasureTemp_0,
- PrepareTemp_BED,
- MeasureTemp_BED,
- PrepareTemp_1,
- MeasureTemp_1,
- PrepareTemp_2,
- MeasureTemp_2,
- PrepareTemp_3,
- MeasureTemp_3,
- Prepare_FILWIDTH,
- Measure_FILWIDTH,
- StartupDelay // Startup, delay initial temp reading a tiny bit so the hardware can settle
-};
-
-#if ENABLED(EMERGENCY_PARSER)
- enum e_parser_state {
- state_RESET,
- state_N,
- state_M,
- state_M1,
- state_M10,
- state_M108,
- state_M11,
- state_M112,
- state_M4,
- state_M41,
- state_M410,
- state_IGNORE // to '\n'
- };
-#endif
-
-#if ENABLED(FILAMENT_CHANGE_FEATURE)
- enum FilamentChangeMenuResponse {
- FILAMENT_CHANGE_RESPONSE_WAIT_FOR,
- FILAMENT_CHANGE_RESPONSE_EXTRUDE_MORE,
- FILAMENT_CHANGE_RESPONSE_RESUME_PRINT
- };
-
- #if ENABLED(ULTIPANEL)
- enum FilamentChangeMessage {
- FILAMENT_CHANGE_MESSAGE_INIT,
- FILAMENT_CHANGE_MESSAGE_UNLOAD,
- FILAMENT_CHANGE_MESSAGE_INSERT,
- FILAMENT_CHANGE_MESSAGE_LOAD,
- FILAMENT_CHANGE_MESSAGE_EXTRUDE,
- FILAMENT_CHANGE_MESSAGE_OPTION,
- FILAMENT_CHANGE_MESSAGE_RESUME,
- FILAMENT_CHANGE_MESSAGE_STATUS
- };
- #endif
-#endif
-
-/**
- * States for managing Marlin and host communication
- * Marlin sends messages if blocked or busy
- */
-#if ENABLED(HOST_KEEPALIVE_FEATURE)
- enum MarlinBusyState {
- NOT_BUSY, // Not in a handler
- IN_HANDLER, // Processing a GCode
- IN_PROCESS, // Known to be blocking command input (as in G29)
- PAUSED_FOR_USER, // Blocking pending any input
- PAUSED_FOR_INPUT // Blocking pending text input (concept)
- };
-#endif
-
-#if ENABLED(MESH_BED_LEVELING)
- enum MeshLevelingState {
- MeshReport,
- MeshStart,
- MeshNext,
- MeshSet,
- MeshSetZOffset,
- MeshReset
- };
-
- enum MBLStatus {
- MBL_STATUS_NONE = 0,
- MBL_STATUS_HAS_MESH_BIT = 0,
- MBL_STATUS_ACTIVE_BIT = 1
- };
-#endif
-
-/**
- * SD Card
- */
-enum LsAction { LS_SerialPrint, LS_Count, LS_GetFilename };
-
-/**
- * Ultra LCD
- */
-enum LCDViewAction {
- LCDVIEW_NONE,
- LCDVIEW_REDRAW_NOW,
- LCDVIEW_CALL_REDRAW_NEXT,
- LCDVIEW_CLEAR_CALL_REDRAW,
- LCDVIEW_CALL_NO_REDRAW
-};
-
-#endif // __ENUM_H__
diff --git a/Marlin/example_configurations/Cartesio/Configuration.h b/Marlin/example_configurations/Cartesio/Configuration.h
deleted file mode 100644
index 0d0c60b..0000000
--- a/Marlin/example_configurations/Cartesio/Configuration.h
+++ /dev/null
@@ -1,1327 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Configuration.h
- *
- * Basic settings such as:
- *
- * - Type of electronics
- * - Type of temperature sensor
- * - Printer geometry
- * - Endstop configuration
- * - LCD controller
- * - Extra features
- *
- * Advanced settings can be found in Configuration_adv.h
- *
- */
-#ifndef CONFIGURATION_H
-#define CONFIGURATION_H
-
-/**
- *
- * ***********************************
- * ** ATTENTION TO ALL DEVELOPERS **
- * ***********************************
- *
- * You must increment this version number for every significant change such as,
- * but not limited to: ADD, DELETE RENAME OR REPURPOSE any directive/option.
- *
- * Note: Update also Version.h !
- */
-#define CONFIGURATION_H_VERSION 010100
-
-//===========================================================================
-//============================= Getting Started =============================
-//===========================================================================
-
-/**
- * Here are some standard links for getting your machine calibrated:
- *
- * http://reprap.org/wiki/Calibration
- * http://youtu.be/wAL9d7FgInk
- * http://calculator.josefprusa.cz
- * http://reprap.org/wiki/Triffid_Hunter%27s_Calibration_Guide
- * http://www.thingiverse.com/thing:5573
- * https://sites.google.com/site/repraplogphase/calibration-of-your-reprap
- * http://www.thingiverse.com/thing:298812
- */
-
-//===========================================================================
-//============================= DELTA Printer ===============================
-//===========================================================================
-// For a Delta printer replace the configuration files with the files in the
-// example_configurations/delta directory.
-//
-
-//===========================================================================
-//============================= SCARA Printer ===============================
-//===========================================================================
-// For a Scara printer replace the configuration files with the files in the
-// example_configurations/SCARA directory.
-//
-
-// @section info
-
-// User-specified version info of this build to display in [Pronterface, etc] terminal window during
-// startup. Implementation of an idea by Prof Braino to inform user that any changes made to this
-// build by the user have been successfully uploaded into firmware.
-#define STRING_CONFIG_H_AUTHOR "(MaukCC, CartesioE)" // Who made the changes.
-#define SHOW_BOOTSCREEN
-#define STRING_SPLASH_LINE1 SHORT_BUILD_VERSION // will be shown during boot in line 1
-#define STRING_SPLASH_LINE2 WEBSITE_URL // will be shown during boot in line 2
-
-//
-// *** VENDORS PLEASE READ *****************************************************
-//
-// Marlin now allow you to have a vendor boot image to be displayed on machine
-// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
-//
-// We suggest for you to take advantage of this new feature and keep the Marlin
-// boot image unmodified. For an example have a look at the bq Hephestos 2
-// example configuration folder.
-//
-#define SHOW_CUSTOM_BOOTSCREEN
-// @section machine
-
-// SERIAL_PORT selects which serial port should be used for communication with the host.
-// This allows the connection of wireless adapters (for instance) to non-default port pins.
-// Serial port 0 is still used by the Arduino bootloader regardless of this setting.
-// :[0,1,2,3,4,5,6,7]
-#define SERIAL_PORT 0
-
-// This determines the communication speed of the printer
-// :[2400,9600,19200,38400,57600,115200,250000]
-#define BAUDRATE 115200
-
-// Enable the Bluetooth serial interface on AT90USB devices
-//#define BLUETOOTH
-
-// The following define selects which electronics board you have.
-// Please choose the name from boards.h that matches your setup
-#ifndef MOTHERBOARD
- //#define MOTHERBOARD BOARD_CNCONTROLS_11
- #define MOTHERBOARD BOARD_CNCONTROLS_12
-#endif
-
-// Optional custom name for your RepStrap or other custom machine
-// Displayed in the LCD "Ready" message
-#define CUSTOM_MACHINE_NAME "CartesioE"
-
-// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
-// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
-//#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
-
-// This defines the number of extruders
-// :[1,2,3,4]
-#define EXTRUDERS 3
-
-// For Cyclops or any "multi-extruder" that shares a single nozzle.
-//#define SINGLENOZZLE
-
-// A dual extruder that uses a single stepper motor
-// Don't forget to set SSDE_SERVO_ANGLES and HOTEND_OFFSET_X/Y/Z
-//#define SWITCHING_EXTRUDER
-#if ENABLED(SWITCHING_EXTRUDER)
- #define SWITCHING_EXTRUDER_SERVO_NR 0
- #define SWITCHING_EXTRUDER_SERVO_ANGLES { 0, 90 } // Angles for E0, E1
- //#define HOTEND_OFFSET_Z {0.0, 0.0}
-#endif
-
-/**
- * "Mixing Extruder"
- * - Adds a new code, M165, to set the current mix factors.
- * - Extends the stepping routines to move multiple steppers in proportion to the mix.
- * - Optional support for Repetier Host M163, M164, and virtual extruder.
- * - This implementation supports only a single extruder.
- * - Enable DIRECT_MIXING_IN_G1 for Pia Taubert's reference implementation
- */
-//#define MIXING_EXTRUDER
-#if ENABLED(MIXING_EXTRUDER)
- #define MIXING_STEPPERS 2 // Number of steppers in your mixing extruder
- #define MIXING_VIRTUAL_TOOLS 16 // Use the Virtual Tool method with M163 and M164
- //#define DIRECT_MIXING_IN_G1 // Allow ABCDHI mix factors in G1 movement commands
-#endif
-
-// Offset of the extruders (uncomment if using more than one and relying on firmware to position when changing).
-// The offset has to be X=0, Y=0 for the extruder 0 hotend (default extruder).
-// For the other hotends it is their distance from the extruder 0 hotend.
-//#define HOTEND_OFFSET_X {0.0, 20.00} // (in mm) for each extruder, offset of the hotend on the X axis
-//#define HOTEND_OFFSET_Y {0.0, 5.00} // (in mm) for each extruder, offset of the hotend on the Y axis
-
-//// The following define selects which power supply you have. Please choose the one that matches your setup
-// 1 = ATX
-// 2 = X-Box 360 203Watts (the blue wire connected to PS_ON and the red wire to VCC)
-// :{1:'ATX',2:'X-Box 360'}
-#define POWER_SUPPLY 1
-
-// Define this to have the electronics keep the power supply off on startup. If you don't know what this is leave it.
-//#define PS_DEFAULT_OFF
-
-// @section temperature
-
-//===========================================================================
-//============================= Thermal Settings ============================
-//===========================================================================
-//
-//--NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table
-//
-//// Temperature sensor settings:
-// -3 is thermocouple with MAX31855 (only for sensor 0)
-// -2 is thermocouple with MAX6675 (only for sensor 0)
-// -1 is thermocouple with AD595
-// 0 is not used
-// 1 is 100k thermistor - best choice for EPCOS 100k (4.7k pullup)
-// 2 is 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)
-// 3 is Mendel-parts thermistor (4.7k pullup)
-// 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !!
-// 5 is 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup)
-// 6 is 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup)
-// 7 is 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup)
-// 71 is 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup)
-// 8 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup)
-// 9 is 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup)
-// 10 is 100k RS thermistor 198-961 (4.7k pullup)
-// 11 is 100k beta 3950 1% thermistor (4.7k pullup)
-// 12 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed)
-// 13 is 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE"
-// 20 is the PT100 circuit found in the Ultimainboard V2.x
-// 60 is 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
-// 66 is 4.7M High Temperature thermistor from Dyze Design
-// 70 is the 100K thermistor found in the bq Hephestos 2
-//
-// 1k ohm pullup tables - This is not normal, you would have to have changed out your 4.7k for 1k
-// (but gives greater accuracy and more stable PID)
-// 51 is 100k thermistor - EPCOS (1k pullup)
-// 52 is 200k thermistor - ATC Semitec 204GT-2 (1k pullup)
-// 55 is 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup)
-//
-// 1047 is Pt1000 with 4k7 pullup
-// 1010 is Pt1000 with 1k pullup (non standard)
-// 147 is Pt100 with 4k7 pullup
-// 110 is Pt100 with 1k pullup (non standard)
-// 998 and 999 are Dummy Tables. They will ALWAYS read 25°C or the temperature defined below.
-// Use it for Testing or Development purposes. NEVER for production machine.
-//#define DUMMY_THERMISTOR_998_VALUE 25
-//#define DUMMY_THERMISTOR_999_VALUE 100
-// :{ '0': "Not used",'1':"100k / 4.7k - EPCOS",'2':"200k / 4.7k - ATC Semitec 204GT-2",'3':"Mendel-parts / 4.7k",'4':"10k !! do not use for a hotend. Bad resolution at high temp. !!",'5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)",'6':"100k / 4.7k EPCOS - Not as accurate as Table 1",'7':"100k / 4.7k Honeywell 135-104LAG-J01",'8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT",'9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1",'10':"100k / 4.7k RS 198-961",'11':"100k / 4.7k beta 3950 1%",'12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)",'13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'",'20':"PT100 (Ultimainboard V2.x)",'51':"100k / 1k - EPCOS",'52':"200k / 1k - ATC Semitec 204GT-2",'55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)",'60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950",'66':"Dyze Design 4.7M High Temperature thermistor",'70':"the 100K thermistor found in the bq Hephestos 2",'71':"100k / 4.7k Honeywell 135-104LAF-J01",'147':"Pt100 / 4.7k",'1047':"Pt1000 / 4.7k",'110':"Pt100 / 1k (non-standard)",'1010':"Pt1000 / 1k (non standard)",'-3':"Thermocouple + MAX31855 (only for sensor 0)",'-2':"Thermocouple + MAX6675 (only for sensor 0)",'-1':"Thermocouple + AD595",'998':"Dummy 1",'999':"Dummy 2" }
-#define TEMP_SENSOR_0 -1
-#define TEMP_SENSOR_1 -1
-#define TEMP_SENSOR_2 1
-#define TEMP_SENSOR_3 0
-#define TEMP_SENSOR_BED 1
-
-// This makes temp sensor 1 a redundant sensor for sensor 0. If the temperatures difference between these sensors is to high the print will be aborted.
-//#define TEMP_SENSOR_1_AS_REDUNDANT
-#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 10
-
-// Extruder temperature must be close to target for this long before M109 returns success
-#define TEMP_RESIDENCY_TIME 4 // (seconds)
-#define TEMP_HYSTERESIS 3 // (degC) range of +/- temperatures considered "close" to the target one
-#define TEMP_WINDOW 1 // (degC) Window around target to start the residency timer x degC early.
-
-// Bed temperature must be close to target for this long before M190 returns success
-#define TEMP_BED_RESIDENCY_TIME 1 // (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.
-
-// The minimal temperature defines the temperature below which the heater will not be enabled It is used
-// to check that the wiring to the thermistor is not broken.
-// Otherwise this would lead to the heater being powered on all the time.
-#define HEATER_0_MINTEMP 5
-#define HEATER_1_MINTEMP 5
-#define HEATER_2_MINTEMP 5
-#define HEATER_3_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 415
-#define HEATER_1_MAXTEMP 415
-#define HEATER_2_MAXTEMP 415
-#define HEATER_3_MAXTEMP 415
-#define BED_MAXTEMP 165
-
-//===========================================================================
-//============================= PID Settings ================================
-//===========================================================================
-// PID Tuning Guide here: http://reprap.org/wiki/PID_Tuning
-
-// Comment the following line to disable PID and enable bang-bang.
-#define PIDTEMP
-#define BANG_MAX 255 // limits current to nozzle while in bang-bang mode; 255=full current
-#define PID_MAX BANG_MAX // limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
-#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
- //#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
- // Set/get with gcode: M301 E[extruder number, 0-2]
- #define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
- // is more than PID_FUNCTIONAL_RANGE then the PID will be shut off and the heater will be set to min/max.
- #define PID_INTEGRAL_DRIVE_MAX PID_MAX //limit for the integral term
- #define K1 0.95 //smoothing factor within the PID
-
- // If you are using a pre-configured hotend then you can use one of the value sets by uncommenting it
-
- // Cartesio extruderV6 40W Normal
- #define DEFAULT_Kp 18
- #define DEFAULT_Ki 1
- #define DEFAULT_Kd 100
-
- // Cartesio extruderV6 40W Volcano
- //#define DEFAULT_Kp 50
- //#define DEFAULT_Ki 9
- //#define DEFAULT_Kd 70
-
- // Cartesio extruderV6 40W Cyclops
- //#define DEFAULT_Kp 18
- //#define DEFAULT_Ki 1
- //#define DEFAULT_Kd 100
-
-#endif // PIDTEMP
-
-//===========================================================================
-//============================= PID > Bed Temperature Control ===============
-//===========================================================================
-// Select PID or bang-bang with PIDTEMPBED. If bang-bang, BED_LIMIT_SWITCHING will enable hysteresis
-//
-// Uncomment this to enable PID on the bed. It uses the same frequency PWM as the extruder.
-// If your PID_dT is the default, and correct for your hardware/configuration, that means 7.689Hz,
-// which is fine for driving a square wave into a resistive load and does not significantly impact you FET heating.
-// This also works fine on a Fotek SSR-10DA Solid State Relay into a 250W heater.
-// If your configuration is significantly different than this and you don't understand the issues involved, you probably
-// shouldn't use bed PID until someone else verifies your hardware works.
-// If this is enabled, find your own PID constants below.
-#define PIDTEMPBED
-
-//#define BED_LIMIT_SWITCHING
-
-// This sets the max power delivered to the bed, and replaces the HEATER_BED_DUTY_CYCLE_DIVIDER option.
-// all forms of bed control obey this (PID, bang-bang, bang-bang with hysteresis)
-// setting this to anything other than 255 enables a form of PWM to the bed just like HEATER_BED_DUTY_CYCLE_DIVIDER did,
-// so you shouldn't use it unless you are OK with PWM on your bed. (see the comment on enabling PIDTEMPBED)
-#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current
-
-#if ENABLED(PIDTEMPBED)
-
- //#define PID_BED_DEBUG // Sends debug data to the serial port.
-
- #define PID_BED_INTEGRAL_DRIVE_MAX MAX_BED_POWER //limit for the integral term
-
- //24V 500W silicone heater on to 4mm glass CartesioW
- #define DEFAULT_bedKp 390
- #define DEFAULT_bedKi 70
- #define DEFAULT_bedKd 546
-
- //24V 250W silicone heater on to 4mm glass CartesioM
- //#define DEFAULT_bedKp 303
- //#define DEFAULT_bedKi 42
- //#define DEFAULT_bedKd 539
-
- // FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles.
-#endif // PIDTEMPBED
-
-// @section extruder
-
-//this prevents dangerous Extruder moves, i.e. if the temperature is under the limit
-//can be software-disabled for whatever purposes by
-#define PREVENT_DANGEROUS_EXTRUDE
-//if PREVENT_DANGEROUS_EXTRUDE is on, you can still disable (uncomment) very long bits of extrusion separately.
-#define PREVENT_LENGTHY_EXTRUDE
-
-#define EXTRUDE_MINTEMP 18
-#define EXTRUDE_MAXLENGTH (X_MAX_LENGTH+Y_MAX_LENGTH) //prevent extrusion of very large distances.
-
-//===========================================================================
-//======================== Thermal Runaway Protection =======================
-//===========================================================================
-
-/**
- * Thermal Protection protects your printer from damage and fire if a
- * thermistor falls out or temperature sensors fail in any way.
- *
- * The issue: If a thermistor falls out or a temperature sensor fails,
- * Marlin can no longer sense the actual temperature. Since a disconnected
- * thermistor reads as a low temperature, the firmware will keep the heater on.
- *
- * If you get "Thermal Runaway" or "Heating failed" errors the
- * details can be tuned in Configuration_adv.h
- */
-
-#define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders
-#define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed
-
-//===========================================================================
-//============================= Mechanical Settings =========================
-//===========================================================================
-
-// @section machine
-
-// Uncomment one of these options to enable CoreXY, CoreXZ, or CoreYZ kinematics
-//#define COREXY
-//#define COREXZ
-//#define COREYZ
-
-// Enable this option for Toshiba steppers
-//#define CONFIG_STEPPERS_TOSHIBA
-
-//===========================================================================
-//============================== Endstop Settings ===========================
-//===========================================================================
-
-// @section homing
-
-// Specify here all the endstop connectors that are connected to any endstop or probe.
-// Almost all printers will be using one per axis. Probes will use one or more of the
-// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
-#define USE_XMIN_PLUG
-#define USE_YMIN_PLUG
-#define USE_ZMIN_PLUG
-//#define USE_XMAX_PLUG
-//#define USE_YMAX_PLUG
-//#define USE_ZMAX_PLUG
-
-// coarse Endstop Settings
-#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
-
-#if DISABLED(ENDSTOPPULLUPS)
- // fine endstop settings: Individual pullups. will be ignored if ENDSTOPPULLUPS is defined
- //#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 // set to true to invert the logic of the endstop.
-#define Y_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Z_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define X_MAX_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
-#define Y_MAX_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
-#define Z_MAX_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
-#define Z_MIN_PROBE_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
-
-//===========================================================================
-//============================= Z Probe Options =============================
-//===========================================================================
-
-//
-// Probe Type
-// Probes are sensors/switches that are activated / deactivated before/after use.
-//
-// Allen Key Probes, Servo Probes, Z-Sled Probes, FIX_MOUNTED_PROBE, etc.
-// You must activate one of these to use AUTO_BED_LEVELING_FEATURE below.
-//
-// Use M851 to set the Z probe vertical offset from the nozzle. Store with M500.
-//
-
-// A Fix-Mounted Probe either doesn't deploy or needs manual deployment.
-// For example an inductive probe, or a setup that uses the nozzle to probe.
-// An inductive probe must be deactivated to go below
-// its trigger-point if hardware endstops are active.
-//#define FIX_MOUNTED_PROBE
-
-// The BLTouch probe emulates a servo probe.
-//#define BLTOUCH
-
-// Z Servo Probe, such as an endstop switch on a rotating arm.
-//#define Z_ENDSTOP_SERVO_NR 0
-//#define Z_SERVO_ANGLES {70,0} // Z Servo Deploy and Stow angles
-
-// Enable if you have a Z probe mounted on a sled like those designed by Charles Bell.
-//#define Z_PROBE_SLED
-//#define SLED_DOCKING_OFFSET 5 // The extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.
-
-// Z Probe to nozzle (X,Y) offset, relative to (0, 0).
-// X and Y offsets must be integers.
-//
-// In the following example the X and Y offsets are both positive:
-// #define X_PROBE_OFFSET_FROM_EXTRUDER 10
-// #define Y_PROBE_OFFSET_FROM_EXTRUDER 10
-//
-// +-- BACK ---+
-// | |
-// L | (+) P | R <-- probe (20,20)
-// E | | I
-// F | (-) N (+) | G <-- nozzle (10,10)
-// T | | H
-// | (-) | T
-// | |
-// O-- FRONT --+
-// (0,0)
-#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]
-
-// X and Y axis travel speed (mm/m) between probes
-#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
-#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
-// Speed for the "accurate" probe of each point
-#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
-
-//
-// Allen Key Probe is defined in the Delta example configurations.
-//
-
-// Enable Z_MIN_PROBE_ENDSTOP to use _both_ a Z Probe and a Z-min-endstop on the same machine.
-// With this option the Z_MIN_PROBE_PIN will only be used for probing, never for homing.
-//
-// *** PLEASE READ ALL INSTRUCTIONS BELOW FOR SAFETY! ***
-//
-// To continue using the Z-min-endstop for homing, be sure to disable Z_SAFE_HOMING.
-// Example: To park the head outside the bed area when homing with G28.
-//
-// To use a separate Z probe, your board must define a Z_MIN_PROBE_PIN.
-//
-// For a servo-based Z probe, you must set up servo support below, including
-// NUM_SERVOS, Z_ENDSTOP_SERVO_NR and Z_SERVO_ANGLES.
-//
-// - RAMPS 1.3/1.4 boards may be able to use the 5V, GND, and Aux4->D32 pin.
-// - Use 5V for powered (usu. inductive) sensors.
-// - Otherwise connect:
-// - normally-closed switches to GND and D32.
-// - normally-open switches to 5V and D32.
-//
-// Normally-closed switches are advised and are the default.
-//
-// The Z_MIN_PROBE_PIN sets the Arduino pin to use. (See your board's pins file.)
-// Since the RAMPS Aux4->D32 pin maps directly to the Arduino D32 pin, D32 is the
-// default pin for all RAMPS-based boards. Some other boards map differently.
-// To set or change the pin for your board, edit the appropriate pins_XXXXX.h file.
-//
-// WARNING:
-// Setting the wrong pin may have unexpected and potentially disastrous consequences.
-// Use with caution and do your homework.
-//
-//#define Z_MIN_PROBE_ENDSTOP
-
-// Enable Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN to use the Z_MIN_PIN for your Z_MIN_PROBE.
-// The Z_MIN_PIN will then be used for both Z-homing and probing.
-#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
-
-// To use a probe you must enable one of the two options above!
-
-// This option disables the use of the Z_MIN_PROBE_PIN
-// To enable the Z probe pin but disable its use, uncomment the line below. This only affects a
-// Z probe switch if you have a separate Z min endstop also and have activated Z_MIN_PROBE_ENDSTOP above.
-// If you're using the Z MIN endstop connector for your Z probe, this has no effect.
-//#define DISABLE_Z_MIN_PROBE_ENDSTOP
-
-// Enable Z Probe Repeatability test to see how accurate your probe is
-//#define Z_MIN_PROBE_REPEATABILITY_TEST
-
-//
-// Probe Raise options provide clearance for the probe to deploy, stow, and travel.
-//
-#define Z_PROBE_DEPLOY_HEIGHT 15 // Raise to make room for the probe to deploy / stow
-#define Z_PROBE_TRAVEL_HEIGHT 5 // Raise between probing points.
-
-//
-// For M851 give a range for adjusting the Z probe offset
-//
-#define Z_PROBE_OFFSET_RANGE_MIN -20
-#define Z_PROBE_OFFSET_RANGE_MAX 20
-
-// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
-// :{0:'Low',1:'High'}
-#define X_ENABLE_ON 1
-#define Y_ENABLE_ON 1
-#define Z_ENABLE_ON 1
-#define E_ENABLE_ON 0 // For all extruders
-
-// Disables axis stepper immediately when it's not being used.
-// WARNING: When motors turn off there is a chance of losing position accuracy!
-#define DISABLE_X false
-#define DISABLE_Y false
-#define DISABLE_Z false
-// Warn on display about possibly reduced accuracy
-//#define DISABLE_REDUCED_ACCURACY_WARNING
-
-// @section extruder
-
-#define DISABLE_E false // For all extruders
-#define DISABLE_INACTIVE_EXTRUDER true //disable only inactive extruders and keep active extruder enabled
-
-// @section machine
-
-// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way.
-#define INVERT_X_DIR false
-#define INVERT_Y_DIR true
-#define INVERT_Z_DIR false
-
-// @section extruder
-
-// For direct drive extruder v9 set to true, for geared extruder set to false.
-#define INVERT_E0_DIR false
-#define INVERT_E1_DIR false
-#define INVERT_E2_DIR false
-#define INVERT_E3_DIR false
-
-// @section homing
-
-//#define Z_HOMING_HEIGHT 4 // (in mm) Minimal z height before homing (G28) for Z clearance above the bed, clamps, ...
- // Be sure you have this distance over your Z_MAX_POS in case.
-
-// ENDSTOP SETTINGS:
-// Sets direction of endstops when homing; 1=MAX, -1=MIN
-// :[-1,1]
-#define X_HOME_DIR -1
-#define Y_HOME_DIR -1
-#define Z_HOME_DIR -1
-
-#define min_software_endstops true // If true, axis won't move to coordinates less than HOME_POS.
-#define max_software_endstops true // If true, axis won't move to coordinates greater than the defined lengths below.
-
-// @section machine
-
-// Travel limits after homing (units are in mm)
-#define X_MIN_POS 0
-#define Y_MIN_POS 0
-#define Z_MIN_POS 0
-#define X_MAX_POS 435
-#define Y_MAX_POS 270
-#define Z_MAX_POS 400
-
-//===========================================================================
-//========================= Filament Runout Sensor ==========================
-//===========================================================================
-//#define FILAMENT_RUNOUT_SENSOR // Uncomment for defining a filament runout sensor such as a mechanical or opto endstop to check the existence of filament
- // In RAMPS uses servo pin 2. Can be changed in pins file. For other boards pin definition should be made.
- // It is assumed that when logic high = filament available
- // when logic low = filament ran out
-#if ENABLED(FILAMENT_RUNOUT_SENSOR)
- const bool FIL_RUNOUT_INVERTING = false; // set to true to invert the logic of the sensor.
- #define ENDSTOPPULLUP_FIL_RUNOUT // Uncomment to use internal pullup for filament runout pins if the sensor is defined.
- #define FILAMENT_RUNOUT_SCRIPT "M600"
-#endif
-
-//===========================================================================
-//============================ Mesh Bed Leveling ============================
-//===========================================================================
-
-//#define MESH_BED_LEVELING // Enable mesh bed leveling.
-
-#if ENABLED(MESH_BED_LEVELING)
- #define MESH_INSET 10 // Mesh inset margin on print area
- #define MESH_NUM_X_POINTS 3 // Don't use more than 7 points per axis, implementation limited.
- #define MESH_NUM_Y_POINTS 3
- #define MESH_HOME_SEARCH_Z 4 // Z after Home, bed somewhere below but above 0.0.
-
- //#define MESH_G28_REST_ORIGIN // After homing all axes ('G28' or 'G28 XYZ') rest at origin [0,0,0]
-
- //#define MANUAL_BED_LEVELING // Add display menu option for bed leveling.
-
- #if ENABLED(MANUAL_BED_LEVELING)
- #define MBL_Z_STEP 0.025 // Step size while manually probing Z axis.
- #endif // MANUAL_BED_LEVELING
-
-#endif // MESH_BED_LEVELING
-
-//===========================================================================
-//============================ Bed Auto Leveling ============================
-//===========================================================================
-
-// @section bedlevel
-
-//#define AUTO_BED_LEVELING_FEATURE // Delete the comment to enable (remove // at the start of the line)
-
-// Enable this feature to get detailed logging of G28, G29, M48, etc.
-// Logging is off by default. Enable this logging feature with 'M111 S32'.
-// NOTE: Requires a huge amount of PROGMEM.
-//#define DEBUG_LEVELING_FEATURE
-
-#if ENABLED(AUTO_BED_LEVELING_FEATURE)
-
- // There are 2 different ways to specify probing locations:
- //
- // - "grid" mode
- // Probe several points in a rectangular grid.
- // You specify the rectangle and the density of sample points.
- // This mode is preferred because there are more measurements.
- //
- // - "3-point" mode
- // Probe 3 arbitrary points on the bed (that aren't collinear)
- // You specify the XY coordinates of all 3 points.
-
- // Enable this to sample the bed in a grid (least squares solution).
- // Note: this feature generates 10KB extra code size.
- #define AUTO_BED_LEVELING_GRID
-
- #if ENABLED(AUTO_BED_LEVELING_GRID)
-
- #define LEFT_PROBE_BED_POSITION 15
- #define RIGHT_PROBE_BED_POSITION 170
- #define FRONT_PROBE_BED_POSITION 20
- #define BACK_PROBE_BED_POSITION 170
-
- #define MIN_PROBE_EDGE 10 // The Z probe minimum square sides can be no smaller than this.
-
- // Set the number of grid points per dimension.
- // You probably don't need more than 3 (squared=9).
- #define AUTO_BED_LEVELING_GRID_POINTS 2
-
- #else // !AUTO_BED_LEVELING_GRID
-
- // Arbitrary points to probe.
- // A simple cross-product is used to estimate the plane of the bed.
- #define ABL_PROBE_PT_1_X 15
- #define ABL_PROBE_PT_1_Y 180
- #define ABL_PROBE_PT_2_X 15
- #define ABL_PROBE_PT_2_Y 20
- #define ABL_PROBE_PT_3_X 170
- #define ABL_PROBE_PT_3_Y 20
-
- #endif // !AUTO_BED_LEVELING_GRID
-
- //#define Z_PROBE_END_SCRIPT "G1 Z10 F12000\nG1 X15 Y330\nG1 Z0.5\nG1 Z10" // These commands will be executed in the end of G29 routine.
- // Useful to retract a deployable Z probe.
-
- // If you've enabled AUTO_BED_LEVELING_FEATURE and are using the Z Probe for Z Homing,
- // it is highly recommended you also enable Z_SAFE_HOMING below!
-
-#endif // AUTO_BED_LEVELING_FEATURE
-
-
-// @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 // Distance between the nozzle to printbed after homing
-
-// Use "Z Safe Homing" to avoid homing with a Z probe outside the bed area.
-//
-// With this feature enabled:
-//
-// - Allow Z homing only after X and Y homing AND stepper drivers still enabled.
-// - If stepper drivers time out, it will need X and Y homing again before Z homing.
-// - Move the Z probe (or nozzle) to a defined XY point before Z Homing when homing all axes (G28).
-// - Prevent Z homing when the Z probe is outside bed area.
-//#define Z_SAFE_HOMING
-
-#if ENABLED(Z_SAFE_HOMING)
- #define Z_SAFE_HOMING_X_POINT ((X_MIN_POS + X_MAX_POS) / 2) // X point for Z homing when homing all axis (G28).
- #define Z_SAFE_HOMING_Y_POINT ((Y_MIN_POS + Y_MAX_POS) / 2) // Y point for Z homing when homing all axis (G28).
-#endif
-
-// Homing speeds (mm/m)
-#define HOMING_FEEDRATE_XY (50*60)
-#define HOMING_FEEDRATE_Z (10*60)
-
-//
-// MOVEMENT SETTINGS
-// @section motion
-//
-
-// default settings
-
-#define DEFAULT_AXIS_STEPS_PER_UNIT {71.128,71.128,640,152}
-#define DEFAULT_MAX_FEEDRATE {200,200,20,20} // (mm/sec)
-#define DEFAULT_MAX_ACCELERATION {1000,1000,100,10000} // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for Skeinforge 40+, for older versions raise them a lot.
-
-#define DEFAULT_ACCELERATION 500 // X, Y, Z and E acceleration in mm/s^2 for printing moves
-#define DEFAULT_RETRACT_ACCELERATION 10000 // E acceleration in mm/s^2 for retracts
-#define DEFAULT_TRAVEL_ACCELERATION 1000 // X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
-
-// The speed change that does not require acceleration (i.e. the software might assume it can be done instantaneously)
-#define DEFAULT_XYJERK 10.0 // (mm/sec)
-#define DEFAULT_ZJERK 0.4 // (mm/sec)
-#define DEFAULT_EJERK 5.0 // (mm/sec)
-
-
-//=============================================================================
-//============================= Additional Features ===========================
-//=============================================================================
-
-// @section extras
-
-//
-// EEPROM
-//
-// The microcontroller can store settings in the EEPROM, e.g. max velocity...
-// M500 - stores parameters in EEPROM
-// M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily).
-// M502 - reverts to the default "factory settings". You still need to store them in EEPROM afterwards if you want to.
-//define this to enable EEPROM support
-//#define EEPROM_SETTINGS
-
-#if ENABLED(EEPROM_SETTINGS)
- // To disable EEPROM Serial responses and decrease program space by ~1700 byte: comment this out:
- #define EEPROM_CHITCHAT // Please keep turned on if you can.
-#endif
-
-//
-// Host Keepalive
-//
-// When enabled Marlin will send a busy status message to the host
-// every couple of seconds when it can't accept commands.
-//
-#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.
-
-//
-// M100 Free Memory Watcher
-//
-//#define M100_FREE_MEMORY_WATCHER // uncomment to add the M100 Free Memory Watcher for debug purpose
-
-//
-// G20/G21 Inch mode support
-//
-//#define INCH_MODE_SUPPORT
-
-//
-// M149 Set temperature units support
-//
-//#define TEMPERATURE_UNITS_SUPPORT
-
-// @section temperature
-
-// Preheat Constants
-#define PREHEAT_1_TEMP_HOTEND 190
-#define PREHEAT_1_TEMP_BED 50
-#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
-
-//
-// Nozzle Park -- EXPERIMENTAL
-//
-// When enabled allows the user to define a special XYZ position, inside the
-// machine's topology, to park the nozzle when idle or when receiving the G27
-// command.
-//
-// The "P" paramenter controls what is the action applied to the Z axis:
-// P0: (Default) If current Z-pos is lower than Z-park then the nozzle will
-// be raised to reach Z-park height.
-//
-// P1: No matter the current Z-pos, the nozzle will be raised/lowered to
-// reach Z-park height.
-//
-// P2: The nozzle height will be raised by Z-park amount but never going over
-// the machine's limit of Z_MAX_POS.
-//
-//#define NOZZLE_PARK_FEATURE
-
-#if ENABLED(NOZZLE_PARK_FEATURE)
- // Specify a park position as { X, Y, Z }
- #define NOZZLE_PARK_POINT { (X_MIN_POS + 10), (Y_MAX_POS - 10), 20 }
-#endif
-
-//
-// Clean Nozzle Feature -- EXPERIMENTAL
-//
-// When enabled allows the user to send G12 to start the nozzle cleaning
-// process, the G-Code accepts two parameters:
-// "P" for pattern selection
-// "S" for defining the number of strokes/repetitions
-//
-// Available list of patterns:
-// P0: This is the default pattern, this process requires a sponge type
-// material at a fixed bed location, the cleaning process is based on
-// "strokes" i.e. back-and-forth movements between the starting and end
-// points.
-//
-// P1: This starts a zig-zag pattern between (X0, Y0) and (X1, Y1), "T"
-// defines the number of zig-zag triangles to be done. "S" defines the
-// number of strokes aka one back-and-forth movement. As an example
-// sending "G12 P1 S1 T3" will execute:
-//
-// --
-// | (X0, Y1) | /\ /\ /\ | (X1, Y1)
-// | | / \ / \ / \ |
-// A | | / \ / \ / \ |
-// | | / \ / \ / \ |
-// | (X0, Y0) | / \/ \/ \ | (X1, Y0)
-// -- +--------------------------------+
-// |________|_________|_________|
-// T1 T2 T3
-//
-// Caveats: End point Z should use the same value as Start point Z.
-//
-// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
-// may change to add new functionality like different wipe patterns.
-//
-//#define NOZZLE_CLEAN_FEATURE
-
-#if ENABLED(NOZZLE_CLEAN_FEATURE)
- // Number of pattern repetitions
- #define NOZZLE_CLEAN_STROKES 12
-
- // Specify positions as { X, Y, Z }
- #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
- #define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
-
- // Moves the nozzle to the initial position
- #define NOZZLE_CLEAN_GOBACK
-#endif
-
-//
-// Print job timer
-//
-// Enable this option to automatically start and stop the
-// print job timer when M104/M109/M190 commands are received.
-// M104 (extruder without wait) - high temp = none, low temp = stop timer
-// M109 (extruder with wait) - high temp = start timer, low temp = stop timer
-// M190 (bed with wait) - high temp = start timer, low temp = none
-//
-// In all cases the timer can be started and stopped using
-// the following commands:
-//
-// - M75 - Start the print job timer
-// - M76 - Pause the print job timer
-// - M77 - Stop the print job timer
-#define PRINTJOB_TIMER_AUTOSTART
-
-//
-// Print Counter
-//
-// When enabled Marlin will keep track of some print statistical data such as:
-// - Total print jobs
-// - Total successful print jobs
-// - Total failed print jobs
-// - Total time printing
-//
-// This information can be viewed by the M78 command.
-//#define PRINTCOUNTER
-
-//=============================================================================
-//============================= LCD and SD support ============================
-//=============================================================================
-
-// @section lcd
-
-//
-// LCD LANGUAGE
-//
-// Here you may choose the language used by Marlin on the LCD menus, the following
-// list of languages are available:
-// en, an, bg, ca, cn, cz, de, el, el-gr, es, eu, fi, fr, gl, hr, it,
-// kana, kana_utf8, nl, pl, pt, pt_utf8, pt-br, pt-br_utf8, ru, test
-//
-// :{'en':'English','an':'Aragonese','bg':'Bulgarian','ca':'Catalan','cn':'Chinese','cz':'Czech','de':'German','el':'Greek','el-gr':'Greek (Greece)','es':'Spanish','eu':'Basque-Euskera','fi':'Finnish','fr':'French','gl':'Galician','hr':'Croatian','it':'Italian','kana':'Japanese','kana_utf8':'Japanese (UTF8)','nl':'Dutch','pl':'Polish','pt':'Portuguese','pt-br':'Portuguese (Brazilian)','pt-br_utf8':'Portuguese (Brazilian UTF8)','pt_utf8':'Portuguese (UTF8)','ru':'Russian','test':'TEST'}
-//
-#define LCD_LANGUAGE en
-
-//
-// LCD Character Set
-//
-// Note: This option is NOT applicable to Graphical Displays.
-//
-// All character-based LCD's provide ASCII plus one of these
-// language extensions:
-//
-// - JAPANESE ... the most common
-// - WESTERN ... with more accented characters
-// - CYRILLIC ... for the Russian language
-//
-// To determine the language extension installed on your controller:
-//
-// - Compile and upload with LCD_LANGUAGE set to 'test'
-// - Click the controller to view the LCD menu
-// - The LCD will display Japanese, Western, or Cyrillic text
-//
-// See https://github.com/MarlinFirmware/Marlin/wiki/LCD-Language
-//
-// :['JAPANESE','WESTERN','CYRILLIC']
-//
-#define DISPLAY_CHARSET_HD44780 JAPANESE
-
-//
-// LCD TYPE
-//
-// You may choose ULTRA_LCD if you have character based LCD with 16x2, 16x4, 20x2,
-// 20x4 char/lines or DOGLCD for the full graphics display with 128x64 pixels
-// (ST7565R family). (This option will be set automatically for certain displays.)
-//
-// IMPORTANT NOTE: The U8glib library is required for Full Graphic Display!
-// https://github.com/olikraus/U8glib_Arduino
-//
-//#define ULTRA_LCD // Character based
-//#define DOGLCD // Full graphics display
-
-//
-// SD CARD
-//
-// SD Card support is disabled by default. If your controller has an SD slot,
-// you must uncomment the following option or it won't work.
-//
-#define SDSUPPORT
-
-//
-// SD CARD: SPI SPEED
-//
-// Uncomment ONE of the following items to use a slower SPI transfer
-// speed. This is usually required if you're getting volume init errors.
-//
-//#define SPI_SPEED SPI_HALF_SPEED
-//#define SPI_SPEED SPI_QUARTER_SPEED
-//#define SPI_SPEED SPI_EIGHTH_SPEED
-
-//
-// SD CARD: ENABLE CRC
-//
-// Use CRC checks and retries on the SD communication.
-//
-//#define SD_CHECK_AND_RETRY
-
-//
-// ENCODER SETTINGS
-//
-// This option overrides the default number of encoder pulses needed to
-// produce one step. Should be increased for high-resolution encoders.
-//
-#define ENCODER_PULSES_PER_STEP 2
-
-//
-// Use this option to override the number of step signals required to
-// move between next/prev menu items.
-//
-#define ENCODER_STEPS_PER_MENU_ITEM 1
-
-/**
- * Encoder Direction Options
- *
- * Test your encoder's behavior first with both options disabled.
- *
- * Reversed Value Edit and Menu Nav? Enable REVERSE_ENCODER_DIRECTION.
- * Reversed Menu Navigation only? Enable REVERSE_MENU_DIRECTION.
- * Reversed Value Editing only? Enable BOTH options.
- */
-
-//
-// This option reverses the encoder direction everywhere
-//
-// Set this option if CLOCKWISE causes values to DECREASE
-//
-//#define REVERSE_ENCODER_DIRECTION
-
-//
-// This option reverses the encoder direction for navigating LCD menus.
-//
-// If CLOCKWISE normally moves DOWN this makes it go UP.
-// If CLOCKWISE normally moves UP this makes it go DOWN.
-//
-//#define REVERSE_MENU_DIRECTION
-
-//
-// Individual Axis Homing
-//
-// Add individual axis homing items (Home X, Home Y, and Home Z) to the LCD menu.
-//
-//#define INDIVIDUAL_AXIS_HOMING_MENU
-
-//
-// SPEAKER/BUZZER
-//
-// If you have a speaker that can produce tones, enable it here.
-// By default Marlin assumes you have a buzzer with a fixed frequency.
-//
-#define SPEAKER
-
-//
-// The duration and frequency for the UI feedback sound.
-// Set these to 0 to disable audio feedback in the LCD menus.
-//
-// Note: Test audio output with the G-Code:
-// M300 S P
-//
-#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 100
-#define LCD_FEEDBACK_FREQUENCY_HZ 1000
-
-//
-// CONTROLLER TYPE: Standard
-//
-// Marlin supports a wide variety of controllers.
-// Enable one of the following options to specify your controller.
-//
-
-//
-// ULTIMAKER Controller.
-//
-//#define ULTIMAKERCONTROLLER
-
-//
-// ULTIPANEL as seen on Thingiverse.
-//
-//#define ULTIPANEL
-
-//
-// Cartesio UI
-// http://mauk.cc/webshop/cartesio-shop/electronics/user-interface
-//
-#define CARTESIO_UI
-
-//
-// PanelOne from T3P3 (via RAMPS 1.4 AUX2/AUX3)
-// http://reprap.org/wiki/PanelOne
-//
-//#define PANEL_ONE
-
-//
-// MaKr3d Makr-Panel with graphic controller and SD support.
-// http://reprap.org/wiki/MaKr3d_MaKrPanel
-//
-//#define MAKRPANEL
-
-//
-// ReprapWorld Graphical LCD
-// https://reprapworld.com/?products_details&products_id/1218
-//
-//#define REPRAPWORLD_GRAPHICAL_LCD
-
-//
-// Activate one of these if you have a Panucatt Devices
-// Viki 2.0 or mini Viki with Graphic LCD
-// http://panucatt.com
-//
-//#define VIKI2
-//#define miniVIKI
-
-//
-// Adafruit ST7565 Full Graphic Controller.
-// https://github.com/eboston/Adafruit-ST7565-Full-Graphic-Controller/
-//
-//#define ELB_FULL_GRAPHIC_CONTROLLER
-
-//
-// RepRapDiscount Smart Controller.
-// http://reprap.org/wiki/RepRapDiscount_Smart_Controller
-//
-// Note: Usually sold with a white PCB.
-//
-//#define REPRAP_DISCOUNT_SMART_CONTROLLER
-
-//
-// GADGETS3D G3D LCD/SD Controller
-// http://reprap.org/wiki/RAMPS_1.3/1.4_GADGETS3D_Shield_with_Panel
-//
-// Note: Usually sold with a blue PCB.
-//
-//#define G3D_PANEL
-
-//
-// RepRapDiscount FULL GRAPHIC Smart Controller
-// http://reprap.org/wiki/RepRapDiscount_Full_Graphic_Smart_Controller
-//
-//#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
-
-//
-// MakerLab Mini Panel with graphic
-// controller and SD support - http://reprap.org/wiki/Mini_panel
-//
-//#define MINIPANEL
-
-//
-// RepRapWorld REPRAPWORLD_KEYPAD v1.1
-// http://reprapworld.com/?products_details&products_id=202&cPath=1591_1626
-//
-// REPRAPWORLD_KEYPAD_MOVE_STEP sets how much should the robot move when a key
-// is pressed, a value of 10.0 means 10mm per click.
-//
-#define REPRAPWORLD_KEYPAD
-#define REPRAPWORLD_KEYPAD_MOVE_STEP 10.0
-
-//
-// RigidBot Panel V1.0
-// http://www.inventapart.com/
-//
-//#define RIGIDBOT_PANEL
-
-//
-// BQ LCD Smart Controller shipped by
-// default with the BQ Hephestos 2 and Witbox 2.
-//
-//#define BQ_LCD_SMART_CONTROLLER
-
-//
-// CONTROLLER TYPE: I2C
-//
-// Note: These controllers require the installation of Arduino's LiquidCrystal_I2C
-// library. For more info: https://github.com/kiyoshigawa/LiquidCrystal_I2C
-//
-
-//
-// Elefu RA Board Control Panel
-// http://www.elefu.com/index.php?route=product/product&product_id=53
-//
-//#define RA_CONTROL_PANEL
-
-//
-// Sainsmart YW Robot (LCM1602) LCD Display
-//
-//#define LCD_I2C_SAINSMART_YWROBOT
-
-//
-// Generic LCM1602 LCD adapter
-//
-//#define LCM1602
-
-//
-// PANELOLU2 LCD with status LEDs,
-// separate encoder and click inputs.
-//
-// Note: This controller requires Arduino's LiquidTWI2 library v1.2.3 or later.
-// For more info: https://github.com/lincomatic/LiquidTWI2
-//
-// Note: The PANELOLU2 encoder click input can either be directly connected to
-// a pin (if BTN_ENC defined to != -1) or read through I2C (when BTN_ENC == -1).
-//
-//#define LCD_I2C_PANELOLU2
-
-//
-// Panucatt VIKI LCD with status LEDs,
-// integrated click & L/R/U/D buttons, separate encoder inputs.
-//
-//#define LCD_I2C_VIKI
-
-//
-// SSD1306 OLED full graphics generic display
-//
-//#define U8GLIB_SSD1306
-
-//
-// SAV OLEd LCD module support using either SSD1306 or SH1106 based LCD modules
-//
-//#define SAV_3DGLCD
-#if ENABLED(SAV_3DGLCD)
- //#define U8GLIB_SSD1306
- #define U8GLIB_SH1106
-#endif
-
-//
-// CONTROLLER TYPE: Shift register panels
-//
-// 2 wire Non-latching LCD SR from https://goo.gl/aJJ4sH
-// LCD configuration: http://reprap.org/wiki/SAV_3D_LCD
-//
-//#define SAV_3DLCD
-
-//=============================================================================
-//=============================== Extra Features ==============================
-//=============================================================================
-
-// @section extras
-
-// Increase the FAN PWM frequency. Removes the PWM noise but increases heating in the FET/Arduino
-//#define FAST_PWM_FAN
-
-// Use software PWM to drive the fan, as for the heaters. This uses a very low frequency
-// which is not as annoying as with the hardware PWM. On the other hand, if this frequency
-// is too low, you should also increment SOFT_PWM_SCALE.
-//#define FAN_SOFT_PWM
-
-// Incrementing this by 1 will double the software PWM frequency,
-// affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
-// However, control resolution will be halved for each increment;
-// at zero value, there are 128 effective control positions.
-#define SOFT_PWM_SCALE 0
-
-// Temperature status LEDs that display the hotend and bed temperature.
-// If all hotends and bed temperature and temperature setpoint are < 54C then the BLUE led is on.
-// Otherwise the RED led is on. There is 1C hysteresis.
-#define TEMP_STAT_LEDS
-
-// M240 Triggers a camera by emulating a Canon RC-1 Remote
-// Data from: http://www.doc-diy.net/photo/rc-1_hacked/
-//#define PHOTOGRAPH_PIN 23
-
-// SkeinForge sends the wrong arc g-codes when using Arc Point as fillet procedure
-//#define SF_ARC_FIX
-
-// Support for the BariCUDA Paste Extruder.
-//#define BARICUDA
-
-//define BlinkM/CyzRgb Support
-//#define BLINKM
-
-/*********************************************************************\
-* R/C SERVO support
-* Sponsored by TrinityLabs, Reworked by codexmas
-**********************************************************************/
-
-// Number of servos
-//
-// If you select a configuration below, this will receive a default value and does not need to be set manually
-// set it manually if you have more servos than extruders and wish to manually control some
-// leaving it undefined or defining as 0 will disable the servo subsystem
-// If unsure, leave commented / disabled
-//
-//#define NUM_SERVOS 3 // Servo index starts with 0 for M280 command
-
-// Delay (in microseconds) before the next move will start, to give the servo time to reach its target angle.
-// 300ms is a good value but you can try less delay.
-// If the servo can't reach the requested position, increase it.
-#define SERVO_DELAY 300
-
-// Servo deactivation
-//
-// With this option servos are powered only during movement, then turned off to prevent jitter.
-//#define DEACTIVATE_SERVOS_AFTER_MOVE
-
-/**********************************************************************\
- * Support for a filament diameter sensor
- * Also allows adjustment of diameter at print time (vs at slicing)
- * Single extruder only at this point (extruder 0)
- *
- * Motherboards
- * 34 - RAMPS1.4 - uses Analog input 5 on the AUX2 connector
- * 81 - Printrboard - Uses Analog input 2 on the Exp1 connector (version B,C,D,E)
- * 301 - Rambo - uses Analog input 3
- * Note may require analog pins to be defined for different motherboards
- **********************************************************************/
-// Uncomment below to enable
-//#define FILAMENT_WIDTH_SENSOR
-
-#define DEFAULT_NOMINAL_FILAMENT_DIA 3.00 //Enter the diameter (in mm) of the filament generally used (3.0 mm or 1.75 mm) - this is then used in the slicer software. Used for sensor reading validation
-
-#if ENABLED(FILAMENT_WIDTH_SENSOR)
- #define FILAMENT_SENSOR_EXTRUDER_NUM 0 //The number of the extruder that has the filament sensor (0,1,2)
- #define MEASUREMENT_DELAY_CM 14 //measurement delay in cm. This is the distance from filament sensor to middle of barrel
-
- #define MEASURED_UPPER_LIMIT 3.30 //upper limit factor used for sensor reading validation in mm
- #define MEASURED_LOWER_LIMIT 1.90 //lower limit factor for sensor reading validation in mm
- #define MAX_MEASUREMENT_DELAY 20 //delay buffer size in bytes (1 byte = 1cm)- limits maximum measurement delay allowable (must be larger than MEASUREMENT_DELAY_CM and lower number saves RAM)
-
- #define DEFAULT_MEASURED_FILAMENT_DIA DEFAULT_NOMINAL_FILAMENT_DIA //set measured to nominal initially
-
- //When using an LCD, uncomment the line below to display the Filament sensor data on the last line instead of status. Status will appear for 5 sec.
- //#define FILAMENT_LCD_DISPLAY
-#endif
-
-#endif // CONFIGURATION_H
diff --git a/Marlin/example_configurations/Cartesio/Configuration_adv.h b/Marlin/example_configurations/Cartesio/Configuration_adv.h
deleted file mode 100644
index 3e10c3f..0000000
--- a/Marlin/example_configurations/Cartesio/Configuration_adv.h
+++ /dev/null
@@ -1,799 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Configuration_adv.h
- *
- * Advanced settings.
- * Only change these if you know exactly what you're doing.
- * Some of these settings can damage your printer if improperly set!
- *
- * Basic settings can be found in Configuration.h
- *
- */
-#ifndef CONFIGURATION_ADV_H
-#define CONFIGURATION_ADV_H
-
-/**
- *
- * ***********************************
- * ** ATTENTION TO ALL DEVELOPERS **
- * ***********************************
- *
- * You must increment this version number for every significant change such as,
- * but not limited to: ADD, DELETE RENAME OR REPURPOSE any directive/option.
- *
- * Note: Update also Version.h !
- */
-#define CONFIGURATION_ADV_H_VERSION 010100
-
-// @section temperature
-
-//===========================================================================
-//=============================Thermal Settings ============================
-//===========================================================================
-
-#if DISABLED(PIDTEMPBED)
- #define BED_CHECK_INTERVAL 5000 // ms between checks in bang-bang control
- #if ENABLED(BED_LIMIT_SWITCHING)
- #define BED_HYSTERESIS 2 // Only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS
- #endif
-#endif
-
-/**
- * Thermal Protection protects your printer from damage and fire if a
- * thermistor falls out or temperature sensors fail in any way.
- *
- * The issue: If a thermistor falls out or a temperature sensor fails,
- * Marlin can no longer sense the actual temperature. Since a disconnected
- * thermistor reads as a low temperature, the firmware will keep the heater on.
- *
- * The solution: Once the temperature reaches the target, start observing.
- * If the temperature stays too far below the target (hysteresis) for too long (period),
- * the firmware will halt the machine as a safety precaution.
- *
- * If you get false positives for "Thermal Runaway" increase THERMAL_PROTECTION_HYSTERESIS and/or THERMAL_PROTECTION_PERIOD
- */
-#if ENABLED(THERMAL_PROTECTION_HOTENDS)
- #define THERMAL_PROTECTION_PERIOD 40 // Seconds
- #define THERMAL_PROTECTION_HYSTERESIS 4 // Degrees Celsius
-
- /**
- * Whenever an M104 or M109 increases the target temperature the firmware will wait for the
- * WATCH_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_TEMP_INCREASE
- * degrees, the machine is halted, requiring a hard reset. This test restarts with any M104/M109,
- * but only if the current temperature is far enough below the target for a reliable test.
- *
- * If you get false positives for "Heating failed" increase WATCH_TEMP_PERIOD and/or decrease WATCH_TEMP_INCREASE
- * WATCH_TEMP_INCREASE should not be below 2.
- */
- #define WATCH_TEMP_PERIOD 20 // Seconds
- #define WATCH_TEMP_INCREASE 2 // Degrees Celsius
-#endif
-
-/**
- * Thermal Protection parameters for the bed are just as above for hotends.
- */
-#if ENABLED(THERMAL_PROTECTION_BED)
- #define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
- #define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
-
- /**
- * Whenever an M140 or M190 increases the target temperature the firmware will wait for the
- * WATCH_BED_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_BED_TEMP_INCREASE
- * degrees, the machine is halted, requiring a hard reset. This test restarts with any M140/M190,
- * but only if the current temperature is far enough below the target for a reliable test.
- *
- * If you get too many "Heating failed" errors, increase WATCH_BED_TEMP_PERIOD and/or decrease
- * WATCH_BED_TEMP_INCREASE. (WATCH_BED_TEMP_INCREASE should not be below 2.)
- */
- #define WATCH_BED_TEMP_PERIOD 60 // Seconds
- #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
-#endif
-
-#if ENABLED(PIDTEMP)
- // this adds an experimental additional term to the heating power, proportional to the extrusion speed.
- // if Kc is chosen well, the additional required power due to increased melting should be compensated.
- //#define PID_EXTRUSION_SCALING
- #if ENABLED(PID_EXTRUSION_SCALING)
- #define DEFAULT_Kc (100) //heating power=Kc*(e_speed)
- #define LPQ_MAX_LEN 50
- #endif
-#endif
-
-/**
- * Automatic Temperature:
- * The hotend target temperature is calculated by all the buffered lines of gcode.
- * The maximum buffered steps/sec of the extruder motor is called "se".
- * Start autotemp mode with M109 S B F
- * The target temperature is set to mintemp+factor*se[steps/sec] and is limited by
- * mintemp and maxtemp. Turn this off by executing M109 without F*
- * Also, if the temperature is set to a value below mintemp, it will not be changed by autotemp.
- * On an Ultimaker, some initial testing worked with M109 S215 B260 F1 in the start.gcode
- */
-#define AUTOTEMP
-#if ENABLED(AUTOTEMP)
- #define AUTOTEMP_OLDWEIGHT 0.98
-#endif
-
-//Show Temperature ADC value
-//The M105 command return, besides traditional information, the ADC value read from temperature sensors.
-//#define SHOW_TEMP_ADC_VALUES
-
-/**
- * High Temperature Thermistor Support
- *
- * Thermistors able to support high temperature tend to have a hard time getting
- * good readings at room and lower temperatures. This means HEATER_X_RAW_LO_TEMP
- * will probably be caught when the heating element first turns on during the
- * preheating process, which will trigger a min_temp_error as a safety measure
- * and force stop everything.
- * To circumvent this limitation, we allow for a preheat time (during which,
- * min_temp_error won't be triggered) and add a min_temp buffer to handle
- * aberrant readings.
- *
- * If you want to enable this feature for your hotend thermistor(s)
- * uncomment and set values > 0 in the constants below
- */
-
-// The number of consecutive low temperature errors that can occur
-// before a min_temp_error is triggered. (Shouldn't be more than 10.)
-//#define MAX_CONSECUTIVE_LOW_TEMPERATURE_ERROR_ALLOWED 0
-
-// The number of milliseconds a hotend will preheat before starting to check
-// the temperature. This value should NOT be set to the time it takes the
-// hot end to reach the target temperature, but the time it takes to reach
-// the minimum temperature your thermistor can read. The lower the better/safer.
-// This shouldn't need to be more than 30 seconds (30000)
-//#define MILLISECONDS_PREHEAT_TIME 0
-
-// @section extruder
-
-// extruder run-out prevention.
-//if the machine is idle, and the temperature over MINTEMP, every couple of SECONDS some filament is extruded
-//#define EXTRUDER_RUNOUT_PREVENT
-#define EXTRUDER_RUNOUT_MINTEMP 190
-#define EXTRUDER_RUNOUT_SECONDS 30
-#define EXTRUDER_RUNOUT_ESTEPS 14 // mm filament
-#define EXTRUDER_RUNOUT_SPEED 1500 // extrusion speed
-#define EXTRUDER_RUNOUT_EXTRUDE 100
-
-// @section temperature
-
-//These defines help to calibrate the AD595 sensor in case you get wrong temperature measurements.
-//The measured temperature is defined as "actualTemp = (measuredTemp * TEMP_SENSOR_AD595_GAIN) + TEMP_SENSOR_AD595_OFFSET"
-#define TEMP_SENSOR_AD595_OFFSET 3.0
-#define TEMP_SENSOR_AD595_GAIN 2.0
-
-//This is for controlling a fan to cool down the stepper drivers
-//it will turn on when any driver is enabled
-//and turn off after the set amount of seconds from last driver being disabled again
-#define CONTROLLERFAN_PIN -1 //Pin used for the fan to cool controller (-1 to disable)
-#define CONTROLLERFAN_SECS 60 //How many seconds, after all motors were disabled, the fan should run
-#define CONTROLLERFAN_SPEED 255 // == full speed
-
-// When first starting the main fan, run it at full speed for the
-// given number of milliseconds. This gets the fan spinning reliably
-// before setting a PWM value. (Does not work with software PWM for fan on Sanguinololu)
-//#define FAN_KICKSTART_TIME 100
-
-// This defines the minimal speed for the main fan, run in PWM mode
-// to enable uncomment and set minimal PWM speed for reliable running (1-255)
-// if fan speed is [1 - (FAN_MIN_PWM-1)] it is set to FAN_MIN_PWM
-//#define FAN_MIN_PWM 50
-
-// @section extruder
-
-// Extruder cooling fans
-// Configure fan pin outputs to automatically turn on/off when the associated
-// extruder temperature is above/below EXTRUDER_AUTO_FAN_TEMPERATURE.
-// Multiple extruders can be assigned to the same pin in which case
-// the fan will turn on when any selected extruder is above the threshold.
-#define EXTRUDER_0_AUTO_FAN_PIN 7
-#define EXTRUDER_1_AUTO_FAN_PIN 7
-#define EXTRUDER_2_AUTO_FAN_PIN -1
-#define EXTRUDER_3_AUTO_FAN_PIN -1
-#define EXTRUDER_AUTO_FAN_TEMPERATURE 35
-#define EXTRUDER_AUTO_FAN_SPEED 255 // == full speed
-
-//===========================================================================
-//============================ Mechanical Settings ==========================
-//===========================================================================
-
-// @section homing
-
-// If you want endstops to stay on (by default) even when not homing
-// enable this option. Override at any time with M120, M121.
-//#define ENDSTOPS_ALWAYS_ON_DEFAULT
-
-// @section extras
-
-//#define Z_LATE_ENABLE // Enable Z the last moment. Needed if your Z driver overheats.
-
-// Dual X Steppers
-// Uncomment this option to drive two X axis motors.
-// The next unused E driver will be assigned to the second X stepper.
-//#define X_DUAL_STEPPER_DRIVERS
-#if ENABLED(X_DUAL_STEPPER_DRIVERS)
- // Set true if the two X motors need to rotate in opposite directions
- #define INVERT_X2_VS_X_DIR true
-#endif
-
-
-// Dual Y Steppers
-// Uncomment this option to drive two Y axis motors.
-// The next unused E driver will be assigned to the second Y stepper.
-//#define Y_DUAL_STEPPER_DRIVERS
-#if ENABLED(Y_DUAL_STEPPER_DRIVERS)
- // Set true if the two Y motors need to rotate in opposite directions
- #define INVERT_Y2_VS_Y_DIR true
-#endif
-
-// A single Z stepper driver is usually used to drive 2 stepper motors.
-// Uncomment this option to use a separate stepper driver for each Z axis motor.
-// The next unused E driver will be assigned to the second Z stepper.
-//#define Z_DUAL_STEPPER_DRIVERS
-
-#if ENABLED(Z_DUAL_STEPPER_DRIVERS)
-
- // Z_DUAL_ENDSTOPS is a feature to enable the use of 2 endstops for both Z steppers - Let's call them Z stepper and Z2 stepper.
- // That way the machine is capable to align the bed during home, since both Z steppers are homed.
- // There is also an implementation of M666 (software endstops adjustment) to this feature.
- // After Z homing, this adjustment is applied to just one of the steppers in order to align the bed.
- // One just need to home the Z axis and measure the distance difference between both Z axis and apply the math: Z adjust = Z - Z2.
- // If the Z stepper axis is closer to the bed, the measure Z > Z2 (yes, it is.. think about it) and the Z adjust would be positive.
- // Play a little bit with small adjustments (0.5mm) and check the behaviour.
- // The M119 (endstops report) will start reporting the Z2 Endstop as well.
-
- //#define Z_DUAL_ENDSTOPS
-
- #if ENABLED(Z_DUAL_ENDSTOPS)
- #define Z2_USE_ENDSTOP _XMAX_
- #endif
-
-#endif // Z_DUAL_STEPPER_DRIVERS
-
-// Enable this for dual x-carriage printers.
-// A dual x-carriage design has the advantage that the inactive extruder can be parked which
-// prevents hot-end ooze contaminating the print. It also reduces the weight of each x-carriage
-// allowing faster printing speeds. Connect your X2 stepper to the first unused E plug.
-//#define DUAL_X_CARRIAGE
-#if ENABLED(DUAL_X_CARRIAGE)
- // Configuration for second X-carriage
- // Note: the first x-carriage is defined as the x-carriage which homes to the minimum endstop;
- // the second x-carriage always homes to the maximum endstop.
- #define X2_MIN_POS 80 // set minimum to ensure second x-carriage doesn't hit the parked first X-carriage
- #define X2_MAX_POS 353 // set maximum to the distance between toolheads when both heads are homed
- #define X2_HOME_DIR 1 // the second X-carriage always homes to the maximum endstop position
- #define X2_HOME_POS X2_MAX_POS // default home position is the maximum carriage position
- // However: In this mode the HOTEND_OFFSET_X value for the second extruder provides a software
- // override for X2_HOME_POS. This also allow recalibration of the distance between the two endstops
- // without modifying the firmware (through the "M218 T1 X???" command).
- // Remember: you should set the second extruder x-offset to 0 in your slicer.
-
- // There are a few selectable movement modes for dual x-carriages using M605 S
- // Mode 0: Full control. The slicer has full control over both x-carriages and can achieve optimal travel results
- // as long as it supports dual x-carriages. (M605 S0)
- // Mode 1: Auto-park mode. The firmware will automatically park and unpark the x-carriages on tool changes so
- // that additional slicer support is not required. (M605 S1)
- // Mode 2: Duplication mode. The firmware will transparently make the second x-carriage and extruder copy all
- // actions of the first x-carriage. This allows the printer to print 2 arbitrary items at
- // once. (2nd extruder x offset and temp offset are set using: M605 S2 [Xnnn] [Rmmm])
-
- // This is the default power-up mode which can be later using M605.
- #define DEFAULT_DUAL_X_CARRIAGE_MODE 0
-
- // Default settings in "Auto-park Mode"
- #define TOOLCHANGE_PARK_ZLIFT 0.2 // the distance to raise Z axis when parking an extruder
- #define TOOLCHANGE_UNPARK_ZLIFT 1 // the distance to raise Z axis when unparking an extruder
-
- // Default x offset in duplication mode (typically set to half print bed width)
- #define DEFAULT_DUPLICATION_X_OFFSET 100
-
-#endif //DUAL_X_CARRIAGE
-
-// @section homing
-
-//homing hits the endstop, then retracts by this distance, before it tries to slowly bump again:
-#define X_HOME_BUMP_MM 5
-#define Y_HOME_BUMP_MM 5
-#define Z_HOME_BUMP_MM 2
-#define HOMING_BUMP_DIVISOR {2, 2, 4} // Re-Bump Speed Divisor (Divides the Homing Feedrate)
-//#define QUICK_HOME //if this is defined, if both x and y are to be homed, a diagonal move will be performed initially.
-
-// When G28 is called, this option will make Y home before X
-#define HOME_Y_BEFORE_X
-
-// @section machine
-
-#define AXIS_RELATIVE_MODES {false, false, false, false}
-
-// Allow duplication mode with a basic dual-nozzle extruder
-//#define DUAL_NOZZLE_DUPLICATION_MODE
-
-// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
-#define INVERT_X_STEP_PIN false
-#define INVERT_Y_STEP_PIN false
-#define INVERT_Z_STEP_PIN false
-#define INVERT_E_STEP_PIN false
-
-// Default stepper release if idle. Set to 0 to deactivate.
-// Steppers will shut down DEFAULT_STEPPER_DEACTIVE_TIME seconds after the last move when DISABLE_INACTIVE_? is true.
-// Time can be set by M18 and M84.
-#define DEFAULT_STEPPER_DEACTIVE_TIME 120
-#define DISABLE_INACTIVE_X true
-#define DISABLE_INACTIVE_Y true
-#define DISABLE_INACTIVE_Z true // set to false if the nozzle will fall down on your printed part when print has finished.
-#define DISABLE_INACTIVE_E true
-
-#define DEFAULT_MINIMUMFEEDRATE 0.0 // minimum feedrate
-#define DEFAULT_MINTRAVELFEEDRATE 0.0
-
-// @section lcd
-
-#if ENABLED(ULTIPANEL)
- #define MANUAL_FEEDRATE {50*60, 50*60, 4*60, 60} // Feedrates for manual moves along X, Y, Z, E from panel
- #define ULTIPANEL_FEEDMULTIPLY // Comment to disable setting feedrate multiplier via encoder
-#endif
-
-// @section extras
-
-// minimum time in microseconds that a movement needs to take if the buffer is emptied.
-#define DEFAULT_MINSEGMENTTIME 20000
-
-// If defined the movements slow down when the look ahead buffer is only half full
-#define SLOWDOWN
-
-// Frequency limit
-// See nophead's blog for more info
-// Not working O
-//#define XY_FREQUENCY_LIMIT 15
-
-// Minimum planner junction speed. Sets the default minimum speed the planner plans for at the end
-// of the buffer and all stops. This should not be much greater than zero and should only be changed
-// if unwanted behavior is observed on a user's machine when running at very slow speeds.
-#define MINIMUM_PLANNER_SPEED 0.05// (mm/sec)
-
-// Microstep setting (Only functional when stepper driver microstep pins are connected to MCU.
-#define MICROSTEP_MODES {16,16,16,16,16} // [1,2,4,8,16]
-
-// Motor Current setting (Only functional when motor driver current ref pins are connected to a digital trimpot on supported boards)
-#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
-
-// Motor Current controlled via PWM (Overridable on supported boards with PWM-driven motor driver current)
-//#define PWM_MOTOR_CURRENT {1300, 1300, 1250} // Values in milliamps
-
-// uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
-//#define DIGIPOT_I2C
-// Number of channels available for I2C digipot, For Azteeg X3 Pro we have 8
-#define DIGIPOT_I2C_NUM_CHANNELS 8
-// actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
-#define DIGIPOT_I2C_MOTOR_CURRENTS {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}
-
-//===========================================================================
-//=============================Additional Features===========================
-//===========================================================================
-
-#define ENCODER_RATE_MULTIPLIER // If defined, certain menu edit operations automatically multiply the steps when the encoder is moved quickly
-#define ENCODER_10X_STEPS_PER_SEC 75 // If the encoder steps per sec exceeds this value, multiply steps moved x10 to quickly advance the value
-#define ENCODER_100X_STEPS_PER_SEC 160 // If the encoder steps per sec exceeds this value, multiply steps moved x100 to really quickly advance the value
-
-//#define CHDK 4 //Pin for triggering CHDK to take a picture see how to use it here http://captain-slow.dk/2014/03/09/3d-printing-timelapses/
-#define CHDK_DELAY 50 //How long in ms the pin should stay HIGH before going LOW again
-
-// @section lcd
-
-// Include a page of printer information in the LCD Main Menu
-//#define LCD_INFO_MENU
-
-#if ENABLED(SDSUPPORT)
-
- // Some RAMPS and other boards don't detect when an SD card is inserted. You can work
- // around this by connecting a push button or single throw switch to the pin defined
- // as SD_DETECT_PIN in your board's pins definitions.
- // This setting should be disabled unless you are using a push button, pulling the pin to ground.
- // Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
- #define SD_DETECT_INVERTED
-
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
- #define SD_FINISHED_RELEASECOMMAND "M84 X Y Z E" // You might want to keep the z enabled so your bed stays in place.
-
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
- //#define MENU_ADDAUTOSTART
-
- // Show a progress bar on HD44780 LCDs for SD printing
- //#define LCD_PROGRESS_BAR
-
- #if ENABLED(LCD_PROGRESS_BAR)
- // Amount of time (ms) to show the bar
- #define PROGRESS_BAR_BAR_TIME 2000
- // Amount of time (ms) to show the status message
- #define PROGRESS_BAR_MSG_TIME 3000
- // Amount of time (ms) to retain the status message (0=forever)
- #define PROGRESS_MSG_EXPIRE 0
- // Enable this to show messages for MSG_TIME then hide them
- //#define PROGRESS_MSG_ONCE
- #endif
-
- // This allows hosts to request long names for files and folders with M33
- //#define LONG_FILENAME_HOST_SUPPORT
-
- // This option allows you to abort SD printing when any endstop is triggered.
- // This feature must be enabled with "M540 S1" or from the LCD menu.
- // To have any effect, endstops must be enabled during SD printing.
- //#define ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED
-
-#endif // SDSUPPORT
-
-// for dogm lcd displays you can choose some additional fonts:
-#if ENABLED(DOGLCD)
- // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT
- // we don't have a big font for Cyrillic, Kana
- //#define USE_BIG_EDIT_FONT
-
- // If you have spare 2300Byte of progmem and want to use a
- // smaller font on the Info-screen uncomment the next line.
- //#define USE_SMALL_INFOFONT
-#endif // DOGLCD
-
-// @section safety
-
-// The hardware watchdog should reset the microcontroller disabling all outputs,
-// in case the firmware gets stuck and doesn't do temperature regulation.
-#define USE_WATCHDOG
-
-#if ENABLED(USE_WATCHDOG)
- // If you have a watchdog reboot in an ArduinoMega2560 then the device will hang forever, as a watchdog reset will leave the watchdog on.
- // The "WATCHDOG_RESET_MANUAL" goes around this by not using the hardware reset.
- // However, THIS FEATURE IS UNSAFE!, as it will only work if interrupts are disabled. And the code could hang in an interrupt routine with interrupts disabled.
- //#define WATCHDOG_RESET_MANUAL
-#endif
-
-// @section lcd
-
-// Babystepping enables the user to control the axis in tiny amounts, independently from the normal printing process
-// it can e.g. be used to change z-positions in the print startup phase in real-time
-// does not respect endstops!
-//#define BABYSTEPPING
-#if ENABLED(BABYSTEPPING)
- #define BABYSTEP_XY //not only z, but also XY in the menu. more clutter, more functions
- //not implemented for deltabots!
- #define BABYSTEP_INVERT_Z false //true for inverse movements in Z
- #define BABYSTEP_MULTIPLICATOR 1 //faster movements
-#endif
-
-// @section extruder
-
-// extruder advance constant (s2/mm3)
-//
-// advance (steps) = STEPS_PER_CUBIC_MM_E * EXTRUDER_ADVANCE_K * cubic mm per second ^ 2
-//
-// Hooke's law says: force = k * distance
-// Bernoulli's principle says: v ^ 2 / 2 + g . h + pressure / density = constant
-// so: v ^ 2 is proportional to number of steps we advance the extruder
-//#define ADVANCE
-
-#if ENABLED(ADVANCE)
- #define EXTRUDER_ADVANCE_K .0
- #define D_FILAMENT 2.85
-#endif
-
-// Implementation of a linear pressure control
-// Assumption: advance = k * (delta velocity)
-// K=0 means advance disabled. A good value for a gregs wade extruder will be around K=75
-//#define LIN_ADVANCE
-
-#if ENABLED(LIN_ADVANCE)
- #define LIN_ADVANCE_K 75
-#endif
-
-// @section leveling
-
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #define MESH_MIN_X (X_MIN_POS + MESH_INSET)
- #define MESH_MAX_X (X_MAX_POS - (MESH_INSET))
- #define MESH_MIN_Y (Y_MIN_POS + MESH_INSET)
- #define MESH_MAX_Y (Y_MAX_POS - (MESH_INSET))
-#endif
-
-// @section extras
-
-// Arc interpretation settings:
-#define ARC_SUPPORT // Disabling this saves ~2738 bytes
-#define MM_PER_ARC_SEGMENT 1
-#define N_ARC_CORRECTION 25
-
-// Support for G5 with XYZE destination and IJPQ offsets. Requires ~2666 bytes.
-//#define BEZIER_CURVE_SUPPORT
-
-const unsigned int dropsegments = 5; //everything with less than this number of steps will be ignored as move and joined with the next movement
-
-// @section temperature
-
-// Control heater 0 and heater 1 in parallel.
-//#define HEATERS_PARALLEL
-
-//===========================================================================
-//================================= Buffers =================================
-//===========================================================================
-
-// @section hidden
-
-// The number of linear motions that can be in the plan at any give time.
-// THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2, i.g. 8,16,32 because shifts and ors are used to do the ring-buffering.
-#if ENABLED(SDSUPPORT)
- #define BLOCK_BUFFER_SIZE 16 // SD,LCD,Buttons take more memory, block buffer needs to be smaller
-#else
- #define BLOCK_BUFFER_SIZE 16 // maximize block buffer
-#endif
-
-// @section serial
-
-// The ASCII buffer for serial input
-#define MAX_CMD_SIZE 96
-#define BUFSIZE 4
-
-// Transfer Buffer Size
-// To save 386 bytes of PROGMEM (and TX_BUFFER_SIZE+3 bytes of RAM) set to 0.
-// To buffer a simple "ok" you need 4 bytes.
-// For ADVANCED_OK (M105) you need 32 bytes.
-// For debug-echo: 128 bytes for the optimal speed.
-// Other output doesn't need to be that speedy.
-// :[0,2,4,8,16,32,64,128,256]
-#define TX_BUFFER_SIZE 0
-
-// Enable an emergency-command parser to intercept certain commands as they
-// enter the serial receive buffer, so they cannot be blocked.
-// Currently handles M108, M112, M410
-// Does not work on boards using AT90USB (USBCON) processors!
-//#define EMERGENCY_PARSER
-
-// Bad Serial-connections can miss a received command by sending an 'ok'
-// Therefore some clients abort after 30 seconds in a timeout.
-// Some other clients start sending commands while receiving a 'wait'.
-// This "wait" is only sent when the buffer is empty. 1 second is a good value here.
-//#define NO_TIMEOUTS 1000 // Milliseconds
-
-// Some clients will have this feature soon. This could make the NO_TIMEOUTS unnecessary.
-//#define ADVANCED_OK
-
-// @section fwretract
-
-// Firmware based and LCD controlled retract
-// M207 and M208 can be used to define parameters for the retraction.
-// The retraction can be called by the slicer using G10 and G11
-// until then, intended retractions can be detected by moves that only extrude and the direction.
-// the moves are than replaced by the firmware controlled ones.
-
-//#define FWRETRACT //ONLY PARTIALLY TESTED
-#if ENABLED(FWRETRACT)
- #define MIN_RETRACT 0.1 //minimum extruded mm to accept a automatic gcode retraction attempt
- #define RETRACT_LENGTH 3 //default retract length (positive mm)
- #define RETRACT_LENGTH_SWAP 13 //default swap retract length (positive mm), for extruder change
- #define RETRACT_FEEDRATE 45 //default feedrate for retracting (mm/s)
- #define RETRACT_ZLIFT 0 //default retract Z-lift
- #define RETRACT_RECOVER_LENGTH 0 //default additional recover length (mm, added to retract length when recovering)
- #define RETRACT_RECOVER_LENGTH_SWAP 0 //default additional swap recover length (mm, added to retract length when recovering from extruder change)
- #define RETRACT_RECOVER_FEEDRATE 8 //default feedrate for recovering from retraction (mm/s)
-#endif
-
-// Add support for experimental filament exchange support M600; requires display
-#if ENABLED(ULTIPANEL)
- // #define FILAMENT_CHANGE_FEATURE // Enable filament exchange menu and M600 g-code (used for runout sensor too)
- #if ENABLED(FILAMENT_CHANGE_FEATURE)
- #define FILAMENT_CHANGE_X_POS 30 // X position of hotend
- #define FILAMENT_CHANGE_Y_POS 10 // Y position of hotend
- #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift)
- #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
- #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers)
- #define FILAMENT_CHANGE_RETRACT_LENGTH 1 // Initial retract in mm
- // It is a short retract used immediately after print interrupt before move to filament exchange position
- #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
- //#define FILAMENT_CHANGE_UNLOAD_LENGTH 100 // Unload filament length from hotend in mm
- // Longer length for bowden printers to unload filament from whole bowden tube,
- // shorter lenght for printers without bowden to unload filament from extruder only,
- // 0 to disable unloading for manual unloading
- #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast
- #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm
- // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
- // Short or zero length for printers without bowden where loading is not used
- #define FILAMENT_CHANGE_LOAD_FEEDRATE 10 // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
- #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is load over the hotend,
- // 0 to disable for manual extrusion
- // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
- // or until outcoming filament color is not clear for filament color change
- #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
- #endif
-#endif
-
-/******************************************************************************\
- * enable this section if you have TMC26X motor drivers.
- * you need to import the TMC26XStepper library into the Arduino IDE for this
- ******************************************************************************/
-
-// @section tmc
-
-//#define HAVE_TMCDRIVER
-#if ENABLED(HAVE_TMCDRIVER)
-
- //#define X_IS_TMC
- #define X_MAX_CURRENT 1000 //in mA
- #define X_SENSE_RESISTOR 91 //in mOhms
- #define X_MICROSTEPS 16 //number of microsteps
-
- //#define X2_IS_TMC
- #define X2_MAX_CURRENT 1000 //in mA
- #define X2_SENSE_RESISTOR 91 //in mOhms
- #define X2_MICROSTEPS 16 //number of microsteps
-
- //#define Y_IS_TMC
- #define Y_MAX_CURRENT 1000 //in mA
- #define Y_SENSE_RESISTOR 91 //in mOhms
- #define Y_MICROSTEPS 16 //number of microsteps
-
- //#define Y2_IS_TMC
- #define Y2_MAX_CURRENT 1000 //in mA
- #define Y2_SENSE_RESISTOR 91 //in mOhms
- #define Y2_MICROSTEPS 16 //number of microsteps
-
- //#define Z_IS_TMC
- #define Z_MAX_CURRENT 1000 //in mA
- #define Z_SENSE_RESISTOR 91 //in mOhms
- #define Z_MICROSTEPS 16 //number of microsteps
-
- //#define Z2_IS_TMC
- #define Z2_MAX_CURRENT 1000 //in mA
- #define Z2_SENSE_RESISTOR 91 //in mOhms
- #define Z2_MICROSTEPS 16 //number of microsteps
-
- //#define E0_IS_TMC
- #define E0_MAX_CURRENT 1000 //in mA
- #define E0_SENSE_RESISTOR 91 //in mOhms
- #define E0_MICROSTEPS 16 //number of microsteps
-
- //#define E1_IS_TMC
- #define E1_MAX_CURRENT 1000 //in mA
- #define E1_SENSE_RESISTOR 91 //in mOhms
- #define E1_MICROSTEPS 16 //number of microsteps
-
- //#define E2_IS_TMC
- #define E2_MAX_CURRENT 1000 //in mA
- #define E2_SENSE_RESISTOR 91 //in mOhms
- #define E2_MICROSTEPS 16 //number of microsteps
-
- //#define E3_IS_TMC
- #define E3_MAX_CURRENT 1000 //in mA
- #define E3_SENSE_RESISTOR 91 //in mOhms
- #define E3_MICROSTEPS 16 //number of microsteps
-
-#endif
-
-/******************************************************************************\
- * enable this section if you have L6470 motor drivers.
- * you need to import the L6470 library into the Arduino IDE for this
- ******************************************************************************/
-
-// @section l6470
-
-//#define HAVE_L6470DRIVER
-#if ENABLED(HAVE_L6470DRIVER)
-
- //#define X_IS_L6470
- #define X_MICROSTEPS 16 //number of microsteps
- #define X_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define X_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define X_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define X2_IS_L6470
- #define X2_MICROSTEPS 16 //number of microsteps
- #define X2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define X2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define X2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Y_IS_L6470
- #define Y_MICROSTEPS 16 //number of microsteps
- #define Y_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Y_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Y_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Y2_IS_L6470
- #define Y2_MICROSTEPS 16 //number of microsteps
- #define Y2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Y2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Y2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Z_IS_L6470
- #define Z_MICROSTEPS 16 //number of microsteps
- #define Z_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Z_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Z_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Z2_IS_L6470
- #define Z2_MICROSTEPS 16 //number of microsteps
- #define Z2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Z2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Z2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E0_IS_L6470
- #define E0_MICROSTEPS 16 //number of microsteps
- #define E0_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E0_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E0_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E1_IS_L6470
- #define E1_MICROSTEPS 16 //number of microsteps
- #define E1_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E1_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E1_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E2_IS_L6470
- #define E2_MICROSTEPS 16 //number of microsteps
- #define E2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E3_IS_L6470
- #define E3_MICROSTEPS 16 //number of microsteps
- #define E3_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E3_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E3_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
-#endif
-
-/**
- * TWI/I2C BUS
- *
- * This feature is an EXPERIMENTAL feature so it shall not be used on production
- * machines. Enabling this will allow you to send and receive I2C data from slave
- * devices on the bus.
- *
- * ; Example #1
- * ; This macro send the string "Marlin" to the slave device with address 0x63 (99)
- * ; It uses multiple M155 commands with one B arg
- * M155 A99 ; Target slave address
- * M155 B77 ; M
- * M155 B97 ; a
- * M155 B114 ; r
- * M155 B108 ; l
- * M155 B105 ; i
- * M155 B110 ; n
- * M155 S1 ; Send the current buffer
- *
- * ; Example #2
- * ; Request 6 bytes from slave device with address 0x63 (99)
- * M156 A99 B5
- *
- * ; Example #3
- * ; Example serial output of a M156 request
- * echo:i2c-reply: from:99 bytes:5 data:hello
- */
-
-// @section i2cbus
-
-//#define EXPERIMENTAL_I2CBUS
-
-#endif // CONFIGURATION_ADV_H
diff --git a/Marlin/example_configurations/Cartesio/_Bootscreen.h b/Marlin/example_configurations/Cartesio/_Bootscreen.h
deleted file mode 100644
index a365cae..0000000
--- a/Marlin/example_configurations/Cartesio/_Bootscreen.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Custom Bitmap for splashscreen
- *
- * You may use one of the following tools to generate the C++ bitmap array from
- * a black and white image:
- *
- * - http://www.marlinfw.org/tools/u8glib/converter.html
- * - http://www.digole.com/tools/PicturetoC_Hex_converter.php
- */
-#include
-
-#define CUSTOM_BOOTSCREEN_TIMEOUT 2500
-#define CUSTOM_BOOTSCREEN_BMPWIDTH 63
-#define CUSTOM_BOOTSCREEN_BMPHEIGHT 64
-
-const unsigned char custom_start_bmp[512] PROGMEM = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x03, 0xff, 0xff, 0xc0, 0x00, 0x00,
- 0x00, 0x00, 0x1f, 0xff, 0xff, 0xf0, 0x00, 0x00,
- 0x00, 0x00, 0x7f, 0xff, 0xff, 0xfc, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
- 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00,
- 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x00,
- 0x00, 0x0f, 0x07, 0x87, 0xff, 0xff, 0xe0, 0x00,
- 0x00, 0x1f, 0x8f, 0xc7, 0xff, 0xff, 0xf1, 0x00,
- 0x01, 0x1f, 0x8f, 0xc7, 0xff, 0xff, 0xf1, 0x80,
- 0x03, 0x1f, 0x8f, 0xc7, 0xff, 0xff, 0xf1, 0x80,
- 0x07, 0x1f, 0x8f, 0xc7, 0xff, 0xff, 0xe1, 0xc0,
- 0x07, 0x1f, 0x8f, 0xc7, 0xc0, 0x00, 0x01, 0xe0,
- 0x0f, 0x1f, 0x8f, 0xc7, 0xc0, 0x00, 0x01, 0xe0,
- 0x0f, 0x1f, 0x8f, 0xc7, 0xc0, 0x00, 0x01, 0xf0,
- 0x1f, 0x1f, 0x8f, 0xc7, 0xc0, 0x00, 0x01, 0xf0,
- 0x1f, 0x1f, 0x8f, 0xc7, 0xff, 0xff, 0xe1, 0xf0,
- 0x3f, 0x1f, 0x8f, 0xc7, 0xff, 0xff, 0xf1, 0xf8,
- 0x3f, 0x1f, 0x8f, 0xc7, 0xff, 0xff, 0xf1, 0xf8,
- 0x3f, 0x1f, 0x8f, 0xc7, 0xff, 0xff, 0xf1, 0xf8,
- 0x3f, 0x1f, 0x8f, 0xc7, 0xff, 0xff, 0xe1, 0xf8,
- 0x7f, 0x1f, 0x8f, 0xc7, 0xc0, 0x00, 0x01, 0xfc,
- 0x7f, 0x1f, 0x8f, 0xc7, 0xc0, 0x00, 0x01, 0xfc,
- 0x7f, 0x1f, 0x8f, 0xc7, 0xc0, 0x00, 0x01, 0xfc,
- 0x7f, 0x1f, 0x8f, 0xc7, 0xc0, 0x00, 0x01, 0xfc,
- 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
- 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
- 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
- 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
- 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
- 0x7f, 0x00, 0x00, 0x07, 0xc7, 0xe3, 0xf1, 0xfc,
- 0x7f, 0x00, 0x00, 0x07, 0xc7, 0xe3, 0xf1, 0xfc,
- 0x7f, 0x00, 0x00, 0x07, 0xc7, 0xe3, 0xf1, 0xfc,
- 0x3f, 0x0f, 0xff, 0xff, 0xc7, 0xe3, 0xf1, 0xf8,
- 0x3f, 0x1f, 0xff, 0xff, 0xc7, 0xe3, 0xf1, 0xf8,
- 0x3f, 0x1f, 0xff, 0xff, 0xc7, 0xe3, 0xf1, 0xf8,
- 0x3f, 0x1f, 0xff, 0xff, 0xc7, 0xe3, 0xf1, 0xf8,
- 0x1f, 0x1f, 0xff, 0xff, 0xc7, 0xe3, 0xf1, 0xf0,
- 0x1f, 0x0f, 0xff, 0xff, 0xc7, 0xe3, 0xf1, 0xf0,
- 0x1f, 0x00, 0x00, 0x07, 0xc7, 0xe3, 0xf1, 0xe0,
- 0x0f, 0x00, 0x00, 0x07, 0xc7, 0xe3, 0xf1, 0xe0,
- 0x0f, 0x00, 0x00, 0x07, 0xc7, 0xe3, 0xf1, 0xc0,
- 0x07, 0x0f, 0xff, 0xff, 0xc7, 0xe3, 0xf1, 0xc0,
- 0x03, 0x1f, 0xff, 0xff, 0xc7, 0xe3, 0xf1, 0x80,
- 0x03, 0x1f, 0xff, 0xff, 0xc7, 0xe3, 0xf1, 0x00,
- 0x01, 0x1f, 0xff, 0xff, 0xc7, 0xe3, 0xf0, 0x00,
- 0x00, 0x1f, 0xff, 0xff, 0xc7, 0xe3, 0xf0, 0x00,
- 0x00, 0x0f, 0xff, 0xff, 0xc3, 0xc1, 0xe0, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00,
- 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00,
- 0x00, 0x01, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00,
- 0x00, 0x00, 0x7f, 0xff, 0xff, 0xfc, 0x00, 0x00,
- 0x00, 0x00, 0x1f, 0xff, 0xff, 0xf0, 0x00, 0x00,
- 0x00, 0x00, 0x07, 0xff, 0xff, 0x80, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
diff --git a/Marlin/example_configurations/Felix/Configuration.h b/Marlin/example_configurations/Felix/Configuration.h
deleted file mode 100644
index bb8f643..0000000
--- a/Marlin/example_configurations/Felix/Configuration.h
+++ /dev/null
@@ -1,1310 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Configuration.h
- *
- * Basic settings such as:
- *
- * - Type of electronics
- * - Type of temperature sensor
- * - Printer geometry
- * - Endstop configuration
- * - LCD controller
- * - Extra features
- *
- * Advanced settings can be found in Configuration_adv.h
- *
- */
-#ifndef CONFIGURATION_H
-#define CONFIGURATION_H
-
-/**
- *
- * ***********************************
- * ** ATTENTION TO ALL DEVELOPERS **
- * ***********************************
- *
- * You must increment this version number for every significant change such as,
- * but not limited to: ADD, DELETE RENAME OR REPURPOSE any directive/option.
- *
- * Note: Update also Version.h !
- */
-#define CONFIGURATION_H_VERSION 010100
-
-//===========================================================================
-//============================= Getting Started =============================
-//===========================================================================
-
-/**
- * Here are some standard links for getting your machine calibrated:
- *
- * http://reprap.org/wiki/Calibration
- * http://youtu.be/wAL9d7FgInk
- * http://calculator.josefprusa.cz
- * http://reprap.org/wiki/Triffid_Hunter%27s_Calibration_Guide
- * http://www.thingiverse.com/thing:5573
- * https://sites.google.com/site/repraplogphase/calibration-of-your-reprap
- * http://www.thingiverse.com/thing:298812
- */
-
-//===========================================================================
-//============================= DELTA Printer ===============================
-//===========================================================================
-// For a Delta printer replace the configuration files with the files in the
-// example_configurations/delta directory.
-//
-
-//===========================================================================
-//============================= SCARA Printer ===============================
-//===========================================================================
-// For a Scara printer replace the configuration files with the files in the
-// example_configurations/SCARA directory.
-//
-
-// @section info
-
-// User-specified version info of this build to display in [Pronterface, etc] terminal window during
-// startup. Implementation of an idea by Prof Braino to inform user that any changes made to this
-// build by the user have been successfully uploaded into firmware.
-#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
-#define SHOW_BOOTSCREEN
-#define STRING_SPLASH_LINE1 SHORT_BUILD_VERSION // will be shown during boot in line 1
-#define STRING_SPLASH_LINE2 WEBSITE_URL // will be shown during boot in line 2
-
-//
-// *** VENDORS PLEASE READ *****************************************************
-//
-// Marlin now allow you to have a vendor boot image to be displayed on machine
-// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
-//
-// We suggest for you to take advantage of this new feature and keep the Marlin
-// boot image unmodified. For an example have a look at the bq Hephestos 2
-// example configuration folder.
-//
-//#define SHOW_CUSTOM_BOOTSCREEN
-// @section machine
-
-// SERIAL_PORT selects which serial port should be used for communication with the host.
-// This allows the connection of wireless adapters (for instance) to non-default port pins.
-// Serial port 0 is still used by the Arduino bootloader regardless of this setting.
-// :[0,1,2,3,4,5,6,7]
-#define SERIAL_PORT 0
-
-// This determines the communication speed of the printer
-// :[2400,9600,19200,38400,57600,115200,250000]
-#define BAUDRATE 250000
-
-// Enable the Bluetooth serial interface on AT90USB devices
-//#define BLUETOOTH
-
-// The following define selects which electronics board you have.
-// Please choose the name from boards.h that matches your setup
-#ifndef MOTHERBOARD
- #define MOTHERBOARD BOARD_FELIX2
-#endif
-
-// Optional custom name for your RepStrap or other custom machine
-// Displayed in the LCD "Ready" message
-#define CUSTOM_MACHINE_NAME "Felix"
-
-// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
-// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
-//#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
-
-// This defines the number of extruders
-// :[1,2,3,4]
-#define EXTRUDERS 1
-
-// For Cyclops or any "multi-extruder" that shares a single nozzle.
-//#define SINGLENOZZLE
-
-// A dual extruder that uses a single stepper motor
-// Don't forget to set SSDE_SERVO_ANGLES and HOTEND_OFFSET_X/Y/Z
-//#define SWITCHING_EXTRUDER
-#if ENABLED(SWITCHING_EXTRUDER)
- #define SWITCHING_EXTRUDER_SERVO_NR 0
- #define SWITCHING_EXTRUDER_SERVO_ANGLES { 0, 90 } // Angles for E0, E1
- //#define HOTEND_OFFSET_Z {0.0, 0.0}
-#endif
-
-/**
- * "Mixing Extruder"
- * - Adds a new code, M165, to set the current mix factors.
- * - Extends the stepping routines to move multiple steppers in proportion to the mix.
- * - Optional support for Repetier Host M163, M164, and virtual extruder.
- * - This implementation supports only a single extruder.
- * - Enable DIRECT_MIXING_IN_G1 for Pia Taubert's reference implementation
- */
-//#define MIXING_EXTRUDER
-#if ENABLED(MIXING_EXTRUDER)
- #define MIXING_STEPPERS 2 // Number of steppers in your mixing extruder
- #define MIXING_VIRTUAL_TOOLS 16 // Use the Virtual Tool method with M163 and M164
- //#define DIRECT_MIXING_IN_G1 // Allow ABCDHI mix factors in G1 movement commands
-#endif
-
-// Offset of the extruders (uncomment if using more than one and relying on firmware to position when changing).
-// The offset has to be X=0, Y=0 for the extruder 0 hotend (default extruder).
-// For the other hotends it is their distance from the extruder 0 hotend.
-//#define HOTEND_OFFSET_X {0.0, 20.00} // (in mm) for each extruder, offset of the hotend on the X axis
-//#define HOTEND_OFFSET_Y {0.0, 5.00} // (in mm) for each extruder, offset of the hotend on the Y axis
-
-//// The following define selects which power supply you have. Please choose the one that matches your setup
-// 1 = ATX
-// 2 = X-Box 360 203Watts (the blue wire connected to PS_ON and the red wire to VCC)
-// :{1:'ATX',2:'X-Box 360'}
-#define POWER_SUPPLY 1
-
-// Define this to have the electronics keep the power supply off on startup. If you don't know what this is leave it.
-#define PS_DEFAULT_OFF
-
-// @section temperature
-
-//===========================================================================
-//============================= Thermal Settings ============================
-//===========================================================================
-//
-//--NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table
-//
-//// Temperature sensor settings:
-// -3 is thermocouple with MAX31855 (only for sensor 0)
-// -2 is thermocouple with MAX6675 (only for sensor 0)
-// -1 is thermocouple with AD595
-// 0 is not used
-// 1 is 100k thermistor - best choice for EPCOS 100k (4.7k pullup)
-// 2 is 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)
-// 3 is Mendel-parts thermistor (4.7k pullup)
-// 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !!
-// 5 is 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup)
-// 6 is 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup)
-// 7 is 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup)
-// 71 is 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup)
-// 8 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup)
-// 9 is 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup)
-// 10 is 100k RS thermistor 198-961 (4.7k pullup)
-// 11 is 100k beta 3950 1% thermistor (4.7k pullup)
-// 12 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed)
-// 13 is 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE"
-// 20 is the PT100 circuit found in the Ultimainboard V2.x
-// 60 is 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
-// 66 is 4.7M High Temperature thermistor from Dyze Design
-// 70 is the 100K thermistor found in the bq Hephestos 2
-//
-// 1k ohm pullup tables - This is not normal, you would have to have changed out your 4.7k for 1k
-// (but gives greater accuracy and more stable PID)
-// 51 is 100k thermistor - EPCOS (1k pullup)
-// 52 is 200k thermistor - ATC Semitec 204GT-2 (1k pullup)
-// 55 is 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup)
-//
-// 1047 is Pt1000 with 4k7 pullup
-// 1010 is Pt1000 with 1k pullup (non standard)
-// 147 is Pt100 with 4k7 pullup
-// 110 is Pt100 with 1k pullup (non standard)
-// 998 and 999 are Dummy Tables. They will ALWAYS read 25°C or the temperature defined below.
-// Use it for Testing or Development purposes. NEVER for production machine.
-//#define DUMMY_THERMISTOR_998_VALUE 25
-//#define DUMMY_THERMISTOR_999_VALUE 100
-// :{ '0': "Not used",'1':"100k / 4.7k - EPCOS",'2':"200k / 4.7k - ATC Semitec 204GT-2",'3':"Mendel-parts / 4.7k",'4':"10k !! do not use for a hotend. Bad resolution at high temp. !!",'5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)",'6':"100k / 4.7k EPCOS - Not as accurate as Table 1",'7':"100k / 4.7k Honeywell 135-104LAG-J01",'8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT",'9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1",'10':"100k / 4.7k RS 198-961",'11':"100k / 4.7k beta 3950 1%",'12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)",'13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'",'20':"PT100 (Ultimainboard V2.x)",'51':"100k / 1k - EPCOS",'52':"200k / 1k - ATC Semitec 204GT-2",'55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)",'60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950",'66':"Dyze Design 4.7M High Temperature thermistor",'70':"the 100K thermistor found in the bq Hephestos 2",'71':"100k / 4.7k Honeywell 135-104LAF-J01",'147':"Pt100 / 4.7k",'1047':"Pt1000 / 4.7k",'110':"Pt100 / 1k (non-standard)",'1010':"Pt1000 / 1k (non standard)",'-3':"Thermocouple + MAX31855 (only for sensor 0)",'-2':"Thermocouple + MAX6675 (only for sensor 0)",'-1':"Thermocouple + AD595",'998':"Dummy 1",'999':"Dummy 2" }
-#define TEMP_SENSOR_0 1
-#define TEMP_SENSOR_1 0
-#define TEMP_SENSOR_2 0
-#define TEMP_SENSOR_3 0
-#define TEMP_SENSOR_BED 1
-
-// This makes temp sensor 1 a redundant sensor for sensor 0. If the temperatures difference between these sensors is to high the print will be aborted.
-//#define TEMP_SENSOR_1_AS_REDUNDANT
-#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 10
-
-// Extruder temperature must be close to target for this long before M109 returns success
-#define TEMP_RESIDENCY_TIME 15 // (seconds)
-#define TEMP_HYSTERESIS 3 // (degC) range of +/- temperatures considered "close" to the target one
-#define TEMP_WINDOW 1 // (degC) Window around target to start the residency timer x degC early.
-
-// Bed temperature must be close to target for this long before M190 returns success
-#define TEMP_BED_RESIDENCY_TIME 0 // (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.
-
-// The minimal temperature defines the temperature below which the heater will not be enabled It is used
-// to check that the wiring to the thermistor is not broken.
-// Otherwise this would lead to the heater being powered on all the time.
-#define HEATER_0_MINTEMP 5
-#define HEATER_1_MINTEMP 5
-#define HEATER_2_MINTEMP 5
-#define HEATER_3_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 275
-#define HEATER_1_MAXTEMP 275
-#define HEATER_2_MAXTEMP 275
-#define HEATER_3_MAXTEMP 275
-#define BED_MAXTEMP 150
-
-//===========================================================================
-//============================= PID Settings ================================
-//===========================================================================
-// PID Tuning Guide here: http://reprap.org/wiki/PID_Tuning
-
-// Comment the following line to disable PID and enable bang-bang.
-#define PIDTEMP
-#define BANG_MAX 255 // limits current to nozzle while in bang-bang mode; 255=full current
-#define PID_MAX BANG_MAX // limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
-#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
- //#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
- // Set/get with gcode: M301 E[extruder number, 0-2]
- #define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
- // is more than PID_FUNCTIONAL_RANGE then the PID will be shut off and the heater will be set to min/max.
- #define PID_INTEGRAL_DRIVE_MAX PID_MAX //limit for the integral term
- #define K1 0.95 //smoothing factor within the PID
-
- // Felix 2.0+ electronics with v4 Hotend
- #define DEFAULT_Kp 12
- #define DEFAULT_Ki 0.84
- #define DEFAULT_Kd 85
-
-#endif // PIDTEMP
-
-//===========================================================================
-//============================= PID > Bed Temperature Control ===============
-//===========================================================================
-// Select PID or bang-bang with PIDTEMPBED. If bang-bang, BED_LIMIT_SWITCHING will enable hysteresis
-//
-// Uncomment this to enable PID on the bed. It uses the same frequency PWM as the extruder.
-// If your PID_dT is the default, and correct for your hardware/configuration, that means 7.689Hz,
-// which is fine for driving a square wave into a resistive load and does not significantly impact you FET heating.
-// This also works fine on a Fotek SSR-10DA Solid State Relay into a 250W heater.
-// If your configuration is significantly different than this and you don't understand the issues involved, you probably
-// shouldn't use bed PID until someone else verifies your hardware works.
-// If this is enabled, find your own PID constants below.
-#define PIDTEMPBED
-
-//#define BED_LIMIT_SWITCHING
-
-// This sets the max power delivered to the bed, and replaces the HEATER_BED_DUTY_CYCLE_DIVIDER option.
-// all forms of bed control obey this (PID, bang-bang, bang-bang with hysteresis)
-// setting this to anything other than 255 enables a form of PWM to the bed just like HEATER_BED_DUTY_CYCLE_DIVIDER did,
-// so you shouldn't use it unless you are OK with PWM on your bed. (see the comment on enabling PIDTEMPBED)
-#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current
-
-#if ENABLED(PIDTEMPBED)
-
- //#define PID_BED_DEBUG // Sends debug data to the serial port.
-
- #define PID_BED_INTEGRAL_DRIVE_MAX MAX_BED_POWER //limit for the integral term
-
- // Felix Foil Heater
- #define DEFAULT_bedKp 103.37
- #define DEFAULT_bedKi 2.79
- #define DEFAULT_bedKd 956.94
-
- // FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles.
-#endif // PIDTEMPBED
-
-// @section extruder
-
-//this prevents dangerous Extruder moves, i.e. if the temperature is under the limit
-//can be software-disabled for whatever purposes by
-#define PREVENT_DANGEROUS_EXTRUDE
-//if PREVENT_DANGEROUS_EXTRUDE is on, you can still disable (uncomment) very long bits of extrusion separately.
-#define PREVENT_LENGTHY_EXTRUDE
-
-#define EXTRUDE_MINTEMP 170
-#define EXTRUDE_MAXLENGTH (X_MAX_LENGTH+Y_MAX_LENGTH) //prevent extrusion of very large distances.
-
-//===========================================================================
-//======================== Thermal Runaway Protection =======================
-//===========================================================================
-
-/**
- * Thermal Protection protects your printer from damage and fire if a
- * thermistor falls out or temperature sensors fail in any way.
- *
- * The issue: If a thermistor falls out or a temperature sensor fails,
- * Marlin can no longer sense the actual temperature. Since a disconnected
- * thermistor reads as a low temperature, the firmware will keep the heater on.
- *
- * If you get "Thermal Runaway" or "Heating failed" errors the
- * details can be tuned in Configuration_adv.h
- */
-
-#define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders
-#define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed
-
-//===========================================================================
-//============================= Mechanical Settings =========================
-//===========================================================================
-
-// @section machine
-
-// Uncomment one of these options to enable CoreXY, CoreXZ, or CoreYZ kinematics
-//#define COREXY
-//#define COREXZ
-//#define COREYZ
-
-// Enable this option for Toshiba steppers
-//#define CONFIG_STEPPERS_TOSHIBA
-
-//===========================================================================
-//============================== Endstop Settings ===========================
-//===========================================================================
-
-// @section homing
-
-// Specify here all the endstop connectors that are connected to any endstop or probe.
-// Almost all printers will be using one per axis. Probes will use one or more of the
-// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
-#define USE_XMIN_PLUG
-#define USE_YMIN_PLUG
-#define USE_ZMIN_PLUG
-//#define USE_XMAX_PLUG
-//#define USE_YMAX_PLUG
-//#define USE_ZMAX_PLUG
-
-// coarse Endstop Settings
-#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
-
-#if DISABLED(ENDSTOPPULLUPS)
- // fine endstop settings: Individual pullups. will be ignored if ENDSTOPPULLUPS is defined
- //#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 false // set to true to invert the logic of the endstop.
-#define Y_MIN_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
-#define Z_MIN_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
-#define X_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Y_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Z_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Z_MIN_PROBE_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
-
-//===========================================================================
-//============================= Z Probe Options =============================
-//===========================================================================
-
-//
-// Probe Type
-// Probes are sensors/switches that are activated / deactivated before/after use.
-//
-// Allen Key Probes, Servo Probes, Z-Sled Probes, FIX_MOUNTED_PROBE, etc.
-// You must activate one of these to use AUTO_BED_LEVELING_FEATURE below.
-//
-// Use M851 to set the Z probe vertical offset from the nozzle. Store with M500.
-//
-
-// A Fix-Mounted Probe either doesn't deploy or needs manual deployment.
-// For example an inductive probe, or a setup that uses the nozzle to probe.
-// An inductive probe must be deactivated to go below
-// its trigger-point if hardware endstops are active.
-//#define FIX_MOUNTED_PROBE
-
-// The BLTouch probe emulates a servo probe.
-//#define BLTOUCH
-
-// Z Servo Probe, such as an endstop switch on a rotating arm.
-//#define Z_ENDSTOP_SERVO_NR 0
-//#define Z_SERVO_ANGLES {70,0} // Z Servo Deploy and Stow angles
-
-// Enable if you have a Z probe mounted on a sled like those designed by Charles Bell.
-//#define Z_PROBE_SLED
-//#define SLED_DOCKING_OFFSET 5 // The extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.
-
-// Z Probe to nozzle (X,Y) offset, relative to (0, 0).
-// X and Y offsets must be integers.
-//
-// In the following example the X and Y offsets are both positive:
-// #define X_PROBE_OFFSET_FROM_EXTRUDER 10
-// #define Y_PROBE_OFFSET_FROM_EXTRUDER 10
-//
-// +-- BACK ---+
-// | |
-// L | (+) P | R <-- probe (20,20)
-// E | | I
-// F | (-) N (+) | G <-- nozzle (10,10)
-// T | | H
-// | (-) | T
-// | |
-// O-- FRONT --+
-// (0,0)
-#define X_PROBE_OFFSET_FROM_EXTRUDER -25 // X offset: -left +right [of the nozzle]
-#define Y_PROBE_OFFSET_FROM_EXTRUDER -29 // Y offset: -front +behind [the nozzle]
-#define Z_PROBE_OFFSET_FROM_EXTRUDER -12.35 // Z offset: -below +above [the nozzle]
-
-// X and Y axis travel speed (mm/m) between probes
-#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
-#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
-// Speed for the "accurate" probe of each point
-#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
-
-//
-// Allen Key Probe is defined in the Delta example configurations.
-//
-
-// Enable Z_MIN_PROBE_ENDSTOP to use _both_ a Z Probe and a Z-min-endstop on the same machine.
-// With this option the Z_MIN_PROBE_PIN will only be used for probing, never for homing.
-//
-// *** PLEASE READ ALL INSTRUCTIONS BELOW FOR SAFETY! ***
-//
-// To continue using the Z-min-endstop for homing, be sure to disable Z_SAFE_HOMING.
-// Example: To park the head outside the bed area when homing with G28.
-//
-// To use a separate Z probe, your board must define a Z_MIN_PROBE_PIN.
-//
-// For a servo-based Z probe, you must set up servo support below, including
-// NUM_SERVOS, Z_ENDSTOP_SERVO_NR and Z_SERVO_ANGLES.
-//
-// - RAMPS 1.3/1.4 boards may be able to use the 5V, GND, and Aux4->D32 pin.
-// - Use 5V for powered (usu. inductive) sensors.
-// - Otherwise connect:
-// - normally-closed switches to GND and D32.
-// - normally-open switches to 5V and D32.
-//
-// Normally-closed switches are advised and are the default.
-//
-// The Z_MIN_PROBE_PIN sets the Arduino pin to use. (See your board's pins file.)
-// Since the RAMPS Aux4->D32 pin maps directly to the Arduino D32 pin, D32 is the
-// default pin for all RAMPS-based boards. Some other boards map differently.
-// To set or change the pin for your board, edit the appropriate pins_XXXXX.h file.
-//
-// WARNING:
-// Setting the wrong pin may have unexpected and potentially disastrous consequences.
-// Use with caution and do your homework.
-//
-//#define Z_MIN_PROBE_ENDSTOP
-
-// Enable Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN to use the Z_MIN_PIN for your Z_MIN_PROBE.
-// The Z_MIN_PIN will then be used for both Z-homing and probing.
-#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
-
-// To use a probe you must enable one of the two options above!
-
-// This option disables the use of the Z_MIN_PROBE_PIN
-// To enable the Z probe pin but disable its use, uncomment the line below. This only affects a
-// Z probe switch if you have a separate Z min endstop also and have activated Z_MIN_PROBE_ENDSTOP above.
-// If you're using the Z MIN endstop connector for your Z probe, this has no effect.
-//#define DISABLE_Z_MIN_PROBE_ENDSTOP
-
-// Enable Z Probe Repeatability test to see how accurate your probe is
-//#define Z_MIN_PROBE_REPEATABILITY_TEST
-
-//
-// Probe Raise options provide clearance for the probe to deploy, stow, and travel.
-//
-#define Z_PROBE_DEPLOY_HEIGHT 15 // Raise to make room for the probe to deploy / stow
-#define Z_PROBE_TRAVEL_HEIGHT 5 // Raise between probing points.
-
-//
-// For M851 give a range for adjusting the Z probe offset
-//
-#define Z_PROBE_OFFSET_RANGE_MIN -20
-#define Z_PROBE_OFFSET_RANGE_MAX 20
-
-// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
-// :{0:'Low',1:'High'}
-#define X_ENABLE_ON 0
-#define Y_ENABLE_ON 0
-#define Z_ENABLE_ON 0
-#define E_ENABLE_ON 0 // For all extruders
-
-// Disables axis stepper immediately when it's not being used.
-// WARNING: When motors turn off there is a chance of losing position accuracy!
-#define DISABLE_X false
-#define DISABLE_Y false
-#define DISABLE_Z false
-// Warn on display about possibly reduced accuracy
-//#define DISABLE_REDUCED_ACCURACY_WARNING
-
-// @section extruder
-
-#define DISABLE_E false // For all extruders
-#define DISABLE_INACTIVE_EXTRUDER true //disable only inactive extruders and keep active extruder enabled
-
-// @section machine
-
-// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way.
-#define INVERT_X_DIR true
-#define INVERT_Y_DIR true
-#define INVERT_Z_DIR true
-
-// @section extruder
-
-// For direct drive extruder v9 set to true, for geared extruder set to false.
-#define INVERT_E0_DIR false
-#define INVERT_E1_DIR false
-#define INVERT_E2_DIR false
-#define INVERT_E3_DIR false
-
-// @section homing
-
-//#define Z_HOMING_HEIGHT 4 // (in mm) Minimal z height before homing (G28) for Z clearance above the bed, clamps, ...
- // Be sure you have this distance over your Z_MAX_POS in case.
-
-// ENDSTOP SETTINGS:
-// Sets direction of endstops when homing; 1=MAX, -1=MIN
-// :[-1,1]
-#define X_HOME_DIR -1
-#define Y_HOME_DIR -1
-#define Z_HOME_DIR -1
-
-#define min_software_endstops true // If true, axis won't move to coordinates less than HOME_POS.
-#define max_software_endstops true // If true, axis won't move to coordinates greater than the defined lengths below.
-
-// @section machine
-
-// Travel limits after homing (units are in mm)
-#define X_MIN_POS 0
-#define Y_MIN_POS 0
-#define Z_MIN_POS 0
-#define X_MAX_POS 255
-#define Y_MAX_POS 205
-#define Z_MAX_POS 235
-
-//===========================================================================
-//========================= Filament Runout Sensor ==========================
-//===========================================================================
-//#define FILAMENT_RUNOUT_SENSOR // Uncomment for defining a filament runout sensor such as a mechanical or opto endstop to check the existence of filament
- // In RAMPS uses servo pin 2. Can be changed in pins file. For other boards pin definition should be made.
- // It is assumed that when logic high = filament available
- // when logic low = filament ran out
-#if ENABLED(FILAMENT_RUNOUT_SENSOR)
- const bool FIL_RUNOUT_INVERTING = false; // set to true to invert the logic of the sensor.
- #define ENDSTOPPULLUP_FIL_RUNOUT // Uncomment to use internal pullup for filament runout pins if the sensor is defined.
- #define FILAMENT_RUNOUT_SCRIPT "M600"
-#endif
-
-//===========================================================================
-//============================ Mesh Bed Leveling ============================
-//===========================================================================
-
-//#define MESH_BED_LEVELING // Enable mesh bed leveling.
-
-#if ENABLED(MESH_BED_LEVELING)
- #define MESH_INSET 10 // Mesh inset margin on print area
- #define MESH_NUM_X_POINTS 3 // Don't use more than 7 points per axis, implementation limited.
- #define MESH_NUM_Y_POINTS 3
- #define MESH_HOME_SEARCH_Z 4 // Z after Home, bed somewhere below but above 0.0.
-
- //#define MESH_G28_REST_ORIGIN // After homing all axes ('G28' or 'G28 XYZ') rest at origin [0,0,0]
-
- //#define MANUAL_BED_LEVELING // Add display menu option for bed leveling.
-
- #if ENABLED(MANUAL_BED_LEVELING)
- #define MBL_Z_STEP 0.025 // Step size while manually probing Z axis.
- #endif // MANUAL_BED_LEVELING
-
-#endif // MESH_BED_LEVELING
-
-//===========================================================================
-//============================ Bed Auto Leveling ============================
-//===========================================================================
-
-// @section bedlevel
-
-//#define AUTO_BED_LEVELING_FEATURE // Delete the comment to enable (remove // at the start of the line)
-
-// Enable this feature to get detailed logging of G28, G29, M48, etc.
-// Logging is off by default. Enable this logging feature with 'M111 S32'.
-// NOTE: Requires a huge amount of PROGMEM.
-//#define DEBUG_LEVELING_FEATURE
-
-#if ENABLED(AUTO_BED_LEVELING_FEATURE)
-
- // There are 2 different ways to specify probing locations:
- //
- // - "grid" mode
- // Probe several points in a rectangular grid.
- // You specify the rectangle and the density of sample points.
- // This mode is preferred because there are more measurements.
- //
- // - "3-point" mode
- // Probe 3 arbitrary points on the bed (that aren't collinear)
- // You specify the XY coordinates of all 3 points.
-
- // Enable this to sample the bed in a grid (least squares solution).
- // Note: this feature generates 10KB extra code size.
- #define AUTO_BED_LEVELING_GRID
-
- #if ENABLED(AUTO_BED_LEVELING_GRID)
-
- #define LEFT_PROBE_BED_POSITION 15
- #define RIGHT_PROBE_BED_POSITION 170
- #define FRONT_PROBE_BED_POSITION 20
- #define BACK_PROBE_BED_POSITION 180
-
- #define MIN_PROBE_EDGE 10 // The Z probe minimum square sides can be no smaller than this.
-
- // Set the number of grid points per dimension.
- // You probably don't need more than 3 (squared=9).
- #define AUTO_BED_LEVELING_GRID_POINTS 2
-
- #else // !AUTO_BED_LEVELING_GRID
-
- // Arbitrary points to probe.
- // A simple cross-product is used to estimate the plane of the bed.
- #define ABL_PROBE_PT_1_X 15
- #define ABL_PROBE_PT_1_Y 180
- #define ABL_PROBE_PT_2_X 15
- #define ABL_PROBE_PT_2_Y 20
- #define ABL_PROBE_PT_3_X 170
- #define ABL_PROBE_PT_3_Y 20
-
- #endif // !AUTO_BED_LEVELING_GRID
-
- //#define Z_PROBE_END_SCRIPT "G1 Z10 F12000\nG1 X15 Y330\nG1 Z0.5\nG1 Z10" // These commands will be executed in the end of G29 routine.
- // Useful to retract a deployable Z probe.
-
- // If you've enabled AUTO_BED_LEVELING_FEATURE and are using the Z Probe for Z Homing,
- // it is highly recommended you also enable Z_SAFE_HOMING below!
-
-#endif // AUTO_BED_LEVELING_FEATURE
-
-
-// @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 // Distance between the nozzle to printbed after homing
-
-// Use "Z Safe Homing" to avoid homing with a Z probe outside the bed area.
-//
-// With this feature enabled:
-//
-// - Allow Z homing only after X and Y homing AND stepper drivers still enabled.
-// - If stepper drivers time out, it will need X and Y homing again before Z homing.
-// - Move the Z probe (or nozzle) to a defined XY point before Z Homing when homing all axes (G28).
-// - Prevent Z homing when the Z probe is outside bed area.
-//#define Z_SAFE_HOMING
-
-#if ENABLED(Z_SAFE_HOMING)
- #define Z_SAFE_HOMING_X_POINT ((X_MIN_POS + X_MAX_POS) / 2) // X point for Z homing when homing all axis (G28).
- #define Z_SAFE_HOMING_Y_POINT ((Y_MIN_POS + Y_MAX_POS) / 2) // Y point for Z homing when homing all axis (G28).
-#endif
-
-// Homing speeds (mm/m)
-#define HOMING_FEEDRATE_XY (50*60)
-#define HOMING_FEEDRATE_Z (4*60)
-
-//
-// MOVEMENT SETTINGS
-// @section motion
-//
-
-// default settings
-
-// default steps per unit for Felix 2.0/3.0: 0.00249mm x/y rounding error with 3mm pitch HTD belt and 14 tooth pulleys. 0 z error.
-#define DEFAULT_AXIS_STEPS_PER_UNIT {76.190476, 76.190476, 1600, 164}
-#define DEFAULT_MAX_FEEDRATE {500, 500, 5, 25} // (mm/sec)
-#define DEFAULT_MAX_ACCELERATION {5000,5000,100,80000} // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for Skeinforge 40+, for older versions raise them a lot.
-
-#define DEFAULT_ACCELERATION 1750 //1500 // X, Y, Z and E max acceleration in mm/s^2 for printing moves
-#define DEFAULT_RETRACT_ACCELERATION 5000 // E acceleration in mm/s^2 for retracts
-#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
-
-// The speed change that does not require acceleration (i.e. the software might assume it can be done instantaneously)
-#define DEFAULT_XYJERK 10 // (mm/sec)
-#define DEFAULT_ZJERK 0.3 //0.4 // (mm/sec)
-#define DEFAULT_EJERK 5.0 // (mm/sec)
-
-
-//=============================================================================
-//============================= Additional Features ===========================
-//=============================================================================
-
-// @section extras
-
-//
-// EEPROM
-//
-// The microcontroller can store settings in the EEPROM, e.g. max velocity...
-// M500 - stores parameters in EEPROM
-// M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily).
-// M502 - reverts to the default "factory settings". You still need to store them in EEPROM afterwards if you want to.
-//define this to enable EEPROM support
-//#define EEPROM_SETTINGS
-
-#if ENABLED(EEPROM_SETTINGS)
- // To disable EEPROM Serial responses and decrease program space by ~1700 byte: comment this out:
- #define EEPROM_CHITCHAT // Please keep turned on if you can.
-#endif
-
-//
-// Host Keepalive
-//
-// When enabled Marlin will send a busy status message to the host
-// every couple of seconds when it can't accept commands.
-//
-#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.
-
-//
-// M100 Free Memory Watcher
-//
-//#define M100_FREE_MEMORY_WATCHER // uncomment to add the M100 Free Memory Watcher for debug purpose
-
-//
-// G20/G21 Inch mode support
-//
-//#define INCH_MODE_SUPPORT
-
-//
-// M149 Set temperature units support
-//
-//#define TEMPERATURE_UNITS_SUPPORT
-
-// @section temperature
-
-// Preheat Constants
-#define PREHEAT_1_TEMP_HOTEND 180
-#define PREHEAT_1_TEMP_BED 70
-#define PREHEAT_1_FAN_SPEED 255 // Value from 0 to 255
-
-#define PREHEAT_2_TEMP_HOTEND 240
-#define PREHEAT_2_TEMP_BED 100
-#define PREHEAT_2_FAN_SPEED 255 // Value from 0 to 255
-
-//
-// Nozzle Park -- EXPERIMENTAL
-//
-// When enabled allows the user to define a special XYZ position, inside the
-// machine's topology, to park the nozzle when idle or when receiving the G27
-// command.
-//
-// The "P" paramenter controls what is the action applied to the Z axis:
-// P0: (Default) If current Z-pos is lower than Z-park then the nozzle will
-// be raised to reach Z-park height.
-//
-// P1: No matter the current Z-pos, the nozzle will be raised/lowered to
-// reach Z-park height.
-//
-// P2: The nozzle height will be raised by Z-park amount but never going over
-// the machine's limit of Z_MAX_POS.
-//
-//#define NOZZLE_PARK_FEATURE
-
-#if ENABLED(NOZZLE_PARK_FEATURE)
- // Specify a park position as { X, Y, Z }
- #define NOZZLE_PARK_POINT { (X_MIN_POS + 10), (Y_MAX_POS - 10), 20 }
-#endif
-
-//
-// Clean Nozzle Feature -- EXPERIMENTAL
-//
-// When enabled allows the user to send G12 to start the nozzle cleaning
-// process, the G-Code accepts two parameters:
-// "P" for pattern selection
-// "S" for defining the number of strokes/repetitions
-//
-// Available list of patterns:
-// P0: This is the default pattern, this process requires a sponge type
-// material at a fixed bed location, the cleaning process is based on
-// "strokes" i.e. back-and-forth movements between the starting and end
-// points.
-//
-// P1: This starts a zig-zag pattern between (X0, Y0) and (X1, Y1), "T"
-// defines the number of zig-zag triangles to be done. "S" defines the
-// number of strokes aka one back-and-forth movement. As an example
-// sending "G12 P1 S1 T3" will execute:
-//
-// --
-// | (X0, Y1) | /\ /\ /\ | (X1, Y1)
-// | | / \ / \ / \ |
-// A | | / \ / \ / \ |
-// | | / \ / \ / \ |
-// | (X0, Y0) | / \/ \/ \ | (X1, Y0)
-// -- +--------------------------------+
-// |________|_________|_________|
-// T1 T2 T3
-//
-// Caveats: End point Z should use the same value as Start point Z.
-//
-// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
-// may change to add new functionality like different wipe patterns.
-//
-//#define NOZZLE_CLEAN_FEATURE
-
-#if ENABLED(NOZZLE_CLEAN_FEATURE)
- // Number of pattern repetitions
- #define NOZZLE_CLEAN_STROKES 12
-
- // Specify positions as { X, Y, Z }
- #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
- #define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
-
- // Moves the nozzle to the initial position
- #define NOZZLE_CLEAN_GOBACK
-#endif
-
-//
-// Print job timer
-//
-// Enable this option to automatically start and stop the
-// print job timer when M104/M109/M190 commands are received.
-// M104 (extruder without wait) - high temp = none, low temp = stop timer
-// M109 (extruder with wait) - high temp = start timer, low temp = stop timer
-// M190 (bed with wait) - high temp = start timer, low temp = none
-//
-// In all cases the timer can be started and stopped using
-// the following commands:
-//
-// - M75 - Start the print job timer
-// - M76 - Pause the print job timer
-// - M77 - Stop the print job timer
-#define PRINTJOB_TIMER_AUTOSTART
-
-//
-// Print Counter
-//
-// When enabled Marlin will keep track of some print statistical data such as:
-// - Total print jobs
-// - Total successful print jobs
-// - Total failed print jobs
-// - Total time printing
-//
-// This information can be viewed by the M78 command.
-//#define PRINTCOUNTER
-
-//=============================================================================
-//============================= LCD and SD support ============================
-//=============================================================================
-
-// @section lcd
-
-//
-// LCD LANGUAGE
-//
-// Here you may choose the language used by Marlin on the LCD menus, the following
-// list of languages are available:
-// en, an, bg, ca, cn, cz, de, el, el-gr, es, eu, fi, fr, gl, hr, it,
-// kana, kana_utf8, nl, pl, pt, pt_utf8, pt-br, pt-br_utf8, ru, test
-//
-// :{'en':'English','an':'Aragonese','bg':'Bulgarian','ca':'Catalan','cn':'Chinese','cz':'Czech','de':'German','el':'Greek','el-gr':'Greek (Greece)','es':'Spanish','eu':'Basque-Euskera','fi':'Finnish','fr':'French','gl':'Galician','hr':'Croatian','it':'Italian','kana':'Japanese','kana_utf8':'Japanese (UTF8)','nl':'Dutch','pl':'Polish','pt':'Portuguese','pt-br':'Portuguese (Brazilian)','pt-br_utf8':'Portuguese (Brazilian UTF8)','pt_utf8':'Portuguese (UTF8)','ru':'Russian','test':'TEST'}
-//
-//#define LCD_LANGUAGE en
-
-//
-// LCD Character Set
-//
-// Note: This option is NOT applicable to Graphical Displays.
-//
-// All character-based LCD's provide ASCII plus one of these
-// language extensions:
-//
-// - JAPANESE ... the most common
-// - WESTERN ... with more accented characters
-// - CYRILLIC ... for the Russian language
-//
-// To determine the language extension installed on your controller:
-//
-// - Compile and upload with LCD_LANGUAGE set to 'test'
-// - Click the controller to view the LCD menu
-// - The LCD will display Japanese, Western, or Cyrillic text
-//
-// See https://github.com/MarlinFirmware/Marlin/wiki/LCD-Language
-//
-// :['JAPANESE','WESTERN','CYRILLIC']
-//
-#define DISPLAY_CHARSET_HD44780 JAPANESE
-
-//
-// LCD TYPE
-//
-// You may choose ULTRA_LCD if you have character based LCD with 16x2, 16x4, 20x2,
-// 20x4 char/lines or DOGLCD for the full graphics display with 128x64 pixels
-// (ST7565R family). (This option will be set automatically for certain displays.)
-//
-// IMPORTANT NOTE: The U8glib library is required for Full Graphic Display!
-// https://github.com/olikraus/U8glib_Arduino
-//
-//#define ULTRA_LCD // Character based
-//#define DOGLCD // Full graphics display
-
-//
-// SD CARD
-//
-// SD Card support is disabled by default. If your controller has an SD slot,
-// you must uncomment the following option or it won't work.
-//
-//#define SDSUPPORT
-
-//
-// SD CARD: SPI SPEED
-//
-// Uncomment ONE of the following items to use a slower SPI transfer
-// speed. This is usually required if you're getting volume init errors.
-//
-//#define SPI_SPEED SPI_HALF_SPEED
-//#define SPI_SPEED SPI_QUARTER_SPEED
-//#define SPI_SPEED SPI_EIGHTH_SPEED
-
-//
-// SD CARD: ENABLE CRC
-//
-// Use CRC checks and retries on the SD communication.
-//
-//#define SD_CHECK_AND_RETRY
-
-//
-// ENCODER SETTINGS
-//
-// This option overrides the default number of encoder pulses needed to
-// produce one step. Should be increased for high-resolution encoders.
-//
-//#define ENCODER_PULSES_PER_STEP 1
-
-//
-// Use this option to override the number of step signals required to
-// move between next/prev menu items.
-//
-//#define ENCODER_STEPS_PER_MENU_ITEM 5
-
-/**
- * Encoder Direction Options
- *
- * Test your encoder's behavior first with both options disabled.
- *
- * Reversed Value Edit and Menu Nav? Enable REVERSE_ENCODER_DIRECTION.
- * Reversed Menu Navigation only? Enable REVERSE_MENU_DIRECTION.
- * Reversed Value Editing only? Enable BOTH options.
- */
-
-//
-// This option reverses the encoder direction everywhere
-//
-// Set this option if CLOCKWISE causes values to DECREASE
-//
-//#define REVERSE_ENCODER_DIRECTION
-
-//
-// This option reverses the encoder direction for navigating LCD menus.
-//
-// If CLOCKWISE normally moves DOWN this makes it go UP.
-// If CLOCKWISE normally moves UP this makes it go DOWN.
-//
-//#define REVERSE_MENU_DIRECTION
-
-//
-// Individual Axis Homing
-//
-// Add individual axis homing items (Home X, Home Y, and Home Z) to the LCD menu.
-//
-//#define INDIVIDUAL_AXIS_HOMING_MENU
-
-//
-// SPEAKER/BUZZER
-//
-// If you have a speaker that can produce tones, enable it here.
-// By default Marlin assumes you have a buzzer with a fixed frequency.
-//
-//#define SPEAKER
-
-//
-// The duration and frequency for the UI feedback sound.
-// Set these to 0 to disable audio feedback in the LCD menus.
-//
-// Note: Test audio output with the G-Code:
-// M300 S P
-//
-//#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 100
-//#define LCD_FEEDBACK_FREQUENCY_HZ 1000
-
-//
-// CONTROLLER TYPE: Standard
-//
-// Marlin supports a wide variety of controllers.
-// Enable one of the following options to specify your controller.
-//
-
-//
-// ULTIMAKER Controller.
-//
-//#define ULTIMAKERCONTROLLER
-
-//
-// ULTIPANEL as seen on Thingiverse.
-//
-//#define ULTIPANEL
-
-//
-// Cartesio UI
-// http://mauk.cc/webshop/cartesio-shop/electronics/user-interface
-//
-//#define CARTESIO_UI
-
-//
-// PanelOne from T3P3 (via RAMPS 1.4 AUX2/AUX3)
-// http://reprap.org/wiki/PanelOne
-//
-//#define PANEL_ONE
-
-//
-// MaKr3d Makr-Panel with graphic controller and SD support.
-// http://reprap.org/wiki/MaKr3d_MaKrPanel
-//
-//#define MAKRPANEL
-
-//
-// ReprapWorld Graphical LCD
-// https://reprapworld.com/?products_details&products_id/1218
-//
-//#define REPRAPWORLD_GRAPHICAL_LCD
-
-//
-// Activate one of these if you have a Panucatt Devices
-// Viki 2.0 or mini Viki with Graphic LCD
-// http://panucatt.com
-//
-//#define VIKI2
-//#define miniVIKI
-
-//
-// Adafruit ST7565 Full Graphic Controller.
-// https://github.com/eboston/Adafruit-ST7565-Full-Graphic-Controller/
-//
-//#define ELB_FULL_GRAPHIC_CONTROLLER
-
-//
-// RepRapDiscount Smart Controller.
-// http://reprap.org/wiki/RepRapDiscount_Smart_Controller
-//
-// Note: Usually sold with a white PCB.
-//
-//#define REPRAP_DISCOUNT_SMART_CONTROLLER
-
-//
-// GADGETS3D G3D LCD/SD Controller
-// http://reprap.org/wiki/RAMPS_1.3/1.4_GADGETS3D_Shield_with_Panel
-//
-// Note: Usually sold with a blue PCB.
-//
-//#define G3D_PANEL
-
-//
-// RepRapDiscount FULL GRAPHIC Smart Controller
-// http://reprap.org/wiki/RepRapDiscount_Full_Graphic_Smart_Controller
-//
-//#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
-
-//
-// MakerLab Mini Panel with graphic
-// controller and SD support - http://reprap.org/wiki/Mini_panel
-//
-//#define MINIPANEL
-
-//
-// RepRapWorld REPRAPWORLD_KEYPAD v1.1
-// http://reprapworld.com/?products_details&products_id=202&cPath=1591_1626
-//
-// REPRAPWORLD_KEYPAD_MOVE_STEP sets how much should the robot move when a key
-// is pressed, a value of 10.0 means 10mm per click.
-//
-//#define REPRAPWORLD_KEYPAD
-//#define REPRAPWORLD_KEYPAD_MOVE_STEP 1.0
-
-//
-// RigidBot Panel V1.0
-// http://www.inventapart.com/
-//
-//#define RIGIDBOT_PANEL
-
-//
-// BQ LCD Smart Controller shipped by
-// default with the BQ Hephestos 2 and Witbox 2.
-//
-//#define BQ_LCD_SMART_CONTROLLER
-
-//
-// CONTROLLER TYPE: I2C
-//
-// Note: These controllers require the installation of Arduino's LiquidCrystal_I2C
-// library. For more info: https://github.com/kiyoshigawa/LiquidCrystal_I2C
-//
-
-//
-// Elefu RA Board Control Panel
-// http://www.elefu.com/index.php?route=product/product&product_id=53
-//
-//#define RA_CONTROL_PANEL
-
-//
-// Sainsmart YW Robot (LCM1602) LCD Display
-//
-//#define LCD_I2C_SAINSMART_YWROBOT
-
-//
-// Generic LCM1602 LCD adapter
-//
-//#define LCM1602
-
-//
-// PANELOLU2 LCD with status LEDs,
-// separate encoder and click inputs.
-//
-// Note: This controller requires Arduino's LiquidTWI2 library v1.2.3 or later.
-// For more info: https://github.com/lincomatic/LiquidTWI2
-//
-// Note: The PANELOLU2 encoder click input can either be directly connected to
-// a pin (if BTN_ENC defined to != -1) or read through I2C (when BTN_ENC == -1).
-//
-//#define LCD_I2C_PANELOLU2
-
-//
-// Panucatt VIKI LCD with status LEDs,
-// integrated click & L/R/U/D buttons, separate encoder inputs.
-//
-//#define LCD_I2C_VIKI
-
-//
-// SSD1306 OLED full graphics generic display
-//
-//#define U8GLIB_SSD1306
-
-//
-// SAV OLEd LCD module support using either SSD1306 or SH1106 based LCD modules
-//
-//#define SAV_3DGLCD
-#if ENABLED(SAV_3DGLCD)
- //#define U8GLIB_SSD1306
- #define U8GLIB_SH1106
-#endif
-
-//
-// CONTROLLER TYPE: Shift register panels
-//
-// 2 wire Non-latching LCD SR from https://goo.gl/aJJ4sH
-// LCD configuration: http://reprap.org/wiki/SAV_3D_LCD
-//
-//#define SAV_3DLCD
-
-//=============================================================================
-//=============================== Extra Features ==============================
-//=============================================================================
-
-// @section extras
-
-// Increase the FAN PWM frequency. Removes the PWM noise but increases heating in the FET/Arduino
-#define FAST_PWM_FAN
-
-// Use software PWM to drive the fan, as for the heaters. This uses a very low frequency
-// which is not as annoying as with the hardware PWM. On the other hand, if this frequency
-// is too low, you should also increment SOFT_PWM_SCALE.
-//#define FAN_SOFT_PWM
-
-// Incrementing this by 1 will double the software PWM frequency,
-// affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
-// However, control resolution will be halved for each increment;
-// at zero value, there are 128 effective control positions.
-#define SOFT_PWM_SCALE 0
-
-// Temperature status LEDs that display the hotend and bed temperature.
-// If all hotends and bed temperature and temperature setpoint are < 54C then the BLUE led is on.
-// Otherwise the RED led is on. There is 1C hysteresis.
-//#define TEMP_STAT_LEDS
-
-// M240 Triggers a camera by emulating a Canon RC-1 Remote
-// Data from: http://www.doc-diy.net/photo/rc-1_hacked/
-//#define PHOTOGRAPH_PIN 23
-
-// SkeinForge sends the wrong arc g-codes when using Arc Point as fillet procedure
-//#define SF_ARC_FIX
-
-// Support for the BariCUDA Paste Extruder.
-//#define BARICUDA
-
-//define BlinkM/CyzRgb Support
-//#define BLINKM
-
-/*********************************************************************\
-* R/C SERVO support
-* Sponsored by TrinityLabs, Reworked by codexmas
-**********************************************************************/
-
-// Number of servos
-//
-// If you select a configuration below, this will receive a default value and does not need to be set manually
-// set it manually if you have more servos than extruders and wish to manually control some
-// leaving it undefined or defining as 0 will disable the servo subsystem
-// If unsure, leave commented / disabled
-//
-//#define NUM_SERVOS 3 // Servo index starts with 0 for M280 command
-
-// Delay (in microseconds) before the next move will start, to give the servo time to reach its target angle.
-// 300ms is a good value but you can try less delay.
-// If the servo can't reach the requested position, increase it.
-#define SERVO_DELAY 300
-
-// Servo deactivation
-//
-// With this option servos are powered only during movement, then turned off to prevent jitter.
-//#define DEACTIVATE_SERVOS_AFTER_MOVE
-
-/**********************************************************************\
- * Support for a filament diameter sensor
- * Also allows adjustment of diameter at print time (vs at slicing)
- * Single extruder only at this point (extruder 0)
- *
- * Motherboards
- * 34 - RAMPS1.4 - uses Analog input 5 on the AUX2 connector
- * 81 - Printrboard - Uses Analog input 2 on the Exp1 connector (version B,C,D,E)
- * 301 - Rambo - uses Analog input 3
- * Note may require analog pins to be defined for different motherboards
- **********************************************************************/
-// Uncomment below to enable
-//#define FILAMENT_WIDTH_SENSOR
-
-#define DEFAULT_NOMINAL_FILAMENT_DIA 3.00 //Enter the diameter (in mm) of the filament generally used (3.0 mm or 1.75 mm) - this is then used in the slicer software. Used for sensor reading validation
-
-#if ENABLED(FILAMENT_WIDTH_SENSOR)
- #define FILAMENT_SENSOR_EXTRUDER_NUM 0 //The number of the extruder that has the filament sensor (0,1,2)
- #define MEASUREMENT_DELAY_CM 14 //measurement delay in cm. This is the distance from filament sensor to middle of barrel
-
- #define MEASURED_UPPER_LIMIT 3.30 //upper limit factor used for sensor reading validation in mm
- #define MEASURED_LOWER_LIMIT 1.90 //lower limit factor for sensor reading validation in mm
- #define MAX_MEASUREMENT_DELAY 20 //delay buffer size in bytes (1 byte = 1cm)- limits maximum measurement delay allowable (must be larger than MEASUREMENT_DELAY_CM and lower number saves RAM)
-
- #define DEFAULT_MEASURED_FILAMENT_DIA DEFAULT_NOMINAL_FILAMENT_DIA //set measured to nominal initially
-
- //When using an LCD, uncomment the line below to display the Filament sensor data on the last line instead of status. Status will appear for 5 sec.
- //#define FILAMENT_LCD_DISPLAY
-#endif
-
-#endif // CONFIGURATION_H
diff --git a/Marlin/example_configurations/Felix/Configuration_adv.h b/Marlin/example_configurations/Felix/Configuration_adv.h
deleted file mode 100644
index 5700735..0000000
--- a/Marlin/example_configurations/Felix/Configuration_adv.h
+++ /dev/null
@@ -1,799 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Configuration_adv.h
- *
- * Advanced settings.
- * Only change these if you know exactly what you're doing.
- * Some of these settings can damage your printer if improperly set!
- *
- * Basic settings can be found in Configuration.h
- *
- */
-#ifndef CONFIGURATION_ADV_H
-#define CONFIGURATION_ADV_H
-
-/**
- *
- * ***********************************
- * ** ATTENTION TO ALL DEVELOPERS **
- * ***********************************
- *
- * You must increment this version number for every significant change such as,
- * but not limited to: ADD, DELETE RENAME OR REPURPOSE any directive/option.
- *
- * Note: Update also Version.h !
- */
-#define CONFIGURATION_ADV_H_VERSION 010100
-
-// @section temperature
-
-//===========================================================================
-//=============================Thermal Settings ============================
-//===========================================================================
-
-#if DISABLED(PIDTEMPBED)
- #define BED_CHECK_INTERVAL 5000 // ms between checks in bang-bang control
- #if ENABLED(BED_LIMIT_SWITCHING)
- #define BED_HYSTERESIS 2 // Only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS
- #endif
-#endif
-
-/**
- * Thermal Protection protects your printer from damage and fire if a
- * thermistor falls out or temperature sensors fail in any way.
- *
- * The issue: If a thermistor falls out or a temperature sensor fails,
- * Marlin can no longer sense the actual temperature. Since a disconnected
- * thermistor reads as a low temperature, the firmware will keep the heater on.
- *
- * The solution: Once the temperature reaches the target, start observing.
- * If the temperature stays too far below the target (hysteresis) for too long (period),
- * the firmware will halt the machine as a safety precaution.
- *
- * If you get false positives for "Thermal Runaway" increase THERMAL_PROTECTION_HYSTERESIS and/or THERMAL_PROTECTION_PERIOD
- */
-#if ENABLED(THERMAL_PROTECTION_HOTENDS)
- #define THERMAL_PROTECTION_PERIOD 40 // Seconds
- #define THERMAL_PROTECTION_HYSTERESIS 4 // Degrees Celsius
-
- /**
- * Whenever an M104 or M109 increases the target temperature the firmware will wait for the
- * WATCH_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_TEMP_INCREASE
- * degrees, the machine is halted, requiring a hard reset. This test restarts with any M104/M109,
- * but only if the current temperature is far enough below the target for a reliable test.
- *
- * If you get false positives for "Heating failed" increase WATCH_TEMP_PERIOD and/or decrease WATCH_TEMP_INCREASE
- * WATCH_TEMP_INCREASE should not be below 2.
- */
- #define WATCH_TEMP_PERIOD 20 // Seconds
- #define WATCH_TEMP_INCREASE 2 // Degrees Celsius
-#endif
-
-/**
- * Thermal Protection parameters for the bed are just as above for hotends.
- */
-#if ENABLED(THERMAL_PROTECTION_BED)
- #define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
- #define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
-
- /**
- * Whenever an M140 or M190 increases the target temperature the firmware will wait for the
- * WATCH_BED_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_BED_TEMP_INCREASE
- * degrees, the machine is halted, requiring a hard reset. This test restarts with any M140/M190,
- * but only if the current temperature is far enough below the target for a reliable test.
- *
- * If you get too many "Heating failed" errors, increase WATCH_BED_TEMP_PERIOD and/or decrease
- * WATCH_BED_TEMP_INCREASE. (WATCH_BED_TEMP_INCREASE should not be below 2.)
- */
- #define WATCH_BED_TEMP_PERIOD 60 // Seconds
- #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
-#endif
-
-#if ENABLED(PIDTEMP)
- // this adds an experimental additional term to the heating power, proportional to the extrusion speed.
- // if Kc is chosen well, the additional required power due to increased melting should be compensated.
- //#define PID_EXTRUSION_SCALING
- #if ENABLED(PID_EXTRUSION_SCALING)
- #define DEFAULT_Kc (100) //heating power=Kc*(e_speed)
- #define LPQ_MAX_LEN 50
- #endif
-#endif
-
-/**
- * Automatic Temperature:
- * The hotend target temperature is calculated by all the buffered lines of gcode.
- * The maximum buffered steps/sec of the extruder motor is called "se".
- * Start autotemp mode with M109 S B F
- * The target temperature is set to mintemp+factor*se[steps/sec] and is limited by
- * mintemp and maxtemp. Turn this off by executing M109 without F*
- * Also, if the temperature is set to a value below mintemp, it will not be changed by autotemp.
- * On an Ultimaker, some initial testing worked with M109 S215 B260 F1 in the start.gcode
- */
-#define AUTOTEMP
-#if ENABLED(AUTOTEMP)
- #define AUTOTEMP_OLDWEIGHT 0.98
-#endif
-
-//Show Temperature ADC value
-//The M105 command return, besides traditional information, the ADC value read from temperature sensors.
-//#define SHOW_TEMP_ADC_VALUES
-
-/**
- * High Temperature Thermistor Support
- *
- * Thermistors able to support high temperature tend to have a hard time getting
- * good readings at room and lower temperatures. This means HEATER_X_RAW_LO_TEMP
- * will probably be caught when the heating element first turns on during the
- * preheating process, which will trigger a min_temp_error as a safety measure
- * and force stop everything.
- * To circumvent this limitation, we allow for a preheat time (during which,
- * min_temp_error won't be triggered) and add a min_temp buffer to handle
- * aberrant readings.
- *
- * If you want to enable this feature for your hotend thermistor(s)
- * uncomment and set values > 0 in the constants below
- */
-
-// The number of consecutive low temperature errors that can occur
-// before a min_temp_error is triggered. (Shouldn't be more than 10.)
-//#define MAX_CONSECUTIVE_LOW_TEMPERATURE_ERROR_ALLOWED 0
-
-// The number of milliseconds a hotend will preheat before starting to check
-// the temperature. This value should NOT be set to the time it takes the
-// hot end to reach the target temperature, but the time it takes to reach
-// the minimum temperature your thermistor can read. The lower the better/safer.
-// This shouldn't need to be more than 30 seconds (30000)
-//#define MILLISECONDS_PREHEAT_TIME 0
-
-// @section extruder
-
-// extruder run-out prevention.
-//if the machine is idle, and the temperature over MINTEMP, every couple of SECONDS some filament is extruded
-//#define EXTRUDER_RUNOUT_PREVENT
-#define EXTRUDER_RUNOUT_MINTEMP 190
-#define EXTRUDER_RUNOUT_SECONDS 30
-#define EXTRUDER_RUNOUT_ESTEPS 14 // mm filament
-#define EXTRUDER_RUNOUT_SPEED 1500 // extrusion speed
-#define EXTRUDER_RUNOUT_EXTRUDE 100
-
-// @section temperature
-
-//These defines help to calibrate the AD595 sensor in case you get wrong temperature measurements.
-//The measured temperature is defined as "actualTemp = (measuredTemp * TEMP_SENSOR_AD595_GAIN) + TEMP_SENSOR_AD595_OFFSET"
-#define TEMP_SENSOR_AD595_OFFSET 0.0
-#define TEMP_SENSOR_AD595_GAIN 1.0
-
-//This is for controlling a fan to cool down the stepper drivers
-//it will turn on when any driver is enabled
-//and turn off after the set amount of seconds from last driver being disabled again
-#define CONTROLLERFAN_PIN -1 //Pin used for the fan to cool controller (-1 to disable)
-#define CONTROLLERFAN_SECS 60 //How many seconds, after all motors were disabled, the fan should run
-#define CONTROLLERFAN_SPEED 255 // == full speed
-
-// When first starting the main fan, run it at full speed for the
-// given number of milliseconds. This gets the fan spinning reliably
-// before setting a PWM value. (Does not work with software PWM for fan on Sanguinololu)
-//#define FAN_KICKSTART_TIME 100
-
-// This defines the minimal speed for the main fan, run in PWM mode
-// to enable uncomment and set minimal PWM speed for reliable running (1-255)
-// if fan speed is [1 - (FAN_MIN_PWM-1)] it is set to FAN_MIN_PWM
-//#define FAN_MIN_PWM 50
-
-// @section extruder
-
-// Extruder cooling fans
-// Configure fan pin outputs to automatically turn on/off when the associated
-// extruder temperature is above/below EXTRUDER_AUTO_FAN_TEMPERATURE.
-// Multiple extruders can be assigned to the same pin in which case
-// the fan will turn on when any selected extruder is above the threshold.
-#define EXTRUDER_0_AUTO_FAN_PIN -1
-#define EXTRUDER_1_AUTO_FAN_PIN -1
-#define EXTRUDER_2_AUTO_FAN_PIN -1
-#define EXTRUDER_3_AUTO_FAN_PIN -1
-#define EXTRUDER_AUTO_FAN_TEMPERATURE 50
-#define EXTRUDER_AUTO_FAN_SPEED 255 // == full speed
-
-//===========================================================================
-//============================ Mechanical Settings ==========================
-//===========================================================================
-
-// @section homing
-
-// If you want endstops to stay on (by default) even when not homing
-// enable this option. Override at any time with M120, M121.
-//#define ENDSTOPS_ALWAYS_ON_DEFAULT
-
-// @section extras
-
-//#define Z_LATE_ENABLE // Enable Z the last moment. Needed if your Z driver overheats.
-
-// Dual X Steppers
-// Uncomment this option to drive two X axis motors.
-// The next unused E driver will be assigned to the second X stepper.
-//#define X_DUAL_STEPPER_DRIVERS
-#if ENABLED(X_DUAL_STEPPER_DRIVERS)
- // Set true if the two X motors need to rotate in opposite directions
- #define INVERT_X2_VS_X_DIR true
-#endif
-
-
-// Dual Y Steppers
-// Uncomment this option to drive two Y axis motors.
-// The next unused E driver will be assigned to the second Y stepper.
-//#define Y_DUAL_STEPPER_DRIVERS
-#if ENABLED(Y_DUAL_STEPPER_DRIVERS)
- // Set true if the two Y motors need to rotate in opposite directions
- #define INVERT_Y2_VS_Y_DIR true
-#endif
-
-// A single Z stepper driver is usually used to drive 2 stepper motors.
-// Uncomment this option to use a separate stepper driver for each Z axis motor.
-// The next unused E driver will be assigned to the second Z stepper.
-//#define Z_DUAL_STEPPER_DRIVERS
-
-#if ENABLED(Z_DUAL_STEPPER_DRIVERS)
-
- // Z_DUAL_ENDSTOPS is a feature to enable the use of 2 endstops for both Z steppers - Let's call them Z stepper and Z2 stepper.
- // That way the machine is capable to align the bed during home, since both Z steppers are homed.
- // There is also an implementation of M666 (software endstops adjustment) to this feature.
- // After Z homing, this adjustment is applied to just one of the steppers in order to align the bed.
- // One just need to home the Z axis and measure the distance difference between both Z axis and apply the math: Z adjust = Z - Z2.
- // If the Z stepper axis is closer to the bed, the measure Z > Z2 (yes, it is.. think about it) and the Z adjust would be positive.
- // Play a little bit with small adjustments (0.5mm) and check the behaviour.
- // The M119 (endstops report) will start reporting the Z2 Endstop as well.
-
- //#define Z_DUAL_ENDSTOPS
-
- #if ENABLED(Z_DUAL_ENDSTOPS)
- #define Z2_USE_ENDSTOP _XMAX_
- #endif
-
-#endif // Z_DUAL_STEPPER_DRIVERS
-
-// Enable this for dual x-carriage printers.
-// A dual x-carriage design has the advantage that the inactive extruder can be parked which
-// prevents hot-end ooze contaminating the print. It also reduces the weight of each x-carriage
-// allowing faster printing speeds. Connect your X2 stepper to the first unused E plug.
-//#define DUAL_X_CARRIAGE
-#if ENABLED(DUAL_X_CARRIAGE)
- // Configuration for second X-carriage
- // Note: the first x-carriage is defined as the x-carriage which homes to the minimum endstop;
- // the second x-carriage always homes to the maximum endstop.
- #define X2_MIN_POS 80 // set minimum to ensure second x-carriage doesn't hit the parked first X-carriage
- #define X2_MAX_POS 353 // set maximum to the distance between toolheads when both heads are homed
- #define X2_HOME_DIR 1 // the second X-carriage always homes to the maximum endstop position
- #define X2_HOME_POS X2_MAX_POS // default home position is the maximum carriage position
- // However: In this mode the HOTEND_OFFSET_X value for the second extruder provides a software
- // override for X2_HOME_POS. This also allow recalibration of the distance between the two endstops
- // without modifying the firmware (through the "M218 T1 X???" command).
- // Remember: you should set the second extruder x-offset to 0 in your slicer.
-
- // There are a few selectable movement modes for dual x-carriages using M605 S
- // Mode 0: Full control. The slicer has full control over both x-carriages and can achieve optimal travel results
- // as long as it supports dual x-carriages. (M605 S0)
- // Mode 1: Auto-park mode. The firmware will automatically park and unpark the x-carriages on tool changes so
- // that additional slicer support is not required. (M605 S1)
- // Mode 2: Duplication mode. The firmware will transparently make the second x-carriage and extruder copy all
- // actions of the first x-carriage. This allows the printer to print 2 arbitrary items at
- // once. (2nd extruder x offset and temp offset are set using: M605 S2 [Xnnn] [Rmmm])
-
- // This is the default power-up mode which can be later using M605.
- #define DEFAULT_DUAL_X_CARRIAGE_MODE 0
-
- // Default settings in "Auto-park Mode"
- #define TOOLCHANGE_PARK_ZLIFT 0.2 // the distance to raise Z axis when parking an extruder
- #define TOOLCHANGE_UNPARK_ZLIFT 1 // the distance to raise Z axis when unparking an extruder
-
- // Default x offset in duplication mode (typically set to half print bed width)
- #define DEFAULT_DUPLICATION_X_OFFSET 100
-
-#endif //DUAL_X_CARRIAGE
-
-// @section homing
-
-//homing hits the endstop, then retracts by this distance, before it tries to slowly bump again:
-#define X_HOME_BUMP_MM 5
-#define Y_HOME_BUMP_MM 5
-#define Z_HOME_BUMP_MM 3
-#define HOMING_BUMP_DIVISOR {2, 2, 4} // Re-Bump Speed Divisor (Divides the Homing Feedrate)
-//#define QUICK_HOME //if this is defined, if both x and y are to be homed, a diagonal move will be performed initially.
-
-// When G28 is called, this option will make Y home before X
-//#define HOME_Y_BEFORE_X
-
-// @section machine
-
-#define AXIS_RELATIVE_MODES {false, false, false, false}
-
-// Allow duplication mode with a basic dual-nozzle extruder
-//#define DUAL_NOZZLE_DUPLICATION_MODE
-
-// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
-#define INVERT_X_STEP_PIN false
-#define INVERT_Y_STEP_PIN false
-#define INVERT_Z_STEP_PIN false
-#define INVERT_E_STEP_PIN false
-
-// Default stepper release if idle. Set to 0 to deactivate.
-// Steppers will shut down DEFAULT_STEPPER_DEACTIVE_TIME seconds after the last move when DISABLE_INACTIVE_? is true.
-// Time can be set by M18 and M84.
-#define DEFAULT_STEPPER_DEACTIVE_TIME 60
-#define DISABLE_INACTIVE_X true
-#define DISABLE_INACTIVE_Y true
-#define DISABLE_INACTIVE_Z true // set to false if the nozzle will fall down on your printed part when print has finished.
-#define DISABLE_INACTIVE_E true
-
-#define DEFAULT_MINIMUMFEEDRATE 0.0 // minimum feedrate
-#define DEFAULT_MINTRAVELFEEDRATE 0.0
-
-// @section lcd
-
-#if ENABLED(ULTIPANEL)
- #define MANUAL_FEEDRATE {50*60, 50*60, 4*60, 60} // Feedrates for manual moves along X, Y, Z, E from panel
- #define ULTIPANEL_FEEDMULTIPLY // Comment to disable setting feedrate multiplier via encoder
-#endif
-
-// @section extras
-
-// minimum time in microseconds that a movement needs to take if the buffer is emptied.
-#define DEFAULT_MINSEGMENTTIME 20000
-
-// If defined the movements slow down when the look ahead buffer is only half full
-#define SLOWDOWN
-
-// Frequency limit
-// See nophead's blog for more info
-// Not working O
-//#define XY_FREQUENCY_LIMIT 15
-
-// Minimum planner junction speed. Sets the default minimum speed the planner plans for at the end
-// of the buffer and all stops. This should not be much greater than zero and should only be changed
-// if unwanted behavior is observed on a user's machine when running at very slow speeds.
-#define MINIMUM_PLANNER_SPEED 0.05// (mm/sec)
-
-// Microstep setting (Only functional when stepper driver microstep pins are connected to MCU.
-#define MICROSTEP_MODES {16,16,16,16,16} // [1,2,4,8,16]
-
-// Motor Current setting (Only functional when motor driver current ref pins are connected to a digital trimpot on supported boards)
-#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
-
-// Motor Current controlled via PWM (Overridable on supported boards with PWM-driven motor driver current)
-//#define PWM_MOTOR_CURRENT {1300, 1300, 1250} // Values in milliamps
-
-// uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
-//#define DIGIPOT_I2C
-// Number of channels available for I2C digipot, For Azteeg X3 Pro we have 8
-#define DIGIPOT_I2C_NUM_CHANNELS 8
-// actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
-#define DIGIPOT_I2C_MOTOR_CURRENTS {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}
-
-//===========================================================================
-//=============================Additional Features===========================
-//===========================================================================
-
-#define ENCODER_RATE_MULTIPLIER // If defined, certain menu edit operations automatically multiply the steps when the encoder is moved quickly
-#define ENCODER_10X_STEPS_PER_SEC 75 // If the encoder steps per sec exceeds this value, multiply steps moved x10 to quickly advance the value
-#define ENCODER_100X_STEPS_PER_SEC 160 // If the encoder steps per sec exceeds this value, multiply steps moved x100 to really quickly advance the value
-
-//#define CHDK 4 //Pin for triggering CHDK to take a picture see how to use it here http://captain-slow.dk/2014/03/09/3d-printing-timelapses/
-#define CHDK_DELAY 50 //How long in ms the pin should stay HIGH before going LOW again
-
-// @section lcd
-
-// Include a page of printer information in the LCD Main Menu
-//#define LCD_INFO_MENU
-
-#if ENABLED(SDSUPPORT)
-
- // Some RAMPS and other boards don't detect when an SD card is inserted. You can work
- // around this by connecting a push button or single throw switch to the pin defined
- // as SD_DETECT_PIN in your board's pins definitions.
- // This setting should be disabled unless you are using a push button, pulling the pin to ground.
- // Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
- #define SD_DETECT_INVERTED
-
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
- #define SD_FINISHED_RELEASECOMMAND "M84 X Y Z E" // You might want to keep the z enabled so your bed stays in place.
-
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
- //#define MENU_ADDAUTOSTART
-
- // Show a progress bar on HD44780 LCDs for SD printing
- //#define LCD_PROGRESS_BAR
-
- #if ENABLED(LCD_PROGRESS_BAR)
- // Amount of time (ms) to show the bar
- #define PROGRESS_BAR_BAR_TIME 2000
- // Amount of time (ms) to show the status message
- #define PROGRESS_BAR_MSG_TIME 3000
- // Amount of time (ms) to retain the status message (0=forever)
- #define PROGRESS_MSG_EXPIRE 0
- // Enable this to show messages for MSG_TIME then hide them
- //#define PROGRESS_MSG_ONCE
- #endif
-
- // This allows hosts to request long names for files and folders with M33
- //#define LONG_FILENAME_HOST_SUPPORT
-
- // This option allows you to abort SD printing when any endstop is triggered.
- // This feature must be enabled with "M540 S1" or from the LCD menu.
- // To have any effect, endstops must be enabled during SD printing.
- //#define ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED
-
-#endif // SDSUPPORT
-
-// for dogm lcd displays you can choose some additional fonts:
-#if ENABLED(DOGLCD)
- // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT
- // we don't have a big font for Cyrillic, Kana
- //#define USE_BIG_EDIT_FONT
-
- // If you have spare 2300Byte of progmem and want to use a
- // smaller font on the Info-screen uncomment the next line.
- //#define USE_SMALL_INFOFONT
-#endif // DOGLCD
-
-// @section safety
-
-// The hardware watchdog should reset the microcontroller disabling all outputs,
-// in case the firmware gets stuck and doesn't do temperature regulation.
-#define USE_WATCHDOG
-
-#if ENABLED(USE_WATCHDOG)
- // If you have a watchdog reboot in an ArduinoMega2560 then the device will hang forever, as a watchdog reset will leave the watchdog on.
- // The "WATCHDOG_RESET_MANUAL" goes around this by not using the hardware reset.
- // However, THIS FEATURE IS UNSAFE!, as it will only work if interrupts are disabled. And the code could hang in an interrupt routine with interrupts disabled.
- //#define WATCHDOG_RESET_MANUAL
-#endif
-
-// @section lcd
-
-// Babystepping enables the user to control the axis in tiny amounts, independently from the normal printing process
-// it can e.g. be used to change z-positions in the print startup phase in real-time
-// does not respect endstops!
-//#define BABYSTEPPING
-#if ENABLED(BABYSTEPPING)
- #define BABYSTEP_XY //not only z, but also XY in the menu. more clutter, more functions
- //not implemented for deltabots!
- #define BABYSTEP_INVERT_Z false //true for inverse movements in Z
- #define BABYSTEP_MULTIPLICATOR 1 //faster movements
-#endif
-
-// @section extruder
-
-// extruder advance constant (s2/mm3)
-//
-// advance (steps) = STEPS_PER_CUBIC_MM_E * EXTRUDER_ADVANCE_K * cubic mm per second ^ 2
-//
-// Hooke's law says: force = k * distance
-// Bernoulli's principle says: v ^ 2 / 2 + g . h + pressure / density = constant
-// so: v ^ 2 is proportional to number of steps we advance the extruder
-//#define ADVANCE
-
-#if ENABLED(ADVANCE)
- #define EXTRUDER_ADVANCE_K .0
- #define D_FILAMENT 2.85
-#endif
-
-// Implementation of a linear pressure control
-// Assumption: advance = k * (delta velocity)
-// K=0 means advance disabled. A good value for a gregs wade extruder will be around K=75
-//#define LIN_ADVANCE
-
-#if ENABLED(LIN_ADVANCE)
- #define LIN_ADVANCE_K 75
-#endif
-
-// @section leveling
-
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #define MESH_MIN_X (X_MIN_POS + MESH_INSET)
- #define MESH_MAX_X (X_MAX_POS - (MESH_INSET))
- #define MESH_MIN_Y (Y_MIN_POS + MESH_INSET)
- #define MESH_MAX_Y (Y_MAX_POS - (MESH_INSET))
-#endif
-
-// @section extras
-
-// Arc interpretation settings:
-#define ARC_SUPPORT // Disabling this saves ~2738 bytes
-#define MM_PER_ARC_SEGMENT 1
-#define N_ARC_CORRECTION 25
-
-// Support for G5 with XYZE destination and IJPQ offsets. Requires ~2666 bytes.
-//#define BEZIER_CURVE_SUPPORT
-
-const unsigned int dropsegments = 5; //everything with less than this number of steps will be ignored as move and joined with the next movement
-
-// @section temperature
-
-// Control heater 0 and heater 1 in parallel.
-//#define HEATERS_PARALLEL
-
-//===========================================================================
-//================================= Buffers =================================
-//===========================================================================
-
-// @section hidden
-
-// The number of linear motions that can be in the plan at any give time.
-// THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2, i.g. 8,16,32 because shifts and ors are used to do the ring-buffering.
-#if ENABLED(SDSUPPORT)
- #define BLOCK_BUFFER_SIZE 16 // SD,LCD,Buttons take more memory, block buffer needs to be smaller
-#else
- #define BLOCK_BUFFER_SIZE 16 // maximize block buffer
-#endif
-
-// @section serial
-
-// The ASCII buffer for serial input
-#define MAX_CMD_SIZE 96
-#define BUFSIZE 4
-
-// Transfer Buffer Size
-// To save 386 bytes of PROGMEM (and TX_BUFFER_SIZE+3 bytes of RAM) set to 0.
-// To buffer a simple "ok" you need 4 bytes.
-// For ADVANCED_OK (M105) you need 32 bytes.
-// For debug-echo: 128 bytes for the optimal speed.
-// Other output doesn't need to be that speedy.
-// :[0,2,4,8,16,32,64,128,256]
-#define TX_BUFFER_SIZE 0
-
-// Enable an emergency-command parser to intercept certain commands as they
-// enter the serial receive buffer, so they cannot be blocked.
-// Currently handles M108, M112, M410
-// Does not work on boards using AT90USB (USBCON) processors!
-//#define EMERGENCY_PARSER
-
-// Bad Serial-connections can miss a received command by sending an 'ok'
-// Therefore some clients abort after 30 seconds in a timeout.
-// Some other clients start sending commands while receiving a 'wait'.
-// This "wait" is only sent when the buffer is empty. 1 second is a good value here.
-//#define NO_TIMEOUTS 1000 // Milliseconds
-
-// Some clients will have this feature soon. This could make the NO_TIMEOUTS unnecessary.
-//#define ADVANCED_OK
-
-// @section fwretract
-
-// Firmware based and LCD controlled retract
-// M207 and M208 can be used to define parameters for the retraction.
-// The retraction can be called by the slicer using G10 and G11
-// until then, intended retractions can be detected by moves that only extrude and the direction.
-// the moves are than replaced by the firmware controlled ones.
-
-//#define FWRETRACT //ONLY PARTIALLY TESTED
-#if ENABLED(FWRETRACT)
- #define MIN_RETRACT 0.1 //minimum extruded mm to accept a automatic gcode retraction attempt
- #define RETRACT_LENGTH 3 //default retract length (positive mm)
- #define RETRACT_LENGTH_SWAP 13 //default swap retract length (positive mm), for extruder change
- #define RETRACT_FEEDRATE 45 //default feedrate for retracting (mm/s)
- #define RETRACT_ZLIFT 0 //default retract Z-lift
- #define RETRACT_RECOVER_LENGTH 0 //default additional recover length (mm, added to retract length when recovering)
- #define RETRACT_RECOVER_LENGTH_SWAP 0 //default additional swap recover length (mm, added to retract length when recovering from extruder change)
- #define RETRACT_RECOVER_FEEDRATE 8 //default feedrate for recovering from retraction (mm/s)
-#endif
-
-// Add support for experimental filament exchange support M600; requires display
-#if ENABLED(ULTIPANEL)
- // #define FILAMENT_CHANGE_FEATURE // Enable filament exchange menu and M600 g-code (used for runout sensor too)
- #if ENABLED(FILAMENT_CHANGE_FEATURE)
- #define FILAMENT_CHANGE_X_POS 3 // X position of hotend
- #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend
- #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift)
- #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
- #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers)
- #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm
- // It is a short retract used immediately after print interrupt before move to filament exchange position
- #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
- #define FILAMENT_CHANGE_UNLOAD_LENGTH 100 // Unload filament length from hotend in mm
- // Longer length for bowden printers to unload filament from whole bowden tube,
- // shorter lenght for printers without bowden to unload filament from extruder only,
- // 0 to disable unloading for manual unloading
- #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast
- #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm
- // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
- // Short or zero length for printers without bowden where loading is not used
- #define FILAMENT_CHANGE_LOAD_FEEDRATE 10 // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
- #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is load over the hotend,
- // 0 to disable for manual extrusion
- // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
- // or until outcoming filament color is not clear for filament color change
- #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
- #endif
-#endif
-
-/******************************************************************************\
- * enable this section if you have TMC26X motor drivers.
- * you need to import the TMC26XStepper library into the Arduino IDE for this
- ******************************************************************************/
-
-// @section tmc
-
-//#define HAVE_TMCDRIVER
-#if ENABLED(HAVE_TMCDRIVER)
-
- //#define X_IS_TMC
- #define X_MAX_CURRENT 1000 //in mA
- #define X_SENSE_RESISTOR 91 //in mOhms
- #define X_MICROSTEPS 16 //number of microsteps
-
- //#define X2_IS_TMC
- #define X2_MAX_CURRENT 1000 //in mA
- #define X2_SENSE_RESISTOR 91 //in mOhms
- #define X2_MICROSTEPS 16 //number of microsteps
-
- //#define Y_IS_TMC
- #define Y_MAX_CURRENT 1000 //in mA
- #define Y_SENSE_RESISTOR 91 //in mOhms
- #define Y_MICROSTEPS 16 //number of microsteps
-
- //#define Y2_IS_TMC
- #define Y2_MAX_CURRENT 1000 //in mA
- #define Y2_SENSE_RESISTOR 91 //in mOhms
- #define Y2_MICROSTEPS 16 //number of microsteps
-
- //#define Z_IS_TMC
- #define Z_MAX_CURRENT 1000 //in mA
- #define Z_SENSE_RESISTOR 91 //in mOhms
- #define Z_MICROSTEPS 16 //number of microsteps
-
- //#define Z2_IS_TMC
- #define Z2_MAX_CURRENT 1000 //in mA
- #define Z2_SENSE_RESISTOR 91 //in mOhms
- #define Z2_MICROSTEPS 16 //number of microsteps
-
- //#define E0_IS_TMC
- #define E0_MAX_CURRENT 1000 //in mA
- #define E0_SENSE_RESISTOR 91 //in mOhms
- #define E0_MICROSTEPS 16 //number of microsteps
-
- //#define E1_IS_TMC
- #define E1_MAX_CURRENT 1000 //in mA
- #define E1_SENSE_RESISTOR 91 //in mOhms
- #define E1_MICROSTEPS 16 //number of microsteps
-
- //#define E2_IS_TMC
- #define E2_MAX_CURRENT 1000 //in mA
- #define E2_SENSE_RESISTOR 91 //in mOhms
- #define E2_MICROSTEPS 16 //number of microsteps
-
- //#define E3_IS_TMC
- #define E3_MAX_CURRENT 1000 //in mA
- #define E3_SENSE_RESISTOR 91 //in mOhms
- #define E3_MICROSTEPS 16 //number of microsteps
-
-#endif
-
-/******************************************************************************\
- * enable this section if you have L6470 motor drivers.
- * you need to import the L6470 library into the Arduino IDE for this
- ******************************************************************************/
-
-// @section l6470
-
-//#define HAVE_L6470DRIVER
-#if ENABLED(HAVE_L6470DRIVER)
-
- //#define X_IS_L6470
- #define X_MICROSTEPS 16 //number of microsteps
- #define X_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define X_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define X_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define X2_IS_L6470
- #define X2_MICROSTEPS 16 //number of microsteps
- #define X2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define X2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define X2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Y_IS_L6470
- #define Y_MICROSTEPS 16 //number of microsteps
- #define Y_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Y_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Y_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Y2_IS_L6470
- #define Y2_MICROSTEPS 16 //number of microsteps
- #define Y2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Y2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Y2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Z_IS_L6470
- #define Z_MICROSTEPS 16 //number of microsteps
- #define Z_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Z_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Z_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Z2_IS_L6470
- #define Z2_MICROSTEPS 16 //number of microsteps
- #define Z2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Z2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Z2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E0_IS_L6470
- #define E0_MICROSTEPS 16 //number of microsteps
- #define E0_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E0_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E0_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E1_IS_L6470
- #define E1_MICROSTEPS 16 //number of microsteps
- #define E1_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E1_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E1_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E2_IS_L6470
- #define E2_MICROSTEPS 16 //number of microsteps
- #define E2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E3_IS_L6470
- #define E3_MICROSTEPS 16 //number of microsteps
- #define E3_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E3_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E3_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
-#endif
-
-/**
- * TWI/I2C BUS
- *
- * This feature is an EXPERIMENTAL feature so it shall not be used on production
- * machines. Enabling this will allow you to send and receive I2C data from slave
- * devices on the bus.
- *
- * ; Example #1
- * ; This macro send the string "Marlin" to the slave device with address 0x63 (99)
- * ; It uses multiple M155 commands with one B arg
- * M155 A99 ; Target slave address
- * M155 B77 ; M
- * M155 B97 ; a
- * M155 B114 ; r
- * M155 B108 ; l
- * M155 B105 ; i
- * M155 B110 ; n
- * M155 S1 ; Send the current buffer
- *
- * ; Example #2
- * ; Request 6 bytes from slave device with address 0x63 (99)
- * M156 A99 B5
- *
- * ; Example #3
- * ; Example serial output of a M156 request
- * echo:i2c-reply: from:99 bytes:5 data:hello
- */
-
-// @section i2cbus
-
-//#define EXPERIMENTAL_I2CBUS
-
-#endif // CONFIGURATION_ADV_H
diff --git a/Marlin/example_configurations/Felix/DUAL/Configuration.h b/Marlin/example_configurations/Felix/DUAL/Configuration.h
deleted file mode 100644
index 59f45c4..0000000
--- a/Marlin/example_configurations/Felix/DUAL/Configuration.h
+++ /dev/null
@@ -1,1308 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Configuration.h
- *
- * Basic settings such as:
- *
- * - Type of electronics
- * - Type of temperature sensor
- * - Printer geometry
- * - Endstop configuration
- * - LCD controller
- * - Extra features
- *
- * Advanced settings can be found in Configuration_adv.h
- *
- */
-#ifndef CONFIGURATION_H
-#define CONFIGURATION_H
-
-/**
- *
- * ***********************************
- * ** ATTENTION TO ALL DEVELOPERS **
- * ***********************************
- *
- * You must increment this version number for every significant change such as,
- * but not limited to: ADD, DELETE RENAME OR REPURPOSE any directive/option.
- *
- * Note: Update also Version.h !
- */
-#define CONFIGURATION_H_VERSION 010100
-
-//===========================================================================
-//============================= Getting Started =============================
-//===========================================================================
-
-/**
- * Here are some standard links for getting your machine calibrated:
- *
- * http://reprap.org/wiki/Calibration
- * http://youtu.be/wAL9d7FgInk
- * http://calculator.josefprusa.cz
- * http://reprap.org/wiki/Triffid_Hunter%27s_Calibration_Guide
- * http://www.thingiverse.com/thing:5573
- * https://sites.google.com/site/repraplogphase/calibration-of-your-reprap
- * http://www.thingiverse.com/thing:298812
- */
-
-//===========================================================================
-//============================= DELTA Printer ===============================
-//===========================================================================
-// For a Delta printer replace the configuration files with the files in the
-// example_configurations/delta directory.
-//
-
-//===========================================================================
-//============================= SCARA Printer ===============================
-//===========================================================================
-// For a Scara printer replace the configuration files with the files in the
-// example_configurations/SCARA directory.
-//
-
-// @section info
-
-// User-specified version info of this build to display in [Pronterface, etc] terminal window during
-// startup. Implementation of an idea by Prof Braino to inform user that any changes made to this
-// build by the user have been successfully uploaded into firmware.
-#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
-#define SHOW_BOOTSCREEN
-#define STRING_SPLASH_LINE1 SHORT_BUILD_VERSION // will be shown during boot in line 1
-#define STRING_SPLASH_LINE2 WEBSITE_URL // will be shown during boot in line 2
-
-//
-// *** VENDORS PLEASE READ *****************************************************
-//
-// Marlin now allow you to have a vendor boot image to be displayed on machine
-// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
-//
-// We suggest for you to take advantage of this new feature and keep the Marlin
-// boot image unmodified. For an example have a look at the bq Hephestos 2
-// example configuration folder.
-//
-//#define SHOW_CUSTOM_BOOTSCREEN
-// @section machine
-
-// SERIAL_PORT selects which serial port should be used for communication with the host.
-// This allows the connection of wireless adapters (for instance) to non-default port pins.
-// Serial port 0 is still used by the Arduino bootloader regardless of this setting.
-// :[0,1,2,3,4,5,6,7]
-#define SERIAL_PORT 0
-
-// This determines the communication speed of the printer
-// :[2400,9600,19200,38400,57600,115200,250000]
-#define BAUDRATE 250000
-
-// Enable the Bluetooth serial interface on AT90USB devices
-//#define BLUETOOTH
-
-// The following define selects which electronics board you have.
-// Please choose the name from boards.h that matches your setup
-#ifndef MOTHERBOARD
- #define MOTHERBOARD BOARD_FELIX2
-#endif
-
-// Optional custom name for your RepStrap or other custom machine
-// Displayed in the LCD "Ready" message
-#define CUSTOM_MACHINE_NAME "Felix Dual"
-
-// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
-// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
-//#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
-
-// This defines the number of extruders
-// :[1,2,3,4]
-#define EXTRUDERS 2
-
-// For Cyclops or any "multi-extruder" that shares a single nozzle.
-//#define SINGLENOZZLE
-
-// A dual extruder that uses a single stepper motor
-// Don't forget to set SSDE_SERVO_ANGLES and HOTEND_OFFSET_X/Y/Z
-//#define SWITCHING_EXTRUDER
-#if ENABLED(SWITCHING_EXTRUDER)
- #define SWITCHING_EXTRUDER_SERVO_NR 0
- #define SWITCHING_EXTRUDER_SERVO_ANGLES { 0, 90 } // Angles for E0, E1
- //#define HOTEND_OFFSET_Z {0.0, 0.0}
-#endif
-
-/**
- * "Mixing Extruder"
- * - Adds a new code, M165, to set the current mix factors.
- * - Extends the stepping routines to move multiple steppers in proportion to the mix.
- * - Optional support for Repetier Host M163, M164, and virtual extruder.
- * - This implementation supports only a single extruder.
- * - Enable DIRECT_MIXING_IN_G1 for Pia Taubert's reference implementation
- */
-//#define MIXING_EXTRUDER
-#if ENABLED(MIXING_EXTRUDER)
- #define MIXING_STEPPERS 2 // Number of steppers in your mixing extruder
- #define MIXING_VIRTUAL_TOOLS 16 // Use the Virtual Tool method with M163 and M164
- //#define DIRECT_MIXING_IN_G1 // Allow ABCDHI mix factors in G1 movement commands
-#endif
-
-// Offset of the extruders (uncomment if using more than one and relying on firmware to position when changing).
-// The offset has to be X=0, Y=0 for the extruder 0 hotend (default extruder).
-// For the other hotends it is their distance from the extruder 0 hotend.
-//#define HOTEND_OFFSET_X {0.0, 20.00} // (in mm) for each extruder, offset of the hotend on the X axis
-//#define HOTEND_OFFSET_Y {0.0, 5.00} // (in mm) for each extruder, offset of the hotend on the Y axis
-
-//// The following define selects which power supply you have. Please choose the one that matches your setup
-// 1 = ATX
-// 2 = X-Box 360 203Watts (the blue wire connected to PS_ON and the red wire to VCC)
-// :{1:'ATX',2:'X-Box 360'}
-#define POWER_SUPPLY 1
-
-// Define this to have the electronics keep the power supply off on startup. If you don't know what this is leave it.
-#define PS_DEFAULT_OFF
-
-// @section temperature
-
-//===========================================================================
-//============================= Thermal Settings ============================
-//===========================================================================
-//
-//--NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table
-//
-//// Temperature sensor settings:
-// -3 is thermocouple with MAX31855 (only for sensor 0)
-// -2 is thermocouple with MAX6675 (only for sensor 0)
-// -1 is thermocouple with AD595
-// 0 is not used
-// 1 is 100k thermistor - best choice for EPCOS 100k (4.7k pullup)
-// 2 is 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)
-// 3 is Mendel-parts thermistor (4.7k pullup)
-// 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !!
-// 5 is 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup)
-// 6 is 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup)
-// 7 is 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup)
-// 71 is 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup)
-// 8 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup)
-// 9 is 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup)
-// 10 is 100k RS thermistor 198-961 (4.7k pullup)
-// 11 is 100k beta 3950 1% thermistor (4.7k pullup)
-// 12 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed)
-// 13 is 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE"
-// 20 is the PT100 circuit found in the Ultimainboard V2.x
-// 60 is 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
-// 66 is 4.7M High Temperature thermistor from Dyze Design
-// 70 is the 100K thermistor found in the bq Hephestos 2
-//
-// 1k ohm pullup tables - This is not normal, you would have to have changed out your 4.7k for 1k
-// (but gives greater accuracy and more stable PID)
-// 51 is 100k thermistor - EPCOS (1k pullup)
-// 52 is 200k thermistor - ATC Semitec 204GT-2 (1k pullup)
-// 55 is 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup)
-//
-// 1047 is Pt1000 with 4k7 pullup
-// 1010 is Pt1000 with 1k pullup (non standard)
-// 147 is Pt100 with 4k7 pullup
-// 110 is Pt100 with 1k pullup (non standard)
-// 998 and 999 are Dummy Tables. They will ALWAYS read 25°C or the temperature defined below.
-// Use it for Testing or Development purposes. NEVER for production machine.
-//#define DUMMY_THERMISTOR_998_VALUE 25
-//#define DUMMY_THERMISTOR_999_VALUE 100
-// :{ '0': "Not used",'1':"100k / 4.7k - EPCOS",'2':"200k / 4.7k - ATC Semitec 204GT-2",'3':"Mendel-parts / 4.7k",'4':"10k !! do not use for a hotend. Bad resolution at high temp. !!",'5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)",'6':"100k / 4.7k EPCOS - Not as accurate as Table 1",'7':"100k / 4.7k Honeywell 135-104LAG-J01",'8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT",'9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1",'10':"100k / 4.7k RS 198-961",'11':"100k / 4.7k beta 3950 1%",'12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)",'13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'",'20':"PT100 (Ultimainboard V2.x)",'51':"100k / 1k - EPCOS",'52':"200k / 1k - ATC Semitec 204GT-2",'55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)",'60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950",'66':"Dyze Design 4.7M High Temperature thermistor",'70':"the 100K thermistor found in the bq Hephestos 2",'71':"100k / 4.7k Honeywell 135-104LAF-J01",'147':"Pt100 / 4.7k",'1047':"Pt1000 / 4.7k",'110':"Pt100 / 1k (non-standard)",'1010':"Pt1000 / 1k (non standard)",'-3':"Thermocouple + MAX31855 (only for sensor 0)",'-2':"Thermocouple + MAX6675 (only for sensor 0)",'-1':"Thermocouple + AD595",'998':"Dummy 1",'999':"Dummy 2" }
-#define TEMP_SENSOR_0 1
-#define TEMP_SENSOR_1 1
-#define TEMP_SENSOR_2 0
-#define TEMP_SENSOR_3 0
-#define TEMP_SENSOR_BED 1
-
-// This makes temp sensor 1 a redundant sensor for sensor 0. If the temperatures difference between these sensors is to high the print will be aborted.
-//#define TEMP_SENSOR_1_AS_REDUNDANT
-#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 10
-
-// Extruder temperature must be close to target for this long before M109 returns success
-#define TEMP_RESIDENCY_TIME 15 // (seconds)
-#define TEMP_HYSTERESIS 3 // (degC) range of +/- temperatures considered "close" to the target one
-#define TEMP_WINDOW 1 // (degC) Window around target to start the residency timer x degC early.
-
-// Bed temperature must be close to target for this long before M190 returns success
-#define TEMP_BED_RESIDENCY_TIME 0 // (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.
-
-// The minimal temperature defines the temperature below which the heater will not be enabled It is used
-// to check that the wiring to the thermistor is not broken.
-// Otherwise this would lead to the heater being powered on all the time.
-#define HEATER_0_MINTEMP 5
-#define HEATER_1_MINTEMP 5
-#define HEATER_2_MINTEMP 5
-#define HEATER_3_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 275
-#define HEATER_1_MAXTEMP 275
-#define HEATER_2_MAXTEMP 275
-#define HEATER_3_MAXTEMP 275
-#define BED_MAXTEMP 150
-
-//===========================================================================
-//============================= PID Settings ================================
-//===========================================================================
-// PID Tuning Guide here: http://reprap.org/wiki/PID_Tuning
-
-// Comment the following line to disable PID and enable bang-bang.
-#define PIDTEMP
-#define BANG_MAX 255 // limits current to nozzle while in bang-bang mode; 255=full current
-#define PID_MAX BANG_MAX // limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
-#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
- //#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
- // Set/get with gcode: M301 E[extruder number, 0-2]
- #define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
- // is more than PID_FUNCTIONAL_RANGE then the PID will be shut off and the heater will be set to min/max.
- #define PID_INTEGRAL_DRIVE_MAX PID_MAX //limit for the integral term
- #define K1 0.95 //smoothing factor within the PID
-
- // Felix 2.0+ electronics with v4 Hotend
- #define DEFAULT_Kp 12
- #define DEFAULT_Ki 0.84
- #define DEFAULT_Kd 85
-
-#endif // PIDTEMP
-
-//===========================================================================
-//============================= PID > Bed Temperature Control ===============
-//===========================================================================
-// Select PID or bang-bang with PIDTEMPBED. If bang-bang, BED_LIMIT_SWITCHING will enable hysteresis
-//
-// Uncomment this to enable PID on the bed. It uses the same frequency PWM as the extruder.
-// If your PID_dT is the default, and correct for your hardware/configuration, that means 7.689Hz,
-// which is fine for driving a square wave into a resistive load and does not significantly impact you FET heating.
-// This also works fine on a Fotek SSR-10DA Solid State Relay into a 250W heater.
-// If your configuration is significantly different than this and you don't understand the issues involved, you probably
-// shouldn't use bed PID until someone else verifies your hardware works.
-// If this is enabled, find your own PID constants below.
-#define PIDTEMPBED
-
-//#define BED_LIMIT_SWITCHING
-
-// This sets the max power delivered to the bed, and replaces the HEATER_BED_DUTY_CYCLE_DIVIDER option.
-// all forms of bed control obey this (PID, bang-bang, bang-bang with hysteresis)
-// setting this to anything other than 255 enables a form of PWM to the bed just like HEATER_BED_DUTY_CYCLE_DIVIDER did,
-// so you shouldn't use it unless you are OK with PWM on your bed. (see the comment on enabling PIDTEMPBED)
-#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current
-
-#if ENABLED(PIDTEMPBED)
-
- //#define PID_BED_DEBUG // Sends debug data to the serial port.
-
- // Felix Foil Heater
- #define DEFAULT_bedKp 103.37
- #define DEFAULT_bedKi 2.79
- #define DEFAULT_bedKd 956.94
-
- // FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles.
-#endif // PIDTEMPBED
-
-// @section extruder
-
-//this prevents dangerous Extruder moves, i.e. if the temperature is under the limit
-//can be software-disabled for whatever purposes by
-#define PREVENT_DANGEROUS_EXTRUDE
-//if PREVENT_DANGEROUS_EXTRUDE is on, you can still disable (uncomment) very long bits of extrusion separately.
-#define PREVENT_LENGTHY_EXTRUDE
-
-#define EXTRUDE_MINTEMP 170
-#define EXTRUDE_MAXLENGTH (X_MAX_LENGTH+Y_MAX_LENGTH) //prevent extrusion of very large distances.
-
-//===========================================================================
-//======================== Thermal Runaway Protection =======================
-//===========================================================================
-
-/**
- * Thermal Protection protects your printer from damage and fire if a
- * thermistor falls out or temperature sensors fail in any way.
- *
- * The issue: If a thermistor falls out or a temperature sensor fails,
- * Marlin can no longer sense the actual temperature. Since a disconnected
- * thermistor reads as a low temperature, the firmware will keep the heater on.
- *
- * If you get "Thermal Runaway" or "Heating failed" errors the
- * details can be tuned in Configuration_adv.h
- */
-
-#define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders
-#define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed
-
-//===========================================================================
-//============================= Mechanical Settings =========================
-//===========================================================================
-
-// @section machine
-
-// Uncomment one of these options to enable CoreXY, CoreXZ, or CoreYZ kinematics
-//#define COREXY
-//#define COREXZ
-//#define COREYZ
-
-// Enable this option for Toshiba steppers
-//#define CONFIG_STEPPERS_TOSHIBA
-
-//===========================================================================
-//============================== Endstop Settings ===========================
-//===========================================================================
-
-// @section homing
-
-// Specify here all the endstop connectors that are connected to any endstop or probe.
-// Almost all printers will be using one per axis. Probes will use one or more of the
-// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
-#define USE_XMIN_PLUG
-#define USE_YMIN_PLUG
-#define USE_ZMIN_PLUG
-//#define USE_XMAX_PLUG
-//#define USE_YMAX_PLUG
-//#define USE_ZMAX_PLUG
-
-// coarse Endstop Settings
-#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
-
-#if DISABLED(ENDSTOPPULLUPS)
- // fine endstop settings: Individual pullups. will be ignored if ENDSTOPPULLUPS is defined
- //#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 false // set to true to invert the logic of the endstop.
-#define Y_MIN_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
-#define Z_MIN_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
-#define X_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Y_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Z_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Z_MIN_PROBE_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
-
-//===========================================================================
-//============================= Z Probe Options =============================
-//===========================================================================
-
-//
-// Probe Type
-// Probes are sensors/switches that are activated / deactivated before/after use.
-//
-// Allen Key Probes, Servo Probes, Z-Sled Probes, FIX_MOUNTED_PROBE, etc.
-// You must activate one of these to use AUTO_BED_LEVELING_FEATURE below.
-//
-// Use M851 to set the Z probe vertical offset from the nozzle. Store with M500.
-//
-
-// A Fix-Mounted Probe either doesn't deploy or needs manual deployment.
-// For example an inductive probe, or a setup that uses the nozzle to probe.
-// An inductive probe must be deactivated to go below
-// its trigger-point if hardware endstops are active.
-//#define FIX_MOUNTED_PROBE
-
-// The BLTouch probe emulates a servo probe.
-//#define BLTOUCH
-
-// Z Servo Probe, such as an endstop switch on a rotating arm.
-//#define Z_ENDSTOP_SERVO_NR 0
-//#define Z_SERVO_ANGLES {70,0} // Z Servo Deploy and Stow angles
-
-// Enable if you have a Z probe mounted on a sled like those designed by Charles Bell.
-//#define Z_PROBE_SLED
-//#define SLED_DOCKING_OFFSET 5 // The extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.
-
-// Z Probe to nozzle (X,Y) offset, relative to (0, 0).
-// X and Y offsets must be integers.
-//
-// In the following example the X and Y offsets are both positive:
-// #define X_PROBE_OFFSET_FROM_EXTRUDER 10
-// #define Y_PROBE_OFFSET_FROM_EXTRUDER 10
-//
-// +-- BACK ---+
-// | |
-// L | (+) P | R <-- probe (20,20)
-// E | | I
-// F | (-) N (+) | G <-- nozzle (10,10)
-// T | | H
-// | (-) | T
-// | |
-// O-- FRONT --+
-// (0,0)
-#define X_PROBE_OFFSET_FROM_EXTRUDER -25 // X offset: -left +right [of the nozzle]
-#define Y_PROBE_OFFSET_FROM_EXTRUDER -29 // Y offset: -front +behind [the nozzle]
-#define Z_PROBE_OFFSET_FROM_EXTRUDER -12.35 // Z offset: -below +above [the nozzle]
-
-// X and Y axis travel speed (mm/m) between probes
-#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
-#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
-// Speed for the "accurate" probe of each point
-#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
-
-//
-// Allen Key Probe is defined in the Delta example configurations.
-//
-
-// Enable Z_MIN_PROBE_ENDSTOP to use _both_ a Z Probe and a Z-min-endstop on the same machine.
-// With this option the Z_MIN_PROBE_PIN will only be used for probing, never for homing.
-//
-// *** PLEASE READ ALL INSTRUCTIONS BELOW FOR SAFETY! ***
-//
-// To continue using the Z-min-endstop for homing, be sure to disable Z_SAFE_HOMING.
-// Example: To park the head outside the bed area when homing with G28.
-//
-// To use a separate Z probe, your board must define a Z_MIN_PROBE_PIN.
-//
-// For a servo-based Z probe, you must set up servo support below, including
-// NUM_SERVOS, Z_ENDSTOP_SERVO_NR and Z_SERVO_ANGLES.
-//
-// - RAMPS 1.3/1.4 boards may be able to use the 5V, GND, and Aux4->D32 pin.
-// - Use 5V for powered (usu. inductive) sensors.
-// - Otherwise connect:
-// - normally-closed switches to GND and D32.
-// - normally-open switches to 5V and D32.
-//
-// Normally-closed switches are advised and are the default.
-//
-// The Z_MIN_PROBE_PIN sets the Arduino pin to use. (See your board's pins file.)
-// Since the RAMPS Aux4->D32 pin maps directly to the Arduino D32 pin, D32 is the
-// default pin for all RAMPS-based boards. Some other boards map differently.
-// To set or change the pin for your board, edit the appropriate pins_XXXXX.h file.
-//
-// WARNING:
-// Setting the wrong pin may have unexpected and potentially disastrous consequences.
-// Use with caution and do your homework.
-//
-//#define Z_MIN_PROBE_ENDSTOP
-
-// Enable Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN to use the Z_MIN_PIN for your Z_MIN_PROBE.
-// The Z_MIN_PIN will then be used for both Z-homing and probing.
-#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
-
-// To use a probe you must enable one of the two options above!
-
-// This option disables the use of the Z_MIN_PROBE_PIN
-// To enable the Z probe pin but disable its use, uncomment the line below. This only affects a
-// Z probe switch if you have a separate Z min endstop also and have activated Z_MIN_PROBE_ENDSTOP above.
-// If you're using the Z MIN endstop connector for your Z probe, this has no effect.
-//#define DISABLE_Z_MIN_PROBE_ENDSTOP
-
-// Enable Z Probe Repeatability test to see how accurate your probe is
-//#define Z_MIN_PROBE_REPEATABILITY_TEST
-
-//
-// Probe Raise options provide clearance for the probe to deploy, stow, and travel.
-//
-#define Z_PROBE_DEPLOY_HEIGHT 15 // Raise to make room for the probe to deploy / stow
-#define Z_PROBE_TRAVEL_HEIGHT 5 // Raise between probing points.
-
-//
-// For M851 give a range for adjusting the Z probe offset
-//
-#define Z_PROBE_OFFSET_RANGE_MIN -20
-#define Z_PROBE_OFFSET_RANGE_MAX 20
-
-// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
-// :{0:'Low',1:'High'}
-#define X_ENABLE_ON 0
-#define Y_ENABLE_ON 0
-#define Z_ENABLE_ON 0
-#define E_ENABLE_ON 0 // For all extruders
-
-// Disables axis stepper immediately when it's not being used.
-// WARNING: When motors turn off there is a chance of losing position accuracy!
-#define DISABLE_X false
-#define DISABLE_Y false
-#define DISABLE_Z false
-// Warn on display about possibly reduced accuracy
-//#define DISABLE_REDUCED_ACCURACY_WARNING
-
-// @section extruder
-
-#define DISABLE_E false // For all extruders
-#define DISABLE_INACTIVE_EXTRUDER true //disable only inactive extruders and keep active extruder enabled
-
-// @section machine
-
-// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way.
-#define INVERT_X_DIR true
-#define INVERT_Y_DIR true
-#define INVERT_Z_DIR true
-
-// @section extruder
-
-// For direct drive extruder v9 set to true, for geared extruder set to false.
-#define INVERT_E0_DIR false
-#define INVERT_E1_DIR true
-#define INVERT_E2_DIR false
-#define INVERT_E3_DIR false
-
-// @section homing
-
-//#define Z_HOMING_HEIGHT 4 // (in mm) Minimal z height before homing (G28) for Z clearance above the bed, clamps, ...
- // Be sure you have this distance over your Z_MAX_POS in case.
-
-// ENDSTOP SETTINGS:
-// Sets direction of endstops when homing; 1=MAX, -1=MIN
-// :[-1,1]
-#define X_HOME_DIR -1
-#define Y_HOME_DIR -1
-#define Z_HOME_DIR -1
-
-#define min_software_endstops true // If true, axis won't move to coordinates less than HOME_POS.
-#define max_software_endstops true // If true, axis won't move to coordinates greater than the defined lengths below.
-
-// @section machine
-
-// Travel limits after homing (units are in mm)
-#define X_MIN_POS 0
-#define Y_MIN_POS 0
-#define Z_MIN_POS 0
-#define X_MAX_POS 255
-#define Y_MAX_POS 205
-#define Z_MAX_POS 235
-
-//===========================================================================
-//========================= Filament Runout Sensor ==========================
-//===========================================================================
-//#define FILAMENT_RUNOUT_SENSOR // Uncomment for defining a filament runout sensor such as a mechanical or opto endstop to check the existence of filament
- // In RAMPS uses servo pin 2. Can be changed in pins file. For other boards pin definition should be made.
- // It is assumed that when logic high = filament available
- // when logic low = filament ran out
-#if ENABLED(FILAMENT_RUNOUT_SENSOR)
- const bool FIL_RUNOUT_INVERTING = false; // set to true to invert the logic of the sensor.
- #define ENDSTOPPULLUP_FIL_RUNOUT // Uncomment to use internal pullup for filament runout pins if the sensor is defined.
- #define FILAMENT_RUNOUT_SCRIPT "M600"
-#endif
-
-//===========================================================================
-//============================ Mesh Bed Leveling ============================
-//===========================================================================
-
-//#define MESH_BED_LEVELING // Enable mesh bed leveling.
-
-#if ENABLED(MESH_BED_LEVELING)
- #define MESH_INSET 10 // Mesh inset margin on print area
- #define MESH_NUM_X_POINTS 3 // Don't use more than 7 points per axis, implementation limited.
- #define MESH_NUM_Y_POINTS 3
- #define MESH_HOME_SEARCH_Z 4 // Z after Home, bed somewhere below but above 0.0.
-
- //#define MESH_G28_REST_ORIGIN // After homing all axes ('G28' or 'G28 XYZ') rest at origin [0,0,0]
-
- //#define MANUAL_BED_LEVELING // Add display menu option for bed leveling.
-
- #if ENABLED(MANUAL_BED_LEVELING)
- #define MBL_Z_STEP 0.025 // Step size while manually probing Z axis.
- #endif // MANUAL_BED_LEVELING
-
-#endif // MESH_BED_LEVELING
-
-//===========================================================================
-//============================ Bed Auto Leveling ============================
-//===========================================================================
-
-// @section bedlevel
-
-//#define AUTO_BED_LEVELING_FEATURE // Delete the comment to enable (remove // at the start of the line)
-
-// Enable this feature to get detailed logging of G28, G29, M48, etc.
-// Logging is off by default. Enable this logging feature with 'M111 S32'.
-// NOTE: Requires a huge amount of PROGMEM.
-//#define DEBUG_LEVELING_FEATURE
-
-#if ENABLED(AUTO_BED_LEVELING_FEATURE)
-
- // There are 2 different ways to specify probing locations:
- //
- // - "grid" mode
- // Probe several points in a rectangular grid.
- // You specify the rectangle and the density of sample points.
- // This mode is preferred because there are more measurements.
- //
- // - "3-point" mode
- // Probe 3 arbitrary points on the bed (that aren't collinear)
- // You specify the XY coordinates of all 3 points.
-
- // Enable this to sample the bed in a grid (least squares solution).
- // Note: this feature generates 10KB extra code size.
- #define AUTO_BED_LEVELING_GRID
-
- #if ENABLED(AUTO_BED_LEVELING_GRID)
-
- #define LEFT_PROBE_BED_POSITION 15
- #define RIGHT_PROBE_BED_POSITION 170
- #define FRONT_PROBE_BED_POSITION 20
- #define BACK_PROBE_BED_POSITION 180
-
- #define MIN_PROBE_EDGE 10 // The Z probe minimum square sides can be no smaller than this.
-
- // Set the number of grid points per dimension.
- // You probably don't need more than 3 (squared=9).
- #define AUTO_BED_LEVELING_GRID_POINTS 2
-
- #else // !AUTO_BED_LEVELING_GRID
-
- // Arbitrary points to probe.
- // A simple cross-product is used to estimate the plane of the bed.
- #define ABL_PROBE_PT_1_X 15
- #define ABL_PROBE_PT_1_Y 180
- #define ABL_PROBE_PT_2_X 15
- #define ABL_PROBE_PT_2_Y 20
- #define ABL_PROBE_PT_3_X 170
- #define ABL_PROBE_PT_3_Y 20
-
- #endif // !AUTO_BED_LEVELING_GRID
-
- //#define Z_PROBE_END_SCRIPT "G1 Z10 F12000\nG1 X15 Y330\nG1 Z0.5\nG1 Z10" // These commands will be executed in the end of G29 routine.
- // Useful to retract a deployable Z probe.
-
- // If you've enabled AUTO_BED_LEVELING_FEATURE and are using the Z Probe for Z Homing,
- // it is highly recommended you also enable Z_SAFE_HOMING below!
-
-#endif // AUTO_BED_LEVELING_FEATURE
-
-
-// @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 // Distance between the nozzle to printbed after homing
-
-// Use "Z Safe Homing" to avoid homing with a Z probe outside the bed area.
-//
-// With this feature enabled:
-//
-// - Allow Z homing only after X and Y homing AND stepper drivers still enabled.
-// - If stepper drivers time out, it will need X and Y homing again before Z homing.
-// - Move the Z probe (or nozzle) to a defined XY point before Z Homing when homing all axes (G28).
-// - Prevent Z homing when the Z probe is outside bed area.
-//#define Z_SAFE_HOMING
-
-#if ENABLED(Z_SAFE_HOMING)
- #define Z_SAFE_HOMING_X_POINT ((X_MIN_POS + X_MAX_POS) / 2) // X point for Z homing when homing all axis (G28).
- #define Z_SAFE_HOMING_Y_POINT ((Y_MIN_POS + Y_MAX_POS) / 2) // Y point for Z homing when homing all axis (G28).
-#endif
-
-// Homing speeds (mm/m)
-#define HOMING_FEEDRATE_XY (50*60)
-#define HOMING_FEEDRATE_Z (4*60)
-
-//
-// MOVEMENT SETTINGS
-// @section motion
-//
-
-// default settings
-
-// default steps per unit for Felix 2.0/3.0: 0.00249mm x/y rounding error with 3mm pitch HTD belt and 14 tooth pulleys. 0 z error.
-#define DEFAULT_AXIS_STEPS_PER_UNIT {76.190476, 76.190476, 1600, 164}
-#define DEFAULT_MAX_FEEDRATE {500, 500, 5, 25} // (mm/sec)
-#define DEFAULT_MAX_ACCELERATION {5000,5000,100,80000} // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for Skeinforge 40+, for older versions raise them a lot.
-
-#define DEFAULT_ACCELERATION 1750 //1500 // X, Y, Z and E max acceleration in mm/s^2 for printing moves
-#define DEFAULT_RETRACT_ACCELERATION 5000 // E acceleration in mm/s^2 for retracts
-#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
-
-// The speed change that does not require acceleration (i.e. the software might assume it can be done instantaneously)
-#define DEFAULT_XYJERK 10 // (mm/sec)
-#define DEFAULT_ZJERK 0.3 //0.4 // (mm/sec)
-#define DEFAULT_EJERK 5.0 // (mm/sec)
-
-
-//=============================================================================
-//============================= Additional Features ===========================
-//=============================================================================
-
-// @section extras
-
-//
-// EEPROM
-//
-// The microcontroller can store settings in the EEPROM, e.g. max velocity...
-// M500 - stores parameters in EEPROM
-// M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily).
-// M502 - reverts to the default "factory settings". You still need to store them in EEPROM afterwards if you want to.
-//define this to enable EEPROM support
-//#define EEPROM_SETTINGS
-
-#if ENABLED(EEPROM_SETTINGS)
- // To disable EEPROM Serial responses and decrease program space by ~1700 byte: comment this out:
- #define EEPROM_CHITCHAT // Please keep turned on if you can.
-#endif
-
-//
-// Host Keepalive
-//
-// When enabled Marlin will send a busy status message to the host
-// every couple of seconds when it can't accept commands.
-//
-#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.
-
-//
-// M100 Free Memory Watcher
-//
-//#define M100_FREE_MEMORY_WATCHER // uncomment to add the M100 Free Memory Watcher for debug purpose
-
-//
-// G20/G21 Inch mode support
-//
-//#define INCH_MODE_SUPPORT
-
-//
-// M149 Set temperature units support
-//
-//#define TEMPERATURE_UNITS_SUPPORT
-
-// @section temperature
-
-// Preheat Constants
-#define PREHEAT_1_TEMP_HOTEND 180
-#define PREHEAT_1_TEMP_BED 70
-#define PREHEAT_1_FAN_SPEED 255 // Value from 0 to 255
-
-#define PREHEAT_2_TEMP_HOTEND 240
-#define PREHEAT_2_TEMP_BED 100
-#define PREHEAT_2_FAN_SPEED 255 // Value from 0 to 255
-
-//
-// Nozzle Park -- EXPERIMENTAL
-//
-// When enabled allows the user to define a special XYZ position, inside the
-// machine's topology, to park the nozzle when idle or when receiving the G27
-// command.
-//
-// The "P" paramenter controls what is the action applied to the Z axis:
-// P0: (Default) If current Z-pos is lower than Z-park then the nozzle will
-// be raised to reach Z-park height.
-//
-// P1: No matter the current Z-pos, the nozzle will be raised/lowered to
-// reach Z-park height.
-//
-// P2: The nozzle height will be raised by Z-park amount but never going over
-// the machine's limit of Z_MAX_POS.
-//
-//#define NOZZLE_PARK_FEATURE
-
-#if ENABLED(NOZZLE_PARK_FEATURE)
- // Specify a park position as { X, Y, Z }
- #define NOZZLE_PARK_POINT { (X_MIN_POS + 10), (Y_MAX_POS - 10), 20 }
-#endif
-
-//
-// Clean Nozzle Feature -- EXPERIMENTAL
-//
-// When enabled allows the user to send G12 to start the nozzle cleaning
-// process, the G-Code accepts two parameters:
-// "P" for pattern selection
-// "S" for defining the number of strokes/repetitions
-//
-// Available list of patterns:
-// P0: This is the default pattern, this process requires a sponge type
-// material at a fixed bed location, the cleaning process is based on
-// "strokes" i.e. back-and-forth movements between the starting and end
-// points.
-//
-// P1: This starts a zig-zag pattern between (X0, Y0) and (X1, Y1), "T"
-// defines the number of zig-zag triangles to be done. "S" defines the
-// number of strokes aka one back-and-forth movement. As an example
-// sending "G12 P1 S1 T3" will execute:
-//
-// --
-// | (X0, Y1) | /\ /\ /\ | (X1, Y1)
-// | | / \ / \ / \ |
-// A | | / \ / \ / \ |
-// | | / \ / \ / \ |
-// | (X0, Y0) | / \/ \/ \ | (X1, Y0)
-// -- +--------------------------------+
-// |________|_________|_________|
-// T1 T2 T3
-//
-// Caveats: End point Z should use the same value as Start point Z.
-//
-// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
-// may change to add new functionality like different wipe patterns.
-//
-//#define NOZZLE_CLEAN_FEATURE
-
-#if ENABLED(NOZZLE_CLEAN_FEATURE)
- // Number of pattern repetitions
- #define NOZZLE_CLEAN_STROKES 12
-
- // Specify positions as { X, Y, Z }
- #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
- #define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
-
- // Moves the nozzle to the initial position
- #define NOZZLE_CLEAN_GOBACK
-#endif
-
-//
-// Print job timer
-//
-// Enable this option to automatically start and stop the
-// print job timer when M104/M109/M190 commands are received.
-// M104 (extruder without wait) - high temp = none, low temp = stop timer
-// M109 (extruder with wait) - high temp = start timer, low temp = stop timer
-// M190 (bed with wait) - high temp = start timer, low temp = none
-//
-// In all cases the timer can be started and stopped using
-// the following commands:
-//
-// - M75 - Start the print job timer
-// - M76 - Pause the print job timer
-// - M77 - Stop the print job timer
-#define PRINTJOB_TIMER_AUTOSTART
-
-//
-// Print Counter
-//
-// When enabled Marlin will keep track of some print statistical data such as:
-// - Total print jobs
-// - Total successful print jobs
-// - Total failed print jobs
-// - Total time printing
-//
-// This information can be viewed by the M78 command.
-//#define PRINTCOUNTER
-
-//=============================================================================
-//============================= LCD and SD support ============================
-//=============================================================================
-
-// @section lcd
-
-//
-// LCD LANGUAGE
-//
-// Here you may choose the language used by Marlin on the LCD menus, the following
-// list of languages are available:
-// en, an, bg, ca, cn, cz, de, el, el-gr, es, eu, fi, fr, gl, hr, it,
-// kana, kana_utf8, nl, pl, pt, pt_utf8, pt-br, pt-br_utf8, ru, test
-//
-// :{'en':'English','an':'Aragonese','bg':'Bulgarian','ca':'Catalan','cn':'Chinese','cz':'Czech','de':'German','el':'Greek','el-gr':'Greek (Greece)','es':'Spanish','eu':'Basque-Euskera','fi':'Finnish','fr':'French','gl':'Galician','hr':'Croatian','it':'Italian','kana':'Japanese','kana_utf8':'Japanese (UTF8)','nl':'Dutch','pl':'Polish','pt':'Portuguese','pt-br':'Portuguese (Brazilian)','pt-br_utf8':'Portuguese (Brazilian UTF8)','pt_utf8':'Portuguese (UTF8)','ru':'Russian','test':'TEST'}
-//
-//#define LCD_LANGUAGE en
-
-//
-// LCD Character Set
-//
-// Note: This option is NOT applicable to Graphical Displays.
-//
-// All character-based LCD's provide ASCII plus one of these
-// language extensions:
-//
-// - JAPANESE ... the most common
-// - WESTERN ... with more accented characters
-// - CYRILLIC ... for the Russian language
-//
-// To determine the language extension installed on your controller:
-//
-// - Compile and upload with LCD_LANGUAGE set to 'test'
-// - Click the controller to view the LCD menu
-// - The LCD will display Japanese, Western, or Cyrillic text
-//
-// See https://github.com/MarlinFirmware/Marlin/wiki/LCD-Language
-//
-// :['JAPANESE','WESTERN','CYRILLIC']
-//
-#define DISPLAY_CHARSET_HD44780 JAPANESE
-
-//
-// LCD TYPE
-//
-// You may choose ULTRA_LCD if you have character based LCD with 16x2, 16x4, 20x2,
-// 20x4 char/lines or DOGLCD for the full graphics display with 128x64 pixels
-// (ST7565R family). (This option will be set automatically for certain displays.)
-//
-// IMPORTANT NOTE: The U8glib library is required for Full Graphic Display!
-// https://github.com/olikraus/U8glib_Arduino
-//
-//#define ULTRA_LCD // Character based
-//#define DOGLCD // Full graphics display
-
-//
-// SD CARD
-//
-// SD Card support is disabled by default. If your controller has an SD slot,
-// you must uncomment the following option or it won't work.
-//
-//#define SDSUPPORT
-
-//
-// SD CARD: SPI SPEED
-//
-// Uncomment ONE of the following items to use a slower SPI transfer
-// speed. This is usually required if you're getting volume init errors.
-//
-//#define SPI_SPEED SPI_HALF_SPEED
-//#define SPI_SPEED SPI_QUARTER_SPEED
-//#define SPI_SPEED SPI_EIGHTH_SPEED
-
-//
-// SD CARD: ENABLE CRC
-//
-// Use CRC checks and retries on the SD communication.
-//
-//#define SD_CHECK_AND_RETRY
-
-//
-// ENCODER SETTINGS
-//
-// This option overrides the default number of encoder pulses needed to
-// produce one step. Should be increased for high-resolution encoders.
-//
-//#define ENCODER_PULSES_PER_STEP 1
-
-//
-// Use this option to override the number of step signals required to
-// move between next/prev menu items.
-//
-//#define ENCODER_STEPS_PER_MENU_ITEM 5
-
-/**
- * Encoder Direction Options
- *
- * Test your encoder's behavior first with both options disabled.
- *
- * Reversed Value Edit and Menu Nav? Enable REVERSE_ENCODER_DIRECTION.
- * Reversed Menu Navigation only? Enable REVERSE_MENU_DIRECTION.
- * Reversed Value Editing only? Enable BOTH options.
- */
-
-//
-// This option reverses the encoder direction everywhere
-//
-// Set this option if CLOCKWISE causes values to DECREASE
-//
-//#define REVERSE_ENCODER_DIRECTION
-
-//
-// This option reverses the encoder direction for navigating LCD menus.
-//
-// If CLOCKWISE normally moves DOWN this makes it go UP.
-// If CLOCKWISE normally moves UP this makes it go DOWN.
-//
-//#define REVERSE_MENU_DIRECTION
-
-//
-// Individual Axis Homing
-//
-// Add individual axis homing items (Home X, Home Y, and Home Z) to the LCD menu.
-//
-//#define INDIVIDUAL_AXIS_HOMING_MENU
-
-//
-// SPEAKER/BUZZER
-//
-// If you have a speaker that can produce tones, enable it here.
-// By default Marlin assumes you have a buzzer with a fixed frequency.
-//
-//#define SPEAKER
-
-//
-// The duration and frequency for the UI feedback sound.
-// Set these to 0 to disable audio feedback in the LCD menus.
-//
-// Note: Test audio output with the G-Code:
-// M300 S P
-//
-//#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 100
-//#define LCD_FEEDBACK_FREQUENCY_HZ 1000
-
-//
-// CONTROLLER TYPE: Standard
-//
-// Marlin supports a wide variety of controllers.
-// Enable one of the following options to specify your controller.
-//
-
-//
-// ULTIMAKER Controller.
-//
-//#define ULTIMAKERCONTROLLER
-
-//
-// ULTIPANEL as seen on Thingiverse.
-//
-//#define ULTIPANEL
-
-//
-// Cartesio UI
-// http://mauk.cc/webshop/cartesio-shop/electronics/user-interface
-//
-//#define CARTESIO_UI
-
-//
-// PanelOne from T3P3 (via RAMPS 1.4 AUX2/AUX3)
-// http://reprap.org/wiki/PanelOne
-//
-//#define PANEL_ONE
-
-//
-// MaKr3d Makr-Panel with graphic controller and SD support.
-// http://reprap.org/wiki/MaKr3d_MaKrPanel
-//
-//#define MAKRPANEL
-
-//
-// ReprapWorld Graphical LCD
-// https://reprapworld.com/?products_details&products_id/1218
-//
-//#define REPRAPWORLD_GRAPHICAL_LCD
-
-//
-// Activate one of these if you have a Panucatt Devices
-// Viki 2.0 or mini Viki with Graphic LCD
-// http://panucatt.com
-//
-//#define VIKI2
-//#define miniVIKI
-
-//
-// Adafruit ST7565 Full Graphic Controller.
-// https://github.com/eboston/Adafruit-ST7565-Full-Graphic-Controller/
-//
-//#define ELB_FULL_GRAPHIC_CONTROLLER
-
-//
-// RepRapDiscount Smart Controller.
-// http://reprap.org/wiki/RepRapDiscount_Smart_Controller
-//
-// Note: Usually sold with a white PCB.
-//
-//#define REPRAP_DISCOUNT_SMART_CONTROLLER
-
-//
-// GADGETS3D G3D LCD/SD Controller
-// http://reprap.org/wiki/RAMPS_1.3/1.4_GADGETS3D_Shield_with_Panel
-//
-// Note: Usually sold with a blue PCB.
-//
-//#define G3D_PANEL
-
-//
-// RepRapDiscount FULL GRAPHIC Smart Controller
-// http://reprap.org/wiki/RepRapDiscount_Full_Graphic_Smart_Controller
-//
-//#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
-
-//
-// MakerLab Mini Panel with graphic
-// controller and SD support - http://reprap.org/wiki/Mini_panel
-//
-//#define MINIPANEL
-
-//
-// RepRapWorld REPRAPWORLD_KEYPAD v1.1
-// http://reprapworld.com/?products_details&products_id=202&cPath=1591_1626
-//
-// REPRAPWORLD_KEYPAD_MOVE_STEP sets how much should the robot move when a key
-// is pressed, a value of 10.0 means 10mm per click.
-//
-//#define REPRAPWORLD_KEYPAD
-//#define REPRAPWORLD_KEYPAD_MOVE_STEP 1.0
-
-//
-// RigidBot Panel V1.0
-// http://www.inventapart.com/
-//
-//#define RIGIDBOT_PANEL
-
-//
-// BQ LCD Smart Controller shipped by
-// default with the BQ Hephestos 2 and Witbox 2.
-//
-//#define BQ_LCD_SMART_CONTROLLER
-
-//
-// CONTROLLER TYPE: I2C
-//
-// Note: These controllers require the installation of Arduino's LiquidCrystal_I2C
-// library. For more info: https://github.com/kiyoshigawa/LiquidCrystal_I2C
-//
-
-//
-// Elefu RA Board Control Panel
-// http://www.elefu.com/index.php?route=product/product&product_id=53
-//
-//#define RA_CONTROL_PANEL
-
-//
-// Sainsmart YW Robot (LCM1602) LCD Display
-//
-//#define LCD_I2C_SAINSMART_YWROBOT
-
-//
-// Generic LCM1602 LCD adapter
-//
-//#define LCM1602
-
-//
-// PANELOLU2 LCD with status LEDs,
-// separate encoder and click inputs.
-//
-// Note: This controller requires Arduino's LiquidTWI2 library v1.2.3 or later.
-// For more info: https://github.com/lincomatic/LiquidTWI2
-//
-// Note: The PANELOLU2 encoder click input can either be directly connected to
-// a pin (if BTN_ENC defined to != -1) or read through I2C (when BTN_ENC == -1).
-//
-//#define LCD_I2C_PANELOLU2
-
-//
-// Panucatt VIKI LCD with status LEDs,
-// integrated click & L/R/U/D buttons, separate encoder inputs.
-//
-//#define LCD_I2C_VIKI
-
-//
-// SSD1306 OLED full graphics generic display
-//
-//#define U8GLIB_SSD1306
-
-//
-// SAV OLEd LCD module support using either SSD1306 or SH1106 based LCD modules
-//
-//#define SAV_3DGLCD
-#if ENABLED(SAV_3DGLCD)
- //#define U8GLIB_SSD1306
- #define U8GLIB_SH1106
-#endif
-
-//
-// CONTROLLER TYPE: Shift register panels
-//
-// 2 wire Non-latching LCD SR from https://goo.gl/aJJ4sH
-// LCD configuration: http://reprap.org/wiki/SAV_3D_LCD
-//
-//#define SAV_3DLCD
-
-//=============================================================================
-//=============================== Extra Features ==============================
-//=============================================================================
-
-// @section extras
-
-// Increase the FAN PWM frequency. Removes the PWM noise but increases heating in the FET/Arduino
-#define FAST_PWM_FAN
-
-// Use software PWM to drive the fan, as for the heaters. This uses a very low frequency
-// which is not as annoying as with the hardware PWM. On the other hand, if this frequency
-// is too low, you should also increment SOFT_PWM_SCALE.
-//#define FAN_SOFT_PWM
-
-// Incrementing this by 1 will double the software PWM frequency,
-// affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
-// However, control resolution will be halved for each increment;
-// at zero value, there are 128 effective control positions.
-#define SOFT_PWM_SCALE 0
-
-// Temperature status LEDs that display the hotend and bed temperature.
-// If all hotends and bed temperature and temperature setpoint are < 54C then the BLUE led is on.
-// Otherwise the RED led is on. There is 1C hysteresis.
-//#define TEMP_STAT_LEDS
-
-// M240 Triggers a camera by emulating a Canon RC-1 Remote
-// Data from: http://www.doc-diy.net/photo/rc-1_hacked/
-//#define PHOTOGRAPH_PIN 23
-
-// SkeinForge sends the wrong arc g-codes when using Arc Point as fillet procedure
-//#define SF_ARC_FIX
-
-// Support for the BariCUDA Paste Extruder.
-//#define BARICUDA
-
-//define BlinkM/CyzRgb Support
-//#define BLINKM
-
-/*********************************************************************\
-* R/C SERVO support
-* Sponsored by TrinityLabs, Reworked by codexmas
-**********************************************************************/
-
-// Number of servos
-//
-// If you select a configuration below, this will receive a default value and does not need to be set manually
-// set it manually if you have more servos than extruders and wish to manually control some
-// leaving it undefined or defining as 0 will disable the servo subsystem
-// If unsure, leave commented / disabled
-//
-//#define NUM_SERVOS 3 // Servo index starts with 0 for M280 command
-
-// Delay (in microseconds) before the next move will start, to give the servo time to reach its target angle.
-// 300ms is a good value but you can try less delay.
-// If the servo can't reach the requested position, increase it.
-#define SERVO_DELAY 300
-
-// Servo deactivation
-//
-// With this option servos are powered only during movement, then turned off to prevent jitter.
-//#define DEACTIVATE_SERVOS_AFTER_MOVE
-
-/**********************************************************************\
- * Support for a filament diameter sensor
- * Also allows adjustment of diameter at print time (vs at slicing)
- * Single extruder only at this point (extruder 0)
- *
- * Motherboards
- * 34 - RAMPS1.4 - uses Analog input 5 on the AUX2 connector
- * 81 - Printrboard - Uses Analog input 2 on the Exp1 connector (version B,C,D,E)
- * 301 - Rambo - uses Analog input 3
- * Note may require analog pins to be defined for different motherboards
- **********************************************************************/
-// Uncomment below to enable
-//#define FILAMENT_WIDTH_SENSOR
-
-#define DEFAULT_NOMINAL_FILAMENT_DIA 3.00 //Enter the diameter (in mm) of the filament generally used (3.0 mm or 1.75 mm) - this is then used in the slicer software. Used for sensor reading validation
-
-#if ENABLED(FILAMENT_WIDTH_SENSOR)
- #define FILAMENT_SENSOR_EXTRUDER_NUM 0 //The number of the extruder that has the filament sensor (0,1,2)
- #define MEASUREMENT_DELAY_CM 14 //measurement delay in cm. This is the distance from filament sensor to middle of barrel
-
- #define MEASURED_UPPER_LIMIT 3.30 //upper limit factor used for sensor reading validation in mm
- #define MEASURED_LOWER_LIMIT 1.90 //lower limit factor for sensor reading validation in mm
- #define MAX_MEASUREMENT_DELAY 20 //delay buffer size in bytes (1 byte = 1cm)- limits maximum measurement delay allowable (must be larger than MEASUREMENT_DELAY_CM and lower number saves RAM)
-
- #define DEFAULT_MEASURED_FILAMENT_DIA DEFAULT_NOMINAL_FILAMENT_DIA //set measured to nominal initially
-
- //When using an LCD, uncomment the line below to display the Filament sensor data on the last line instead of status. Status will appear for 5 sec.
- //#define FILAMENT_LCD_DISPLAY
-#endif
-
-#endif // CONFIGURATION_H
diff --git a/Marlin/example_configurations/Felix/README.md b/Marlin/example_configurations/Felix/README.md
deleted file mode 100644
index b1b8f36..0000000
--- a/Marlin/example_configurations/Felix/README.md
+++ /dev/null
@@ -1,60 +0,0 @@
-# Felix 2.0/3.0 Configuration for Marlin Firmware
-
-Bringing silky smooth prints to Felix.
-
-## Build HOWTO
-
- - Install the latest non-beta Arduino software IDE/toolset: http://www.arduino.cc/en/Main/Software
- - Download the Marlin firmware
- - [Latest developement version](https://github.com/MarlinFirmware/Marlin/tree/Development)
- - [Stable version](https://github.com/MarlinFirmware/Marlin/tree/Development)
- - In both cases use the "Download Zip" button on the right.
-
-```
-cd Marlin/Marlin
-cp example_configurations/Felix/Configuration_adv.h .
-```
-
-The next step depends on your setup:
-
-### Single Extruder Configuration
-
- cp example_configurations/Felix/Configuration.h .
-
-### Dual Extruder Configuration
-
- cp example_configurations/Felix/DUAL/Configuration.h Configuration.h
-
-### Compile Firmware
-
- - Start the Arduino IDE.
- - Select Tools -> Board -> Arduino Mega 2560
- - Select the correct serial port in Tools -> Serial Port (usually /dev/ttyUSB0)
- - Open Marlin.pde or .ino
- - Click the Verify/Compile button
-
-### Flash Firmware
-
-#### Connected directly via USB
-
- - Click the Upload button. If all goes well the firmware is uploading
-
-#### Remote update
-
-Find the latest Arduino build:
-
- ls -altr /tmp/
- drwxr-xr-x 5 chrono users 12288 Mar 3 21:41 build6072035599686630843.tmp
-
-Copy the firmware to your printer host:
-
- scp /tmp/build6072035599686630843.tmp/Marlin.cpp.hex a.b.c.d:/tmp/
-
-Connect to your printer host via ssh, stop Octoprint or any other service that may block your USB device and make sure you have avrdude installed, then run:
-
- avrdude -C/etc/avrdude.conf -v -v -v -patmega2560 -cwiring -P/dev/ttyUSB0 \
- -b115200 -D -Uflash:w:/tmp/Marlin.cpp.hex:i
-
-## Acknowledgements
-
-Mashed together and tested on https://apollo.open-resource.org/mission:resources:picoprint based on collaborative teamwork of @andrewsil1 and @thinkyhead.
diff --git a/Marlin/example_configurations/Hephestos/Configuration.h b/Marlin/example_configurations/Hephestos/Configuration.h
deleted file mode 100644
index feab873..0000000
--- a/Marlin/example_configurations/Hephestos/Configuration.h
+++ /dev/null
@@ -1,1319 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Configuration.h
- *
- * Basic settings such as:
- *
- * - Type of electronics
- * - Type of temperature sensor
- * - Printer geometry
- * - Endstop configuration
- * - LCD controller
- * - Extra features
- *
- * Advanced settings can be found in Configuration_adv.h
- *
- */
-#ifndef CONFIGURATION_H
-#define CONFIGURATION_H
-
-/**
- *
- * ***********************************
- * ** ATTENTION TO ALL DEVELOPERS **
- * ***********************************
- *
- * You must increment this version number for every significant change such as,
- * but not limited to: ADD, DELETE RENAME OR REPURPOSE any directive/option.
- *
- * Note: Update also Version.h !
- */
-#define CONFIGURATION_H_VERSION 010100
-
-//===========================================================================
-//============================= Getting Started =============================
-//===========================================================================
-
-/**
- * Here are some standard links for getting your machine calibrated:
- *
- * http://reprap.org/wiki/Calibration
- * http://youtu.be/wAL9d7FgInk
- * http://calculator.josefprusa.cz
- * http://reprap.org/wiki/Triffid_Hunter%27s_Calibration_Guide
- * http://www.thingiverse.com/thing:5573
- * https://sites.google.com/site/repraplogphase/calibration-of-your-reprap
- * http://www.thingiverse.com/thing:298812
- */
-
-//===========================================================================
-//============================= DELTA Printer ===============================
-//===========================================================================
-// For a Delta printer replace the configuration files with the files in the
-// example_configurations/delta directory.
-//
-
-//===========================================================================
-//============================= SCARA Printer ===============================
-//===========================================================================
-// For a Scara printer replace the configuration files with the files in the
-// example_configurations/SCARA directory.
-//
-
-// @section info
-
-// User-specified version info of this build to display in [Pronterface, etc] terminal window during
-// startup. Implementation of an idea by Prof Braino to inform user that any changes made to this
-// build by the user have been successfully uploaded into firmware.
-#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
-#define SHOW_BOOTSCREEN
-#define STRING_SPLASH_LINE1 SHORT_BUILD_VERSION // will be shown during boot in line 1
-#define STRING_SPLASH_LINE2 WEBSITE_URL // will be shown during boot in line 2
-
-//
-// *** VENDORS PLEASE READ *****************************************************
-//
-// Marlin now allow you to have a vendor boot image to be displayed on machine
-// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
-//
-// We suggest for you to take advantage of this new feature and keep the Marlin
-// boot image unmodified. For an example have a look at the bq Hephestos 2
-// example configuration folder.
-//
-//#define SHOW_CUSTOM_BOOTSCREEN
-// @section machine
-
-// SERIAL_PORT selects which serial port should be used for communication with the host.
-// This allows the connection of wireless adapters (for instance) to non-default port pins.
-// Serial port 0 is still used by the Arduino bootloader regardless of this setting.
-// :[0,1,2,3,4,5,6,7]
-#define SERIAL_PORT 0
-
-// This determines the communication speed of the printer
-// :[2400,9600,19200,38400,57600,115200,250000]
-#define BAUDRATE 115200
-
-// Enable the Bluetooth serial interface on AT90USB devices
-//#define BLUETOOTH
-
-// The following define selects which electronics board you have.
-// Please choose the name from boards.h that matches your setup
-#ifndef MOTHERBOARD
- #define MOTHERBOARD BOARD_RAMPS_14_EFB
-#endif
-
-// Optional custom name for your RepStrap or other custom machine
-// Displayed in the LCD "Ready" message
-#define CUSTOM_MACHINE_NAME "HEPHESTOS"
-
-// Added for BQ
-#define SOURCE_CODE_URL "http://www.bq.com/gb/downloads-prusa-i3-hephestos.html"
-
-// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
-// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
-//#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
-
-// This defines the number of extruders
-// :[1,2,3,4]
-#define EXTRUDERS 1
-
-// For Cyclops or any "multi-extruder" that shares a single nozzle.
-//#define SINGLENOZZLE
-
-// A dual extruder that uses a single stepper motor
-// Don't forget to set SSDE_SERVO_ANGLES and HOTEND_OFFSET_X/Y/Z
-//#define SWITCHING_EXTRUDER
-#if ENABLED(SWITCHING_EXTRUDER)
- #define SWITCHING_EXTRUDER_SERVO_NR 0
- #define SWITCHING_EXTRUDER_SERVO_ANGLES { 0, 90 } // Angles for E0, E1
- //#define HOTEND_OFFSET_Z {0.0, 0.0}
-#endif
-
-/**
- * "Mixing Extruder"
- * - Adds a new code, M165, to set the current mix factors.
- * - Extends the stepping routines to move multiple steppers in proportion to the mix.
- * - Optional support for Repetier Host M163, M164, and virtual extruder.
- * - This implementation supports only a single extruder.
- * - Enable DIRECT_MIXING_IN_G1 for Pia Taubert's reference implementation
- */
-//#define MIXING_EXTRUDER
-#if ENABLED(MIXING_EXTRUDER)
- #define MIXING_STEPPERS 2 // Number of steppers in your mixing extruder
- #define MIXING_VIRTUAL_TOOLS 16 // Use the Virtual Tool method with M163 and M164
- //#define DIRECT_MIXING_IN_G1 // Allow ABCDHI mix factors in G1 movement commands
-#endif
-
-// Offset of the extruders (uncomment if using more than one and relying on firmware to position when changing).
-// The offset has to be X=0, Y=0 for the extruder 0 hotend (default extruder).
-// For the other hotends it is their distance from the extruder 0 hotend.
-//#define HOTEND_OFFSET_X {0.0, 20.00} // (in mm) for each extruder, offset of the hotend on the X axis
-//#define HOTEND_OFFSET_Y {0.0, 5.00} // (in mm) for each extruder, offset of the hotend on the Y axis
-
-//// The following define selects which power supply you have. Please choose the one that matches your setup
-// 1 = ATX
-// 2 = X-Box 360 203Watts (the blue wire connected to PS_ON and the red wire to VCC)
-// :{1:'ATX',2:'X-Box 360'}
-#define POWER_SUPPLY 1
-
-// Define this to have the electronics keep the power supply off on startup. If you don't know what this is leave it.
-//#define PS_DEFAULT_OFF
-
-// @section temperature
-
-//===========================================================================
-//============================= Thermal Settings ============================
-//===========================================================================
-//
-//--NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table
-//
-//// Temperature sensor settings:
-// -3 is thermocouple with MAX31855 (only for sensor 0)
-// -2 is thermocouple with MAX6675 (only for sensor 0)
-// -1 is thermocouple with AD595
-// 0 is not used
-// 1 is 100k thermistor - best choice for EPCOS 100k (4.7k pullup)
-// 2 is 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)
-// 3 is Mendel-parts thermistor (4.7k pullup)
-// 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !!
-// 5 is 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup)
-// 6 is 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup)
-// 7 is 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup)
-// 71 is 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup)
-// 8 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup)
-// 9 is 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup)
-// 10 is 100k RS thermistor 198-961 (4.7k pullup)
-// 11 is 100k beta 3950 1% thermistor (4.7k pullup)
-// 12 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed)
-// 13 is 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE"
-// 20 is the PT100 circuit found in the Ultimainboard V2.x
-// 60 is 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
-// 66 is 4.7M High Temperature thermistor from Dyze Design
-// 70 is the 100K thermistor found in the bq Hephestos 2
-//
-// 1k ohm pullup tables - This is not normal, you would have to have changed out your 4.7k for 1k
-// (but gives greater accuracy and more stable PID)
-// 51 is 100k thermistor - EPCOS (1k pullup)
-// 52 is 200k thermistor - ATC Semitec 204GT-2 (1k pullup)
-// 55 is 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup)
-//
-// 1047 is Pt1000 with 4k7 pullup
-// 1010 is Pt1000 with 1k pullup (non standard)
-// 147 is Pt100 with 4k7 pullup
-// 110 is Pt100 with 1k pullup (non standard)
-// 998 and 999 are Dummy Tables. They will ALWAYS read 25°C or the temperature defined below.
-// Use it for Testing or Development purposes. NEVER for production machine.
-//#define DUMMY_THERMISTOR_998_VALUE 25
-//#define DUMMY_THERMISTOR_999_VALUE 100
-// :{ '0': "Not used",'1':"100k / 4.7k - EPCOS",'2':"200k / 4.7k - ATC Semitec 204GT-2",'3':"Mendel-parts / 4.7k",'4':"10k !! do not use for a hotend. Bad resolution at high temp. !!",'5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)",'6':"100k / 4.7k EPCOS - Not as accurate as Table 1",'7':"100k / 4.7k Honeywell 135-104LAG-J01",'8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT",'9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1",'10':"100k / 4.7k RS 198-961",'11':"100k / 4.7k beta 3950 1%",'12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)",'13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'",'20':"PT100 (Ultimainboard V2.x)",'51':"100k / 1k - EPCOS",'52':"200k / 1k - ATC Semitec 204GT-2",'55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)",'60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950",'66':"Dyze Design 4.7M High Temperature thermistor",'70':"the 100K thermistor found in the bq Hephestos 2",'71':"100k / 4.7k Honeywell 135-104LAF-J01",'147':"Pt100 / 4.7k",'1047':"Pt1000 / 4.7k",'110':"Pt100 / 1k (non-standard)",'1010':"Pt1000 / 1k (non standard)",'-3':"Thermocouple + MAX31855 (only for sensor 0)",'-2':"Thermocouple + MAX6675 (only for sensor 0)",'-1':"Thermocouple + AD595",'998':"Dummy 1",'999':"Dummy 2" }
-#define TEMP_SENSOR_0 1
-#define TEMP_SENSOR_1 0
-#define TEMP_SENSOR_2 0
-#define TEMP_SENSOR_3 0
-#define TEMP_SENSOR_BED 0
-
-// This makes temp sensor 1 a redundant sensor for sensor 0. If the temperatures difference between these sensors is to high the print will be aborted.
-//#define TEMP_SENSOR_1_AS_REDUNDANT
-#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 10
-
-// Extruder temperature must be close to target for this long before M109 returns success
-#define TEMP_RESIDENCY_TIME 10 // (seconds)
-#define TEMP_HYSTERESIS 3 // (degC) range of +/- temperatures considered "close" to the target one
-#define TEMP_WINDOW 1 // (degC) Window around target to start the residency timer x degC early.
-
-// Bed temperature must be close to target for this long before M190 returns success
-#define TEMP_BED_RESIDENCY_TIME 0 // (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.
-
-// The minimal temperature defines the temperature below which the heater will not be enabled It is used
-// to check that the wiring to the thermistor is not broken.
-// Otherwise this would lead to the heater being powered on all the time.
-#define HEATER_0_MINTEMP 5
-#define HEATER_1_MINTEMP 5
-#define HEATER_2_MINTEMP 5
-#define HEATER_3_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 260
-#define HEATER_1_MAXTEMP 260
-#define HEATER_2_MAXTEMP 260
-#define HEATER_3_MAXTEMP 260
-#define BED_MAXTEMP 150
-
-//===========================================================================
-//============================= PID Settings ================================
-//===========================================================================
-// PID Tuning Guide here: http://reprap.org/wiki/PID_Tuning
-
-// Comment the following line to disable PID and enable bang-bang.
-#define PIDTEMP
-#define BANG_MAX 255 // limits current to nozzle while in bang-bang mode; 255=full current
-#define PID_MAX BANG_MAX // limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
-#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
- //#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
- // Set/get with gcode: M301 E[extruder number, 0-2]
- #define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
- // is more than PID_FUNCTIONAL_RANGE then the PID will be shut off and the heater will be set to min/max.
- #define PID_INTEGRAL_DRIVE_MAX PID_MAX //limit for the integral term
- #define K1 0.95 //smoothing factor within the PID
-
- // Hephestos i3
- #define DEFAULT_Kp 23.05
- #define DEFAULT_Ki 2.00
- #define DEFAULT_Kd 66.47
-
-#endif // PIDTEMP
-
-//===========================================================================
-//============================= PID > Bed Temperature Control ===============
-//===========================================================================
-// Select PID or bang-bang with PIDTEMPBED. If bang-bang, BED_LIMIT_SWITCHING will enable hysteresis
-//
-// Uncomment this to enable PID on the bed. It uses the same frequency PWM as the extruder.
-// If your PID_dT is the default, and correct for your hardware/configuration, that means 7.689Hz,
-// which is fine for driving a square wave into a resistive load and does not significantly impact you FET heating.
-// This also works fine on a Fotek SSR-10DA Solid State Relay into a 250W heater.
-// If your configuration is significantly different than this and you don't understand the issues involved, you probably
-// shouldn't use bed PID until someone else verifies your hardware works.
-// If this is enabled, find your own PID constants below.
-//#define PIDTEMPBED
-
-//#define BED_LIMIT_SWITCHING
-
-// This sets the max power delivered to the bed, and replaces the HEATER_BED_DUTY_CYCLE_DIVIDER option.
-// all forms of bed control obey this (PID, bang-bang, bang-bang with hysteresis)
-// setting this to anything other than 255 enables a form of PWM to the bed just like HEATER_BED_DUTY_CYCLE_DIVIDER did,
-// so you shouldn't use it unless you are OK with PWM on your bed. (see the comment on enabling PIDTEMPBED)
-#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current
-
-#if ENABLED(PIDTEMPBED)
-
- //#define PID_BED_DEBUG // Sends debug data to the serial port.
-
- #define PID_BED_INTEGRAL_DRIVE_MAX MAX_BED_POWER //limit for the integral term
-
- //120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
- //from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10)
- #define DEFAULT_bedKp 10.00
- #define DEFAULT_bedKi .023
- #define DEFAULT_bedKd 305.4
-
- //120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
- //from pidautotune
- //#define DEFAULT_bedKp 97.1
- //#define DEFAULT_bedKi 1.41
- //#define DEFAULT_bedKd 1675.16
-
- // FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles.
-#endif // PIDTEMPBED
-
-// @section extruder
-
-//this prevents dangerous Extruder moves, i.e. if the temperature is under the limit
-//can be software-disabled for whatever purposes by
-#define PREVENT_DANGEROUS_EXTRUDE
-//if PREVENT_DANGEROUS_EXTRUDE is on, you can still disable (uncomment) very long bits of extrusion separately.
-#define PREVENT_LENGTHY_EXTRUDE
-
-#define EXTRUDE_MINTEMP 170
-#define EXTRUDE_MAXLENGTH (X_MAX_LENGTH+Y_MAX_LENGTH) //prevent extrusion of very large distances.
-
-//===========================================================================
-//======================== Thermal Runaway Protection =======================
-//===========================================================================
-
-/**
- * Thermal Protection protects your printer from damage and fire if a
- * thermistor falls out or temperature sensors fail in any way.
- *
- * The issue: If a thermistor falls out or a temperature sensor fails,
- * Marlin can no longer sense the actual temperature. Since a disconnected
- * thermistor reads as a low temperature, the firmware will keep the heater on.
- *
- * If you get "Thermal Runaway" or "Heating failed" errors the
- * details can be tuned in Configuration_adv.h
- */
-
-#define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders
-#define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed
-
-//===========================================================================
-//============================= Mechanical Settings =========================
-//===========================================================================
-
-// @section machine
-
-// Uncomment one of these options to enable CoreXY, CoreXZ, or CoreYZ kinematics
-//#define COREXY
-//#define COREXZ
-//#define COREYZ
-
-// Enable this option for Toshiba steppers
-//#define CONFIG_STEPPERS_TOSHIBA
-
-//===========================================================================
-//============================== Endstop Settings ===========================
-//===========================================================================
-
-// @section homing
-
-// Specify here all the endstop connectors that are connected to any endstop or probe.
-// Almost all printers will be using one per axis. Probes will use one or more of the
-// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
-#define USE_XMIN_PLUG
-#define USE_YMIN_PLUG
-#define USE_ZMIN_PLUG
-//#define USE_XMAX_PLUG
-//#define USE_YMAX_PLUG
-//#define USE_ZMAX_PLUG
-
-// coarse Endstop Settings
-#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
-
-#if DISABLED(ENDSTOPPULLUPS)
- // fine endstop settings: Individual pullups. will be ignored if ENDSTOPPULLUPS is defined
- //#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 // set to true to invert the logic of the endstop.
-#define Y_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Z_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define X_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Y_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Z_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Z_MIN_PROBE_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-
-//===========================================================================
-//============================= Z Probe Options =============================
-//===========================================================================
-
-//
-// Probe Type
-// Probes are sensors/switches that are activated / deactivated before/after use.
-//
-// Allen Key Probes, Servo Probes, Z-Sled Probes, FIX_MOUNTED_PROBE, etc.
-// You must activate one of these to use AUTO_BED_LEVELING_FEATURE below.
-//
-// Use M851 to set the Z probe vertical offset from the nozzle. Store with M500.
-//
-
-// A Fix-Mounted Probe either doesn't deploy or needs manual deployment.
-// For example an inductive probe, or a setup that uses the nozzle to probe.
-// An inductive probe must be deactivated to go below
-// its trigger-point if hardware endstops are active.
-//#define FIX_MOUNTED_PROBE
-
-// The BLTouch probe emulates a servo probe.
-//#define BLTOUCH
-
-// Z Servo Probe, such as an endstop switch on a rotating arm.
-//#define Z_ENDSTOP_SERVO_NR 0
-//#define Z_SERVO_ANGLES {70,0} // Z Servo Deploy and Stow angles
-
-// Enable if you have a Z probe mounted on a sled like those designed by Charles Bell.
-//#define Z_PROBE_SLED
-//#define SLED_DOCKING_OFFSET 5 // The extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.
-
-// Z Probe to nozzle (X,Y) offset, relative to (0, 0).
-// X and Y offsets must be integers.
-//
-// In the following example the X and Y offsets are both positive:
-// #define X_PROBE_OFFSET_FROM_EXTRUDER 10
-// #define Y_PROBE_OFFSET_FROM_EXTRUDER 10
-//
-// +-- BACK ---+
-// | |
-// L | (+) P | R <-- probe (20,20)
-// E | | I
-// F | (-) N (+) | G <-- nozzle (10,10)
-// T | | H
-// | (-) | T
-// | |
-// O-- FRONT --+
-// (0,0)
-#define X_PROBE_OFFSET_FROM_EXTRUDER -25 // X offset: -left +right [of the nozzle]
-#define Y_PROBE_OFFSET_FROM_EXTRUDER -29 // Y offset: -front +behind [the nozzle]
-#define Z_PROBE_OFFSET_FROM_EXTRUDER -12.35 // Z offset: -below +above [the nozzle]
-
-// X and Y axis travel speed (mm/m) between probes
-#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
-#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
-// Speed for the "accurate" probe of each point
-#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
-
-//
-// Allen Key Probe is defined in the Delta example configurations.
-//
-
-// Enable Z_MIN_PROBE_ENDSTOP to use _both_ a Z Probe and a Z-min-endstop on the same machine.
-// With this option the Z_MIN_PROBE_PIN will only be used for probing, never for homing.
-//
-// *** PLEASE READ ALL INSTRUCTIONS BELOW FOR SAFETY! ***
-//
-// To continue using the Z-min-endstop for homing, be sure to disable Z_SAFE_HOMING.
-// Example: To park the head outside the bed area when homing with G28.
-//
-// To use a separate Z probe, your board must define a Z_MIN_PROBE_PIN.
-//
-// For a servo-based Z probe, you must set up servo support below, including
-// NUM_SERVOS, Z_ENDSTOP_SERVO_NR and Z_SERVO_ANGLES.
-//
-// - RAMPS 1.3/1.4 boards may be able to use the 5V, GND, and Aux4->D32 pin.
-// - Use 5V for powered (usu. inductive) sensors.
-// - Otherwise connect:
-// - normally-closed switches to GND and D32.
-// - normally-open switches to 5V and D32.
-//
-// Normally-closed switches are advised and are the default.
-//
-// The Z_MIN_PROBE_PIN sets the Arduino pin to use. (See your board's pins file.)
-// Since the RAMPS Aux4->D32 pin maps directly to the Arduino D32 pin, D32 is the
-// default pin for all RAMPS-based boards. Some other boards map differently.
-// To set or change the pin for your board, edit the appropriate pins_XXXXX.h file.
-//
-// WARNING:
-// Setting the wrong pin may have unexpected and potentially disastrous consequences.
-// Use with caution and do your homework.
-//
-//#define Z_MIN_PROBE_ENDSTOP
-
-// Enable Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN to use the Z_MIN_PIN for your Z_MIN_PROBE.
-// The Z_MIN_PIN will then be used for both Z-homing and probing.
-#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
-
-// To use a probe you must enable one of the two options above!
-
-// This option disables the use of the Z_MIN_PROBE_PIN
-// To enable the Z probe pin but disable its use, uncomment the line below. This only affects a
-// Z probe switch if you have a separate Z min endstop also and have activated Z_MIN_PROBE_ENDSTOP above.
-// If you're using the Z MIN endstop connector for your Z probe, this has no effect.
-//#define DISABLE_Z_MIN_PROBE_ENDSTOP
-
-// Enable Z Probe Repeatability test to see how accurate your probe is
-//#define Z_MIN_PROBE_REPEATABILITY_TEST
-
-//
-// Probe Raise options provide clearance for the probe to deploy, stow, and travel.
-//
-#define Z_PROBE_DEPLOY_HEIGHT 15 // Raise to make room for the probe to deploy / stow
-#define Z_PROBE_TRAVEL_HEIGHT 5 // Raise between probing points.
-
-//
-// For M851 give a range for adjusting the Z probe offset
-//
-#define Z_PROBE_OFFSET_RANGE_MIN -20
-#define Z_PROBE_OFFSET_RANGE_MAX 20
-
-// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
-// :{0:'Low',1:'High'}
-#define X_ENABLE_ON 0
-#define Y_ENABLE_ON 0
-#define Z_ENABLE_ON 0
-#define E_ENABLE_ON 0 // For all extruders
-
-// Disables axis stepper immediately when it's not being used.
-// WARNING: When motors turn off there is a chance of losing position accuracy!
-#define DISABLE_X false
-#define DISABLE_Y false
-#define DISABLE_Z false
-// Warn on display about possibly reduced accuracy
-//#define DISABLE_REDUCED_ACCURACY_WARNING
-
-// @section extruder
-
-#define DISABLE_E false // For all extruders
-#define DISABLE_INACTIVE_EXTRUDER true //disable only inactive extruders and keep active extruder enabled
-
-// @section machine
-
-// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way.
-#define INVERT_X_DIR true
-#define INVERT_Y_DIR false
-#define INVERT_Z_DIR true
-
-// @section extruder
-
-// For direct drive extruder v9 set to true, for geared extruder set to false.
-#define INVERT_E0_DIR false
-#define INVERT_E1_DIR false
-#define INVERT_E2_DIR false
-#define INVERT_E3_DIR false
-
-// @section homing
-
-//#define Z_HOMING_HEIGHT 4 // (in mm) Minimal z height before homing (G28) for Z clearance above the bed, clamps, ...
- // Be sure you have this distance over your Z_MAX_POS in case.
-
-// ENDSTOP SETTINGS:
-// Sets direction of endstops when homing; 1=MAX, -1=MIN
-// :[-1,1]
-#define X_HOME_DIR -1
-#define Y_HOME_DIR -1
-#define Z_HOME_DIR -1
-
-#define min_software_endstops true // If true, axis won't move to coordinates less than HOME_POS.
-#define max_software_endstops true // If true, axis won't move to coordinates greater than the defined lengths below.
-
-// @section machine
-
-// Travel limits after homing (units are in mm)
-#define X_MIN_POS 0
-#define Y_MIN_POS 0
-#define Z_MIN_POS 0
-#define X_MAX_POS 215
-#define Y_MAX_POS 210
-#define Z_MAX_POS 180
-
-//===========================================================================
-//========================= Filament Runout Sensor ==========================
-//===========================================================================
-//#define FILAMENT_RUNOUT_SENSOR // Uncomment for defining a filament runout sensor such as a mechanical or opto endstop to check the existence of filament
- // In RAMPS uses servo pin 2. Can be changed in pins file. For other boards pin definition should be made.
- // It is assumed that when logic high = filament available
- // when logic low = filament ran out
-#if ENABLED(FILAMENT_RUNOUT_SENSOR)
- const bool FIL_RUNOUT_INVERTING = false; // set to true to invert the logic of the sensor.
- #define ENDSTOPPULLUP_FIL_RUNOUT // Uncomment to use internal pullup for filament runout pins if the sensor is defined.
- #define FILAMENT_RUNOUT_SCRIPT "M600"
-#endif
-
-//===========================================================================
-//============================ Mesh Bed Leveling ============================
-//===========================================================================
-
-//#define MESH_BED_LEVELING // Enable mesh bed leveling.
-
-#if ENABLED(MESH_BED_LEVELING)
- #define MESH_INSET 10 // Mesh inset margin on print area
- #define MESH_NUM_X_POINTS 3 // Don't use more than 7 points per axis, implementation limited.
- #define MESH_NUM_Y_POINTS 3
- #define MESH_HOME_SEARCH_Z 4 // Z after Home, bed somewhere below but above 0.0.
-
- //#define MESH_G28_REST_ORIGIN // After homing all axes ('G28' or 'G28 XYZ') rest at origin [0,0,0]
-
- //#define MANUAL_BED_LEVELING // Add display menu option for bed leveling.
-
- #if ENABLED(MANUAL_BED_LEVELING)
- #define MBL_Z_STEP 0.025 // Step size while manually probing Z axis.
- #endif // MANUAL_BED_LEVELING
-
-#endif // MESH_BED_LEVELING
-
-//===========================================================================
-//============================ Bed Auto Leveling ============================
-//===========================================================================
-
-// @section bedlevel
-
-//#define AUTO_BED_LEVELING_FEATURE // Delete the comment to enable (remove // at the start of the line)
-
-// Enable this feature to get detailed logging of G28, G29, M48, etc.
-// Logging is off by default. Enable this logging feature with 'M111 S32'.
-// NOTE: Requires a huge amount of PROGMEM.
-//#define DEBUG_LEVELING_FEATURE
-
-#if ENABLED(AUTO_BED_LEVELING_FEATURE)
-
- // There are 2 different ways to specify probing locations:
- //
- // - "grid" mode
- // Probe several points in a rectangular grid.
- // You specify the rectangle and the density of sample points.
- // This mode is preferred because there are more measurements.
- //
- // - "3-point" mode
- // Probe 3 arbitrary points on the bed (that aren't collinear)
- // You specify the XY coordinates of all 3 points.
-
- // Enable this to sample the bed in a grid (least squares solution).
- // Note: this feature generates 10KB extra code size.
- #define AUTO_BED_LEVELING_GRID
-
- #if ENABLED(AUTO_BED_LEVELING_GRID)
-
- #define LEFT_PROBE_BED_POSITION 15
- #define RIGHT_PROBE_BED_POSITION 170
- #define FRONT_PROBE_BED_POSITION 20
- #define BACK_PROBE_BED_POSITION 170
-
- #define MIN_PROBE_EDGE 10 // The Z probe minimum square sides can be no smaller than this.
-
- // Set the number of grid points per dimension.
- // You probably don't need more than 3 (squared=9).
- #define AUTO_BED_LEVELING_GRID_POINTS 2
-
- #else // !AUTO_BED_LEVELING_GRID
-
- // Arbitrary points to probe.
- // A simple cross-product is used to estimate the plane of the bed.
- #define ABL_PROBE_PT_1_X 15
- #define ABL_PROBE_PT_1_Y 180
- #define ABL_PROBE_PT_2_X 15
- #define ABL_PROBE_PT_2_Y 20
- #define ABL_PROBE_PT_3_X 170
- #define ABL_PROBE_PT_3_Y 20
-
- #endif // !AUTO_BED_LEVELING_GRID
-
- //#define Z_PROBE_END_SCRIPT "G1 Z10 F12000\nG1 X15 Y330\nG1 Z0.5\nG1 Z10" // These commands will be executed in the end of G29 routine.
- // Useful to retract a deployable Z probe.
-
- // If you've enabled AUTO_BED_LEVELING_FEATURE and are using the Z Probe for Z Homing,
- // it is highly recommended you also enable Z_SAFE_HOMING below!
-
-#endif // AUTO_BED_LEVELING_FEATURE
-
-
-// @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 // Distance between the nozzle to printbed after homing
-
-// Use "Z Safe Homing" to avoid homing with a Z probe outside the bed area.
-//
-// With this feature enabled:
-//
-// - Allow Z homing only after X and Y homing AND stepper drivers still enabled.
-// - If stepper drivers time out, it will need X and Y homing again before Z homing.
-// - Move the Z probe (or nozzle) to a defined XY point before Z Homing when homing all axes (G28).
-// - Prevent Z homing when the Z probe is outside bed area.
-//#define Z_SAFE_HOMING
-
-#if ENABLED(Z_SAFE_HOMING)
- #define Z_SAFE_HOMING_X_POINT ((X_MIN_POS + X_MAX_POS) / 2) // X point for Z homing when homing all axis (G28).
- #define Z_SAFE_HOMING_Y_POINT ((Y_MIN_POS + Y_MAX_POS) / 2) // Y point for Z homing when homing all axis (G28).
-#endif
-
-// Homing speeds (mm/m)
-#define HOMING_FEEDRATE_XY 2000
-#define HOMING_FEEDRATE_Z 150
-
-//
-// MOVEMENT SETTINGS
-// @section motion
-//
-
-// default settings
-
-#define DEFAULT_AXIS_STEPS_PER_UNIT {80,80,4000,100.47095761381482} // default steps per unit for Ultimaker
-#define DEFAULT_MAX_FEEDRATE {250, 250, 3.3, 25} // (mm/sec)
-#define DEFAULT_MAX_ACCELERATION {3000,3000,100,10000} // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for Skeinforge 40+, for older versions raise them a lot.
-
-#define DEFAULT_ACCELERATION 1000 // X, Y, Z and E acceleration in mm/s^2 for printing moves
-#define DEFAULT_RETRACT_ACCELERATION 1000 // E acceleration in mm/s^2 for retracts
-#define DEFAULT_TRAVEL_ACCELERATION 1000 // X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
-
-// The speed change that does not require acceleration (i.e. the software might assume it can be done instantaneously)
-#define DEFAULT_XYJERK 10.0 // (mm/sec)
-#define DEFAULT_ZJERK 0.4 // (mm/sec)
-#define DEFAULT_EJERK 5.0 // (mm/sec)
-
-
-//=============================================================================
-//============================= Additional Features ===========================
-//=============================================================================
-
-// @section extras
-
-//
-// EEPROM
-//
-// The microcontroller can store settings in the EEPROM, e.g. max velocity...
-// M500 - stores parameters in EEPROM
-// M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily).
-// M502 - reverts to the default "factory settings". You still need to store them in EEPROM afterwards if you want to.
-//define this to enable EEPROM support
-//#define EEPROM_SETTINGS
-
-#if ENABLED(EEPROM_SETTINGS)
- // To disable EEPROM Serial responses and decrease program space by ~1700 byte: comment this out:
- #define EEPROM_CHITCHAT // Please keep turned on if you can.
-#endif
-
-//
-// Host Keepalive
-//
-// When enabled Marlin will send a busy status message to the host
-// every couple of seconds when it can't accept commands.
-//
-#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.
-
-//
-// M100 Free Memory Watcher
-//
-//#define M100_FREE_MEMORY_WATCHER // uncomment to add the M100 Free Memory Watcher for debug purpose
-
-//
-// G20/G21 Inch mode support
-//
-//#define INCH_MODE_SUPPORT
-
-//
-// M149 Set temperature units support
-//
-//#define TEMPERATURE_UNITS_SUPPORT
-
-// @section temperature
-
-// Preheat Constants
-#define PREHEAT_1_TEMP_HOTEND 200
-#define PREHEAT_1_TEMP_BED 0
-#define PREHEAT_1_FAN_SPEED 255 // Value from 0 to 255
-
-#define PREHEAT_2_TEMP_HOTEND 220
-#define PREHEAT_2_TEMP_BED 100
-#define PREHEAT_2_FAN_SPEED 255 // Value from 0 to 255
-
-//
-// Nozzle Park -- EXPERIMENTAL
-//
-// When enabled allows the user to define a special XYZ position, inside the
-// machine's topology, to park the nozzle when idle or when receiving the G27
-// command.
-//
-// The "P" paramenter controls what is the action applied to the Z axis:
-// P0: (Default) If current Z-pos is lower than Z-park then the nozzle will
-// be raised to reach Z-park height.
-//
-// P1: No matter the current Z-pos, the nozzle will be raised/lowered to
-// reach Z-park height.
-//
-// P2: The nozzle height will be raised by Z-park amount but never going over
-// the machine's limit of Z_MAX_POS.
-//
-//#define NOZZLE_PARK_FEATURE
-
-#if ENABLED(NOZZLE_PARK_FEATURE)
- // Specify a park position as { X, Y, Z }
- #define NOZZLE_PARK_POINT { (X_MIN_POS + 10), (Y_MAX_POS - 10), 20 }
-#endif
-
-//
-// Clean Nozzle Feature -- EXPERIMENTAL
-//
-// When enabled allows the user to send G12 to start the nozzle cleaning
-// process, the G-Code accepts two parameters:
-// "P" for pattern selection
-// "S" for defining the number of strokes/repetitions
-//
-// Available list of patterns:
-// P0: This is the default pattern, this process requires a sponge type
-// material at a fixed bed location, the cleaning process is based on
-// "strokes" i.e. back-and-forth movements between the starting and end
-// points.
-//
-// P1: This starts a zig-zag pattern between (X0, Y0) and (X1, Y1), "T"
-// defines the number of zig-zag triangles to be done. "S" defines the
-// number of strokes aka one back-and-forth movement. As an example
-// sending "G12 P1 S1 T3" will execute:
-//
-// --
-// | (X0, Y1) | /\ /\ /\ | (X1, Y1)
-// | | / \ / \ / \ |
-// A | | / \ / \ / \ |
-// | | / \ / \ / \ |
-// | (X0, Y0) | / \/ \/ \ | (X1, Y0)
-// -- +--------------------------------+
-// |________|_________|_________|
-// T1 T2 T3
-//
-// Caveats: End point Z should use the same value as Start point Z.
-//
-// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
-// may change to add new functionality like different wipe patterns.
-//
-//#define NOZZLE_CLEAN_FEATURE
-
-#if ENABLED(NOZZLE_CLEAN_FEATURE)
- // Number of pattern repetitions
- #define NOZZLE_CLEAN_STROKES 12
-
- // Specify positions as { X, Y, Z }
- #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
- #define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
-
- // Moves the nozzle to the initial position
- #define NOZZLE_CLEAN_GOBACK
-#endif
-
-//
-// Print job timer
-//
-// Enable this option to automatically start and stop the
-// print job timer when M104/M109/M190 commands are received.
-// M104 (extruder without wait) - high temp = none, low temp = stop timer
-// M109 (extruder with wait) - high temp = start timer, low temp = stop timer
-// M190 (bed with wait) - high temp = start timer, low temp = none
-//
-// In all cases the timer can be started and stopped using
-// the following commands:
-//
-// - M75 - Start the print job timer
-// - M76 - Pause the print job timer
-// - M77 - Stop the print job timer
-#define PRINTJOB_TIMER_AUTOSTART
-
-//
-// Print Counter
-//
-// When enabled Marlin will keep track of some print statistical data such as:
-// - Total print jobs
-// - Total successful print jobs
-// - Total failed print jobs
-// - Total time printing
-//
-// This information can be viewed by the M78 command.
-//#define PRINTCOUNTER
-
-//=============================================================================
-//============================= LCD and SD support ============================
-//=============================================================================
-
-// @section lcd
-
-//
-// LCD LANGUAGE
-//
-// Here you may choose the language used by Marlin on the LCD menus, the following
-// list of languages are available:
-// en, an, bg, ca, cn, cz, de, el, el-gr, es, eu, fi, fr, gl, hr, it,
-// kana, kana_utf8, nl, pl, pt, pt_utf8, pt-br, pt-br_utf8, ru, test
-//
-// :{'en':'English','an':'Aragonese','bg':'Bulgarian','ca':'Catalan','cn':'Chinese','cz':'Czech','de':'German','el':'Greek','el-gr':'Greek (Greece)','es':'Spanish','eu':'Basque-Euskera','fi':'Finnish','fr':'French','gl':'Galician','hr':'Croatian','it':'Italian','kana':'Japanese','kana_utf8':'Japanese (UTF8)','nl':'Dutch','pl':'Polish','pt':'Portuguese','pt-br':'Portuguese (Brazilian)','pt-br_utf8':'Portuguese (Brazilian UTF8)','pt_utf8':'Portuguese (UTF8)','ru':'Russian','test':'TEST'}
-//
-//#define LCD_LANGUAGE en
-
-//
-// LCD Character Set
-//
-// Note: This option is NOT applicable to Graphical Displays.
-//
-// All character-based LCD's provide ASCII plus one of these
-// language extensions:
-//
-// - JAPANESE ... the most common
-// - WESTERN ... with more accented characters
-// - CYRILLIC ... for the Russian language
-//
-// To determine the language extension installed on your controller:
-//
-// - Compile and upload with LCD_LANGUAGE set to 'test'
-// - Click the controller to view the LCD menu
-// - The LCD will display Japanese, Western, or Cyrillic text
-//
-// See https://github.com/MarlinFirmware/Marlin/wiki/LCD-Language
-//
-// :['JAPANESE','WESTERN','CYRILLIC']
-//
-#define DISPLAY_CHARSET_HD44780 JAPANESE
-
-//
-// LCD TYPE
-//
-// You may choose ULTRA_LCD if you have character based LCD with 16x2, 16x4, 20x2,
-// 20x4 char/lines or DOGLCD for the full graphics display with 128x64 pixels
-// (ST7565R family). (This option will be set automatically for certain displays.)
-//
-// IMPORTANT NOTE: The U8glib library is required for Full Graphic Display!
-// https://github.com/olikraus/U8glib_Arduino
-//
-#define ULTRA_LCD // Character based
-//#define DOGLCD // Full graphics display
-
-//
-// SD CARD
-//
-// SD Card support is disabled by default. If your controller has an SD slot,
-// you must uncomment the following option or it won't work.
-//
-#define SDSUPPORT
-
-//
-// SD CARD: SPI SPEED
-//
-// Uncomment ONE of the following items to use a slower SPI transfer
-// speed. This is usually required if you're getting volume init errors.
-//
-//#define SPI_SPEED SPI_HALF_SPEED
-//#define SPI_SPEED SPI_QUARTER_SPEED
-//#define SPI_SPEED SPI_EIGHTH_SPEED
-
-//
-// SD CARD: ENABLE CRC
-//
-// Use CRC checks and retries on the SD communication.
-//
-//#define SD_CHECK_AND_RETRY
-
-//
-// ENCODER SETTINGS
-//
-// This option overrides the default number of encoder pulses needed to
-// produce one step. Should be increased for high-resolution encoders.
-//
-//#define ENCODER_PULSES_PER_STEP 1
-
-//
-// Use this option to override the number of step signals required to
-// move between next/prev menu items.
-//
-//#define ENCODER_STEPS_PER_MENU_ITEM 5
-
-/**
- * Encoder Direction Options
- *
- * Test your encoder's behavior first with both options disabled.
- *
- * Reversed Value Edit and Menu Nav? Enable REVERSE_ENCODER_DIRECTION.
- * Reversed Menu Navigation only? Enable REVERSE_MENU_DIRECTION.
- * Reversed Value Editing only? Enable BOTH options.
- */
-
-//
-// This option reverses the encoder direction everywhere
-//
-// Set this option if CLOCKWISE causes values to DECREASE
-//
-//#define REVERSE_ENCODER_DIRECTION
-
-//
-// This option reverses the encoder direction for navigating LCD menus.
-//
-// If CLOCKWISE normally moves DOWN this makes it go UP.
-// If CLOCKWISE normally moves UP this makes it go DOWN.
-//
-//#define REVERSE_MENU_DIRECTION
-
-//
-// Individual Axis Homing
-//
-// Add individual axis homing items (Home X, Home Y, and Home Z) to the LCD menu.
-//
-//#define INDIVIDUAL_AXIS_HOMING_MENU
-
-//
-// SPEAKER/BUZZER
-//
-// If you have a speaker that can produce tones, enable it here.
-// By default Marlin assumes you have a buzzer with a fixed frequency.
-//
-//#define SPEAKER
-
-//
-// The duration and frequency for the UI feedback sound.
-// Set these to 0 to disable audio feedback in the LCD menus.
-//
-// Note: Test audio output with the G-Code:
-// M300 S P
-//
-//#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 100
-//#define LCD_FEEDBACK_FREQUENCY_HZ 1000
-
-//
-// CONTROLLER TYPE: Standard
-//
-// Marlin supports a wide variety of controllers.
-// Enable one of the following options to specify your controller.
-//
-
-//
-// ULTIMAKER Controller.
-//
-//#define ULTIMAKERCONTROLLER
-
-//
-// ULTIPANEL as seen on Thingiverse.
-//
-//#define ULTIPANEL
-
-//
-// Cartesio UI
-// http://mauk.cc/webshop/cartesio-shop/electronics/user-interface
-//
-//#define CARTESIO_UI
-
-//
-// PanelOne from T3P3 (via RAMPS 1.4 AUX2/AUX3)
-// http://reprap.org/wiki/PanelOne
-//
-//#define PANEL_ONE
-
-//
-// MaKr3d Makr-Panel with graphic controller and SD support.
-// http://reprap.org/wiki/MaKr3d_MaKrPanel
-//
-//#define MAKRPANEL
-
-//
-// ReprapWorld Graphical LCD
-// https://reprapworld.com/?products_details&products_id/1218
-//
-//#define REPRAPWORLD_GRAPHICAL_LCD
-
-//
-// Activate one of these if you have a Panucatt Devices
-// Viki 2.0 or mini Viki with Graphic LCD
-// http://panucatt.com
-//
-//#define VIKI2
-//#define miniVIKI
-
-//
-// Adafruit ST7565 Full Graphic Controller.
-// https://github.com/eboston/Adafruit-ST7565-Full-Graphic-Controller/
-//
-//#define ELB_FULL_GRAPHIC_CONTROLLER
-
-//
-// RepRapDiscount Smart Controller.
-// http://reprap.org/wiki/RepRapDiscount_Smart_Controller
-//
-// Note: Usually sold with a white PCB.
-//
-#define REPRAP_DISCOUNT_SMART_CONTROLLER
-
-//
-// GADGETS3D G3D LCD/SD Controller
-// http://reprap.org/wiki/RAMPS_1.3/1.4_GADGETS3D_Shield_with_Panel
-//
-// Note: Usually sold with a blue PCB.
-//
-//#define G3D_PANEL
-
-//
-// RepRapDiscount FULL GRAPHIC Smart Controller
-// http://reprap.org/wiki/RepRapDiscount_Full_Graphic_Smart_Controller
-//
-//#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
-
-//
-// MakerLab Mini Panel with graphic
-// controller and SD support - http://reprap.org/wiki/Mini_panel
-//
-//#define MINIPANEL
-
-//
-// RepRapWorld REPRAPWORLD_KEYPAD v1.1
-// http://reprapworld.com/?products_details&products_id=202&cPath=1591_1626
-//
-// REPRAPWORLD_KEYPAD_MOVE_STEP sets how much should the robot move when a key
-// is pressed, a value of 10.0 means 10mm per click.
-//
-//#define REPRAPWORLD_KEYPAD
-//#define REPRAPWORLD_KEYPAD_MOVE_STEP 1.0
-
-//
-// RigidBot Panel V1.0
-// http://www.inventapart.com/
-//
-//#define RIGIDBOT_PANEL
-
-//
-// BQ LCD Smart Controller shipped by
-// default with the BQ Hephestos 2 and Witbox 2.
-//
-//#define BQ_LCD_SMART_CONTROLLER
-
-//
-// CONTROLLER TYPE: I2C
-//
-// Note: These controllers require the installation of Arduino's LiquidCrystal_I2C
-// library. For more info: https://github.com/kiyoshigawa/LiquidCrystal_I2C
-//
-
-//
-// Elefu RA Board Control Panel
-// http://www.elefu.com/index.php?route=product/product&product_id=53
-//
-//#define RA_CONTROL_PANEL
-
-//
-// Sainsmart YW Robot (LCM1602) LCD Display
-//
-//#define LCD_I2C_SAINSMART_YWROBOT
-
-//
-// Generic LCM1602 LCD adapter
-//
-//#define LCM1602
-
-//
-// PANELOLU2 LCD with status LEDs,
-// separate encoder and click inputs.
-//
-// Note: This controller requires Arduino's LiquidTWI2 library v1.2.3 or later.
-// For more info: https://github.com/lincomatic/LiquidTWI2
-//
-// Note: The PANELOLU2 encoder click input can either be directly connected to
-// a pin (if BTN_ENC defined to != -1) or read through I2C (when BTN_ENC == -1).
-//
-//#define LCD_I2C_PANELOLU2
-
-//
-// Panucatt VIKI LCD with status LEDs,
-// integrated click & L/R/U/D buttons, separate encoder inputs.
-//
-//#define LCD_I2C_VIKI
-
-//
-// SSD1306 OLED full graphics generic display
-//
-//#define U8GLIB_SSD1306
-
-//
-// SAV OLEd LCD module support using either SSD1306 or SH1106 based LCD modules
-//
-//#define SAV_3DGLCD
-#if ENABLED(SAV_3DGLCD)
- //#define U8GLIB_SSD1306
- #define U8GLIB_SH1106
-#endif
-
-//
-// CONTROLLER TYPE: Shift register panels
-//
-// 2 wire Non-latching LCD SR from https://goo.gl/aJJ4sH
-// LCD configuration: http://reprap.org/wiki/SAV_3D_LCD
-//
-//#define SAV_3DLCD
-
-//=============================================================================
-//=============================== Extra Features ==============================
-//=============================================================================
-
-// @section extras
-
-// Increase the FAN PWM frequency. Removes the PWM noise but increases heating in the FET/Arduino
-//#define FAST_PWM_FAN
-
-// Use software PWM to drive the fan, as for the heaters. This uses a very low frequency
-// which is not as annoying as with the hardware PWM. On the other hand, if this frequency
-// is too low, you should also increment SOFT_PWM_SCALE.
-//#define FAN_SOFT_PWM
-
-// Incrementing this by 1 will double the software PWM frequency,
-// affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
-// However, control resolution will be halved for each increment;
-// at zero value, there are 128 effective control positions.
-#define SOFT_PWM_SCALE 0
-
-// Temperature status LEDs that display the hotend and bed temperature.
-// If all hotends and bed temperature and temperature setpoint are < 54C then the BLUE led is on.
-// Otherwise the RED led is on. There is 1C hysteresis.
-//#define TEMP_STAT_LEDS
-
-// M240 Triggers a camera by emulating a Canon RC-1 Remote
-// Data from: http://www.doc-diy.net/photo/rc-1_hacked/
-//#define PHOTOGRAPH_PIN 23
-
-// SkeinForge sends the wrong arc g-codes when using Arc Point as fillet procedure
-//#define SF_ARC_FIX
-
-// Support for the BariCUDA Paste Extruder.
-//#define BARICUDA
-
-//define BlinkM/CyzRgb Support
-//#define BLINKM
-
-/*********************************************************************\
-* R/C SERVO support
-* Sponsored by TrinityLabs, Reworked by codexmas
-**********************************************************************/
-
-// Number of servos
-//
-// If you select a configuration below, this will receive a default value and does not need to be set manually
-// set it manually if you have more servos than extruders and wish to manually control some
-// leaving it undefined or defining as 0 will disable the servo subsystem
-// If unsure, leave commented / disabled
-//
-//#define NUM_SERVOS 3 // Servo index starts with 0 for M280 command
-
-// Delay (in microseconds) before the next move will start, to give the servo time to reach its target angle.
-// 300ms is a good value but you can try less delay.
-// If the servo can't reach the requested position, increase it.
-#define SERVO_DELAY 300
-
-// Servo deactivation
-//
-// With this option servos are powered only during movement, then turned off to prevent jitter.
-//#define DEACTIVATE_SERVOS_AFTER_MOVE
-
-/**********************************************************************\
- * Support for a filament diameter sensor
- * Also allows adjustment of diameter at print time (vs at slicing)
- * Single extruder only at this point (extruder 0)
- *
- * Motherboards
- * 34 - RAMPS1.4 - uses Analog input 5 on the AUX2 connector
- * 81 - Printrboard - Uses Analog input 2 on the Exp1 connector (version B,C,D,E)
- * 301 - Rambo - uses Analog input 3
- * Note may require analog pins to be defined for different motherboards
- **********************************************************************/
-// Uncomment below to enable
-//#define FILAMENT_WIDTH_SENSOR
-
-#define DEFAULT_NOMINAL_FILAMENT_DIA 3.00 //Enter the diameter (in mm) of the filament generally used (3.0 mm or 1.75 mm) - this is then used in the slicer software. Used for sensor reading validation
-
-#if ENABLED(FILAMENT_WIDTH_SENSOR)
- #define FILAMENT_SENSOR_EXTRUDER_NUM 0 //The number of the extruder that has the filament sensor (0,1,2)
- #define MEASUREMENT_DELAY_CM 14 //measurement delay in cm. This is the distance from filament sensor to middle of barrel
-
- #define MEASURED_UPPER_LIMIT 3.30 //upper limit factor used for sensor reading validation in mm
- #define MEASURED_LOWER_LIMIT 1.90 //lower limit factor for sensor reading validation in mm
- #define MAX_MEASUREMENT_DELAY 20 //delay buffer size in bytes (1 byte = 1cm)- limits maximum measurement delay allowable (must be larger than MEASUREMENT_DELAY_CM and lower number saves RAM)
-
- #define DEFAULT_MEASURED_FILAMENT_DIA DEFAULT_NOMINAL_FILAMENT_DIA //set measured to nominal initially
-
- //When using an LCD, uncomment the line below to display the Filament sensor data on the last line instead of status. Status will appear for 5 sec.
- //#define FILAMENT_LCD_DISPLAY
-#endif
-
-#endif // CONFIGURATION_H
diff --git a/Marlin/example_configurations/Hephestos/Configuration_adv.h b/Marlin/example_configurations/Hephestos/Configuration_adv.h
deleted file mode 100644
index b719e60..0000000
--- a/Marlin/example_configurations/Hephestos/Configuration_adv.h
+++ /dev/null
@@ -1,799 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Configuration_adv.h
- *
- * Advanced settings.
- * Only change these if you know exactly what you're doing.
- * Some of these settings can damage your printer if improperly set!
- *
- * Basic settings can be found in Configuration.h
- *
- */
-#ifndef CONFIGURATION_ADV_H
-#define CONFIGURATION_ADV_H
-
-/**
- *
- * ***********************************
- * ** ATTENTION TO ALL DEVELOPERS **
- * ***********************************
- *
- * You must increment this version number for every significant change such as,
- * but not limited to: ADD, DELETE RENAME OR REPURPOSE any directive/option.
- *
- * Note: Update also Version.h !
- */
-#define CONFIGURATION_ADV_H_VERSION 010100
-
-// @section temperature
-
-//===========================================================================
-//=============================Thermal Settings ============================
-//===========================================================================
-
-#if DISABLED(PIDTEMPBED)
- #define BED_CHECK_INTERVAL 5000 // ms between checks in bang-bang control
- #if ENABLED(BED_LIMIT_SWITCHING)
- #define BED_HYSTERESIS 2 // Only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS
- #endif
-#endif
-
-/**
- * Thermal Protection protects your printer from damage and fire if a
- * thermistor falls out or temperature sensors fail in any way.
- *
- * The issue: If a thermistor falls out or a temperature sensor fails,
- * Marlin can no longer sense the actual temperature. Since a disconnected
- * thermistor reads as a low temperature, the firmware will keep the heater on.
- *
- * The solution: Once the temperature reaches the target, start observing.
- * If the temperature stays too far below the target (hysteresis) for too long (period),
- * the firmware will halt the machine as a safety precaution.
- *
- * If you get false positives for "Thermal Runaway" increase THERMAL_PROTECTION_HYSTERESIS and/or THERMAL_PROTECTION_PERIOD
- */
-#if ENABLED(THERMAL_PROTECTION_HOTENDS)
- #define THERMAL_PROTECTION_PERIOD 40 // Seconds
- #define THERMAL_PROTECTION_HYSTERESIS 4 // Degrees Celsius
-
- /**
- * Whenever an M104 or M109 increases the target temperature the firmware will wait for the
- * WATCH_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_TEMP_INCREASE
- * degrees, the machine is halted, requiring a hard reset. This test restarts with any M104/M109,
- * but only if the current temperature is far enough below the target for a reliable test.
- *
- * If you get false positives for "Heating failed" increase WATCH_TEMP_PERIOD and/or decrease WATCH_TEMP_INCREASE
- * WATCH_TEMP_INCREASE should not be below 2.
- */
- #define WATCH_TEMP_PERIOD 20 // Seconds
- #define WATCH_TEMP_INCREASE 2 // Degrees Celsius
-#endif
-
-/**
- * Thermal Protection parameters for the bed are just as above for hotends.
- */
-#if ENABLED(THERMAL_PROTECTION_BED)
- #define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
- #define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
-
- /**
- * Whenever an M140 or M190 increases the target temperature the firmware will wait for the
- * WATCH_BED_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_BED_TEMP_INCREASE
- * degrees, the machine is halted, requiring a hard reset. This test restarts with any M140/M190,
- * but only if the current temperature is far enough below the target for a reliable test.
- *
- * If you get too many "Heating failed" errors, increase WATCH_BED_TEMP_PERIOD and/or decrease
- * WATCH_BED_TEMP_INCREASE. (WATCH_BED_TEMP_INCREASE should not be below 2.)
- */
- #define WATCH_BED_TEMP_PERIOD 60 // Seconds
- #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
-#endif
-
-#if ENABLED(PIDTEMP)
- // this adds an experimental additional term to the heating power, proportional to the extrusion speed.
- // if Kc is chosen well, the additional required power due to increased melting should be compensated.
- //#define PID_EXTRUSION_SCALING
- #if ENABLED(PID_EXTRUSION_SCALING)
- #define DEFAULT_Kc (100) //heating power=Kc*(e_speed)
- #define LPQ_MAX_LEN 50
- #endif
-#endif
-
-/**
- * Automatic Temperature:
- * The hotend target temperature is calculated by all the buffered lines of gcode.
- * The maximum buffered steps/sec of the extruder motor is called "se".
- * Start autotemp mode with M109 S B F
- * The target temperature is set to mintemp+factor*se[steps/sec] and is limited by
- * mintemp and maxtemp. Turn this off by executing M109 without F*
- * Also, if the temperature is set to a value below mintemp, it will not be changed by autotemp.
- * On an Ultimaker, some initial testing worked with M109 S215 B260 F1 in the start.gcode
- */
-#define AUTOTEMP
-#if ENABLED(AUTOTEMP)
- #define AUTOTEMP_OLDWEIGHT 0.98
-#endif
-
-//Show Temperature ADC value
-//The M105 command return, besides traditional information, the ADC value read from temperature sensors.
-//#define SHOW_TEMP_ADC_VALUES
-
-/**
- * High Temperature Thermistor Support
- *
- * Thermistors able to support high temperature tend to have a hard time getting
- * good readings at room and lower temperatures. This means HEATER_X_RAW_LO_TEMP
- * will probably be caught when the heating element first turns on during the
- * preheating process, which will trigger a min_temp_error as a safety measure
- * and force stop everything.
- * To circumvent this limitation, we allow for a preheat time (during which,
- * min_temp_error won't be triggered) and add a min_temp buffer to handle
- * aberrant readings.
- *
- * If you want to enable this feature for your hotend thermistor(s)
- * uncomment and set values > 0 in the constants below
- */
-
-// The number of consecutive low temperature errors that can occur
-// before a min_temp_error is triggered. (Shouldn't be more than 10.)
-//#define MAX_CONSECUTIVE_LOW_TEMPERATURE_ERROR_ALLOWED 0
-
-// The number of milliseconds a hotend will preheat before starting to check
-// the temperature. This value should NOT be set to the time it takes the
-// hot end to reach the target temperature, but the time it takes to reach
-// the minimum temperature your thermistor can read. The lower the better/safer.
-// This shouldn't need to be more than 30 seconds (30000)
-//#define MILLISECONDS_PREHEAT_TIME 0
-
-// @section extruder
-
-// extruder run-out prevention.
-//if the machine is idle, and the temperature over MINTEMP, every couple of SECONDS some filament is extruded
-//#define EXTRUDER_RUNOUT_PREVENT
-#define EXTRUDER_RUNOUT_MINTEMP 190
-#define EXTRUDER_RUNOUT_SECONDS 30
-#define EXTRUDER_RUNOUT_ESTEPS 14 // mm filament
-#define EXTRUDER_RUNOUT_SPEED 1500 // extrusion speed
-#define EXTRUDER_RUNOUT_EXTRUDE 100
-
-// @section temperature
-
-//These defines help to calibrate the AD595 sensor in case you get wrong temperature measurements.
-//The measured temperature is defined as "actualTemp = (measuredTemp * TEMP_SENSOR_AD595_GAIN) + TEMP_SENSOR_AD595_OFFSET"
-#define TEMP_SENSOR_AD595_OFFSET 0.0
-#define TEMP_SENSOR_AD595_GAIN 1.0
-
-//This is for controlling a fan to cool down the stepper drivers
-//it will turn on when any driver is enabled
-//and turn off after the set amount of seconds from last driver being disabled again
-#define CONTROLLERFAN_PIN -1 //Pin used for the fan to cool controller (-1 to disable)
-#define CONTROLLERFAN_SECS 60 //How many seconds, after all motors were disabled, the fan should run
-#define CONTROLLERFAN_SPEED 255 // == full speed
-
-// When first starting the main fan, run it at full speed for the
-// given number of milliseconds. This gets the fan spinning reliably
-// before setting a PWM value. (Does not work with software PWM for fan on Sanguinololu)
-//#define FAN_KICKSTART_TIME 100
-
-// This defines the minimal speed for the main fan, run in PWM mode
-// to enable uncomment and set minimal PWM speed for reliable running (1-255)
-// if fan speed is [1 - (FAN_MIN_PWM-1)] it is set to FAN_MIN_PWM
-//#define FAN_MIN_PWM 50
-
-// @section extruder
-
-// Extruder cooling fans
-// Configure fan pin outputs to automatically turn on/off when the associated
-// extruder temperature is above/below EXTRUDER_AUTO_FAN_TEMPERATURE.
-// Multiple extruders can be assigned to the same pin in which case
-// the fan will turn on when any selected extruder is above the threshold.
-#define EXTRUDER_0_AUTO_FAN_PIN -1
-#define EXTRUDER_1_AUTO_FAN_PIN -1
-#define EXTRUDER_2_AUTO_FAN_PIN -1
-#define EXTRUDER_3_AUTO_FAN_PIN -1
-#define EXTRUDER_AUTO_FAN_TEMPERATURE 50
-#define EXTRUDER_AUTO_FAN_SPEED 255 // == full speed
-
-//===========================================================================
-//============================ Mechanical Settings ==========================
-//===========================================================================
-
-// @section homing
-
-// If you want endstops to stay on (by default) even when not homing
-// enable this option. Override at any time with M120, M121.
-#define ENDSTOPS_ALWAYS_ON_DEFAULT
-
-// @section extras
-
-//#define Z_LATE_ENABLE // Enable Z the last moment. Needed if your Z driver overheats.
-
-// Dual X Steppers
-// Uncomment this option to drive two X axis motors.
-// The next unused E driver will be assigned to the second X stepper.
-//#define X_DUAL_STEPPER_DRIVERS
-#if ENABLED(X_DUAL_STEPPER_DRIVERS)
- // Set true if the two X motors need to rotate in opposite directions
- #define INVERT_X2_VS_X_DIR true
-#endif
-
-
-// Dual Y Steppers
-// Uncomment this option to drive two Y axis motors.
-// The next unused E driver will be assigned to the second Y stepper.
-//#define Y_DUAL_STEPPER_DRIVERS
-#if ENABLED(Y_DUAL_STEPPER_DRIVERS)
- // Set true if the two Y motors need to rotate in opposite directions
- #define INVERT_Y2_VS_Y_DIR true
-#endif
-
-// A single Z stepper driver is usually used to drive 2 stepper motors.
-// Uncomment this option to use a separate stepper driver for each Z axis motor.
-// The next unused E driver will be assigned to the second Z stepper.
-//#define Z_DUAL_STEPPER_DRIVERS
-
-#if ENABLED(Z_DUAL_STEPPER_DRIVERS)
-
- // Z_DUAL_ENDSTOPS is a feature to enable the use of 2 endstops for both Z steppers - Let's call them Z stepper and Z2 stepper.
- // That way the machine is capable to align the bed during home, since both Z steppers are homed.
- // There is also an implementation of M666 (software endstops adjustment) to this feature.
- // After Z homing, this adjustment is applied to just one of the steppers in order to align the bed.
- // One just need to home the Z axis and measure the distance difference between both Z axis and apply the math: Z adjust = Z - Z2.
- // If the Z stepper axis is closer to the bed, the measure Z > Z2 (yes, it is.. think about it) and the Z adjust would be positive.
- // Play a little bit with small adjustments (0.5mm) and check the behaviour.
- // The M119 (endstops report) will start reporting the Z2 Endstop as well.
-
- //#define Z_DUAL_ENDSTOPS
-
- #if ENABLED(Z_DUAL_ENDSTOPS)
- #define Z2_USE_ENDSTOP _XMAX_
- #endif
-
-#endif // Z_DUAL_STEPPER_DRIVERS
-
-// Enable this for dual x-carriage printers.
-// A dual x-carriage design has the advantage that the inactive extruder can be parked which
-// prevents hot-end ooze contaminating the print. It also reduces the weight of each x-carriage
-// allowing faster printing speeds. Connect your X2 stepper to the first unused E plug.
-//#define DUAL_X_CARRIAGE
-#if ENABLED(DUAL_X_CARRIAGE)
- // Configuration for second X-carriage
- // Note: the first x-carriage is defined as the x-carriage which homes to the minimum endstop;
- // the second x-carriage always homes to the maximum endstop.
- #define X2_MIN_POS 80 // set minimum to ensure second x-carriage doesn't hit the parked first X-carriage
- #define X2_MAX_POS 353 // set maximum to the distance between toolheads when both heads are homed
- #define X2_HOME_DIR 1 // the second X-carriage always homes to the maximum endstop position
- #define X2_HOME_POS X2_MAX_POS // default home position is the maximum carriage position
- // However: In this mode the HOTEND_OFFSET_X value for the second extruder provides a software
- // override for X2_HOME_POS. This also allow recalibration of the distance between the two endstops
- // without modifying the firmware (through the "M218 T1 X???" command).
- // Remember: you should set the second extruder x-offset to 0 in your slicer.
-
- // There are a few selectable movement modes for dual x-carriages using M605 S
- // Mode 0: Full control. The slicer has full control over both x-carriages and can achieve optimal travel results
- // as long as it supports dual x-carriages. (M605 S0)
- // Mode 1: Auto-park mode. The firmware will automatically park and unpark the x-carriages on tool changes so
- // that additional slicer support is not required. (M605 S1)
- // Mode 2: Duplication mode. The firmware will transparently make the second x-carriage and extruder copy all
- // actions of the first x-carriage. This allows the printer to print 2 arbitrary items at
- // once. (2nd extruder x offset and temp offset are set using: M605 S2 [Xnnn] [Rmmm])
-
- // This is the default power-up mode which can be later using M605.
- #define DEFAULT_DUAL_X_CARRIAGE_MODE 0
-
- // Default settings in "Auto-park Mode"
- #define TOOLCHANGE_PARK_ZLIFT 0.2 // the distance to raise Z axis when parking an extruder
- #define TOOLCHANGE_UNPARK_ZLIFT 1 // the distance to raise Z axis when unparking an extruder
-
- // Default x offset in duplication mode (typically set to half print bed width)
- #define DEFAULT_DUPLICATION_X_OFFSET 100
-
-#endif //DUAL_X_CARRIAGE
-
-// @section homing
-
-//homing hits the endstop, then retracts by this distance, before it tries to slowly bump again:
-#define X_HOME_BUMP_MM 5
-#define Y_HOME_BUMP_MM 5
-#define Z_HOME_BUMP_MM 2
-#define HOMING_BUMP_DIVISOR {2, 2, 4} // Re-Bump Speed Divisor (Divides the Homing Feedrate)
-//#define QUICK_HOME //if this is defined, if both x and y are to be homed, a diagonal move will be performed initially.
-
-// When G28 is called, this option will make Y home before X
-//#define HOME_Y_BEFORE_X
-
-// @section machine
-
-#define AXIS_RELATIVE_MODES {false, false, false, false}
-
-// Allow duplication mode with a basic dual-nozzle extruder
-//#define DUAL_NOZZLE_DUPLICATION_MODE
-
-// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
-#define INVERT_X_STEP_PIN false
-#define INVERT_Y_STEP_PIN false
-#define INVERT_Z_STEP_PIN false
-#define INVERT_E_STEP_PIN false
-
-// Default stepper release if idle. Set to 0 to deactivate.
-// Steppers will shut down DEFAULT_STEPPER_DEACTIVE_TIME seconds after the last move when DISABLE_INACTIVE_? is true.
-// Time can be set by M18 and M84.
-#define DEFAULT_STEPPER_DEACTIVE_TIME 60
-#define DISABLE_INACTIVE_X true
-#define DISABLE_INACTIVE_Y true
-#define DISABLE_INACTIVE_Z true // set to false if the nozzle will fall down on your printed part when print has finished.
-#define DISABLE_INACTIVE_E true
-
-#define DEFAULT_MINIMUMFEEDRATE 0.0 // minimum feedrate
-#define DEFAULT_MINTRAVELFEEDRATE 0.0
-
-// @section lcd
-
-#if ENABLED(ULTIPANEL)
- #define MANUAL_FEEDRATE {120*60, 120*60, 18*60, 60} // Feedrates for manual moves along X, Y, Z, E from panel
- #define ULTIPANEL_FEEDMULTIPLY // Comment to disable setting feedrate multiplier via encoder
-#endif
-
-// @section extras
-
-// minimum time in microseconds that a movement needs to take if the buffer is emptied.
-#define DEFAULT_MINSEGMENTTIME 20000
-
-// If defined the movements slow down when the look ahead buffer is only half full
-#define SLOWDOWN
-
-// Frequency limit
-// See nophead's blog for more info
-// Not working O
-//#define XY_FREQUENCY_LIMIT 15
-
-// Minimum planner junction speed. Sets the default minimum speed the planner plans for at the end
-// of the buffer and all stops. This should not be much greater than zero and should only be changed
-// if unwanted behavior is observed on a user's machine when running at very slow speeds.
-#define MINIMUM_PLANNER_SPEED 0.05// (mm/sec)
-
-// Microstep setting (Only functional when stepper driver microstep pins are connected to MCU.
-#define MICROSTEP_MODES {16,16,16,16,16} // [1,2,4,8,16]
-
-// Motor Current setting (Only functional when motor driver current ref pins are connected to a digital trimpot on supported boards)
-#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
-
-// Motor Current controlled via PWM (Overridable on supported boards with PWM-driven motor driver current)
-//#define PWM_MOTOR_CURRENT {1300, 1300, 1250} // Values in milliamps
-
-// uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
-//#define DIGIPOT_I2C
-// Number of channels available for I2C digipot, For Azteeg X3 Pro we have 8
-#define DIGIPOT_I2C_NUM_CHANNELS 8
-// actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
-#define DIGIPOT_I2C_MOTOR_CURRENTS {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}
-
-//===========================================================================
-//=============================Additional Features===========================
-//===========================================================================
-
-#define ENCODER_RATE_MULTIPLIER // If defined, certain menu edit operations automatically multiply the steps when the encoder is moved quickly
-#define ENCODER_10X_STEPS_PER_SEC 75 // If the encoder steps per sec exceeds this value, multiply steps moved x10 to quickly advance the value
-#define ENCODER_100X_STEPS_PER_SEC 160 // If the encoder steps per sec exceeds this value, multiply steps moved x100 to really quickly advance the value
-
-//#define CHDK 4 //Pin for triggering CHDK to take a picture see how to use it here http://captain-slow.dk/2014/03/09/3d-printing-timelapses/
-#define CHDK_DELAY 50 //How long in ms the pin should stay HIGH before going LOW again
-
-// @section lcd
-
-// Include a page of printer information in the LCD Main Menu
-//#define LCD_INFO_MENU
-
-#if ENABLED(SDSUPPORT)
-
- // Some RAMPS and other boards don't detect when an SD card is inserted. You can work
- // around this by connecting a push button or single throw switch to the pin defined
- // as SD_DETECT_PIN in your board's pins definitions.
- // This setting should be disabled unless you are using a push button, pulling the pin to ground.
- // Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
- #define SD_DETECT_INVERTED
-
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
- #define SD_FINISHED_RELEASECOMMAND "M84 X Y Z E" // You might want to keep the z enabled so your bed stays in place.
-
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
- //#define MENU_ADDAUTOSTART
-
- // Show a progress bar on HD44780 LCDs for SD printing
- //#define LCD_PROGRESS_BAR
-
- #if ENABLED(LCD_PROGRESS_BAR)
- // Amount of time (ms) to show the bar
- #define PROGRESS_BAR_BAR_TIME 2000
- // Amount of time (ms) to show the status message
- #define PROGRESS_BAR_MSG_TIME 3000
- // Amount of time (ms) to retain the status message (0=forever)
- #define PROGRESS_MSG_EXPIRE 0
- // Enable this to show messages for MSG_TIME then hide them
- //#define PROGRESS_MSG_ONCE
- #endif
-
- // This allows hosts to request long names for files and folders with M33
- //#define LONG_FILENAME_HOST_SUPPORT
-
- // This option allows you to abort SD printing when any endstop is triggered.
- // This feature must be enabled with "M540 S1" or from the LCD menu.
- // To have any effect, endstops must be enabled during SD printing.
- //#define ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED
-
-#endif // SDSUPPORT
-
-// for dogm lcd displays you can choose some additional fonts:
-#if ENABLED(DOGLCD)
- // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT
- // we don't have a big font for Cyrillic, Kana
- //#define USE_BIG_EDIT_FONT
-
- // If you have spare 2300Byte of progmem and want to use a
- // smaller font on the Info-screen uncomment the next line.
- //#define USE_SMALL_INFOFONT
-#endif // DOGLCD
-
-// @section safety
-
-// The hardware watchdog should reset the microcontroller disabling all outputs,
-// in case the firmware gets stuck and doesn't do temperature regulation.
-#define USE_WATCHDOG
-
-#if ENABLED(USE_WATCHDOG)
- // If you have a watchdog reboot in an ArduinoMega2560 then the device will hang forever, as a watchdog reset will leave the watchdog on.
- // The "WATCHDOG_RESET_MANUAL" goes around this by not using the hardware reset.
- // However, THIS FEATURE IS UNSAFE!, as it will only work if interrupts are disabled. And the code could hang in an interrupt routine with interrupts disabled.
- //#define WATCHDOG_RESET_MANUAL
-#endif
-
-// @section lcd
-
-// Babystepping enables the user to control the axis in tiny amounts, independently from the normal printing process
-// it can e.g. be used to change z-positions in the print startup phase in real-time
-// does not respect endstops!
-//#define BABYSTEPPING
-#if ENABLED(BABYSTEPPING)
- #define BABYSTEP_XY //not only z, but also XY in the menu. more clutter, more functions
- //not implemented for deltabots!
- #define BABYSTEP_INVERT_Z false //true for inverse movements in Z
- #define BABYSTEP_MULTIPLICATOR 1 //faster movements
-#endif
-
-// @section extruder
-
-// extruder advance constant (s2/mm3)
-//
-// advance (steps) = STEPS_PER_CUBIC_MM_E * EXTRUDER_ADVANCE_K * cubic mm per second ^ 2
-//
-// Hooke's law says: force = k * distance
-// Bernoulli's principle says: v ^ 2 / 2 + g . h + pressure / density = constant
-// so: v ^ 2 is proportional to number of steps we advance the extruder
-//#define ADVANCE
-
-#if ENABLED(ADVANCE)
- #define EXTRUDER_ADVANCE_K .0
- #define D_FILAMENT 1.75
-#endif
-
-// Implementation of a linear pressure control
-// Assumption: advance = k * (delta velocity)
-// K=0 means advance disabled. A good value for a gregs wade extruder will be around K=75
-//#define LIN_ADVANCE
-
-#if ENABLED(LIN_ADVANCE)
- #define LIN_ADVANCE_K 75
-#endif
-
-// @section leveling
-
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #define MESH_MIN_X (X_MIN_POS + MESH_INSET)
- #define MESH_MAX_X (X_MAX_POS - (MESH_INSET))
- #define MESH_MIN_Y (Y_MIN_POS + MESH_INSET)
- #define MESH_MAX_Y (Y_MAX_POS - (MESH_INSET))
-#endif
-
-// @section extras
-
-// Arc interpretation settings:
-#define ARC_SUPPORT // Disabling this saves ~2738 bytes
-#define MM_PER_ARC_SEGMENT 1
-#define N_ARC_CORRECTION 25
-
-// Support for G5 with XYZE destination and IJPQ offsets. Requires ~2666 bytes.
-//#define BEZIER_CURVE_SUPPORT
-
-const unsigned int dropsegments = 5; //everything with less than this number of steps will be ignored as move and joined with the next movement
-
-// @section temperature
-
-// Control heater 0 and heater 1 in parallel.
-//#define HEATERS_PARALLEL
-
-//===========================================================================
-//================================= Buffers =================================
-//===========================================================================
-
-// @section hidden
-
-// The number of linear motions that can be in the plan at any give time.
-// THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2, i.g. 8,16,32 because shifts and ors are used to do the ring-buffering.
-#if ENABLED(SDSUPPORT)
- #define BLOCK_BUFFER_SIZE 16 // SD,LCD,Buttons take more memory, block buffer needs to be smaller
-#else
- #define BLOCK_BUFFER_SIZE 16 // maximize block buffer
-#endif
-
-// @section serial
-
-// The ASCII buffer for serial input
-#define MAX_CMD_SIZE 96
-#define BUFSIZE 4
-
-// Transfer Buffer Size
-// To save 386 bytes of PROGMEM (and TX_BUFFER_SIZE+3 bytes of RAM) set to 0.
-// To buffer a simple "ok" you need 4 bytes.
-// For ADVANCED_OK (M105) you need 32 bytes.
-// For debug-echo: 128 bytes for the optimal speed.
-// Other output doesn't need to be that speedy.
-// :[0,2,4,8,16,32,64,128,256]
-#define TX_BUFFER_SIZE 0
-
-// Enable an emergency-command parser to intercept certain commands as they
-// enter the serial receive buffer, so they cannot be blocked.
-// Currently handles M108, M112, M410
-// Does not work on boards using AT90USB (USBCON) processors!
-//#define EMERGENCY_PARSER
-
-// Bad Serial-connections can miss a received command by sending an 'ok'
-// Therefore some clients abort after 30 seconds in a timeout.
-// Some other clients start sending commands while receiving a 'wait'.
-// This "wait" is only sent when the buffer is empty. 1 second is a good value here.
-//#define NO_TIMEOUTS 1000 // Milliseconds
-
-// Some clients will have this feature soon. This could make the NO_TIMEOUTS unnecessary.
-//#define ADVANCED_OK
-
-// @section fwretract
-
-// Firmware based and LCD controlled retract
-// M207 and M208 can be used to define parameters for the retraction.
-// The retraction can be called by the slicer using G10 and G11
-// until then, intended retractions can be detected by moves that only extrude and the direction.
-// the moves are than replaced by the firmware controlled ones.
-
-//#define FWRETRACT //ONLY PARTIALLY TESTED
-#if ENABLED(FWRETRACT)
- #define MIN_RETRACT 0.1 //minimum extruded mm to accept a automatic gcode retraction attempt
- #define RETRACT_LENGTH 3 //default retract length (positive mm)
- #define RETRACT_LENGTH_SWAP 13 //default swap retract length (positive mm), for extruder change
- #define RETRACT_FEEDRATE 80 //default feedrate for retracting (mm/s)
- #define RETRACT_ZLIFT 0 //default retract Z-lift
- #define RETRACT_RECOVER_LENGTH 0 //default additional recover length (mm, added to retract length when recovering)
- //#define RETRACT_RECOVER_LENGTH_SWAP 0 //default additional swap recover length (mm, added to retract length when recovering from extruder change)
- #define RETRACT_RECOVER_FEEDRATE 8 //default feedrate for recovering from retraction (mm/s)
-#endif
-
-// Add support for experimental filament exchange support M600; requires display
-#if ENABLED(ULTIPANEL)
- // #define FILAMENT_CHANGE_FEATURE // Enable filament exchange menu and M600 g-code (used for runout sensor too)
- #if ENABLED(FILAMENT_CHANGE_FEATURE)
- #define FILAMENT_CHANGE_X_POS 3 // X position of hotend
- #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend
- #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift)
- #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
- #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers)
- #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm
- // It is a short retract used immediately after print interrupt before move to filament exchange position
- #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
- #define FILAMENT_CHANGE_UNLOAD_LENGTH 100 // Unload filament length from hotend in mm
- // Longer length for bowden printers to unload filament from whole bowden tube,
- // shorter lenght for printers without bowden to unload filament from extruder only,
- // 0 to disable unloading for manual unloading
- #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast
- #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm
- // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
- // Short or zero length for printers without bowden where loading is not used
- #define FILAMENT_CHANGE_LOAD_FEEDRATE 10 // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
- #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is load over the hotend,
- // 0 to disable for manual extrusion
- // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
- // or until outcoming filament color is not clear for filament color change
- #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
- #endif
-#endif
-
-/******************************************************************************\
- * enable this section if you have TMC26X motor drivers.
- * you need to import the TMC26XStepper library into the Arduino IDE for this
- ******************************************************************************/
-
-// @section tmc
-
-//#define HAVE_TMCDRIVER
-#if ENABLED(HAVE_TMCDRIVER)
-
- //#define X_IS_TMC
- #define X_MAX_CURRENT 1000 //in mA
- #define X_SENSE_RESISTOR 91 //in mOhms
- #define X_MICROSTEPS 16 //number of microsteps
-
- //#define X2_IS_TMC
- #define X2_MAX_CURRENT 1000 //in mA
- #define X2_SENSE_RESISTOR 91 //in mOhms
- #define X2_MICROSTEPS 16 //number of microsteps
-
- //#define Y_IS_TMC
- #define Y_MAX_CURRENT 1000 //in mA
- #define Y_SENSE_RESISTOR 91 //in mOhms
- #define Y_MICROSTEPS 16 //number of microsteps
-
- //#define Y2_IS_TMC
- #define Y2_MAX_CURRENT 1000 //in mA
- #define Y2_SENSE_RESISTOR 91 //in mOhms
- #define Y2_MICROSTEPS 16 //number of microsteps
-
- //#define Z_IS_TMC
- #define Z_MAX_CURRENT 1000 //in mA
- #define Z_SENSE_RESISTOR 91 //in mOhms
- #define Z_MICROSTEPS 16 //number of microsteps
-
- //#define Z2_IS_TMC
- #define Z2_MAX_CURRENT 1000 //in mA
- #define Z2_SENSE_RESISTOR 91 //in mOhms
- #define Z2_MICROSTEPS 16 //number of microsteps
-
- //#define E0_IS_TMC
- #define E0_MAX_CURRENT 1000 //in mA
- #define E0_SENSE_RESISTOR 91 //in mOhms
- #define E0_MICROSTEPS 16 //number of microsteps
-
- //#define E1_IS_TMC
- #define E1_MAX_CURRENT 1000 //in mA
- #define E1_SENSE_RESISTOR 91 //in mOhms
- #define E1_MICROSTEPS 16 //number of microsteps
-
- //#define E2_IS_TMC
- #define E2_MAX_CURRENT 1000 //in mA
- #define E2_SENSE_RESISTOR 91 //in mOhms
- #define E2_MICROSTEPS 16 //number of microsteps
-
- //#define E3_IS_TMC
- #define E3_MAX_CURRENT 1000 //in mA
- #define E3_SENSE_RESISTOR 91 //in mOhms
- #define E3_MICROSTEPS 16 //number of microsteps
-
-#endif
-
-/******************************************************************************\
- * enable this section if you have L6470 motor drivers.
- * you need to import the L6470 library into the Arduino IDE for this
- ******************************************************************************/
-
-// @section l6470
-
-//#define HAVE_L6470DRIVER
-#if ENABLED(HAVE_L6470DRIVER)
-
- //#define X_IS_L6470
- #define X_MICROSTEPS 16 //number of microsteps
- #define X_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define X_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define X_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define X2_IS_L6470
- #define X2_MICROSTEPS 16 //number of microsteps
- #define X2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define X2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define X2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Y_IS_L6470
- #define Y_MICROSTEPS 16 //number of microsteps
- #define Y_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Y_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Y_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Y2_IS_L6470
- #define Y2_MICROSTEPS 16 //number of microsteps
- #define Y2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Y2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Y2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Z_IS_L6470
- #define Z_MICROSTEPS 16 //number of microsteps
- #define Z_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Z_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Z_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Z2_IS_L6470
- #define Z2_MICROSTEPS 16 //number of microsteps
- #define Z2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Z2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Z2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E0_IS_L6470
- #define E0_MICROSTEPS 16 //number of microsteps
- #define E0_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E0_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E0_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E1_IS_L6470
- #define E1_MICROSTEPS 16 //number of microsteps
- #define E1_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E1_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E1_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E2_IS_L6470
- #define E2_MICROSTEPS 16 //number of microsteps
- #define E2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E3_IS_L6470
- #define E3_MICROSTEPS 16 //number of microsteps
- #define E3_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E3_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E3_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
-#endif
-
-/**
- * TWI/I2C BUS
- *
- * This feature is an EXPERIMENTAL feature so it shall not be used on production
- * machines. Enabling this will allow you to send and receive I2C data from slave
- * devices on the bus.
- *
- * ; Example #1
- * ; This macro send the string "Marlin" to the slave device with address 0x63 (99)
- * ; It uses multiple M155 commands with one B arg
- * M155 A99 ; Target slave address
- * M155 B77 ; M
- * M155 B97 ; a
- * M155 B114 ; r
- * M155 B108 ; l
- * M155 B105 ; i
- * M155 B110 ; n
- * M155 S1 ; Send the current buffer
- *
- * ; Example #2
- * ; Request 6 bytes from slave device with address 0x63 (99)
- * M156 A99 B5
- *
- * ; Example #3
- * ; Example serial output of a M156 request
- * echo:i2c-reply: from:99 bytes:5 data:hello
- */
-
-// @section i2cbus
-
-//#define EXPERIMENTAL_I2CBUS
-
-#endif // CONFIGURATION_ADV_H
diff --git a/Marlin/example_configurations/Hephestos_2/Configuration.h b/Marlin/example_configurations/Hephestos_2/Configuration.h
deleted file mode 100644
index 060f4f4..0000000
--- a/Marlin/example_configurations/Hephestos_2/Configuration.h
+++ /dev/null
@@ -1,1321 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Configuration.h
- *
- * Basic settings such as:
- *
- * - Type of electronics
- * - Type of temperature sensor
- * - Printer geometry
- * - Endstop configuration
- * - LCD controller
- * - Extra features
- *
- * Advanced settings can be found in Configuration_adv.h
- *
- */
-#ifndef CONFIGURATION_H
-#define CONFIGURATION_H
-
-/**
- *
- * ***********************************
- * ** ATTENTION TO ALL DEVELOPERS **
- * ***********************************
- *
- * You must increment this version number for every significant change such as,
- * but not limited to: ADD, DELETE RENAME OR REPURPOSE any directive/option.
- *
- * Note: Update also Version.h !
- */
-#define CONFIGURATION_H_VERSION 010100
-
-//===========================================================================
-//============================= Getting Started =============================
-//===========================================================================
-
-/**
- * Here are some standard links for getting your machine calibrated:
- *
- * http://reprap.org/wiki/Calibration
- * http://youtu.be/wAL9d7FgInk
- * http://calculator.josefprusa.cz
- * http://reprap.org/wiki/Triffid_Hunter%27s_Calibration_Guide
- * http://www.thingiverse.com/thing:5573
- * https://sites.google.com/site/repraplogphase/calibration-of-your-reprap
- * http://www.thingiverse.com/thing:298812
- */
-
-//===========================================================================
-//============================= DELTA Printer ===============================
-//===========================================================================
-// For a Delta printer replace the configuration files with the files in the
-// example_configurations/delta directory.
-//
-
-//===========================================================================
-//============================= SCARA Printer ===============================
-//===========================================================================
-// For a Scara printer replace the configuration files with the files in the
-// example_configurations/SCARA directory.
-//
-
-// @section info
-
-// User-specified version info of this build to display in [Pronterface, etc] terminal window during
-// startup. Implementation of an idea by Prof Braino to inform user that any changes made to this
-// build by the user have been successfully uploaded into firmware.
-#define STRING_CONFIG_H_AUTHOR "@jbrazio" // Who made the changes.
-#define SHOW_BOOTSCREEN
-#define STRING_SPLASH_LINE1 SHORT_BUILD_VERSION // will be shown during boot in line 1
-#define STRING_SPLASH_LINE2 WEBSITE_URL // will be shown during boot in line 2
-
-//
-// *** VENDORS PLEASE READ *****************************************************
-//
-// Marlin now allow you to have a vendor boot image to be displayed on machine
-// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
-//
-// We suggest for you to take advantage of this new feature and keep the Marlin
-// boot image unmodified. For an example have a look at the bq Hephestos 2
-// example configuration folder.
-//
-#define SHOW_CUSTOM_BOOTSCREEN
-// @section machine
-
-// SERIAL_PORT selects which serial port should be used for communication with the host.
-// This allows the connection of wireless adapters (for instance) to non-default port pins.
-// Serial port 0 is still used by the Arduino bootloader regardless of this setting.
-// :[0,1,2,3,4,5,6,7]
-#define SERIAL_PORT 0
-
-// This determines the communication speed of the printer
-// :[2400,9600,19200,38400,57600,115200,250000]
-#define BAUDRATE 250000
-
-// Enable the Bluetooth serial interface on AT90USB devices
-//#define BLUETOOTH
-
-// The following define selects which electronics board you have.
-// Please choose the name from boards.h that matches your setup
-#ifndef MOTHERBOARD
- #define MOTHERBOARD BOARD_BQ_ZUM_MEGA_3D
-#endif
-
-// Optional custom name for your RepStrap or other custom machine
-// Displayed in the LCD "Ready" message
-#define CUSTOM_MACHINE_NAME "BQ Hephestos 2"
-
-// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
-// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
-#define MACHINE_UUID "8d083632-40c5-4649-85b8-43d9ae6c5d55" // BQ Hephestos 2 standard config
-
-// This defines the number of extruders
-// :[1,2,3,4]
-#define EXTRUDERS 1
-
-// For Cyclops or any "multi-extruder" that shares a single nozzle.
-//#define SINGLENOZZLE
-
-// A dual extruder that uses a single stepper motor
-// Don't forget to set SSDE_SERVO_ANGLES and HOTEND_OFFSET_X/Y/Z
-//#define SWITCHING_EXTRUDER
-#if ENABLED(SWITCHING_EXTRUDER)
- #define SWITCHING_EXTRUDER_SERVO_NR 0
- #define SWITCHING_EXTRUDER_SERVO_ANGLES { 0, 90 } // Angles for E0, E1
- //#define HOTEND_OFFSET_Z {0.0, 0.0}
-#endif
-
-/**
- * "Mixing Extruder"
- * - Adds a new code, M165, to set the current mix factors.
- * - Extends the stepping routines to move multiple steppers in proportion to the mix.
- * - Optional support for Repetier Host M163, M164, and virtual extruder.
- * - This implementation supports only a single extruder.
- * - Enable DIRECT_MIXING_IN_G1 for Pia Taubert's reference implementation
- */
-//#define MIXING_EXTRUDER
-#if ENABLED(MIXING_EXTRUDER)
- #define MIXING_STEPPERS 2 // Number of steppers in your mixing extruder
- #define MIXING_VIRTUAL_TOOLS 16 // Use the Virtual Tool method with M163 and M164
- //#define DIRECT_MIXING_IN_G1 // Allow ABCDHI mix factors in G1 movement commands
-#endif
-
-// Offset of the extruders (uncomment if using more than one and relying on firmware to position when changing).
-// The offset has to be X=0, Y=0 for the extruder 0 hotend (default extruder).
-// For the other hotends it is their distance from the extruder 0 hotend.
-//#define HOTEND_OFFSET_X {0.0, 20.00} // (in mm) for each extruder, offset of the hotend on the X axis
-//#define HOTEND_OFFSET_Y {0.0, 5.00} // (in mm) for each extruder, offset of the hotend on the Y axis
-
-//// The following define selects which power supply you have. Please choose the one that matches your setup
-// 1 = ATX
-// 2 = X-Box 360 203Watts (the blue wire connected to PS_ON and the red wire to VCC)
-// :{1:'ATX',2:'X-Box 360'}
-#define POWER_SUPPLY 1
-
-// Define this to have the electronics keep the power supply off on startup. If you don't know what this is leave it.
-//#define PS_DEFAULT_OFF
-
-// @section temperature
-
-//===========================================================================
-//============================= Thermal Settings ============================
-//===========================================================================
-//
-//--NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table
-//
-//// Temperature sensor settings:
-// -3 is thermocouple with MAX31855 (only for sensor 0)
-// -2 is thermocouple with MAX6675 (only for sensor 0)
-// -1 is thermocouple with AD595
-// 0 is not used
-// 1 is 100k thermistor - best choice for EPCOS 100k (4.7k pullup)
-// 2 is 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)
-// 3 is Mendel-parts thermistor (4.7k pullup)
-// 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !!
-// 5 is 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup)
-// 6 is 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup)
-// 7 is 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup)
-// 71 is 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup)
-// 8 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup)
-// 9 is 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup)
-// 10 is 100k RS thermistor 198-961 (4.7k pullup)
-// 11 is 100k beta 3950 1% thermistor (4.7k pullup)
-// 12 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed)
-// 13 is 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE"
-// 20 is the PT100 circuit found in the Ultimainboard V2.x
-// 60 is 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
-// 66 is 4.7M High Temperature thermistor from Dyze Design
-// 70 is the 100K thermistor found in the bq Hephestos 2
-//
-// 1k ohm pullup tables - This is not normal, you would have to have changed out your 4.7k for 1k
-// (but gives greater accuracy and more stable PID)
-// 51 is 100k thermistor - EPCOS (1k pullup)
-// 52 is 200k thermistor - ATC Semitec 204GT-2 (1k pullup)
-// 55 is 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup)
-//
-// 1047 is Pt1000 with 4k7 pullup
-// 1010 is Pt1000 with 1k pullup (non standard)
-// 147 is Pt100 with 4k7 pullup
-// 110 is Pt100 with 1k pullup (non standard)
-// 998 and 999 are Dummy Tables. They will ALWAYS read 25°C or the temperature defined below.
-// Use it for Testing or Development purposes. NEVER for production machine.
-//#define DUMMY_THERMISTOR_998_VALUE 25
-//#define DUMMY_THERMISTOR_999_VALUE 100
-// :{ '0': "Not used",'1':"100k / 4.7k - EPCOS",'2':"200k / 4.7k - ATC Semitec 204GT-2",'3':"Mendel-parts / 4.7k",'4':"10k !! do not use for a hotend. Bad resolution at high temp. !!",'5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)",'6':"100k / 4.7k EPCOS - Not as accurate as Table 1",'7':"100k / 4.7k Honeywell 135-104LAG-J01",'8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT",'9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1",'10':"100k / 4.7k RS 198-961",'11':"100k / 4.7k beta 3950 1%",'12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)",'13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'",'20':"PT100 (Ultimainboard V2.x)",'51':"100k / 1k - EPCOS",'52':"200k / 1k - ATC Semitec 204GT-2",'55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)",'60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950",'66':"Dyze Design 4.7M High Temperature thermistor",'70':"the 100K thermistor found in the bq Hephestos 2",'71':"100k / 4.7k Honeywell 135-104LAF-J01",'147':"Pt100 / 4.7k",'1047':"Pt1000 / 4.7k",'110':"Pt100 / 1k (non-standard)",'1010':"Pt1000 / 1k (non standard)",'-3':"Thermocouple + MAX31855 (only for sensor 0)",'-2':"Thermocouple + MAX6675 (only for sensor 0)",'-1':"Thermocouple + AD595",'998':"Dummy 1",'999':"Dummy 2" }
-#define TEMP_SENSOR_0 70
-#define TEMP_SENSOR_1 0
-#define TEMP_SENSOR_2 0
-#define TEMP_SENSOR_3 0
-#define TEMP_SENSOR_BED 0
-
-// This makes temp sensor 1 a redundant sensor for sensor 0. If the temperatures difference between these sensors is to high the print will be aborted.
-//#define TEMP_SENSOR_1_AS_REDUNDANT
-#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 10
-
-// Extruder temperature must be close to target for this long before M109 returns success
-#define TEMP_RESIDENCY_TIME 10 // (seconds)
-#define TEMP_HYSTERESIS 3 // (degC) range of +/- temperatures considered "close" to the target one
-#define TEMP_WINDOW 1 // (degC) Window around target to start the residency timer x degC early.
-
-// Bed temperature must be close to target for this long before M190 returns success
-#define TEMP_BED_RESIDENCY_TIME 0 // (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.
-
-// The minimal temperature defines the temperature below which the heater will not be enabled It is used
-// to check that the wiring to the thermistor is not broken.
-// Otherwise this would lead to the heater being powered on all the time.
-#define HEATER_0_MINTEMP 15
-//#define HEATER_1_MINTEMP 5
-//#define HEATER_2_MINTEMP 5
-//#define HEATER_3_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 250
-//#define HEATER_1_MAXTEMP 275
-//#define HEATER_2_MAXTEMP 275
-//#define HEATER_3_MAXTEMP 275
-//#define BED_MAXTEMP 150
-
-//===========================================================================
-//============================= PID Settings ================================
-//===========================================================================
-// PID Tuning Guide here: http://reprap.org/wiki/PID_Tuning
-
-// Comment the following line to disable PID and enable bang-bang.
-#define PIDTEMP
-#define BANG_MAX 255 // limits current to nozzle while in bang-bang mode; 255=full current
-#define PID_MAX BANG_MAX // limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
-#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
- //#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
- // Set/get with gcode: M301 E[extruder number, 0-2]
- #define PID_FUNCTIONAL_RANGE 250 // If the temperature difference between the target temperature and the actual temperature
- // is more than PID_FUNCTIONAL_RANGE then the PID will be shut off and the heater will be set to min/max.
- #define PID_INTEGRAL_DRIVE_MAX PID_MAX //limit for the integral term
- #define K1 0.95 //smoothing factor within the PID
-
- // Tuned PID values using M303
- #define DEFAULT_Kp 19.18
- #define DEFAULT_Ki 1.36
- #define DEFAULT_Kd 67.42
-
- // BQ firmware stock PID values
- //#define DEFAULT_Kp 10.7
- //#define DEFAULT_Ki 0.45
- //#define DEFAULT_Kd 3
-
-#endif // PIDTEMP
-
-//===========================================================================
-//============================= PID > Bed Temperature Control ===============
-//===========================================================================
-// Select PID or bang-bang with PIDTEMPBED. If bang-bang, BED_LIMIT_SWITCHING will enable hysteresis
-//
-// Uncomment this to enable PID on the bed. It uses the same frequency PWM as the extruder.
-// If your PID_dT is the default, and correct for your hardware/configuration, that means 7.689Hz,
-// which is fine for driving a square wave into a resistive load and does not significantly impact you FET heating.
-// This also works fine on a Fotek SSR-10DA Solid State Relay into a 250W heater.
-// If your configuration is significantly different than this and you don't understand the issues involved, you probably
-// shouldn't use bed PID until someone else verifies your hardware works.
-// If this is enabled, find your own PID constants below.
-//#define PIDTEMPBED
-
-//#define BED_LIMIT_SWITCHING
-
-// This sets the max power delivered to the bed, and replaces the HEATER_BED_DUTY_CYCLE_DIVIDER option.
-// all forms of bed control obey this (PID, bang-bang, bang-bang with hysteresis)
-// setting this to anything other than 255 enables a form of PWM to the bed just like HEATER_BED_DUTY_CYCLE_DIVIDER did,
-// so you shouldn't use it unless you are OK with PWM on your bed. (see the comment on enabling PIDTEMPBED)
-//#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current
-
-#if ENABLED(PIDTEMPBED)
-
- //#define PID_BED_DEBUG // Sends debug data to the serial port.
-
- #define PID_BED_INTEGRAL_DRIVE_MAX MAX_BED_POWER //limit for the integral term
-
- //120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
- //from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10)
- #define DEFAULT_bedKp 10.00
- #define DEFAULT_bedKi .023
- #define DEFAULT_bedKd 305.4
-
- //120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
- //from pidautotune
- //#define DEFAULT_bedKp 97.1
- //#define DEFAULT_bedKi 1.41
- //#define DEFAULT_bedKd 1675.16
-
- // FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles.
-#endif // PIDTEMPBED
-
-// @section extruder
-
-//this prevents dangerous Extruder moves, i.e. if the temperature is under the limit
-//can be software-disabled for whatever purposes by
-#define PREVENT_DANGEROUS_EXTRUDE
-//if PREVENT_DANGEROUS_EXTRUDE is on, you can still disable (uncomment) very long bits of extrusion separately.
-#define PREVENT_LENGTHY_EXTRUDE
-
-#define EXTRUDE_MINTEMP 170
-#define EXTRUDE_MAXLENGTH (X_MAX_LENGTH+Y_MAX_LENGTH) //prevent extrusion of very large distances.
-
-//===========================================================================
-//======================== Thermal Runaway Protection =======================
-//===========================================================================
-
-/**
- * Thermal Protection protects your printer from damage and fire if a
- * thermistor falls out or temperature sensors fail in any way.
- *
- * The issue: If a thermistor falls out or a temperature sensor fails,
- * Marlin can no longer sense the actual temperature. Since a disconnected
- * thermistor reads as a low temperature, the firmware will keep the heater on.
- *
- * If you get "Thermal Runaway" or "Heating failed" errors the
- * details can be tuned in Configuration_adv.h
- */
-
-#define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders
-//#define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed
-
-//===========================================================================
-//============================= Mechanical Settings =========================
-//===========================================================================
-
-// @section machine
-
-// Uncomment one of these options to enable CoreXY, CoreXZ, or CoreYZ kinematics
-//#define COREXY
-//#define COREXZ
-//#define COREYZ
-
-// Enable this option for Toshiba steppers
-//#define CONFIG_STEPPERS_TOSHIBA
-
-//===========================================================================
-//============================== Endstop Settings ===========================
-//===========================================================================
-
-// @section homing
-
-// Specify here all the endstop connectors that are connected to any endstop or probe.
-// Almost all printers will be using one per axis. Probes will use one or more of the
-// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
-#define USE_XMIN_PLUG
-#define USE_YMIN_PLUG
-#define USE_ZMIN_PLUG
-//#define USE_XMAX_PLUG
-//#define USE_YMAX_PLUG
-//#define USE_ZMAX_PLUG
-
-// coarse Endstop Settings
-#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
-
-#if DISABLED(ENDSTOPPULLUPS)
- // fine endstop settings: Individual pullups. will be ignored if ENDSTOPPULLUPS is defined
- //#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 // set to true to invert the logic of the endstop.
-#define Y_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Z_MIN_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
-#define X_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Y_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Z_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Z_MIN_PROBE_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
-
-//===========================================================================
-//============================= Z Probe Options =============================
-//===========================================================================
-
-//
-// Probe Type
-// Probes are sensors/switches that are activated / deactivated before/after use.
-//
-// Allen Key Probes, Servo Probes, Z-Sled Probes, FIX_MOUNTED_PROBE, etc.
-// You must activate one of these to use AUTO_BED_LEVELING_FEATURE below.
-//
-// Use M851 to set the Z probe vertical offset from the nozzle. Store with M500.
-//
-
-// A Fix-Mounted Probe either doesn't deploy or needs manual deployment.
-// For example an inductive probe, or a setup that uses the nozzle to probe.
-// An inductive probe must be deactivated to go below
-// its trigger-point if hardware endstops are active.
-#define FIX_MOUNTED_PROBE
-
-// The BLTouch probe emulates a servo probe.
-//#define BLTOUCH
-
-// Z Servo Probe, such as an endstop switch on a rotating arm.
-//#define Z_ENDSTOP_SERVO_NR 0
-//#define Z_SERVO_ANGLES {70,0} // Z Servo Deploy and Stow angles
-
-// Enable if you have a Z probe mounted on a sled like those designed by Charles Bell.
-//#define Z_PROBE_SLED
-//#define SLED_DOCKING_OFFSET 5 // The extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.
-
-// Z Probe to nozzle (X,Y) offset, relative to (0, 0).
-// X and Y offsets must be integers.
-//
-// In the following example the X and Y offsets are both positive:
-// #define X_PROBE_OFFSET_FROM_EXTRUDER 10
-// #define Y_PROBE_OFFSET_FROM_EXTRUDER 10
-//
-// +-- BACK ---+
-// | |
-// L | (+) P | R <-- probe (20,20)
-// E | | I
-// F | (-) N (+) | G <-- nozzle (10,10)
-// T | | H
-// | (-) | T
-// | |
-// O-- FRONT --+
-// (0,0)
-#define X_PROBE_OFFSET_FROM_EXTRUDER 34 // X offset: -left +right [of the nozzle]
-#define Y_PROBE_OFFSET_FROM_EXTRUDER 15 // Y offset: -front +behind [the nozzle]
-#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle]
-
-// X and Y axis travel speed (mm/m) between probes
-#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
-#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
-// Speed for the "accurate" probe of each point
-#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
-
-//
-// Allen Key Probe is defined in the Delta example configurations.
-//
-
-// Enable Z_MIN_PROBE_ENDSTOP to use _both_ a Z Probe and a Z-min-endstop on the same machine.
-// With this option the Z_MIN_PROBE_PIN will only be used for probing, never for homing.
-//
-// *** PLEASE READ ALL INSTRUCTIONS BELOW FOR SAFETY! ***
-//
-// To continue using the Z-min-endstop for homing, be sure to disable Z_SAFE_HOMING.
-// Example: To park the head outside the bed area when homing with G28.
-//
-// To use a separate Z probe, your board must define a Z_MIN_PROBE_PIN.
-//
-// For a servo-based Z probe, you must set up servo support below, including
-// NUM_SERVOS, Z_ENDSTOP_SERVO_NR and Z_SERVO_ANGLES.
-//
-// - RAMPS 1.3/1.4 boards may be able to use the 5V, GND, and Aux4->D32 pin.
-// - Use 5V for powered (usu. inductive) sensors.
-// - Otherwise connect:
-// - normally-closed switches to GND and D32.
-// - normally-open switches to 5V and D32.
-//
-// Normally-closed switches are advised and are the default.
-//
-// The Z_MIN_PROBE_PIN sets the Arduino pin to use. (See your board's pins file.)
-// Since the RAMPS Aux4->D32 pin maps directly to the Arduino D32 pin, D32 is the
-// default pin for all RAMPS-based boards. Some other boards map differently.
-// To set or change the pin for your board, edit the appropriate pins_XXXXX.h file.
-//
-// WARNING:
-// Setting the wrong pin may have unexpected and potentially disastrous consequences.
-// Use with caution and do your homework.
-//
-//#define Z_MIN_PROBE_ENDSTOP
-
-// Enable Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN to use the Z_MIN_PIN for your Z_MIN_PROBE.
-// The Z_MIN_PIN will then be used for both Z-homing and probing.
-#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
-
-// To use a probe you must enable one of the two options above!
-
-// This option disables the use of the Z_MIN_PROBE_PIN
-// To enable the Z probe pin but disable its use, uncomment the line below. This only affects a
-// Z probe switch if you have a separate Z min endstop also and have activated Z_MIN_PROBE_ENDSTOP above.
-// If you're using the Z MIN endstop connector for your Z probe, this has no effect.
-//#define DISABLE_Z_MIN_PROBE_ENDSTOP
-
-// Enable Z Probe Repeatability test to see how accurate your probe is
-//#define Z_MIN_PROBE_REPEATABILITY_TEST
-
-//
-// Probe Raise options provide clearance for the probe to deploy, stow, and travel.
-//
-#define Z_PROBE_DEPLOY_HEIGHT 5 // Raise to make room for the probe to deploy / stow
-#define Z_PROBE_TRAVEL_HEIGHT 2 // Raise between probing points.
-
-//
-// For M851 give a range for adjusting the Z probe offset
-//
-#define Z_PROBE_OFFSET_RANGE_MIN -2
-#define Z_PROBE_OFFSET_RANGE_MAX 0
-
-// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
-// :{0:'Low',1:'High'}
-#define X_ENABLE_ON 0
-#define Y_ENABLE_ON 0
-#define Z_ENABLE_ON 0
-#define E_ENABLE_ON 0 // For all extruders
-
-// Disables axis stepper immediately when it's not being used.
-// WARNING: When motors turn off there is a chance of losing position accuracy!
-#define DISABLE_X false
-#define DISABLE_Y false
-#define DISABLE_Z false
-// Warn on display about possibly reduced accuracy
-//#define DISABLE_REDUCED_ACCURACY_WARNING
-
-// @section extruder
-
-#define DISABLE_E false // For all extruders
-#define DISABLE_INACTIVE_EXTRUDER true //disable only inactive extruders and keep active extruder enabled
-
-// @section machine
-
-// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way.
-#define INVERT_X_DIR true
-#define INVERT_Y_DIR true
-#define INVERT_Z_DIR true
-
-// @section extruder
-
-// For direct drive extruder v9 set to true, for geared extruder set to false.
-#define INVERT_E0_DIR true
-#define INVERT_E1_DIR false
-#define INVERT_E2_DIR false
-#define INVERT_E3_DIR false
-
-// @section homing
-
-#define Z_HOMING_HEIGHT 5 // (in mm) Minimal z height before homing (G28) for Z clearance above the bed, clamps, ...
- // Be sure you have this distance over your Z_MAX_POS in case.
-
-// ENDSTOP SETTINGS:
-// Sets direction of endstops when homing; 1=MAX, -1=MIN
-// :[-1,1]
-#define X_HOME_DIR -1
-#define Y_HOME_DIR -1
-#define Z_HOME_DIR -1
-
-#define min_software_endstops true // If true, axis won't move to coordinates less than HOME_POS.
-#define max_software_endstops true // If true, axis won't move to coordinates greater than the defined lengths below.
-
-// @section machine
-
-// Travel limits after homing (units are in mm)
-#define X_MIN_POS 0
-#define Y_MIN_POS 0
-#define Z_MIN_POS 0
-#define X_MAX_POS 210
-#define Y_MAX_POS 297
-#define Z_MAX_POS 210
-
-//===========================================================================
-//========================= Filament Runout Sensor ==========================
-//===========================================================================
-//#define FILAMENT_RUNOUT_SENSOR // Uncomment for defining a filament runout sensor such as a mechanical or opto endstop to check the existence of filament
- // In RAMPS uses servo pin 2. Can be changed in pins file. For other boards pin definition should be made.
- // It is assumed that when logic high = filament available
- // when logic low = filament ran out
-#if ENABLED(FILAMENT_RUNOUT_SENSOR)
- const bool FIL_RUNOUT_INVERTING = false; // set to true to invert the logic of the sensor.
- #define ENDSTOPPULLUP_FIL_RUNOUT // Uncomment to use internal pullup for filament runout pins if the sensor is defined.
- #define FILAMENT_RUNOUT_SCRIPT "M600"
-#endif
-
-//===========================================================================
-//============================ Mesh Bed Leveling ============================
-//===========================================================================
-
-//#define MESH_BED_LEVELING // Enable mesh bed leveling.
-
-#if ENABLED(MESH_BED_LEVELING)
- #define MESH_INSET 10 // Mesh inset margin on print area
- #define MESH_NUM_X_POINTS 3 // Don't use more than 7 points per axis, implementation limited.
- #define MESH_NUM_Y_POINTS 3
- #define MESH_HOME_SEARCH_Z 4 // Z after Home, bed somewhere below but above 0.0.
-
- //#define MESH_G28_REST_ORIGIN // After homing all axes ('G28' or 'G28 XYZ') rest at origin [0,0,0]
-
- //#define MANUAL_BED_LEVELING // Add display menu option for bed leveling.
-
- #if ENABLED(MANUAL_BED_LEVELING)
- #define MBL_Z_STEP 0.025 // Step size while manually probing Z axis.
- #endif // MANUAL_BED_LEVELING
-
-#endif // MESH_BED_LEVELING
-
-//===========================================================================
-//============================ Bed Auto Leveling ============================
-//===========================================================================
-
-// @section bedlevel
-
-#define AUTO_BED_LEVELING_FEATURE // Delete the comment to enable (remove // at the start of the line)
-
-// Enable this feature to get detailed logging of G28, G29, M48, etc.
-// Logging is off by default. Enable this logging feature with 'M111 S32'.
-// NOTE: Requires a huge amount of PROGMEM.
-//#define DEBUG_LEVELING_FEATURE
-
-#if ENABLED(AUTO_BED_LEVELING_FEATURE)
-
- // There are 2 different ways to specify probing locations:
- //
- // - "grid" mode
- // Probe several points in a rectangular grid.
- // You specify the rectangle and the density of sample points.
- // This mode is preferred because there are more measurements.
- //
- // - "3-point" mode
- // Probe 3 arbitrary points on the bed (that aren't collinear)
- // You specify the XY coordinates of all 3 points.
-
- // Enable this to sample the bed in a grid (least squares solution).
- // Note: this feature generates 10KB extra code size.
- #define AUTO_BED_LEVELING_GRID
-
- #if ENABLED(AUTO_BED_LEVELING_GRID)
-
- #define LEFT_PROBE_BED_POSITION X_MIN_POS + X_PROBE_OFFSET_FROM_EXTRUDER
- #define RIGHT_PROBE_BED_POSITION X_MAX_POS - (X_PROBE_OFFSET_FROM_EXTRUDER)
- #define FRONT_PROBE_BED_POSITION Y_MIN_POS + Y_PROBE_OFFSET_FROM_EXTRUDER
- #define BACK_PROBE_BED_POSITION Y_MAX_POS - (Y_PROBE_OFFSET_FROM_EXTRUDER)
-
- #define MIN_PROBE_EDGE 10 // The Z probe minimum square sides can be no smaller than this.
-
- // Set the number of grid points per dimension.
- // You probably don't need more than 3 (squared=9).
- #define AUTO_BED_LEVELING_GRID_POINTS 2
-
- #else // !AUTO_BED_LEVELING_GRID
-
- // Arbitrary points to probe.
- // A simple cross-product is used to estimate the plane of the bed.
- #define ABL_PROBE_PT_1_X X_MIN_POS + X_PROBE_OFFSET_FROM_EXTRUDER
- #define ABL_PROBE_PT_1_Y Y_MIN_POS + Y_PROBE_OFFSET_FROM_EXTRUDER
- #define ABL_PROBE_PT_2_X X_MAX_POS - (X_PROBE_OFFSET_FROM_EXTRUDER)
- #define ABL_PROBE_PT_2_Y Y_MIN_POS + Y_PROBE_OFFSET_FROM_EXTRUDER
- #define ABL_PROBE_PT_3_X ((X_MIN_POS + X_MAX_POS) / 2)
- #define ABL_PROBE_PT_3_Y Y_MAX_POS - (Y_PROBE_OFFSET_FROM_EXTRUDER)
-
- #endif // !AUTO_BED_LEVELING_GRID
-
- //#define Z_PROBE_END_SCRIPT "G1 Z10 F12000\nG1 X15 Y330\nG1 Z0.5\nG1 Z10" // These commands will be executed in the end of G29 routine.
- // Useful to retract a deployable Z probe.
-
- // If you've enabled AUTO_BED_LEVELING_FEATURE and are using the Z Probe for Z Homing,
- // it is highly recommended you also enable Z_SAFE_HOMING below!
-
-#endif // AUTO_BED_LEVELING_FEATURE
-
-
-// @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 // Distance between the nozzle to printbed after homing
-
-// Use "Z Safe Homing" to avoid homing with a Z probe outside the bed area.
-//
-// With this feature enabled:
-//
-// - Allow Z homing only after X and Y homing AND stepper drivers still enabled.
-// - If stepper drivers time out, it will need X and Y homing again before Z homing.
-// - Move the Z probe (or nozzle) to a defined XY point before Z Homing when homing all axes (G28).
-// - Prevent Z homing when the Z probe is outside bed area.
-#define Z_SAFE_HOMING
-
-#if ENABLED(Z_SAFE_HOMING)
- #define Z_SAFE_HOMING_X_POINT ((X_MIN_POS + X_MAX_POS) / 2) // X point for Z homing when homing all axis (G28).
- #define Z_SAFE_HOMING_Y_POINT ((Y_MIN_POS + Y_MAX_POS) / 2) // Y point for Z homing when homing all axis (G28).
-#endif
-
-// Homing speeds (mm/m)
-#define HOMING_FEEDRATE_XY (150*60)
-#define HOMING_FEEDRATE_Z 200
-
-//
-// MOVEMENT SETTINGS
-// @section motion
-//
-
-// default settings
-
-#define DEFAULT_AXIS_STEPS_PER_UNIT {160, 160, 8000, 210.02} // Steps per unit
-#define DEFAULT_MAX_FEEDRATE {250, 250, 2, 200} // mm/sec
-#define DEFAULT_MAX_ACCELERATION {1000, 1000, 20, 1000} // X, Y, Z, E max start speed for accelerated moves
-
-#define DEFAULT_ACCELERATION 1000 // X, Y, Z and E acceleration in mm/s^2 for printing moves
-#define DEFAULT_RETRACT_ACCELERATION 3000 // E acceleration in mm/s^2 for retracts
-#define DEFAULT_TRAVEL_ACCELERATION 1000 // X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
-
-// The speed change that does not require acceleration (i.e. the software might assume it can be done instantaneously)
-#define DEFAULT_XYJERK 20.0 // (mm/sec)
-#define DEFAULT_ZJERK 0.4 // (mm/sec)
-#define DEFAULT_EJERK 2.0 // (mm/sec)
-
-
-//=============================================================================
-//============================= Additional Features ===========================
-//=============================================================================
-
-// @section extras
-
-//
-// EEPROM
-//
-// The microcontroller can store settings in the EEPROM, e.g. max velocity...
-// M500 - stores parameters in EEPROM
-// M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily).
-// M502 - reverts to the default "factory settings". You still need to store them in EEPROM afterwards if you want to.
-//define this to enable EEPROM support
-#define EEPROM_SETTINGS
-
-#if ENABLED(EEPROM_SETTINGS)
- // To disable EEPROM Serial responses and decrease program space by ~1700 byte: comment this out:
- #define EEPROM_CHITCHAT // Please keep turned on if you can.
-#endif
-
-//
-// Host Keepalive
-//
-// When enabled Marlin will send a busy status message to the host
-// every couple of seconds when it can't accept commands.
-//
-#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.
-
-//
-// M100 Free Memory Watcher
-//
-//#define M100_FREE_MEMORY_WATCHER // uncomment to add the M100 Free Memory Watcher for debug purpose
-
-//
-// G20/G21 Inch mode support
-//
-//#define INCH_MODE_SUPPORT
-
-//
-// M149 Set temperature units support
-//
-//#define TEMPERATURE_UNITS_SUPPORT
-
-// @section temperature
-
-// Preheat Constants
-#define PREHEAT_1_TEMP_HOTEND 210
-#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
-
-//
-// Nozzle Park -- EXPERIMENTAL
-//
-// When enabled allows the user to define a special XYZ position, inside the
-// machine's topology, to park the nozzle when idle or when receiving the G27
-// command.
-//
-// The "P" paramenter controls what is the action applied to the Z axis:
-// P0: (Default) If current Z-pos is lower than Z-park then the nozzle will
-// be raised to reach Z-park height.
-//
-// P1: No matter the current Z-pos, the nozzle will be raised/lowered to
-// reach Z-park height.
-//
-// P2: The nozzle height will be raised by Z-park amount but never going over
-// the machine's limit of Z_MAX_POS.
-//
-//#define NOZZLE_PARK_FEATURE
-
-#if ENABLED(NOZZLE_PARK_FEATURE)
- // Specify a park position as { X, Y, Z }
- #define NOZZLE_PARK_POINT { (X_MIN_POS + 10), (Y_MAX_POS - 10), 20 }
-#endif
-
-//
-// Clean Nozzle Feature -- EXPERIMENTAL
-//
-// When enabled allows the user to send G12 to start the nozzle cleaning
-// process, the G-Code accepts two parameters:
-// "P" for pattern selection
-// "S" for defining the number of strokes/repetitions
-//
-// Available list of patterns:
-// P0: This is the default pattern, this process requires a sponge type
-// material at a fixed bed location, the cleaning process is based on
-// "strokes" i.e. back-and-forth movements between the starting and end
-// points.
-//
-// P1: This starts a zig-zag pattern between (X0, Y0) and (X1, Y1), "T"
-// defines the number of zig-zag triangles to be done. "S" defines the
-// number of strokes aka one back-and-forth movement. As an example
-// sending "G12 P1 S1 T3" will execute:
-//
-// --
-// | (X0, Y1) | /\ /\ /\ | (X1, Y1)
-// | | / \ / \ / \ |
-// A | | / \ / \ / \ |
-// | | / \ / \ / \ |
-// | (X0, Y0) | / \/ \/ \ | (X1, Y0)
-// -- +--------------------------------+
-// |________|_________|_________|
-// T1 T2 T3
-//
-// Caveats: End point Z should use the same value as Start point Z.
-//
-// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
-// may change to add new functionality like different wipe patterns.
-//
-//#define NOZZLE_CLEAN_FEATURE
-
-#if ENABLED(NOZZLE_CLEAN_FEATURE)
- // Number of pattern repetitions
- #define NOZZLE_CLEAN_STROKES 12
-
- // Specify positions as { X, Y, Z }
- #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
- #define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
-
- // Moves the nozzle to the initial position
- #define NOZZLE_CLEAN_GOBACK
-#endif
-
-//
-// Print job timer
-//
-// Enable this option to automatically start and stop the
-// print job timer when M104/M109/M190 commands are received.
-// M104 (extruder without wait) - high temp = none, low temp = stop timer
-// M109 (extruder with wait) - high temp = start timer, low temp = stop timer
-// M190 (bed with wait) - high temp = start timer, low temp = none
-//
-// In all cases the timer can be started and stopped using
-// the following commands:
-//
-// - M75 - Start the print job timer
-// - M76 - Pause the print job timer
-// - M77 - Stop the print job timer
-#define PRINTJOB_TIMER_AUTOSTART
-
-//
-// Print Counter
-//
-// When enabled Marlin will keep track of some print statistical data such as:
-// - Total print jobs
-// - Total successful print jobs
-// - Total failed print jobs
-// - Total time printing
-//
-// This information can be viewed by the M78 command.
-#define PRINTCOUNTER
-
-//=============================================================================
-//============================= LCD and SD support ============================
-//=============================================================================
-
-// @section lcd
-
-//
-// LCD LANGUAGE
-//
-// Here you may choose the language used by Marlin on the LCD menus, the following
-// list of languages are available:
-// en, an, bg, ca, cn, cz, de, el, el-gr, es, eu, fi, fr, gl, hr, it,
-// kana, kana_utf8, nl, pl, pt, pt_utf8, pt-br, pt-br_utf8, ru, test
-//
-// :{'en':'English','an':'Aragonese','bg':'Bulgarian','ca':'Catalan','cn':'Chinese','cz':'Czech','de':'German','el':'Greek','el-gr':'Greek (Greece)','es':'Spanish','eu':'Basque-Euskera','fi':'Finnish','fr':'French','gl':'Galician','hr':'Croatian','it':'Italian','kana':'Japanese','kana_utf8':'Japanese (UTF8)','nl':'Dutch','pl':'Polish','pt':'Portuguese','pt-br':'Portuguese (Brazilian)','pt-br_utf8':'Portuguese (Brazilian UTF8)','pt_utf8':'Portuguese (UTF8)','ru':'Russian','test':'TEST'}
-//
-#define LCD_LANGUAGE en
-
-//
-// LCD Character Set
-//
-// Note: This option is NOT applicable to Graphical Displays.
-//
-// All character-based LCD's provide ASCII plus one of these
-// language extensions:
-//
-// - JAPANESE ... the most common
-// - WESTERN ... with more accented characters
-// - CYRILLIC ... for the Russian language
-//
-// To determine the language extension installed on your controller:
-//
-// - Compile and upload with LCD_LANGUAGE set to 'test'
-// - Click the controller to view the LCD menu
-// - The LCD will display Japanese, Western, or Cyrillic text
-//
-// See https://github.com/MarlinFirmware/Marlin/wiki/LCD-Language
-//
-// :['JAPANESE','WESTERN','CYRILLIC']
-//
-#define DISPLAY_CHARSET_HD44780 JAPANESE
-
-//
-// LCD TYPE
-//
-// You may choose ULTRA_LCD if you have character based LCD with 16x2, 16x4, 20x2,
-// 20x4 char/lines or DOGLCD for the full graphics display with 128x64 pixels
-// (ST7565R family). (This option will be set automatically for certain displays.)
-//
-// IMPORTANT NOTE: The U8glib library is required for Full Graphic Display!
-// https://github.com/olikraus/U8glib_Arduino
-//
-//#define ULTRA_LCD // Character based
-//#define DOGLCD // Full graphics display
-
-//
-// SD CARD
-//
-// SD Card support is disabled by default. If your controller has an SD slot,
-// you must uncomment the following option or it won't work.
-//
-#define SDSUPPORT
-
-//
-// SD CARD: SPI SPEED
-//
-// Uncomment ONE of the following items to use a slower SPI transfer
-// speed. This is usually required if you're getting volume init errors.
-//
-//#define SPI_SPEED SPI_HALF_SPEED
-//#define SPI_SPEED SPI_QUARTER_SPEED
-//#define SPI_SPEED SPI_EIGHTH_SPEED
-
-//
-// SD CARD: ENABLE CRC
-//
-// Use CRC checks and retries on the SD communication.
-//
-#define SD_CHECK_AND_RETRY
-
-//
-// ENCODER SETTINGS
-//
-// This option overrides the default number of encoder pulses needed to
-// produce one step. Should be increased for high-resolution encoders.
-//
-//#define ENCODER_PULSES_PER_STEP 1
-
-//
-// Use this option to override the number of step signals required to
-// move between next/prev menu items.
-//
-//#define ENCODER_STEPS_PER_MENU_ITEM 5
-
-/**
- * Encoder Direction Options
- *
- * Test your encoder's behavior first with both options disabled.
- *
- * Reversed Value Edit and Menu Nav? Enable REVERSE_ENCODER_DIRECTION.
- * Reversed Menu Navigation only? Enable REVERSE_MENU_DIRECTION.
- * Reversed Value Editing only? Enable BOTH options.
- */
-
-//
-// This option reverses the encoder direction everywhere
-//
-// Set this option if CLOCKWISE causes values to DECREASE
-//
-//#define REVERSE_ENCODER_DIRECTION
-
-//
-// This option reverses the encoder direction for navigating LCD menus.
-//
-// If CLOCKWISE normally moves DOWN this makes it go UP.
-// If CLOCKWISE normally moves UP this makes it go DOWN.
-//
-//#define REVERSE_MENU_DIRECTION
-
-//
-// Individual Axis Homing
-//
-// Add individual axis homing items (Home X, Home Y, and Home Z) to the LCD menu.
-//
-//#define INDIVIDUAL_AXIS_HOMING_MENU
-
-//
-// SPEAKER/BUZZER
-//
-// If you have a speaker that can produce tones, enable it here.
-// By default Marlin assumes you have a buzzer with a fixed frequency.
-//
-//#define SPEAKER
-
-//
-// The duration and frequency for the UI feedback sound.
-// Set these to 0 to disable audio feedback in the LCD menus.
-//
-// Note: Test audio output with the G-Code:
-// M300 S P
-//
-//#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 100
-//#define LCD_FEEDBACK_FREQUENCY_HZ 1000
-
-//
-// CONTROLLER TYPE: Standard
-//
-// Marlin supports a wide variety of controllers.
-// Enable one of the following options to specify your controller.
-//
-
-//
-// ULTIMAKER Controller.
-//
-//#define ULTIMAKERCONTROLLER
-
-//
-// ULTIPANEL as seen on Thingiverse.
-//
-//#define ULTIPANEL
-
-//
-// Cartesio UI
-// http://mauk.cc/webshop/cartesio-shop/electronics/user-interface
-//
-//#define CARTESIO_UI
-
-//
-// PanelOne from T3P3 (via RAMPS 1.4 AUX2/AUX3)
-// http://reprap.org/wiki/PanelOne
-//
-//#define PANEL_ONE
-
-//
-// MaKr3d Makr-Panel with graphic controller and SD support.
-// http://reprap.org/wiki/MaKr3d_MaKrPanel
-//
-//#define MAKRPANEL
-
-//
-// ReprapWorld Graphical LCD
-// https://reprapworld.com/?products_details&products_id/1218
-//
-//#define REPRAPWORLD_GRAPHICAL_LCD
-
-//
-// Activate one of these if you have a Panucatt Devices
-// Viki 2.0 or mini Viki with Graphic LCD
-// http://panucatt.com
-//
-//#define VIKI2
-//#define miniVIKI
-
-//
-// Adafruit ST7565 Full Graphic Controller.
-// https://github.com/eboston/Adafruit-ST7565-Full-Graphic-Controller/
-//
-//#define ELB_FULL_GRAPHIC_CONTROLLER
-
-//
-// RepRapDiscount Smart Controller.
-// http://reprap.org/wiki/RepRapDiscount_Smart_Controller
-//
-// Note: Usually sold with a white PCB.
-//
-//#define REPRAP_DISCOUNT_SMART_CONTROLLER
-
-//
-// GADGETS3D G3D LCD/SD Controller
-// http://reprap.org/wiki/RAMPS_1.3/1.4_GADGETS3D_Shield_with_Panel
-//
-// Note: Usually sold with a blue PCB.
-//
-//#define G3D_PANEL
-
-//
-// RepRapDiscount FULL GRAPHIC Smart Controller
-// http://reprap.org/wiki/RepRapDiscount_Full_Graphic_Smart_Controller
-//
-//#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
-
-//
-// MakerLab Mini Panel with graphic
-// controller and SD support - http://reprap.org/wiki/Mini_panel
-//
-//#define MINIPANEL
-
-//
-// RepRapWorld REPRAPWORLD_KEYPAD v1.1
-// http://reprapworld.com/?products_details&products_id=202&cPath=1591_1626
-//
-// REPRAPWORLD_KEYPAD_MOVE_STEP sets how much should the robot move when a key
-// is pressed, a value of 10.0 means 10mm per click.
-//
-//#define REPRAPWORLD_KEYPAD
-//#define REPRAPWORLD_KEYPAD_MOVE_STEP 1.0
-
-//
-// RigidBot Panel V1.0
-// http://www.inventapart.com/
-//
-//#define RIGIDBOT_PANEL
-
-//
-// BQ LCD Smart Controller shipped by
-// default with the BQ Hephestos 2 and Witbox 2.
-//
-#define BQ_LCD_SMART_CONTROLLER
-
-//
-// CONTROLLER TYPE: I2C
-//
-// Note: These controllers require the installation of Arduino's LiquidCrystal_I2C
-// library. For more info: https://github.com/kiyoshigawa/LiquidCrystal_I2C
-//
-
-//
-// Elefu RA Board Control Panel
-// http://www.elefu.com/index.php?route=product/product&product_id=53
-//
-//#define RA_CONTROL_PANEL
-
-//
-// Sainsmart YW Robot (LCM1602) LCD Display
-//
-//#define LCD_I2C_SAINSMART_YWROBOT
-
-//
-// Generic LCM1602 LCD adapter
-//
-//#define LCM1602
-
-//
-// PANELOLU2 LCD with status LEDs,
-// separate encoder and click inputs.
-//
-// Note: This controller requires Arduino's LiquidTWI2 library v1.2.3 or later.
-// For more info: https://github.com/lincomatic/LiquidTWI2
-//
-// Note: The PANELOLU2 encoder click input can either be directly connected to
-// a pin (if BTN_ENC defined to != -1) or read through I2C (when BTN_ENC == -1).
-//
-//#define LCD_I2C_PANELOLU2
-
-//
-// Panucatt VIKI LCD with status LEDs,
-// integrated click & L/R/U/D buttons, separate encoder inputs.
-//
-//#define LCD_I2C_VIKI
-
-//
-// SSD1306 OLED full graphics generic display
-//
-//#define U8GLIB_SSD1306
-
-//
-// SAV OLEd LCD module support using either SSD1306 or SH1106 based LCD modules
-//
-//#define SAV_3DGLCD
-#if ENABLED(SAV_3DGLCD)
- //#define U8GLIB_SSD1306
- #define U8GLIB_SH1106
-#endif
-
-//
-// CONTROLLER TYPE: Shift register panels
-//
-// 2 wire Non-latching LCD SR from https://goo.gl/aJJ4sH
-// LCD configuration: http://reprap.org/wiki/SAV_3D_LCD
-//
-//#define SAV_3DLCD
-
-//=============================================================================
-//=============================== Extra Features ==============================
-//=============================================================================
-
-// @section extras
-
-// Increase the FAN PWM frequency. Removes the PWM noise but increases heating in the FET/Arduino
-//#define FAST_PWM_FAN
-
-// Use software PWM to drive the fan, as for the heaters. This uses a very low frequency
-// which is not as annoying as with the hardware PWM. On the other hand, if this frequency
-// is too low, you should also increment SOFT_PWM_SCALE.
-#define FAN_SOFT_PWM
-
-// Incrementing this by 1 will double the software PWM frequency,
-// affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
-// However, control resolution will be halved for each increment;
-// at zero value, there are 128 effective control positions.
-#define SOFT_PWM_SCALE 0
-
-// Temperature status LEDs that display the hotend and bed temperature.
-// If all hotends and bed temperature and temperature setpoint are < 54C then the BLUE led is on.
-// Otherwise the RED led is on. There is 1C hysteresis.
-//#define TEMP_STAT_LEDS
-
-// M240 Triggers a camera by emulating a Canon RC-1 Remote
-// Data from: http://www.doc-diy.net/photo/rc-1_hacked/
-//#define PHOTOGRAPH_PIN 23
-
-// SkeinForge sends the wrong arc g-codes when using Arc Point as fillet procedure
-//#define SF_ARC_FIX
-
-// Support for the BariCUDA Paste Extruder.
-//#define BARICUDA
-
-//define BlinkM/CyzRgb Support
-//#define BLINKM
-
-/*********************************************************************\
-* R/C SERVO support
-* Sponsored by TrinityLabs, Reworked by codexmas
-**********************************************************************/
-
-// Number of servos
-//
-// If you select a configuration below, this will receive a default value and does not need to be set manually
-// set it manually if you have more servos than extruders and wish to manually control some
-// leaving it undefined or defining as 0 will disable the servo subsystem
-// If unsure, leave commented / disabled
-//
-//#define NUM_SERVOS 3 // Servo index starts with 0 for M280 command
-
-// Delay (in microseconds) before the next move will start, to give the servo time to reach its target angle.
-// 300ms is a good value but you can try less delay.
-// If the servo can't reach the requested position, increase it.
-#define SERVO_DELAY 300
-
-// Servo deactivation
-//
-// With this option servos are powered only during movement, then turned off to prevent jitter.
-//#define DEACTIVATE_SERVOS_AFTER_MOVE
-
-/**********************************************************************\
- * Support for a filament diameter sensor
- * Also allows adjustment of diameter at print time (vs at slicing)
- * Single extruder only at this point (extruder 0)
- *
- * Motherboards
- * 34 - RAMPS1.4 - uses Analog input 5 on the AUX2 connector
- * 81 - Printrboard - Uses Analog input 2 on the Exp1 connector (version B,C,D,E)
- * 301 - Rambo - uses Analog input 3
- * Note may require analog pins to be defined for different motherboards
- **********************************************************************/
-// Uncomment below to enable
-//#define FILAMENT_WIDTH_SENSOR
-
-#define DEFAULT_NOMINAL_FILAMENT_DIA 3.00 //Enter the diameter (in mm) of the filament generally used (3.0 mm or 1.75 mm) - this is then used in the slicer software. Used for sensor reading validation
-
-#if ENABLED(FILAMENT_WIDTH_SENSOR)
- #define FILAMENT_SENSOR_EXTRUDER_NUM 0 //The number of the extruder that has the filament sensor (0,1,2)
- #define MEASUREMENT_DELAY_CM 14 //measurement delay in cm. This is the distance from filament sensor to middle of barrel
-
- #define MEASURED_UPPER_LIMIT 2.00 //upper limit factor used for sensor reading validation in mm
- #define MEASURED_LOWER_LIMIT 1.60 //lower limit factor for sensor reading validation in mm
- #define MAX_MEASUREMENT_DELAY 20 //delay buffer size in bytes (1 byte = 1cm)- limits maximum measurement delay allowable (must be larger than MEASUREMENT_DELAY_CM and lower number saves RAM)
-
- #define DEFAULT_MEASURED_FILAMENT_DIA DEFAULT_NOMINAL_FILAMENT_DIA //set measured to nominal initially
-
- //When using an LCD, uncomment the line below to display the Filament sensor data on the last line instead of status. Status will appear for 5 sec.
- //#define FILAMENT_LCD_DISPLAY
-#endif
-
-#endif // CONFIGURATION_H
diff --git a/Marlin/example_configurations/Hephestos_2/Configuration_adv.h b/Marlin/example_configurations/Hephestos_2/Configuration_adv.h
deleted file mode 100644
index eeb11da..0000000
--- a/Marlin/example_configurations/Hephestos_2/Configuration_adv.h
+++ /dev/null
@@ -1,799 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Configuration_adv.h
- *
- * Advanced settings.
- * Only change these if you know exactly what you're doing.
- * Some of these settings can damage your printer if improperly set!
- *
- * Basic settings can be found in Configuration.h
- *
- */
-#ifndef CONFIGURATION_ADV_H
-#define CONFIGURATION_ADV_H
-
-/**
- *
- * ***********************************
- * ** ATTENTION TO ALL DEVELOPERS **
- * ***********************************
- *
- * You must increment this version number for every significant change such as,
- * but not limited to: ADD, DELETE RENAME OR REPURPOSE any directive/option.
- *
- * Note: Update also Version.h !
- */
-#define CONFIGURATION_ADV_H_VERSION 010100
-
-// @section temperature
-
-//===========================================================================
-//=============================Thermal Settings ============================
-//===========================================================================
-
-#if DISABLED(PIDTEMPBED)
- #define BED_CHECK_INTERVAL 5000 // ms between checks in bang-bang control
- #if ENABLED(BED_LIMIT_SWITCHING)
- #define BED_HYSTERESIS 2 // Only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS
- #endif
-#endif
-
-/**
- * Thermal Protection protects your printer from damage and fire if a
- * thermistor falls out or temperature sensors fail in any way.
- *
- * The issue: If a thermistor falls out or a temperature sensor fails,
- * Marlin can no longer sense the actual temperature. Since a disconnected
- * thermistor reads as a low temperature, the firmware will keep the heater on.
- *
- * The solution: Once the temperature reaches the target, start observing.
- * If the temperature stays too far below the target (hysteresis) for too long (period),
- * the firmware will halt the machine as a safety precaution.
- *
- * If you get false positives for "Thermal Runaway" increase THERMAL_PROTECTION_HYSTERESIS and/or THERMAL_PROTECTION_PERIOD
- */
-#if ENABLED(THERMAL_PROTECTION_HOTENDS)
- #define THERMAL_PROTECTION_PERIOD 40 // Seconds
- #define THERMAL_PROTECTION_HYSTERESIS 4 // Degrees Celsius
-
- /**
- * Whenever an M104 or M109 increases the target temperature the firmware will wait for the
- * WATCH_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_TEMP_INCREASE
- * degrees, the machine is halted, requiring a hard reset. This test restarts with any M104/M109,
- * but only if the current temperature is far enough below the target for a reliable test.
- *
- * If you get false positives for "Heating failed" increase WATCH_TEMP_PERIOD and/or decrease WATCH_TEMP_INCREASE
- * WATCH_TEMP_INCREASE should not be below 2.
- */
- #define WATCH_TEMP_PERIOD 20 // Seconds
- #define WATCH_TEMP_INCREASE 2 // Degrees Celsius
-#endif
-
-/**
- * Thermal Protection parameters for the bed are just as above for hotends.
- */
-#if ENABLED(THERMAL_PROTECTION_BED)
- #define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
- #define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
-
- /**
- * Whenever an M140 or M190 increases the target temperature the firmware will wait for the
- * WATCH_BED_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_BED_TEMP_INCREASE
- * degrees, the machine is halted, requiring a hard reset. This test restarts with any M140/M190,
- * but only if the current temperature is far enough below the target for a reliable test.
- *
- * If you get too many "Heating failed" errors, increase WATCH_BED_TEMP_PERIOD and/or decrease
- * WATCH_BED_TEMP_INCREASE. (WATCH_BED_TEMP_INCREASE should not be below 2.)
- */
- #define WATCH_BED_TEMP_PERIOD 60 // Seconds
- #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
-#endif
-
-#if ENABLED(PIDTEMP)
- // this adds an experimental additional term to the heating power, proportional to the extrusion speed.
- // if Kc is chosen well, the additional required power due to increased melting should be compensated.
- //#define PID_EXTRUSION_SCALING
- #if ENABLED(PID_EXTRUSION_SCALING)
- #define DEFAULT_Kc (100) //heating power=Kc*(e_speed)
- #define LPQ_MAX_LEN 50
- #endif
-#endif
-
-/**
- * Automatic Temperature:
- * The hotend target temperature is calculated by all the buffered lines of gcode.
- * The maximum buffered steps/sec of the extruder motor is called "se".
- * Start autotemp mode with M109 S B F
- * The target temperature is set to mintemp+factor*se[steps/sec] and is limited by
- * mintemp and maxtemp. Turn this off by executing M109 without F*
- * Also, if the temperature is set to a value below mintemp, it will not be changed by autotemp.
- * On an Ultimaker, some initial testing worked with M109 S215 B260 F1 in the start.gcode
- */
-#define AUTOTEMP
-#if ENABLED(AUTOTEMP)
- #define AUTOTEMP_OLDWEIGHT 0.98
-#endif
-
-//Show Temperature ADC value
-//The M105 command return, besides traditional information, the ADC value read from temperature sensors.
-//#define SHOW_TEMP_ADC_VALUES
-
-/**
- * High Temperature Thermistor Support
- *
- * Thermistors able to support high temperature tend to have a hard time getting
- * good readings at room and lower temperatures. This means HEATER_X_RAW_LO_TEMP
- * will probably be caught when the heating element first turns on during the
- * preheating process, which will trigger a min_temp_error as a safety measure
- * and force stop everything.
- * To circumvent this limitation, we allow for a preheat time (during which,
- * min_temp_error won't be triggered) and add a min_temp buffer to handle
- * aberrant readings.
- *
- * If you want to enable this feature for your hotend thermistor(s)
- * uncomment and set values > 0 in the constants below
- */
-
-// The number of consecutive low temperature errors that can occur
-// before a min_temp_error is triggered. (Shouldn't be more than 10.)
-//#define MAX_CONSECUTIVE_LOW_TEMPERATURE_ERROR_ALLOWED 0
-
-// The number of milliseconds a hotend will preheat before starting to check
-// the temperature. This value should NOT be set to the time it takes the
-// hot end to reach the target temperature, but the time it takes to reach
-// the minimum temperature your thermistor can read. The lower the better/safer.
-// This shouldn't need to be more than 30 seconds (30000)
-//#define MILLISECONDS_PREHEAT_TIME 0
-
-// @section extruder
-
-// extruder run-out prevention.
-//if the machine is idle, and the temperature over MINTEMP, every couple of SECONDS some filament is extruded
-//#define EXTRUDER_RUNOUT_PREVENT
-#define EXTRUDER_RUNOUT_MINTEMP 190
-#define EXTRUDER_RUNOUT_SECONDS 30
-#define EXTRUDER_RUNOUT_ESTEPS 14 // mm filament
-#define EXTRUDER_RUNOUT_SPEED 1500 // extrusion speed
-#define EXTRUDER_RUNOUT_EXTRUDE 100
-
-// @section temperature
-
-//These defines help to calibrate the AD595 sensor in case you get wrong temperature measurements.
-//The measured temperature is defined as "actualTemp = (measuredTemp * TEMP_SENSOR_AD595_GAIN) + TEMP_SENSOR_AD595_OFFSET"
-#define TEMP_SENSOR_AD595_OFFSET 0.0
-#define TEMP_SENSOR_AD595_GAIN 1.0
-
-//This is for controlling a fan to cool down the stepper drivers
-//it will turn on when any driver is enabled
-//and turn off after the set amount of seconds from last driver being disabled again
-#define CONTROLLERFAN_PIN -1 //Pin used for the fan to cool controller (-1 to disable)
-#define CONTROLLERFAN_SECS 60 //How many seconds, after all motors were disabled, the fan should run
-#define CONTROLLERFAN_SPEED 255 // == full speed
-
-// When first starting the main fan, run it at full speed for the
-// given number of milliseconds. This gets the fan spinning reliably
-// before setting a PWM value. (Does not work with software PWM for fan on Sanguinololu)
-//#define FAN_KICKSTART_TIME 100
-
-// This defines the minimal speed for the main fan, run in PWM mode
-// to enable uncomment and set minimal PWM speed for reliable running (1-255)
-// if fan speed is [1 - (FAN_MIN_PWM-1)] it is set to FAN_MIN_PWM
-//#define FAN_MIN_PWM 50
-
-// @section extruder
-
-// Extruder cooling fans
-// Configure fan pin outputs to automatically turn on/off when the associated
-// extruder temperature is above/below EXTRUDER_AUTO_FAN_TEMPERATURE.
-// Multiple extruders can be assigned to the same pin in which case
-// the fan will turn on when any selected extruder is above the threshold.
-#define EXTRUDER_0_AUTO_FAN_PIN 11
-#define EXTRUDER_1_AUTO_FAN_PIN 6
-#define EXTRUDER_2_AUTO_FAN_PIN -1
-#define EXTRUDER_3_AUTO_FAN_PIN -1
-#define EXTRUDER_AUTO_FAN_TEMPERATURE 50
-#define EXTRUDER_AUTO_FAN_SPEED 255 // == full speed
-
-//===========================================================================
-//============================ Mechanical Settings ==========================
-//===========================================================================
-
-// @section homing
-
-// If you want endstops to stay on (by default) even when not homing
-// enable this option. Override at any time with M120, M121.
-//#define ENDSTOPS_ALWAYS_ON_DEFAULT
-
-// @section extras
-
-//#define Z_LATE_ENABLE // Enable Z the last moment. Needed if your Z driver overheats.
-
-// Dual X Steppers
-// Uncomment this option to drive two X axis motors.
-// The next unused E driver will be assigned to the second X stepper.
-//#define X_DUAL_STEPPER_DRIVERS
-#if ENABLED(X_DUAL_STEPPER_DRIVERS)
- // Set true if the two X motors need to rotate in opposite directions
- #define INVERT_X2_VS_X_DIR true
-#endif
-
-
-// Dual Y Steppers
-// Uncomment this option to drive two Y axis motors.
-// The next unused E driver will be assigned to the second Y stepper.
-//#define Y_DUAL_STEPPER_DRIVERS
-#if ENABLED(Y_DUAL_STEPPER_DRIVERS)
- // Set true if the two Y motors need to rotate in opposite directions
- #define INVERT_Y2_VS_Y_DIR true
-#endif
-
-// A single Z stepper driver is usually used to drive 2 stepper motors.
-// Uncomment this option to use a separate stepper driver for each Z axis motor.
-// The next unused E driver will be assigned to the second Z stepper.
-//#define Z_DUAL_STEPPER_DRIVERS
-
-#if ENABLED(Z_DUAL_STEPPER_DRIVERS)
-
- // Z_DUAL_ENDSTOPS is a feature to enable the use of 2 endstops for both Z steppers - Let's call them Z stepper and Z2 stepper.
- // That way the machine is capable to align the bed during home, since both Z steppers are homed.
- // There is also an implementation of M666 (software endstops adjustment) to this feature.
- // After Z homing, this adjustment is applied to just one of the steppers in order to align the bed.
- // One just need to home the Z axis and measure the distance difference between both Z axis and apply the math: Z adjust = Z - Z2.
- // If the Z stepper axis is closer to the bed, the measure Z > Z2 (yes, it is.. think about it) and the Z adjust would be positive.
- // Play a little bit with small adjustments (0.5mm) and check the behaviour.
- // The M119 (endstops report) will start reporting the Z2 Endstop as well.
-
- //#define Z_DUAL_ENDSTOPS
-
- #if ENABLED(Z_DUAL_ENDSTOPS)
- #define Z2_USE_ENDSTOP _XMAX_
- #endif
-
-#endif // Z_DUAL_STEPPER_DRIVERS
-
-// Enable this for dual x-carriage printers.
-// A dual x-carriage design has the advantage that the inactive extruder can be parked which
-// prevents hot-end ooze contaminating the print. It also reduces the weight of each x-carriage
-// allowing faster printing speeds. Connect your X2 stepper to the first unused E plug.
-//#define DUAL_X_CARRIAGE
-#if ENABLED(DUAL_X_CARRIAGE)
- // Configuration for second X-carriage
- // Note: the first x-carriage is defined as the x-carriage which homes to the minimum endstop;
- // the second x-carriage always homes to the maximum endstop.
- #define X2_MIN_POS 80 // set minimum to ensure second x-carriage doesn't hit the parked first X-carriage
- #define X2_MAX_POS 353 // set maximum to the distance between toolheads when both heads are homed
- #define X2_HOME_DIR 1 // the second X-carriage always homes to the maximum endstop position
- #define X2_HOME_POS X2_MAX_POS // default home position is the maximum carriage position
- // However: In this mode the HOTEND_OFFSET_X value for the second extruder provides a software
- // override for X2_HOME_POS. This also allow recalibration of the distance between the two endstops
- // without modifying the firmware (through the "M218 T1 X???" command).
- // Remember: you should set the second extruder x-offset to 0 in your slicer.
-
- // There are a few selectable movement modes for dual x-carriages using M605 S
- // Mode 0: Full control. The slicer has full control over both x-carriages and can achieve optimal travel results
- // as long as it supports dual x-carriages. (M605 S0)
- // Mode 1: Auto-park mode. The firmware will automatically park and unpark the x-carriages on tool changes so
- // that additional slicer support is not required. (M605 S1)
- // Mode 2: Duplication mode. The firmware will transparently make the second x-carriage and extruder copy all
- // actions of the first x-carriage. This allows the printer to print 2 arbitrary items at
- // once. (2nd extruder x offset and temp offset are set using: M605 S2 [Xnnn] [Rmmm])
-
- // This is the default power-up mode which can be later using M605.
- #define DEFAULT_DUAL_X_CARRIAGE_MODE 0
-
- // Default settings in "Auto-park Mode"
- #define TOOLCHANGE_PARK_ZLIFT 0.2 // the distance to raise Z axis when parking an extruder
- #define TOOLCHANGE_UNPARK_ZLIFT 1 // the distance to raise Z axis when unparking an extruder
-
- // Default x offset in duplication mode (typically set to half print bed width)
- #define DEFAULT_DUPLICATION_X_OFFSET 100
-
-#endif //DUAL_X_CARRIAGE
-
-// @section homing
-
-//homing hits the endstop, then retracts by this distance, before it tries to slowly bump again:
-#define X_HOME_BUMP_MM 5
-#define Y_HOME_BUMP_MM 5
-#define Z_HOME_BUMP_MM 2
-#define HOMING_BUMP_DIVISOR {2, 2, 4} // Re-Bump Speed Divisor (Divides the Homing Feedrate)
-//#define QUICK_HOME //if this is defined, if both x and y are to be homed, a diagonal move will be performed initially.
-
-// When G28 is called, this option will make Y home before X
-#define HOME_Y_BEFORE_X
-
-// @section machine
-
-#define AXIS_RELATIVE_MODES {false, false, false, false}
-
-// Allow duplication mode with a basic dual-nozzle extruder
-//#define DUAL_NOZZLE_DUPLICATION_MODE
-
-// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
-#define INVERT_X_STEP_PIN false
-#define INVERT_Y_STEP_PIN false
-#define INVERT_Z_STEP_PIN false
-#define INVERT_E_STEP_PIN false
-
-// Default stepper release if idle. Set to 0 to deactivate.
-// Steppers will shut down DEFAULT_STEPPER_DEACTIVE_TIME seconds after the last move when DISABLE_INACTIVE_? is true.
-// Time can be set by M18 and M84.
-#define DEFAULT_STEPPER_DEACTIVE_TIME 120
-#define DISABLE_INACTIVE_X true
-#define DISABLE_INACTIVE_Y true
-#define DISABLE_INACTIVE_Z true // set to false if the nozzle will fall down on your printed part when print has finished.
-#define DISABLE_INACTIVE_E true
-
-#define DEFAULT_MINIMUMFEEDRATE 0.0 // minimum feedrate
-#define DEFAULT_MINTRAVELFEEDRATE 0.0
-
-// @section lcd
-
-#if ENABLED(ULTIPANEL)
- #define MANUAL_FEEDRATE {50*60, 50*60, 4*60, 60} // Feedrates for manual moves along X, Y, Z, E from panel
- #define ULTIPANEL_FEEDMULTIPLY // Comment to disable setting feedrate multiplier via encoder
-#endif
-
-// @section extras
-
-// minimum time in microseconds that a movement needs to take if the buffer is emptied.
-#define DEFAULT_MINSEGMENTTIME 20000
-
-// If defined the movements slow down when the look ahead buffer is only half full
-#define SLOWDOWN
-
-// Frequency limit
-// See nophead's blog for more info
-// Not working O
-//#define XY_FREQUENCY_LIMIT 15
-
-// Minimum planner junction speed. Sets the default minimum speed the planner plans for at the end
-// of the buffer and all stops. This should not be much greater than zero and should only be changed
-// if unwanted behavior is observed on a user's machine when running at very slow speeds.
-#define MINIMUM_PLANNER_SPEED 0.05 // (mm/sec)
-
-// Microstep setting (Only functional when stepper driver microstep pins are connected to MCU.
-#define MICROSTEP_MODES {16,16,16,16,16} // [1,2,4,8,16]
-
-// Motor Current setting (Only functional when motor driver current ref pins are connected to a digital trimpot on supported boards)
-#define DIGIPOT_MOTOR_CURRENT {150, 170, 180, 190, 180} // Values 0-255 (bq ZUM Mega 3D (default): X = 150 [~1.17A]; Y = 170 [~1.33A]; Z = 180 [~1.41A]; E0 = 190 [~1.49A])
-
-// Motor Current controlled via PWM (Overridable on supported boards with PWM-driven motor driver current)
-//#define PWM_MOTOR_CURRENT {1300, 1300, 1250} // Values in milliamps
-
-// uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
-//#define DIGIPOT_I2C
-// Number of channels available for I2C digipot, For Azteeg X3 Pro we have 8
-#define DIGIPOT_I2C_NUM_CHANNELS 8
-// actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
-#define DIGIPOT_I2C_MOTOR_CURRENTS {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}
-
-//===========================================================================
-//=============================Additional Features===========================
-//===========================================================================
-
-//#define ENCODER_RATE_MULTIPLIER // If defined, certain menu edit operations automatically multiply the steps when the encoder is moved quickly
-//#define ENCODER_10X_STEPS_PER_SEC 75 // If the encoder steps per sec exceeds this value, multiply steps moved x10 to quickly advance the value
-//#define ENCODER_100X_STEPS_PER_SEC 160 // If the encoder steps per sec exceeds this value, multiply steps moved x100 to really quickly advance the value
-
-//#define CHDK 4 //Pin for triggering CHDK to take a picture see how to use it here http://captain-slow.dk/2014/03/09/3d-printing-timelapses/
-//#define CHDK_DELAY 50 //How long in ms the pin should stay HIGH before going LOW again
-
-// @section lcd
-
-// Include a page of printer information in the LCD Main Menu
-//#define LCD_INFO_MENU
-
-#if ENABLED(SDSUPPORT)
-
- // Some RAMPS and other boards don't detect when an SD card is inserted. You can work
- // around this by connecting a push button or single throw switch to the pin defined
- // as SD_DETECT_PIN in your board's pins definitions.
- // This setting should be disabled unless you are using a push button, pulling the pin to ground.
- // Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
- #define SD_DETECT_INVERTED
-
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
- #define SD_FINISHED_RELEASECOMMAND "M104 S0\nM84 X Y Z E" // You might want to keep the z enabled so your bed stays in place.
-
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
- #define MENU_ADDAUTOSTART
-
- // Show a progress bar on HD44780 LCDs for SD printing
- //#define LCD_PROGRESS_BAR
-
- #if ENABLED(LCD_PROGRESS_BAR)
- // Amount of time (ms) to show the bar
- #define PROGRESS_BAR_BAR_TIME 2000
- // Amount of time (ms) to show the status message
- #define PROGRESS_BAR_MSG_TIME 3000
- // Amount of time (ms) to retain the status message (0=forever)
- #define PROGRESS_MSG_EXPIRE 0
- // Enable this to show messages for MSG_TIME then hide them
- //#define PROGRESS_MSG_ONCE
- #endif
-
- // This allows hosts to request long names for files and folders with M33
- #define LONG_FILENAME_HOST_SUPPORT
-
- // This option allows you to abort SD printing when any endstop is triggered.
- // This feature must be enabled with "M540 S1" or from the LCD menu.
- // To have any effect, endstops must be enabled during SD printing.
- //#define ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED
-
-#endif // SDSUPPORT
-
-// for dogm lcd displays you can choose some additional fonts:
-#if ENABLED(DOGLCD)
- // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT
- // we don't have a big font for Cyrillic, Kana
- //#define USE_BIG_EDIT_FONT
-
- // If you have spare 2300Byte of progmem and want to use a
- // smaller font on the Info-screen uncomment the next line.
- #define USE_SMALL_INFOFONT
-#endif // DOGLCD
-
-// @section safety
-
-// The hardware watchdog should reset the microcontroller disabling all outputs,
-// in case the firmware gets stuck and doesn't do temperature regulation.
-#define USE_WATCHDOG
-
-#if ENABLED(USE_WATCHDOG)
- // If you have a watchdog reboot in an ArduinoMega2560 then the device will hang forever, as a watchdog reset will leave the watchdog on.
- // The "WATCHDOG_RESET_MANUAL" goes around this by not using the hardware reset.
- // However, THIS FEATURE IS UNSAFE!, as it will only work if interrupts are disabled. And the code could hang in an interrupt routine with interrupts disabled.
- //#define WATCHDOG_RESET_MANUAL
-#endif
-
-// @section lcd
-
-// Babystepping enables the user to control the axis in tiny amounts, independently from the normal printing process
-// it can e.g. be used to change z-positions in the print startup phase in real-time
-// does not respect endstops!
-//#define BABYSTEPPING
-#if ENABLED(BABYSTEPPING)
- #define BABYSTEP_XY //not only z, but also XY in the menu. more clutter, more functions
- //not implemented for deltabots!
- #define BABYSTEP_INVERT_Z false //true for inverse movements in Z
- #define BABYSTEP_MULTIPLICATOR 1 //faster movements
-#endif
-
-// @section extruder
-
-// extruder advance constant (s2/mm3)
-//
-// advance (steps) = STEPS_PER_CUBIC_MM_E * EXTRUDER_ADVANCE_K * cubic mm per second ^ 2
-//
-// Hooke's law says: force = k * distance
-// Bernoulli's principle says: v ^ 2 / 2 + g . h + pressure / density = constant
-// so: v ^ 2 is proportional to number of steps we advance the extruder
-//#define ADVANCE
-
-#if ENABLED(ADVANCE)
- #define EXTRUDER_ADVANCE_K .0
- #define D_FILAMENT 2.85
-#endif
-
-// Implementation of a linear pressure control
-// Assumption: advance = k * (delta velocity)
-// K=0 means advance disabled. A good value for a gregs wade extruder will be around K=75
-//#define LIN_ADVANCE
-
-#if ENABLED(LIN_ADVANCE)
- #define LIN_ADVANCE_K 75
-#endif
-
-// @section leveling
-
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #define MESH_MIN_X (X_MIN_POS + MESH_INSET)
- #define MESH_MAX_X (X_MAX_POS - (MESH_INSET))
- #define MESH_MIN_Y (Y_MIN_POS + MESH_INSET)
- #define MESH_MAX_Y (Y_MAX_POS - (MESH_INSET))
-#endif
-
-// @section extras
-
-// Arc interpretation settings:
-#define ARC_SUPPORT // Disabling this saves ~2738 bytes
-#define MM_PER_ARC_SEGMENT 1
-#define N_ARC_CORRECTION 25
-
-// Support for G5 with XYZE destination and IJPQ offsets. Requires ~2666 bytes.
-//#define BEZIER_CURVE_SUPPORT
-
-const unsigned int dropsegments = 5; //everything with less than this number of steps will be ignored as move and joined with the next movement
-
-// @section temperature
-
-// Control heater 0 and heater 1 in parallel.
-//#define HEATERS_PARALLEL
-
-//===========================================================================
-//================================= Buffers =================================
-//===========================================================================
-
-// @section hidden
-
-// The number of linear motions that can be in the plan at any give time.
-// THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2, i.g. 8,16,32 because shifts and ors are used to do the ring-buffering.
-#if ENABLED(SDSUPPORT)
- #define BLOCK_BUFFER_SIZE 16 // SD,LCD,Buttons take more memory, block buffer needs to be smaller
-#else
- #define BLOCK_BUFFER_SIZE 16 // maximize block buffer
-#endif
-
-// @section serial
-
-// The ASCII buffer for serial input
-#define MAX_CMD_SIZE 96
-#define BUFSIZE 4
-
-// Transfer Buffer Size
-// To save 386 bytes of PROGMEM (and TX_BUFFER_SIZE+3 bytes of RAM) set to 0.
-// To buffer a simple "ok" you need 4 bytes.
-// For ADVANCED_OK (M105) you need 32 bytes.
-// For debug-echo: 128 bytes for the optimal speed.
-// Other output doesn't need to be that speedy.
-// :[0,2,4,8,16,32,64,128,256]
-#define TX_BUFFER_SIZE 0
-
-// Enable an emergency-command parser to intercept certain commands as they
-// enter the serial receive buffer, so they cannot be blocked.
-// Currently handles M108, M112, M410
-// Does not work on boards using AT90USB (USBCON) processors!
-//#define EMERGENCY_PARSER
-
-// Bad Serial-connections can miss a received command by sending an 'ok'
-// Therefore some clients abort after 30 seconds in a timeout.
-// Some other clients start sending commands while receiving a 'wait'.
-// This "wait" is only sent when the buffer is empty. 1 second is a good value here.
-//#define NO_TIMEOUTS 1000 // Milliseconds
-
-// Some clients will have this feature soon. This could make the NO_TIMEOUTS unnecessary.
-//#define ADVANCED_OK
-
-// @section fwretract
-
-// Firmware based and LCD controlled retract
-// M207 and M208 can be used to define parameters for the retraction.
-// The retraction can be called by the slicer using G10 and G11
-// until then, intended retractions can be detected by moves that only extrude and the direction.
-// the moves are than replaced by the firmware controlled ones.
-
-//#define FWRETRACT //ONLY PARTIALLY TESTED
-#if ENABLED(FWRETRACT)
- #define MIN_RETRACT 0.1 //minimum extruded mm to accept a automatic gcode retraction attempt
- #define RETRACT_LENGTH 3 //default retract length (positive mm)
- #define RETRACT_LENGTH_SWAP 13 //default swap retract length (positive mm), for extruder change
- #define RETRACT_FEEDRATE 45 //default feedrate for retracting (mm/s)
- #define RETRACT_ZLIFT 0 //default retract Z-lift
- #define RETRACT_RECOVER_LENGTH 0 //default additional recover length (mm, added to retract length when recovering)
- #define RETRACT_RECOVER_LENGTH_SWAP 0 //default additional swap recover length (mm, added to retract length when recovering from extruder change)
- #define RETRACT_RECOVER_FEEDRATE 8 //default feedrate for recovering from retraction (mm/s)
-#endif
-
-// Add support for experimental filament exchange support M600; requires display
-#if ENABLED(ULTIPANEL)
- // #define FILAMENT_CHANGE_FEATURE // Enable filament exchange menu and M600 g-code (used for runout sensor too)
- #if ENABLED(FILAMENT_CHANGE_FEATURE)
- #define FILAMENT_CHANGE_X_POS 3 // X position of hotend
- #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend
- #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift)
- #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
- #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers)
- #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm
- // It is a short retract used immediately after print interrupt before move to filament exchange position
- #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
- #define FILAMENT_CHANGE_UNLOAD_LENGTH 100 // Unload filament length from hotend in mm
- // Longer length for bowden printers to unload filament from whole bowden tube,
- // shorter lenght for printers without bowden to unload filament from extruder only,
- // 0 to disable unloading for manual unloading
- #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast
- #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm
- // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
- // Short or zero length for printers without bowden where loading is not used
- #define FILAMENT_CHANGE_LOAD_FEEDRATE 10 // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
- #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is load over the hotend,
- // 0 to disable for manual extrusion
- // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
- // or until outcoming filament color is not clear for filament color change
- #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
- #endif
-#endif
-
-/******************************************************************************\
- * enable this section if you have TMC26X motor drivers.
- * you need to import the TMC26XStepper library into the Arduino IDE for this
- ******************************************************************************/
-
-// @section tmc
-
-//#define HAVE_TMCDRIVER
-#if ENABLED(HAVE_TMCDRIVER)
-
- //#define X_IS_TMC
- #define X_MAX_CURRENT 1000 //in mA
- #define X_SENSE_RESISTOR 91 //in mOhms
- #define X_MICROSTEPS 16 //number of microsteps
-
- //#define X2_IS_TMC
- #define X2_MAX_CURRENT 1000 //in mA
- #define X2_SENSE_RESISTOR 91 //in mOhms
- #define X2_MICROSTEPS 16 //number of microsteps
-
- //#define Y_IS_TMC
- #define Y_MAX_CURRENT 1000 //in mA
- #define Y_SENSE_RESISTOR 91 //in mOhms
- #define Y_MICROSTEPS 16 //number of microsteps
-
- //#define Y2_IS_TMC
- #define Y2_MAX_CURRENT 1000 //in mA
- #define Y2_SENSE_RESISTOR 91 //in mOhms
- #define Y2_MICROSTEPS 16 //number of microsteps
-
- //#define Z_IS_TMC
- #define Z_MAX_CURRENT 1000 //in mA
- #define Z_SENSE_RESISTOR 91 //in mOhms
- #define Z_MICROSTEPS 16 //number of microsteps
-
- //#define Z2_IS_TMC
- #define Z2_MAX_CURRENT 1000 //in mA
- #define Z2_SENSE_RESISTOR 91 //in mOhms
- #define Z2_MICROSTEPS 16 //number of microsteps
-
- //#define E0_IS_TMC
- #define E0_MAX_CURRENT 1000 //in mA
- #define E0_SENSE_RESISTOR 91 //in mOhms
- #define E0_MICROSTEPS 16 //number of microsteps
-
- //#define E1_IS_TMC
- #define E1_MAX_CURRENT 1000 //in mA
- #define E1_SENSE_RESISTOR 91 //in mOhms
- #define E1_MICROSTEPS 16 //number of microsteps
-
- //#define E2_IS_TMC
- #define E2_MAX_CURRENT 1000 //in mA
- #define E2_SENSE_RESISTOR 91 //in mOhms
- #define E2_MICROSTEPS 16 //number of microsteps
-
- //#define E3_IS_TMC
- #define E3_MAX_CURRENT 1000 //in mA
- #define E3_SENSE_RESISTOR 91 //in mOhms
- #define E3_MICROSTEPS 16 //number of microsteps
-
-#endif
-
-/******************************************************************************\
- * enable this section if you have L6470 motor drivers.
- * you need to import the L6470 library into the Arduino IDE for this
- ******************************************************************************/
-
-// @section l6470
-
-//#define HAVE_L6470DRIVER
-#if ENABLED(HAVE_L6470DRIVER)
-
- //#define X_IS_L6470
- #define X_MICROSTEPS 16 //number of microsteps
- #define X_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define X_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define X_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define X2_IS_L6470
- #define X2_MICROSTEPS 16 //number of microsteps
- #define X2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define X2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define X2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Y_IS_L6470
- #define Y_MICROSTEPS 16 //number of microsteps
- #define Y_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Y_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Y_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Y2_IS_L6470
- #define Y2_MICROSTEPS 16 //number of microsteps
- #define Y2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Y2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Y2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Z_IS_L6470
- #define Z_MICROSTEPS 16 //number of microsteps
- #define Z_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Z_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Z_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Z2_IS_L6470
- #define Z2_MICROSTEPS 16 //number of microsteps
- #define Z2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Z2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Z2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E0_IS_L6470
- #define E0_MICROSTEPS 16 //number of microsteps
- #define E0_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E0_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E0_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E1_IS_L6470
- #define E1_MICROSTEPS 16 //number of microsteps
- #define E1_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E1_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E1_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E2_IS_L6470
- #define E2_MICROSTEPS 16 //number of microsteps
- #define E2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E3_IS_L6470
- #define E3_MICROSTEPS 16 //number of microsteps
- #define E3_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E3_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E3_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
-#endif
-
-/**
- * TWI/I2C BUS
- *
- * This feature is an EXPERIMENTAL feature so it shall not be used on production
- * machines. Enabling this will allow you to send and receive I2C data from slave
- * devices on the bus.
- *
- * ; Example #1
- * ; This macro send the string "Marlin" to the slave device with address 0x63 (99)
- * ; It uses multiple M155 commands with one B arg
- * M155 A99 ; Target slave address
- * M155 B77 ; M
- * M155 B97 ; a
- * M155 B114 ; r
- * M155 B108 ; l
- * M155 B105 ; i
- * M155 B110 ; n
- * M155 S1 ; Send the current buffer
- *
- * ; Example #2
- * ; Request 6 bytes from slave device with address 0x63 (99)
- * M156 A99 B5
- *
- * ; Example #3
- * ; Example serial output of a M156 request
- * echo:i2c-reply: from:99 bytes:5 data:hello
- */
-
-// @section i2cbus
-
-//#define EXPERIMENTAL_I2CBUS
-
-#endif // CONFIGURATION_ADV_H
diff --git a/Marlin/example_configurations/Hephestos_2/README.md b/Marlin/example_configurations/Hephestos_2/README.md
deleted file mode 100644
index 8fcb53c..0000000
--- a/Marlin/example_configurations/Hephestos_2/README.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Example Configuration for BQ [Hephestos 2](http://www.bq.com/uk/hephestos-2)
-This configuration file is based on the original configuration file shipped with the heavily modified Marlin fork by BQ. The original firmware and configuration file can be found at [BQ Github repository](https://github.com/bq/Marlin).
-
-NOTE: The look and feel of the Hephestos 2 while navigating the LCD menu will change by using the original Marlin firmware.
-
-## Changelog
- * 2016/03/01 - Initial release
- * 2016/03/21 - Activated 4-point auto leveling by default
- Updated miscellaneous z-probe values
- * 2016/06/21 - Disabled hot bed related options
- Activated software endstops
- SD printing now disables the heater when finished
- * 2016/07/13 - Update the `DEFAULT_AXIS_STEPS_PER_UNIT` for the Z axis
- Increased the `DEFAULT_XYJERK`
diff --git a/Marlin/example_configurations/Hephestos_2/_Bootscreen.h b/Marlin/example_configurations/Hephestos_2/_Bootscreen.h
deleted file mode 100644
index 9819264..0000000
--- a/Marlin/example_configurations/Hephestos_2/_Bootscreen.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Custom Bitmap for splashscreen
- *
- * You may use one of the following tools to generate the C++ bitmap array from
- * a black and white image:
- *
- * - http://www.marlinfw.org/tools/u8glib/converter.html
- * - http://www.digole.com/tools/PicturetoC_Hex_converter.php
- */
-#include
-
-#define CUSTOM_BOOTSCREEN_TIMEOUT 2500
-#define CUSTOM_BOOTSCREEN_BMPWIDTH 62
-#define CUSTOM_BOOTSCREEN_BMPHEIGHT 64
-
-const unsigned char custom_start_bmp[512] PROGMEM = {
- 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x00,
- 0x00, 0x03, 0xc0, 0x0f, 0xf0, 0x07, 0x80, 0x00,
- 0x00, 0x07, 0xe0, 0x07, 0xe0, 0x0f, 0xc0, 0x00,
- 0x00, 0x0f, 0xf0, 0x03, 0xc0, 0x1f, 0xe0, 0x00,
- 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x3f, 0xf0, 0x00,
- 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x3f, 0xf0, 0x00,
- 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x3f, 0xf0, 0x00,
- 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x3f, 0xf0, 0x00,
- 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x3f, 0xf0, 0x00,
- 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x1f, 0xe0, 0x00,
- 0x00, 0x07, 0xe0, 0x00, 0x00, 0x0f, 0xc0, 0x00,
- 0x00, 0x03, 0xc0, 0x00, 0x00, 0x07, 0x80, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf8,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfc,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfc,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfc,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfc,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfc,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfc,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfc,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf8,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x1e, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
- 0x3f, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
- 0x7f, 0x80, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
- 0xff, 0xc0, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
- 0xff, 0xc0, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
- 0xff, 0xc0, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
- 0xff, 0xc0, 0x00, 0x00, 0xf7, 0xc0, 0x1f, 0x80,
- 0xff, 0xc0, 0x00, 0x00, 0xff, 0xf0, 0x7f, 0xc0,
- 0x7f, 0x80, 0x00, 0x00, 0xff, 0xf8, 0xff, 0xe0,
- 0x3f, 0x00, 0x00, 0x00, 0xfc, 0xf8, 0xf0, 0xf8,
- 0x1e, 0x00, 0x00, 0x00, 0xf8, 0x7d, 0xe0, 0x78,
- 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3d, 0xe0, 0x78,
- 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3d, 0xe0, 0x78,
- 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3d, 0xe0, 0x78,
- 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3d, 0xe0, 0x78,
- 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3d, 0xe0, 0x78,
- 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3d, 0xe0, 0x78,
- 0x00, 0x00, 0x00, 0x00, 0xf8, 0x79, 0xf0, 0xf8,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xf8, 0xff, 0xf8,
- 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x7f, 0xf8,
- 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe0, 0x3f, 0xf8,
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x0e, 0x78,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78,
-};
diff --git a/Marlin/example_configurations/K8200/Configuration.h b/Marlin/example_configurations/K8200/Configuration.h
deleted file mode 100644
index dbfe6b9..0000000
--- a/Marlin/example_configurations/K8200/Configuration.h
+++ /dev/null
@@ -1,1344 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Sample configuration file for Vellemann K8200
- * tested on K8200 with VM8201 (Display)
- * and Arduino 1.6.8 (Mac) by @CONSULitAS, 2016-02-21
- * https://github.com/CONSULitAS/Marlin-K8200/archive/K8200_stable_2016-02-21.zip
- */
-
-/**
- * Configuration.h
- *
- * Basic settings such as:
- *
- * - Type of electronics
- * - Type of temperature sensor
- * - Printer geometry
- * - Endstop configuration
- * - LCD controller
- * - Extra features
- *
- * Advanced settings can be found in Configuration_adv.h
- *
- */
-#ifndef CONFIGURATION_H
-#define CONFIGURATION_H
-
-/**
- *
- * ***********************************
- * ** ATTENTION TO ALL DEVELOPERS **
- * ***********************************
- *
- * You must increment this version number for every significant change such as,
- * but not limited to: ADD, DELETE RENAME OR REPURPOSE any directive/option.
- *
- * Note: Update also Version.h !
- */
-#define CONFIGURATION_H_VERSION 010100
-
-//===========================================================================
-//============================= Getting Started =============================
-//===========================================================================
-
-/**
- * Here are some standard links for getting your machine calibrated:
- *
- * http://reprap.org/wiki/Calibration
- * http://youtu.be/wAL9d7FgInk
- * http://calculator.josefprusa.cz
- * http://reprap.org/wiki/Triffid_Hunter%27s_Calibration_Guide
- * http://www.thingiverse.com/thing:5573
- * https://sites.google.com/site/repraplogphase/calibration-of-your-reprap
- * http://www.thingiverse.com/thing:298812
- */
-
-//===========================================================================
-//============================= DELTA Printer ===============================
-//===========================================================================
-// For a Delta printer replace the configuration files with the files in the
-// example_configurations/delta directory.
-//
-
-//===========================================================================
-//============================= SCARA Printer ===============================
-//===========================================================================
-// For a Scara printer replace the configuration files with the files in the
-// example_configurations/SCARA directory.
-//
-
-// @section info
-
-// User-specified version info of this build to display in [Pronterface, etc] terminal window during
-// startup. Implementation of an idea by Prof Braino to inform user that any changes made to this
-// build by the user have been successfully uploaded into firmware.
-#define STRING_CONFIG_H_AUTHOR "(K8200, @CONSULitAS)" // Who made the changes.
-#define SHOW_BOOTSCREEN
-#define STRING_SPLASH_LINE1 SHORT_BUILD_VERSION // will be shown during boot in line 1
-#define STRING_SPLASH_LINE2 WEBSITE_URL // will be shown during boot in line 2
-
-//
-// *** VENDORS PLEASE READ *****************************************************
-//
-// Marlin now allow you to have a vendor boot image to be displayed on machine
-// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
-//
-// We suggest for you to take advantage of this new feature and keep the Marlin
-// boot image unmodified. For an example have a look at the bq Hephestos 2
-// example configuration folder.
-//
-//#define SHOW_CUSTOM_BOOTSCREEN
-// @section machine
-
-// SERIAL_PORT selects which serial port should be used for communication with the host.
-// This allows the connection of wireless adapters (for instance) to non-default port pins.
-// Serial port 0 is still used by the Arduino bootloader regardless of this setting.
-// :[0,1,2,3,4,5,6,7]
-#define SERIAL_PORT 0
-
-// This determines the communication speed of the printer
-// :[2400,9600,19200,38400,57600,115200,250000]
-#define BAUDRATE 250000
-
-// Enable the Bluetooth serial interface on AT90USB devices
-//#define BLUETOOTH
-
-// The following define selects which electronics board you have.
-// Please choose the name from boards.h that matches your setup
-#ifndef MOTHERBOARD
- #define MOTHERBOARD BOARD_K8200
-#endif
-
-// Optional custom name for your RepStrap or other custom machine
-// Displayed in the LCD "Ready" message
-#define CUSTOM_MACHINE_NAME "K8200"
-
-// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
-// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
-#define MACHINE_UUID "2b7dea3b-844e-4ab1-aa96-bb6406607d6e" // K8200 standard config with VM8201 (Display)
-
-// This defines the number of extruders
-// :[1,2,3,4]
-#define EXTRUDERS 1
-
-// For Cyclops or any "multi-extruder" that shares a single nozzle.
-//#define SINGLENOZZLE
-
-// A dual extruder that uses a single stepper motor
-// Don't forget to set SSDE_SERVO_ANGLES and HOTEND_OFFSET_X/Y/Z
-//#define SWITCHING_EXTRUDER
-#if ENABLED(SWITCHING_EXTRUDER)
- #define SWITCHING_EXTRUDER_SERVO_NR 0
- #define SWITCHING_EXTRUDER_SERVO_ANGLES { 0, 90 } // Angles for E0, E1
- //#define HOTEND_OFFSET_Z {0.0, 0.0}
-#endif
-
-/**
- * "Mixing Extruder"
- * - Adds a new code, M165, to set the current mix factors.
- * - Extends the stepping routines to move multiple steppers in proportion to the mix.
- * - Optional support for Repetier Host M163, M164, and virtual extruder.
- * - This implementation supports only a single extruder.
- * - Enable DIRECT_MIXING_IN_G1 for Pia Taubert's reference implementation
- */
-//#define MIXING_EXTRUDER
-#if ENABLED(MIXING_EXTRUDER)
- #define MIXING_STEPPERS 2 // Number of steppers in your mixing extruder
- #define MIXING_VIRTUAL_TOOLS 16 // Use the Virtual Tool method with M163 and M164
- //#define DIRECT_MIXING_IN_G1 // Allow ABCDHI mix factors in G1 movement commands
-#endif
-
-// Offset of the extruders (uncomment if using more than one and relying on firmware to position when changing).
-// The offset has to be X=0, Y=0 for the extruder 0 hotend (default extruder).
-// For the other hotends it is their distance from the extruder 0 hotend.
-//#define HOTEND_OFFSET_X {0.0, 20.00} // (in mm) for each extruder, offset of the hotend on the X axis
-//#define HOTEND_OFFSET_Y {0.0, 5.00} // (in mm) for each extruder, offset of the hotend on the Y axis
-
-//// The following define selects which power supply you have. Please choose the one that matches your setup
-// 1 = ATX
-// 2 = X-Box 360 203Watts (the blue wire connected to PS_ON and the red wire to VCC)
-// :{1:'ATX',2:'X-Box 360'}
-#define POWER_SUPPLY 1
-
-// Define this to have the electronics keep the power supply off on startup. If you don't know what this is leave it.
-//#define PS_DEFAULT_OFF
-
-// @section temperature
-
-//===========================================================================
-//============================= Thermal Settings ============================
-//===========================================================================
-//
-//--NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table
-//
-//// Temperature sensor settings:
-// -3 is thermocouple with MAX31855 (only for sensor 0)
-// -2 is thermocouple with MAX6675 (only for sensor 0)
-// -1 is thermocouple with AD595
-// 0 is not used
-// 1 is 100k thermistor - best choice for EPCOS 100k (4.7k pullup)
-// 2 is 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)
-// 3 is Mendel-parts thermistor (4.7k pullup)
-// 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !!
-// 5 is 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup)
-// 6 is 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup)
-// 7 is 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup)
-// 71 is 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup)
-// 8 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup)
-// 9 is 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup)
-// 10 is 100k RS thermistor 198-961 (4.7k pullup)
-// 11 is 100k beta 3950 1% thermistor (4.7k pullup)
-// 12 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed)
-// 13 is 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE"
-// 20 is the PT100 circuit found in the Ultimainboard V2.x
-// 60 is 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
-// 66 is 4.7M High Temperature thermistor from Dyze Design
-// 70 is the 100K thermistor found in the bq Hephestos 2
-//
-// 1k ohm pullup tables - This is not normal, you would have to have changed out your 4.7k for 1k
-// (but gives greater accuracy and more stable PID)
-// 51 is 100k thermistor - EPCOS (1k pullup)
-// 52 is 200k thermistor - ATC Semitec 204GT-2 (1k pullup)
-// 55 is 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup)
-//
-// 1047 is Pt1000 with 4k7 pullup
-// 1010 is Pt1000 with 1k pullup (non standard)
-// 147 is Pt100 with 4k7 pullup
-// 110 is Pt100 with 1k pullup (non standard)
-// 998 and 999 are Dummy Tables. They will ALWAYS read 25°C or the temperature defined below.
-// Use it for Testing or Development purposes. NEVER for production machine.
-//#define DUMMY_THERMISTOR_998_VALUE 25
-//#define DUMMY_THERMISTOR_999_VALUE 100
-// :{ '0': "Not used",'1':"100k / 4.7k - EPCOS",'2':"200k / 4.7k - ATC Semitec 204GT-2",'3':"Mendel-parts / 4.7k",'4':"10k !! do not use for a hotend. Bad resolution at high temp. !!",'5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)",'6':"100k / 4.7k EPCOS - Not as accurate as Table 1",'7':"100k / 4.7k Honeywell 135-104LAG-J01",'8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT",'9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1",'10':"100k / 4.7k RS 198-961",'11':"100k / 4.7k beta 3950 1%",'12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)",'13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'",'20':"PT100 (Ultimainboard V2.x)",'51':"100k / 1k - EPCOS",'52':"200k / 1k - ATC Semitec 204GT-2",'55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)",'60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950",'66':"Dyze Design 4.7M High Temperature thermistor",'70':"the 100K thermistor found in the bq Hephestos 2",'71':"100k / 4.7k Honeywell 135-104LAF-J01",'147':"Pt100 / 4.7k",'1047':"Pt1000 / 4.7k",'110':"Pt100 / 1k (non-standard)",'1010':"Pt1000 / 1k (non standard)",'-3':"Thermocouple + MAX31855 (only for sensor 0)",'-2':"Thermocouple + MAX6675 (only for sensor 0)",'-1':"Thermocouple + AD595",'998':"Dummy 1",'999':"Dummy 2" }
-#define TEMP_SENSOR_0 5
-#define TEMP_SENSOR_1 0
-#define TEMP_SENSOR_2 0
-#define TEMP_SENSOR_3 0
-#define TEMP_SENSOR_BED 5
-
-// This makes temp sensor 1 a redundant sensor for sensor 0. If the temperatures difference between these sensors is to high the print will be aborted.
-//#define TEMP_SENSOR_1_AS_REDUNDANT
-#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 10
-
-// Extruder temperature must be close to target for this long before M109 returns success
-#define TEMP_RESIDENCY_TIME 10 // (seconds)
-#define TEMP_HYSTERESIS 3 // (degC) range of +/- temperatures considered "close" to the target one
-#define TEMP_WINDOW 1 // (degC) Window around target to start the residency timer x degC early.
-
-// Bed temperature must be close to target for this long before M190 returns success
-#define TEMP_BED_RESIDENCY_TIME 0 // (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.
-
-// The minimal temperature defines the temperature below which the heater will not be enabled It is used
-// to check that the wiring to the thermistor is not broken.
-// Otherwise this would lead to the heater being powered on all the time.
-#define HEATER_0_MINTEMP 5
-#define HEATER_1_MINTEMP 5
-#define HEATER_2_MINTEMP 5
-#define HEATER_3_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 275
-#define HEATER_1_MAXTEMP 275
-#define HEATER_2_MAXTEMP 275
-#define HEATER_3_MAXTEMP 275
-#define BED_MAXTEMP 150
-
-//===========================================================================
-//============================= PID Settings ================================
-//===========================================================================
-// PID Tuning Guide here: http://reprap.org/wiki/PID_Tuning
-
-// Comment the following line to disable PID and enable bang-bang.
-#define PIDTEMP
-#define BANG_MAX 255 // limits current to nozzle while in bang-bang mode; 255=full current
-#define PID_MAX BANG_MAX // limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
-#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
- //#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
- // Set/get with gcode: M301 E[extruder number, 0-2]
- #define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
- // is more than PID_FUNCTIONAL_RANGE then the PID will be shut off and the heater will be set to min/max.
- #define PID_INTEGRAL_DRIVE_MAX PID_MAX //limit for the integral term
- #define K1 0.95 //smoothing factor within the PID
-
- // If you are using a pre-configured hotend then you can use one of the value sets by uncommenting it
- // Ultimaker
- //#define DEFAULT_Kp 22.2
- //#define DEFAULT_Ki 1.08
- //#define DEFAULT_Kd 114
-
- // MakerGear
- //#define DEFAULT_Kp 7.0
- //#define DEFAULT_Ki 0.1
- //#define DEFAULT_Kd 12
-
- // Mendel Parts V9 on 12V
- //#define DEFAULT_Kp 63.0
- //#define DEFAULT_Ki 2.25
- //#define DEFAULT_Kd 440
-
- // Vellemann K8200 Extruder - calculated with PID Autotune and tested
- #define DEFAULT_Kp 24.29
- #define DEFAULT_Ki 1.58
- #define DEFAULT_Kd 93.51
-#endif // PIDTEMP
-
-//===========================================================================
-//============================= PID > Bed Temperature Control ===============
-//===========================================================================
-// Select PID or bang-bang with PIDTEMPBED. If bang-bang, BED_LIMIT_SWITCHING will enable hysteresis
-//
-// Uncomment this to enable PID on the bed. It uses the same frequency PWM as the extruder.
-// If your PID_dT is the default, and correct for your hardware/configuration, that means 7.689Hz,
-// which is fine for driving a square wave into a resistive load and does not significantly impact you FET heating.
-// This also works fine on a Fotek SSR-10DA Solid State Relay into a 250W heater.
-// If your configuration is significantly different than this and you don't understand the issues involved, you probably
-// shouldn't use bed PID until someone else verifies your hardware works.
-// If this is enabled, find your own PID constants below.
-#define PIDTEMPBED
-
-//#define BED_LIMIT_SWITCHING
-
-// This sets the max power delivered to the bed, and replaces the HEATER_BED_DUTY_CYCLE_DIVIDER option.
-// all forms of bed control obey this (PID, bang-bang, bang-bang with hysteresis)
-// setting this to anything other than 255 enables a form of PWM to the bed just like HEATER_BED_DUTY_CYCLE_DIVIDER did,
-// so you shouldn't use it unless you are OK with PWM on your bed. (see the comment on enabling PIDTEMPBED)
-#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current
-
-#if ENABLED(PIDTEMPBED)
-
- //#define PID_BED_DEBUG // Sends debug data to the serial port.
-
- #define PID_BED_INTEGRAL_DRIVE_MAX MAX_BED_POWER //limit for the integral term
-
- //120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
- //from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10)
- //#define DEFAULT_bedKp 10.00
- //#define DEFAULT_bedKi .023
- //#define DEFAULT_bedKd 305.4
-
- //120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
- //from pidautotune
- //#define DEFAULT_bedKp 97.1
- //#define DEFAULT_bedKi 1.41
- //#define DEFAULT_bedKd 1675.16
-
- // FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles.
-
- // Vellemann K8200 PCB heatbed with standard PCU at 60 degreesC - calculated with PID Autotune and tested
- // from pidautotune
- #define DEFAULT_bedKp 341.88
- #define DEFAULT_bedKi 25.32
- #define DEFAULT_bedKd 1153.89
-#endif // PIDTEMPBED
-
-// @section extruder
-
-//this prevents dangerous Extruder moves, i.e. if the temperature is under the limit
-//can be software-disabled for whatever purposes by
-#define PREVENT_DANGEROUS_EXTRUDE
-//if PREVENT_DANGEROUS_EXTRUDE is on, you can still disable (uncomment) very long bits of extrusion separately.
-#define PREVENT_LENGTHY_EXTRUDE
-
-#define EXTRUDE_MINTEMP 170
-#define EXTRUDE_MAXLENGTH (X_MAX_LENGTH+Y_MAX_LENGTH) //prevent extrusion of very large distances.
-
-//===========================================================================
-//======================== Thermal Runaway Protection =======================
-//===========================================================================
-
-/**
- * Thermal Protection protects your printer from damage and fire if a
- * thermistor falls out or temperature sensors fail in any way.
- *
- * The issue: If a thermistor falls out or a temperature sensor fails,
- * Marlin can no longer sense the actual temperature. Since a disconnected
- * thermistor reads as a low temperature, the firmware will keep the heater on.
- *
- * If you get "Thermal Runaway" or "Heating failed" errors the
- * details can be tuned in Configuration_adv.h
- */
-
-#define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders
-#define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed
-
-//===========================================================================
-//============================= Mechanical Settings =========================
-//===========================================================================
-
-// @section machine
-
-// Uncomment one of these options to enable CoreXY, CoreXZ, or CoreYZ kinematics
-//#define COREXY
-//#define COREXZ
-//#define COREYZ
-
-// Enable this option for Toshiba steppers
-//#define CONFIG_STEPPERS_TOSHIBA
-
-//===========================================================================
-//============================== Endstop Settings ===========================
-//===========================================================================
-
-// @section homing
-
-// Specify here all the endstop connectors that are connected to any endstop or probe.
-// Almost all printers will be using one per axis. Probes will use one or more of the
-// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
-#define USE_XMIN_PLUG
-#define USE_YMIN_PLUG
-#define USE_ZMIN_PLUG
-//#define USE_XMAX_PLUG
-//#define USE_YMAX_PLUG
-//#define USE_ZMAX_PLUG
-
-// coarse Endstop Settings
-#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
-
-#if DISABLED(ENDSTOPPULLUPS)
- // fine endstop settings: Individual pullups. will be ignored if ENDSTOPPULLUPS is defined
- //#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 false // set to true to invert the logic of the endstop.
-#define Y_MIN_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
-#define Z_MIN_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
-#define X_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Y_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Z_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Z_MIN_PROBE_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
-
-//===========================================================================
-//============================= Z Probe Options =============================
-//===========================================================================
-
-//
-// Probe Type
-// Probes are sensors/switches that are activated / deactivated before/after use.
-//
-// Allen Key Probes, Servo Probes, Z-Sled Probes, FIX_MOUNTED_PROBE, etc.
-// You must activate one of these to use AUTO_BED_LEVELING_FEATURE below.
-//
-// Use M851 to set the Z probe vertical offset from the nozzle. Store with M500.
-//
-
-// A Fix-Mounted Probe either doesn't deploy or needs manual deployment.
-// For example an inductive probe, or a setup that uses the nozzle to probe.
-// An inductive probe must be deactivated to go below
-// its trigger-point if hardware endstops are active.
-//#define FIX_MOUNTED_PROBE
-
-// The BLTouch probe emulates a servo probe.
-//#define BLTOUCH
-
-// Z Servo Probe, such as an endstop switch on a rotating arm.
-//#define Z_ENDSTOP_SERVO_NR 0
-//#define Z_SERVO_ANGLES {70,0} // Z Servo Deploy and Stow angles
-
-// Enable if you have a Z probe mounted on a sled like those designed by Charles Bell.
-//#define Z_PROBE_SLED
-//#define SLED_DOCKING_OFFSET 5 // The extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.
-
-// Z Probe to nozzle (X,Y) offset, relative to (0, 0).
-// X and Y offsets must be integers.
-//
-// In the following example the X and Y offsets are both positive:
-// #define X_PROBE_OFFSET_FROM_EXTRUDER 10
-// #define Y_PROBE_OFFSET_FROM_EXTRUDER 10
-//
-// +-- BACK ---+
-// | |
-// L | (+) P | R <-- probe (20,20)
-// E | | I
-// F | (-) N (+) | G <-- nozzle (10,10)
-// T | | H
-// | (-) | T
-// | |
-// O-- FRONT --+
-// (0,0)
-#define X_PROBE_OFFSET_FROM_EXTRUDER -25 // X offset: -left +right [of the nozzle]
-#define Y_PROBE_OFFSET_FROM_EXTRUDER -29 // Y offset: -front +behind [the nozzle]
-#define Z_PROBE_OFFSET_FROM_EXTRUDER -12.35 // Z offset: -below +above [the nozzle]
-
-// X and Y axis travel speed (mm/m) between probes
-#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
-#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
-// Speed for the "accurate" probe of each point
-#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
-
-//
-// Allen Key Probe is defined in the Delta example configurations.
-//
-
-// Enable Z_MIN_PROBE_ENDSTOP to use _both_ a Z Probe and a Z-min-endstop on the same machine.
-// With this option the Z_MIN_PROBE_PIN will only be used for probing, never for homing.
-//
-// *** PLEASE READ ALL INSTRUCTIONS BELOW FOR SAFETY! ***
-//
-// To continue using the Z-min-endstop for homing, be sure to disable Z_SAFE_HOMING.
-// Example: To park the head outside the bed area when homing with G28.
-//
-// To use a separate Z probe, your board must define a Z_MIN_PROBE_PIN.
-//
-// For a servo-based Z probe, you must set up servo support below, including
-// NUM_SERVOS, Z_ENDSTOP_SERVO_NR and Z_SERVO_ANGLES.
-//
-// - RAMPS 1.3/1.4 boards may be able to use the 5V, GND, and Aux4->D32 pin.
-// - Use 5V for powered (usu. inductive) sensors.
-// - Otherwise connect:
-// - normally-closed switches to GND and D32.
-// - normally-open switches to 5V and D32.
-//
-// Normally-closed switches are advised and are the default.
-//
-// The Z_MIN_PROBE_PIN sets the Arduino pin to use. (See your board's pins file.)
-// Since the RAMPS Aux4->D32 pin maps directly to the Arduino D32 pin, D32 is the
-// default pin for all RAMPS-based boards. Some other boards map differently.
-// To set or change the pin for your board, edit the appropriate pins_XXXXX.h file.
-//
-// WARNING:
-// Setting the wrong pin may have unexpected and potentially disastrous consequences.
-// Use with caution and do your homework.
-//
-//#define Z_MIN_PROBE_ENDSTOP
-
-// Enable Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN to use the Z_MIN_PIN for your Z_MIN_PROBE.
-// The Z_MIN_PIN will then be used for both Z-homing and probing.
-#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
-
-// To use a probe you must enable one of the two options above!
-
-// This option disables the use of the Z_MIN_PROBE_PIN
-// To enable the Z probe pin but disable its use, uncomment the line below. This only affects a
-// Z probe switch if you have a separate Z min endstop also and have activated Z_MIN_PROBE_ENDSTOP above.
-// If you're using the Z MIN endstop connector for your Z probe, this has no effect.
-//#define DISABLE_Z_MIN_PROBE_ENDSTOP
-
-// Enable Z Probe Repeatability test to see how accurate your probe is
-//#define Z_MIN_PROBE_REPEATABILITY_TEST
-
-//
-// Probe Raise options provide clearance for the probe to deploy, stow, and travel.
-//
-#define Z_PROBE_DEPLOY_HEIGHT 15 // Raise to make room for the probe to deploy / stow
-#define Z_PROBE_TRAVEL_HEIGHT 5 // Raise between probing points.
-
-//
-// For M851 give a range for adjusting the Z probe offset
-//
-#define Z_PROBE_OFFSET_RANGE_MIN -20
-#define Z_PROBE_OFFSET_RANGE_MAX 20
-
-// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
-// :{0:'Low',1:'High'}
-#define X_ENABLE_ON 0
-#define Y_ENABLE_ON 0
-#define Z_ENABLE_ON 0
-#define E_ENABLE_ON 0 // For all extruders
-
-// Disables axis stepper immediately when it's not being used.
-// WARNING: When motors turn off there is a chance of losing position accuracy!
-#define DISABLE_X false
-#define DISABLE_Y false
-#define DISABLE_Z false // not for K8200 -> looses Steps
-// Warn on display about possibly reduced accuracy
-//#define DISABLE_REDUCED_ACCURACY_WARNING
-
-// @section extruder
-
-#define DISABLE_E false // For all extruders
-#define DISABLE_INACTIVE_EXTRUDER true //disable only inactive extruders and keep active extruder enabled
-
-// @section machine
-
-// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way.
-#define INVERT_X_DIR false
-#define INVERT_Y_DIR false // was true -> why for K8200?
-#define INVERT_Z_DIR false
-
-// @section extruder
-
-// For direct drive extruder v9 set to true, for geared extruder set to false.
-#define INVERT_E0_DIR true // K8200: true for geared default extruder!
-#define INVERT_E1_DIR true
-#define INVERT_E2_DIR true
-#define INVERT_E3_DIR true
-
-// @section homing
-
-//#define Z_HOMING_HEIGHT 4 // (in mm) Minimal z height before homing (G28) for Z clearance above the bed, clamps, ...
- // Be sure you have this distance over your Z_MAX_POS in case.
-
-// ENDSTOP SETTINGS:
-// Sets direction of endstops when homing; 1=MAX, -1=MIN
-// :[-1,1]
-#define X_HOME_DIR -1
-#define Y_HOME_DIR -1
-#define Z_HOME_DIR -1
-
-#define min_software_endstops true // If true, axis won't move to coordinates less than HOME_POS.
-#define max_software_endstops true // If true, axis won't move to coordinates greater than the defined lengths below.
-
-// @section machine
-
-// Travel limits after homing (units are in mm)
-#define X_MIN_POS 0
-#define Y_MIN_POS 0
-#define Z_MIN_POS 0
-#define X_MAX_POS 200
-#define Y_MAX_POS 200
-#define Z_MAX_POS 200
-
-//===========================================================================
-//========================= Filament Runout Sensor ==========================
-//===========================================================================
-//#define FILAMENT_RUNOUT_SENSOR // Uncomment for defining a filament runout sensor such as a mechanical or opto endstop to check the existence of filament
- // In RAMPS uses servo pin 2. Can be changed in pins file. For other boards pin definition should be made.
- // It is assumed that when logic high = filament available
- // when logic low = filament ran out
-#if ENABLED(FILAMENT_RUNOUT_SENSOR)
- const bool FIL_RUNOUT_INVERTING = false; // set to true to invert the logic of the sensor.
- #define ENDSTOPPULLUP_FIL_RUNOUT // Uncomment to use internal pullup for filament runout pins if the sensor is defined.
- #define FILAMENT_RUNOUT_SCRIPT "M600"
-#endif
-
-//===========================================================================
-//============================ Mesh Bed Leveling ============================
-//===========================================================================
-
-//#define MESH_BED_LEVELING // Enable mesh bed leveling.
-
-#if ENABLED(MESH_BED_LEVELING)
- #define MESH_INSET 10 // Mesh inset margin on print area
- #define MESH_NUM_X_POINTS 3 // Don't use more than 7 points per axis, implementation limited.
- #define MESH_NUM_Y_POINTS 3
- #define MESH_HOME_SEARCH_Z 4 // Z after Home, bed somewhere below but above 0.0.
-
- //#define MESH_G28_REST_ORIGIN // After homing all axes ('G28' or 'G28 XYZ') rest at origin [0,0,0]
-
- //#define MANUAL_BED_LEVELING // Add display menu option for bed leveling.
-
- #if ENABLED(MANUAL_BED_LEVELING)
- #define MBL_Z_STEP 0.025 // Step size while manually probing Z axis.
- #endif // MANUAL_BED_LEVELING
-
-#endif // MESH_BED_LEVELING
-
-//===========================================================================
-//============================ Bed Auto Leveling ============================
-//===========================================================================
-
-// @section bedlevel
-
-//#define AUTO_BED_LEVELING_FEATURE // Delete the comment to enable (remove // at the start of the line)
-
-// Enable this feature to get detailed logging of G28, G29, M48, etc.
-// Logging is off by default. Enable this logging feature with 'M111 S32'.
-// NOTE: Requires a huge amount of PROGMEM.
-//#define DEBUG_LEVELING_FEATURE
-
-#if ENABLED(AUTO_BED_LEVELING_FEATURE)
-
- // There are 2 different ways to specify probing locations:
- //
- // - "grid" mode
- // Probe several points in a rectangular grid.
- // You specify the rectangle and the density of sample points.
- // This mode is preferred because there are more measurements.
- //
- // - "3-point" mode
- // Probe 3 arbitrary points on the bed (that aren't collinear)
- // You specify the XY coordinates of all 3 points.
-
- // Enable this to sample the bed in a grid (least squares solution).
- // Note: this feature generates 10KB extra code size.
- #define AUTO_BED_LEVELING_GRID
-
- #if ENABLED(AUTO_BED_LEVELING_GRID)
-
- #define LEFT_PROBE_BED_POSITION 15
- #define RIGHT_PROBE_BED_POSITION 170
- #define FRONT_PROBE_BED_POSITION 20
- #define BACK_PROBE_BED_POSITION 170
-
- #define MIN_PROBE_EDGE 10 // The Z probe minimum square sides can be no smaller than this.
-
- // Set the number of grid points per dimension.
- // You probably don't need more than 3 (squared=9).
- #define AUTO_BED_LEVELING_GRID_POINTS 2
-
- #else // !AUTO_BED_LEVELING_GRID
-
- // Arbitrary points to probe.
- // A simple cross-product is used to estimate the plane of the bed.
- #define ABL_PROBE_PT_1_X 15
- #define ABL_PROBE_PT_1_Y 180
- #define ABL_PROBE_PT_2_X 15
- #define ABL_PROBE_PT_2_Y 20
- #define ABL_PROBE_PT_3_X 170
- #define ABL_PROBE_PT_3_Y 20
-
- #endif // !AUTO_BED_LEVELING_GRID
-
- //#define Z_PROBE_END_SCRIPT "G1 Z10 F12000\nG1 X15 Y330\nG1 Z0.5\nG1 Z10" // These commands will be executed in the end of G29 routine.
- // Useful to retract a deployable Z probe.
-
- // If you've enabled AUTO_BED_LEVELING_FEATURE and are using the Z Probe for Z Homing,
- // it is highly recommended you also enable Z_SAFE_HOMING below!
-
-#endif // AUTO_BED_LEVELING_FEATURE
-
-
-// @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 // Distance between the nozzle to printbed after homing
-
-// Use "Z Safe Homing" to avoid homing with a Z probe outside the bed area.
-//
-// With this feature enabled:
-//
-// - Allow Z homing only after X and Y homing AND stepper drivers still enabled.
-// - If stepper drivers time out, it will need X and Y homing again before Z homing.
-// - Move the Z probe (or nozzle) to a defined XY point before Z Homing when homing all axes (G28).
-// - Prevent Z homing when the Z probe is outside bed area.
-//#define Z_SAFE_HOMING
-
-#if ENABLED(Z_SAFE_HOMING)
- #define Z_SAFE_HOMING_X_POINT ((X_MIN_POS + X_MAX_POS) / 2) // X point for Z homing when homing all axis (G28).
- #define Z_SAFE_HOMING_Y_POINT ((Y_MIN_POS + Y_MAX_POS) / 2) // Y point for Z homing when homing all axis (G28).
-#endif
-
-// Homing speeds (mm/m)
-#define HOMING_FEEDRATE_XY (50*60)
-#define HOMING_FEEDRATE_Z (4*60)
-
-//
-// MOVEMENT SETTINGS
-// @section motion
-//
-
-// default settings
-
-#define DEFAULT_AXIS_STEPS_PER_UNIT {64.25,64.25,2560,600} // default steps per unit for K8200
-#define DEFAULT_MAX_FEEDRATE {500, 500, 5, 500} // (mm/sec)
-#define DEFAULT_MAX_ACCELERATION {9000,9000,100,10000} // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for Skeinforge 40+, for older versions raise them a lot.
-
-#define DEFAULT_ACCELERATION 1000 // X, Y, Z and E acceleration in mm/s^2 for printing moves
-#define DEFAULT_RETRACT_ACCELERATION 1000 // E acceleration in mm/s^2 for retracts
-#define DEFAULT_TRAVEL_ACCELERATION 1000 // X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
-
-// The speed change that does not require acceleration (i.e. the software might assume it can be done instantaneously)
-#define DEFAULT_XYJERK 20.0 // (mm/sec)
-#define DEFAULT_ZJERK 0.4 // (mm/sec)
-#define DEFAULT_EJERK 5.0 // (mm/sec)
-
-
-//=============================================================================
-//============================= Additional Features ===========================
-//=============================================================================
-
-// @section extras
-
-//
-// EEPROM
-//
-// The microcontroller can store settings in the EEPROM, e.g. max velocity...
-// M500 - stores parameters in EEPROM
-// M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily).
-// M502 - reverts to the default "factory settings". You still need to store them in EEPROM afterwards if you want to.
-//define this to enable EEPROM support
-#define EEPROM_SETTINGS
-
-#if ENABLED(EEPROM_SETTINGS)
- // To disable EEPROM Serial responses and decrease program space by ~1700 byte: comment this out:
- #define EEPROM_CHITCHAT // Please keep turned on if you can.
-#endif
-
-//
-// Host Keepalive
-//
-// When enabled Marlin will send a busy status message to the host
-// every couple of seconds when it can't accept commands.
-//
-#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.
-
-//
-// M100 Free Memory Watcher
-//
-//#define M100_FREE_MEMORY_WATCHER // uncomment to add the M100 Free Memory Watcher for debug purpose
-
-//
-// G20/G21 Inch mode support
-//
-//#define INCH_MODE_SUPPORT
-
-//
-// M149 Set temperature units support
-//
-//#define TEMPERATURE_UNITS_SUPPORT
-
-// @section temperature
-
-// Preheat Constants
-#define PREHEAT_1_TEMP_HOTEND 190
-#define PREHEAT_1_TEMP_BED 50 // K8200: set back to 70 if you have an upgraded heatbed power supply
-#define PREHEAT_1_FAN_SPEED 0 // Value from 0 to 255
-
-#define PREHEAT_2_TEMP_HOTEND 240
-#define PREHEAT_2_TEMP_BED 60 // K8200: set back to 110 if you have an upgraded heatbed power supply
-#define PREHEAT_2_FAN_SPEED 0 // Value from 0 to 255
-
-//
-// Nozzle Park -- EXPERIMENTAL
-//
-// When enabled allows the user to define a special XYZ position, inside the
-// machine's topology, to park the nozzle when idle or when receiving the G27
-// command.
-//
-// The "P" paramenter controls what is the action applied to the Z axis:
-// P0: (Default) If current Z-pos is lower than Z-park then the nozzle will
-// be raised to reach Z-park height.
-//
-// P1: No matter the current Z-pos, the nozzle will be raised/lowered to
-// reach Z-park height.
-//
-// P2: The nozzle height will be raised by Z-park amount but never going over
-// the machine's limit of Z_MAX_POS.
-//
-//#define NOZZLE_PARK_FEATURE
-
-#if ENABLED(NOZZLE_PARK_FEATURE)
- // Specify a park position as { X, Y, Z }
- #define NOZZLE_PARK_POINT { (X_MIN_POS + 10), (Y_MAX_POS - 10), 20 }
-#endif
-
-//
-// Clean Nozzle Feature -- EXPERIMENTAL
-//
-// When enabled allows the user to send G12 to start the nozzle cleaning
-// process, the G-Code accepts two parameters:
-// "P" for pattern selection
-// "S" for defining the number of strokes/repetitions
-//
-// Available list of patterns:
-// P0: This is the default pattern, this process requires a sponge type
-// material at a fixed bed location, the cleaning process is based on
-// "strokes" i.e. back-and-forth movements between the starting and end
-// points.
-//
-// P1: This starts a zig-zag pattern between (X0, Y0) and (X1, Y1), "T"
-// defines the number of zig-zag triangles to be done. "S" defines the
-// number of strokes aka one back-and-forth movement. As an example
-// sending "G12 P1 S1 T3" will execute:
-//
-// --
-// | (X0, Y1) | /\ /\ /\ | (X1, Y1)
-// | | / \ / \ / \ |
-// A | | / \ / \ / \ |
-// | | / \ / \ / \ |
-// | (X0, Y0) | / \/ \/ \ | (X1, Y0)
-// -- +--------------------------------+
-// |________|_________|_________|
-// T1 T2 T3
-//
-// Caveats: End point Z should use the same value as Start point Z.
-//
-// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
-// may change to add new functionality like different wipe patterns.
-//
-//#define NOZZLE_CLEAN_FEATURE
-
-#if ENABLED(NOZZLE_CLEAN_FEATURE)
- // Number of pattern repetitions
- #define NOZZLE_CLEAN_STROKES 12
-
- // Specify positions as { X, Y, Z }
- #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
- #define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
-
- // Moves the nozzle to the initial position
- #define NOZZLE_CLEAN_GOBACK
-#endif
-
-//
-// Print job timer
-//
-// Enable this option to automatically start and stop the
-// print job timer when M104/M109/M190 commands are received.
-// M104 (extruder without wait) - high temp = none, low temp = stop timer
-// M109 (extruder with wait) - high temp = start timer, low temp = stop timer
-// M190 (bed with wait) - high temp = start timer, low temp = none
-//
-// In all cases the timer can be started and stopped using
-// the following commands:
-//
-// - M75 - Start the print job timer
-// - M76 - Pause the print job timer
-// - M77 - Stop the print job timer
-#define PRINTJOB_TIMER_AUTOSTART
-
-//
-// Print Counter
-//
-// When enabled Marlin will keep track of some print statistical data such as:
-// - Total print jobs
-// - Total successful print jobs
-// - Total failed print jobs
-// - Total time printing
-//
-// This information can be viewed by the M78 command.
-//#define PRINTCOUNTER
-
-//=============================================================================
-//============================= LCD and SD support ============================
-//=============================================================================
-
-// @section lcd
-
-//
-// LCD LANGUAGE
-//
-// Here you may choose the language used by Marlin on the LCD menus, the following
-// list of languages are available:
-// en, an, bg, ca, cn, cz, de, el, el-gr, es, eu, fi, fr, gl, hr, it,
-// kana, kana_utf8, nl, pl, pt, pt_utf8, pt-br, pt-br_utf8, ru, test
-//
-// :{'en':'English','an':'Aragonese','bg':'Bulgarian','ca':'Catalan','cn':'Chinese','cz':'Czech','de':'German','el':'Greek','el-gr':'Greek (Greece)','es':'Spanish','eu':'Basque-Euskera','fi':'Finnish','fr':'French','gl':'Galician','hr':'Croatian','it':'Italian','kana':'Japanese','kana_utf8':'Japanese (UTF8)','nl':'Dutch','pl':'Polish','pt':'Portuguese','pt-br':'Portuguese (Brazilian)','pt-br_utf8':'Portuguese (Brazilian UTF8)','pt_utf8':'Portuguese (UTF8)','ru':'Russian','test':'TEST'}
-//
-#define LCD_LANGUAGE en
-
-//
-// LCD Character Set
-//
-// Note: This option is NOT applicable to Graphical Displays.
-//
-// All character-based LCD's provide ASCII plus one of these
-// language extensions:
-//
-// - JAPANESE ... the most common
-// - WESTERN ... with more accented characters
-// - CYRILLIC ... for the Russian language
-//
-// To determine the language extension installed on your controller:
-//
-// - Compile and upload with LCD_LANGUAGE set to 'test'
-// - Click the controller to view the LCD menu
-// - The LCD will display Japanese, Western, or Cyrillic text
-//
-// See https://github.com/MarlinFirmware/Marlin/wiki/LCD-Language
-//
-// :['JAPANESE','WESTERN','CYRILLIC']
-//
-#define DISPLAY_CHARSET_HD44780 JAPANESE // K8200: for Display VM8201
-
-//
-// LCD TYPE
-//
-// You may choose ULTRA_LCD if you have character based LCD with 16x2, 16x4, 20x2,
-// 20x4 char/lines or DOGLCD for the full graphics display with 128x64 pixels
-// (ST7565R family). (This option will be set automatically for certain displays.)
-//
-// IMPORTANT NOTE: The U8glib library is required for Full Graphic Display!
-// https://github.com/olikraus/U8glib_Arduino
-//
-//#define ULTRA_LCD // Character based
-//#define DOGLCD // Full graphics display
-
-//
-// SD CARD
-//
-// SD Card support is disabled by default. If your controller has an SD slot,
-// you must uncomment the following option or it won't work.
-//
-#define SDSUPPORT
-
-//
-// SD CARD: SPI SPEED
-//
-// Uncomment ONE of the following items to use a slower SPI transfer
-// speed. This is usually required if you're getting volume init errors.
-//
-//#define SPI_SPEED SPI_HALF_SPEED
-//#define SPI_SPEED SPI_QUARTER_SPEED
-//#define SPI_SPEED SPI_EIGHTH_SPEED
-
-//
-// SD CARD: ENABLE CRC
-//
-// Use CRC checks and retries on the SD communication.
-//
-//#define SD_CHECK_AND_RETRY
-
-//
-// ENCODER SETTINGS
-//
-// This option overrides the default number of encoder pulses needed to
-// produce one step. Should be increased for high-resolution encoders.
-//
-//#define ENCODER_PULSES_PER_STEP 1
-
-//
-// Use this option to override the number of step signals required to
-// move between next/prev menu items.
-//
-//#define ENCODER_STEPS_PER_MENU_ITEM 5
-
-/**
- * Encoder Direction Options
- *
- * Test your encoder's behavior first with both options disabled.
- *
- * Reversed Value Edit and Menu Nav? Enable REVERSE_ENCODER_DIRECTION.
- * Reversed Menu Navigation only? Enable REVERSE_MENU_DIRECTION.
- * Reversed Value Editing only? Enable BOTH options.
- */
-
-//
-// This option reverses the encoder direction everywhere
-//
-// Set this option if CLOCKWISE causes values to DECREASE
-//
-//#define REVERSE_ENCODER_DIRECTION
-
-//
-// This option reverses the encoder direction for navigating LCD menus.
-//
-// If CLOCKWISE normally moves DOWN this makes it go UP.
-// If CLOCKWISE normally moves UP this makes it go DOWN.
-//
-//#define REVERSE_MENU_DIRECTION
-
-//
-// Individual Axis Homing
-//
-// Add individual axis homing items (Home X, Home Y, and Home Z) to the LCD menu.
-//
-//#define INDIVIDUAL_AXIS_HOMING_MENU
-
-//
-// SPEAKER/BUZZER
-//
-// If you have a speaker that can produce tones, enable it here.
-// By default Marlin assumes you have a buzzer with a fixed frequency.
-//
-//#define SPEAKER
-
-//
-// The duration and frequency for the UI feedback sound.
-// Set these to 0 to disable audio feedback in the LCD menus.
-//
-// Note: Test audio output with the G-Code:
-// M300 S P
-//
-//#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 100
-//#define LCD_FEEDBACK_FREQUENCY_HZ 1000
-
-//
-// CONTROLLER TYPE: Standard
-//
-// Marlin supports a wide variety of controllers.
-// Enable one of the following options to specify your controller.
-//
-
-//
-// ULTIMAKER Controller.
-//
-//#define ULTIMAKERCONTROLLER
-
-//
-// ULTIPANEL as seen on Thingiverse.
-//
-//#define ULTIPANEL
-
-//
-// Cartesio UI
-// http://mauk.cc/webshop/cartesio-shop/electronics/user-interface
-//
-//#define CARTESIO_UI
-
-//
-// PanelOne from T3P3 (via RAMPS 1.4 AUX2/AUX3)
-// http://reprap.org/wiki/PanelOne
-//
-//#define PANEL_ONE
-
-//
-// MaKr3d Makr-Panel with graphic controller and SD support.
-// http://reprap.org/wiki/MaKr3d_MaKrPanel
-//
-//#define MAKRPANEL
-
-//
-// ReprapWorld Graphical LCD
-// https://reprapworld.com/?products_details&products_id/1218
-//
-//#define REPRAPWORLD_GRAPHICAL_LCD
-
-//
-// Activate one of these if you have a Panucatt Devices
-// Viki 2.0 or mini Viki with Graphic LCD
-// http://panucatt.com
-//
-//#define VIKI2
-//#define miniVIKI
-
-//
-// Adafruit ST7565 Full Graphic Controller.
-// https://github.com/eboston/Adafruit-ST7565-Full-Graphic-Controller/
-//
-//#define ELB_FULL_GRAPHIC_CONTROLLER
-
-//
-// RepRapDiscount Smart Controller.
-// http://reprap.org/wiki/RepRapDiscount_Smart_Controller
-//
-// Note: Usually sold with a white PCB.
-//
-//#define REPRAP_DISCOUNT_SMART_CONTROLLER
-
-//
-// GADGETS3D G3D LCD/SD Controller
-// http://reprap.org/wiki/RAMPS_1.3/1.4_GADGETS3D_Shield_with_Panel
-//
-// Note: Usually sold with a blue PCB.
-//
-//#define G3D_PANEL
-
-//
-// RepRapDiscount FULL GRAPHIC Smart Controller
-// http://reprap.org/wiki/RepRapDiscount_Full_Graphic_Smart_Controller
-//
-//#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
-
-//
-// MakerLab Mini Panel with graphic
-// controller and SD support - http://reprap.org/wiki/Mini_panel
-//
-//#define MINIPANEL
-
-//
-// RepRapWorld REPRAPWORLD_KEYPAD v1.1
-// http://reprapworld.com/?products_details&products_id=202&cPath=1591_1626
-//
-// REPRAPWORLD_KEYPAD_MOVE_STEP sets how much should the robot move when a key
-// is pressed, a value of 10.0 means 10mm per click.
-//
-//#define REPRAPWORLD_KEYPAD
-//#define REPRAPWORLD_KEYPAD_MOVE_STEP 1.0
-
-//
-// RigidBot Panel V1.0
-// http://www.inventapart.com/
-//
-//#define RIGIDBOT_PANEL
-
-//
-// BQ LCD Smart Controller shipped by
-// default with the BQ Hephestos 2 and Witbox 2.
-//
-//#define BQ_LCD_SMART_CONTROLLER
-
-//
-// CONTROLLER TYPE: I2C
-//
-// Note: These controllers require the installation of Arduino's LiquidCrystal_I2C
-// library. For more info: https://github.com/kiyoshigawa/LiquidCrystal_I2C
-//
-
-//
-// Elefu RA Board Control Panel
-// http://www.elefu.com/index.php?route=product/product&product_id=53
-//
-//#define RA_CONTROL_PANEL
-
-//
-// Sainsmart YW Robot (LCM1602) LCD Display
-//
-//#define LCD_I2C_SAINSMART_YWROBOT
-
-//
-// Generic LCM1602 LCD adapter
-//
-//#define LCM1602
-
-//
-// PANELOLU2 LCD with status LEDs,
-// separate encoder and click inputs.
-//
-// Note: This controller requires Arduino's LiquidTWI2 library v1.2.3 or later.
-// For more info: https://github.com/lincomatic/LiquidTWI2
-//
-// Note: The PANELOLU2 encoder click input can either be directly connected to
-// a pin (if BTN_ENC defined to != -1) or read through I2C (when BTN_ENC == -1).
-//
-//#define LCD_I2C_PANELOLU2
-
-//
-// Panucatt VIKI LCD with status LEDs,
-// integrated click & L/R/U/D buttons, separate encoder inputs.
-//
-//#define LCD_I2C_VIKI
-
-//
-// SSD1306 OLED full graphics generic display
-//
-//#define U8GLIB_SSD1306
-
-//
-// SAV OLEd LCD module support using either SSD1306 or SH1106 based LCD modules
-//
-//#define SAV_3DGLCD
-#if ENABLED(SAV_3DGLCD)
- //#define U8GLIB_SSD1306
- #define U8GLIB_SH1106
-#endif
-
-//
-// CONTROLLER TYPE: Shift register panels
-//
-// 2 wire Non-latching LCD SR from https://goo.gl/aJJ4sH
-// LCD configuration: http://reprap.org/wiki/SAV_3D_LCD
-//
-//#define SAV_3DLCD
-
-//=============================================================================
-//=============================== Extra Features ==============================
-//=============================================================================
-
-// @section extras
-
-// Increase the FAN PWM frequency. Removes the PWM noise but increases heating in the FET/Arduino
-//#define FAST_PWM_FAN
-
-// Use software PWM to drive the fan, as for the heaters. This uses a very low frequency
-// which is not as annoying as with the hardware PWM. On the other hand, if this frequency
-// is too low, you should also increment SOFT_PWM_SCALE.
-//#define FAN_SOFT_PWM
-
-// Incrementing this by 1 will double the software PWM frequency,
-// affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
-// However, control resolution will be halved for each increment;
-// at zero value, there are 128 effective control positions.
-#define SOFT_PWM_SCALE 0
-
-// Temperature status LEDs that display the hotend and bed temperature.
-// If all hotends and bed temperature and temperature setpoint are < 54C then the BLUE led is on.
-// Otherwise the RED led is on. There is 1C hysteresis.
-//#define TEMP_STAT_LEDS
-
-// M240 Triggers a camera by emulating a Canon RC-1 Remote
-// Data from: http://www.doc-diy.net/photo/rc-1_hacked/
-//#define PHOTOGRAPH_PIN 23
-
-// SkeinForge sends the wrong arc g-codes when using Arc Point as fillet procedure
-//#define SF_ARC_FIX
-
-// Support for the BariCUDA Paste Extruder.
-//#define BARICUDA
-
-//define BlinkM/CyzRgb Support
-//#define BLINKM
-
-/*********************************************************************\
-* R/C SERVO support
-* Sponsored by TrinityLabs, Reworked by codexmas
-**********************************************************************/
-
-// Number of servos
-//
-// If you select a configuration below, this will receive a default value and does not need to be set manually
-// set it manually if you have more servos than extruders and wish to manually control some
-// leaving it undefined or defining as 0 will disable the servo subsystem
-// If unsure, leave commented / disabled
-//
-//#define NUM_SERVOS 3 // Servo index starts with 0 for M280 command
-
-// Delay (in microseconds) before the next move will start, to give the servo time to reach its target angle.
-// 300ms is a good value but you can try less delay.
-// If the servo can't reach the requested position, increase it.
-#define SERVO_DELAY 300
-
-// Servo deactivation
-//
-// With this option servos are powered only during movement, then turned off to prevent jitter.
-//#define DEACTIVATE_SERVOS_AFTER_MOVE
-
-/**********************************************************************\
- * Support for a filament diameter sensor
- * Also allows adjustment of diameter at print time (vs at slicing)
- * Single extruder only at this point (extruder 0)
- *
- * Motherboards
- * 34 - RAMPS1.4 - uses Analog input 5 on the AUX2 connector
- * 81 - Printrboard - Uses Analog input 2 on the Exp1 connector (version B,C,D,E)
- * 301 - Rambo - uses Analog input 3
- * Note may require analog pins to be defined for different motherboards
- **********************************************************************/
-// Uncomment below to enable
-//#define FILAMENT_WIDTH_SENSOR
-
-#define DEFAULT_NOMINAL_FILAMENT_DIA 3.00 //Enter the diameter (in mm) of the filament generally used (3.0 mm or 1.75 mm) - this is then used in the slicer software. Used for sensor reading validation
-
-#if ENABLED(FILAMENT_WIDTH_SENSOR)
- #define FILAMENT_SENSOR_EXTRUDER_NUM 0 //The number of the extruder that has the filament sensor (0,1,2)
- #define MEASUREMENT_DELAY_CM 14 //measurement delay in cm. This is the distance from filament sensor to middle of barrel
-
- #define MEASURED_UPPER_LIMIT 3.30 //upper limit factor used for sensor reading validation in mm
- #define MEASURED_LOWER_LIMIT 1.90 //lower limit factor for sensor reading validation in mm
- #define MAX_MEASUREMENT_DELAY 20 //delay buffer size in bytes (1 byte = 1cm)- limits maximum measurement delay allowable (must be larger than MEASUREMENT_DELAY_CM and lower number saves RAM)
-
- #define DEFAULT_MEASURED_FILAMENT_DIA DEFAULT_NOMINAL_FILAMENT_DIA //set measured to nominal initially
-
- //When using an LCD, uncomment the line below to display the Filament sensor data on the last line instead of status. Status will appear for 5 sec.
- //#define FILAMENT_LCD_DISPLAY
-#endif
-
-#endif // CONFIGURATION_H
diff --git a/Marlin/example_configurations/K8200/Configuration_adv.h b/Marlin/example_configurations/K8200/Configuration_adv.h
deleted file mode 100644
index dc26fd6..0000000
--- a/Marlin/example_configurations/K8200/Configuration_adv.h
+++ /dev/null
@@ -1,805 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-// Sample configuration file for Vellemann K8200
-// tested on K8200 with VM8201 (Display)
-// and Arduino 1.6.8 (Mac) by @CONSULitAS, 2016-02-21
-// https://github.com/CONSULitAS/Marlin-K8200/archive/K8200_stable_2016-02-21.zip
-
-
-/**
- * Configuration_adv.h
- *
- * Advanced settings.
- * Only change these if you know exactly what you're doing.
- * Some of these settings can damage your printer if improperly set!
- *
- * Basic settings can be found in Configuration.h
- *
- */
-#ifndef CONFIGURATION_ADV_H
-#define CONFIGURATION_ADV_H
-
-/**
- *
- * ***********************************
- * ** ATTENTION TO ALL DEVELOPERS **
- * ***********************************
- *
- * You must increment this version number for every significant change such as,
- * but not limited to: ADD, DELETE RENAME OR REPURPOSE any directive/option.
- *
- * Note: Update also Version.h !
- */
-#define CONFIGURATION_ADV_H_VERSION 010100
-
-// @section temperature
-
-//===========================================================================
-//=============================Thermal Settings ============================
-//===========================================================================
-
-#if DISABLED(PIDTEMPBED)
- #define BED_CHECK_INTERVAL 5000 // ms between checks in bang-bang control
- #if ENABLED(BED_LIMIT_SWITCHING)
- #define BED_HYSTERESIS 2 // Only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS
- #endif
-#endif
-
-/**
- * Thermal Protection protects your printer from damage and fire if a
- * thermistor falls out or temperature sensors fail in any way.
- *
- * The issue: If a thermistor falls out or a temperature sensor fails,
- * Marlin can no longer sense the actual temperature. Since a disconnected
- * thermistor reads as a low temperature, the firmware will keep the heater on.
- *
- * The solution: Once the temperature reaches the target, start observing.
- * If the temperature stays too far below the target (hysteresis) for too long (period),
- * the firmware will halt the machine as a safety precaution.
- *
- * If you get false positives for "Thermal Runaway" increase THERMAL_PROTECTION_HYSTERESIS and/or THERMAL_PROTECTION_PERIOD
- */
-#if ENABLED(THERMAL_PROTECTION_HOTENDS)
- #define THERMAL_PROTECTION_PERIOD 60 // Seconds
- #define THERMAL_PROTECTION_HYSTERESIS 8 // Degrees Celsius
-
- /**
- * Whenever an M104 or M109 increases the target temperature the firmware will wait for the
- * WATCH_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_TEMP_INCREASE
- * degrees, the machine is halted, requiring a hard reset. This test restarts with any M104/M109,
- * but only if the current temperature is far enough below the target for a reliable test.
- *
- * If you get false positives for "Heating failed" increase WATCH_TEMP_PERIOD and/or decrease WATCH_TEMP_INCREASE
- * WATCH_TEMP_INCREASE should not be below 2.
- */
- #define WATCH_TEMP_PERIOD 30 // Seconds
- #define WATCH_TEMP_INCREASE 4 // Degrees Celsius
-#endif
-
-/**
- * Thermal Protection parameters for the bed are just as above for hotends.
- */
-#if ENABLED(THERMAL_PROTECTION_BED)
- #define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
- #define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
-
- /**
- * Whenever an M140 or M190 increases the target temperature the firmware will wait for the
- * WATCH_BED_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_BED_TEMP_INCREASE
- * degrees, the machine is halted, requiring a hard reset. This test restarts with any M140/M190,
- * but only if the current temperature is far enough below the target for a reliable test.
- *
- * If you get too many "Heating failed" errors, increase WATCH_BED_TEMP_PERIOD and/or decrease
- * WATCH_BED_TEMP_INCREASE. (WATCH_BED_TEMP_INCREASE should not be below 2.)
- */
- #define WATCH_BED_TEMP_PERIOD 60 // Seconds
- #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
-#endif
-
-#if ENABLED(PIDTEMP)
- // this adds an experimental additional term to the heating power, proportional to the extrusion speed.
- // if Kc is chosen well, the additional required power due to increased melting should be compensated.
- //#define PID_EXTRUSION_SCALING
- #if ENABLED(PID_EXTRUSION_SCALING)
- #define DEFAULT_Kc (100) //heating power=Kc*(e_speed)
- #define LPQ_MAX_LEN 50
- #endif
-#endif
-
-/**
- * Automatic Temperature:
- * The hotend target temperature is calculated by all the buffered lines of gcode.
- * The maximum buffered steps/sec of the extruder motor is called "se".
- * Start autotemp mode with M109 S B F
- * The target temperature is set to mintemp+factor*se[steps/sec] and is limited by
- * mintemp and maxtemp. Turn this off by executing M109 without F*
- * Also, if the temperature is set to a value below mintemp, it will not be changed by autotemp.
- * On an Ultimaker, some initial testing worked with M109 S215 B260 F1 in the start.gcode
- */
-#define AUTOTEMP
-#if ENABLED(AUTOTEMP)
- #define AUTOTEMP_OLDWEIGHT 0.98
-#endif
-
-//Show Temperature ADC value
-//The M105 command return, besides traditional information, the ADC value read from temperature sensors.
-//#define SHOW_TEMP_ADC_VALUES
-
-/**
- * High Temperature Thermistor Support
- *
- * Thermistors able to support high temperature tend to have a hard time getting
- * good readings at room and lower temperatures. This means HEATER_X_RAW_LO_TEMP
- * will probably be caught when the heating element first turns on during the
- * preheating process, which will trigger a min_temp_error as a safety measure
- * and force stop everything.
- * To circumvent this limitation, we allow for a preheat time (during which,
- * min_temp_error won't be triggered) and add a min_temp buffer to handle
- * aberrant readings.
- *
- * If you want to enable this feature for your hotend thermistor(s)
- * uncomment and set values > 0 in the constants below
- */
-
-// The number of consecutive low temperature errors that can occur
-// before a min_temp_error is triggered. (Shouldn't be more than 10.)
-//#define MAX_CONSECUTIVE_LOW_TEMPERATURE_ERROR_ALLOWED 0
-
-// The number of milliseconds a hotend will preheat before starting to check
-// the temperature. This value should NOT be set to the time it takes the
-// hot end to reach the target temperature, but the time it takes to reach
-// the minimum temperature your thermistor can read. The lower the better/safer.
-// This shouldn't need to be more than 30 seconds (30000)
-//#define MILLISECONDS_PREHEAT_TIME 0
-
-// @section extruder
-
-// extruder run-out prevention.
-//if the machine is idle, and the temperature over MINTEMP, every couple of SECONDS some filament is extruded
-//#define EXTRUDER_RUNOUT_PREVENT
-#define EXTRUDER_RUNOUT_MINTEMP 190
-#define EXTRUDER_RUNOUT_SECONDS 30
-#define EXTRUDER_RUNOUT_ESTEPS 14 // mm filament
-#define EXTRUDER_RUNOUT_SPEED 1500 // extrusion speed
-#define EXTRUDER_RUNOUT_EXTRUDE 100
-
-// @section temperature
-
-//These defines help to calibrate the AD595 sensor in case you get wrong temperature measurements.
-//The measured temperature is defined as "actualTemp = (measuredTemp * TEMP_SENSOR_AD595_GAIN) + TEMP_SENSOR_AD595_OFFSET"
-#define TEMP_SENSOR_AD595_OFFSET 0.0
-#define TEMP_SENSOR_AD595_GAIN 1.0
-
-//This is for controlling a fan to cool down the stepper drivers
-//it will turn on when any driver is enabled
-//and turn off after the set amount of seconds from last driver being disabled again
-#define CONTROLLERFAN_PIN -1 //Pin used for the fan to cool controller (-1 to disable)
-#define CONTROLLERFAN_SECS 60 //How many seconds, after all motors were disabled, the fan should run
-#define CONTROLLERFAN_SPEED 255 // == full speed
-
-// When first starting the main fan, run it at full speed for the
-// given number of milliseconds. This gets the fan spinning reliably
-// before setting a PWM value. (Does not work with software PWM for fan on Sanguinololu)
-#define FAN_KICKSTART_TIME 500
-
-// This defines the minimal speed for the main fan, run in PWM mode
-// to enable uncomment and set minimal PWM speed for reliable running (1-255)
-// if fan speed is [1 - (FAN_MIN_PWM-1)] it is set to FAN_MIN_PWM
-#define FAN_MIN_PWM 50
-
-// @section extruder
-
-// Extruder cooling fans
-// Configure fan pin outputs to automatically turn on/off when the associated
-// extruder temperature is above/below EXTRUDER_AUTO_FAN_TEMPERATURE.
-// Multiple extruders can be assigned to the same pin in which case
-// the fan will turn on when any selected extruder is above the threshold.
-#define EXTRUDER_0_AUTO_FAN_PIN -1
-#define EXTRUDER_1_AUTO_FAN_PIN -1
-#define EXTRUDER_2_AUTO_FAN_PIN -1
-#define EXTRUDER_3_AUTO_FAN_PIN -1
-#define EXTRUDER_AUTO_FAN_TEMPERATURE 50
-#define EXTRUDER_AUTO_FAN_SPEED 255 // == full speed
-
-//===========================================================================
-//============================ Mechanical Settings ==========================
-//===========================================================================
-
-// @section homing
-
-// If you want endstops to stay on (by default) even when not homing
-// enable this option. Override at any time with M120, M121.
-//#define ENDSTOPS_ALWAYS_ON_DEFAULT
-
-// @section extras
-
-//#define Z_LATE_ENABLE // Enable Z the last moment. Needed if your Z driver overheats.
-
-// Dual X Steppers
-// Uncomment this option to drive two X axis motors.
-// The next unused E driver will be assigned to the second X stepper.
-//#define X_DUAL_STEPPER_DRIVERS
-#if ENABLED(X_DUAL_STEPPER_DRIVERS)
- // Set true if the two X motors need to rotate in opposite directions
- #define INVERT_X2_VS_X_DIR true
-#endif
-
-
-// Dual Y Steppers
-// Uncomment this option to drive two Y axis motors.
-// The next unused E driver will be assigned to the second Y stepper.
-//#define Y_DUAL_STEPPER_DRIVERS
-#if ENABLED(Y_DUAL_STEPPER_DRIVERS)
- // Set true if the two Y motors need to rotate in opposite directions
- #define INVERT_Y2_VS_Y_DIR true
-#endif
-
-// A single Z stepper driver is usually used to drive 2 stepper motors.
-// Uncomment this option to use a separate stepper driver for each Z axis motor.
-// The next unused E driver will be assigned to the second Z stepper.
-//#define Z_DUAL_STEPPER_DRIVERS
-
-#if ENABLED(Z_DUAL_STEPPER_DRIVERS)
-
- // Z_DUAL_ENDSTOPS is a feature to enable the use of 2 endstops for both Z steppers - Let's call them Z stepper and Z2 stepper.
- // That way the machine is capable to align the bed during home, since both Z steppers are homed.
- // There is also an implementation of M666 (software endstops adjustment) to this feature.
- // After Z homing, this adjustment is applied to just one of the steppers in order to align the bed.
- // One just need to home the Z axis and measure the distance difference between both Z axis and apply the math: Z adjust = Z - Z2.
- // If the Z stepper axis is closer to the bed, the measure Z > Z2 (yes, it is.. think about it) and the Z adjust would be positive.
- // Play a little bit with small adjustments (0.5mm) and check the behaviour.
- // The M119 (endstops report) will start reporting the Z2 Endstop as well.
-
- //#define Z_DUAL_ENDSTOPS
-
- #if ENABLED(Z_DUAL_ENDSTOPS)
- #define Z2_USE_ENDSTOP _XMAX_
- #endif
-
-#endif // Z_DUAL_STEPPER_DRIVERS
-
-// Enable this for dual x-carriage printers.
-// A dual x-carriage design has the advantage that the inactive extruder can be parked which
-// prevents hot-end ooze contaminating the print. It also reduces the weight of each x-carriage
-// allowing faster printing speeds. Connect your X2 stepper to the first unused E plug.
-//#define DUAL_X_CARRIAGE
-#if ENABLED(DUAL_X_CARRIAGE)
- // Configuration for second X-carriage
- // Note: the first x-carriage is defined as the x-carriage which homes to the minimum endstop;
- // the second x-carriage always homes to the maximum endstop.
- #define X2_MIN_POS 80 // set minimum to ensure second x-carriage doesn't hit the parked first X-carriage
- #define X2_MAX_POS 353 // set maximum to the distance between toolheads when both heads are homed
- #define X2_HOME_DIR 1 // the second X-carriage always homes to the maximum endstop position
- #define X2_HOME_POS X2_MAX_POS // default home position is the maximum carriage position
- // However: In this mode the HOTEND_OFFSET_X value for the second extruder provides a software
- // override for X2_HOME_POS. This also allow recalibration of the distance between the two endstops
- // without modifying the firmware (through the "M218 T1 X???" command).
- // Remember: you should set the second extruder x-offset to 0 in your slicer.
-
- // There are a few selectable movement modes for dual x-carriages using M605 S
- // Mode 0: Full control. The slicer has full control over both x-carriages and can achieve optimal travel results
- // as long as it supports dual x-carriages. (M605 S0)
- // Mode 1: Auto-park mode. The firmware will automatically park and unpark the x-carriages on tool changes so
- // that additional slicer support is not required. (M605 S1)
- // Mode 2: Duplication mode. The firmware will transparently make the second x-carriage and extruder copy all
- // actions of the first x-carriage. This allows the printer to print 2 arbitrary items at
- // once. (2nd extruder x offset and temp offset are set using: M605 S2 [Xnnn] [Rmmm])
-
- // This is the default power-up mode which can be later using M605.
- #define DEFAULT_DUAL_X_CARRIAGE_MODE 0
-
- // Default settings in "Auto-park Mode"
- #define TOOLCHANGE_PARK_ZLIFT 0.2 // the distance to raise Z axis when parking an extruder
- #define TOOLCHANGE_UNPARK_ZLIFT 1 // the distance to raise Z axis when unparking an extruder
-
- // Default x offset in duplication mode (typically set to half print bed width)
- #define DEFAULT_DUPLICATION_X_OFFSET 100
-
-#endif //DUAL_X_CARRIAGE
-
-// @section homing
-
-//homing hits the endstop, then retracts by this distance, before it tries to slowly bump again:
-#define X_HOME_BUMP_MM 5
-#define Y_HOME_BUMP_MM 5
-#define Z_HOME_BUMP_MM 2
-#define HOMING_BUMP_DIVISOR {4, 4, 8} // Re-Bump Speed Divisor (Divides the Homing Feedrate)
-#define QUICK_HOME //if this is defined, if both x and y are to be homed, a diagonal move will be performed initially.
-
-// When G28 is called, this option will make Y home before X
-//#define HOME_Y_BEFORE_X
-
-// @section machine
-
-#define AXIS_RELATIVE_MODES {false, false, false, false}
-
-// Allow duplication mode with a basic dual-nozzle extruder
-//#define DUAL_NOZZLE_DUPLICATION_MODE
-
-// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
-#define INVERT_X_STEP_PIN false
-#define INVERT_Y_STEP_PIN false
-#define INVERT_Z_STEP_PIN false
-#define INVERT_E_STEP_PIN false
-
-// Default stepper release if idle. Set to 0 to deactivate.
-// Steppers will shut down DEFAULT_STEPPER_DEACTIVE_TIME seconds after the last move when DISABLE_INACTIVE_? is true.
-// Time can be set by M18 and M84.
-#define DEFAULT_STEPPER_DEACTIVE_TIME 60
-#define DISABLE_INACTIVE_X true
-#define DISABLE_INACTIVE_Y true
-#define DISABLE_INACTIVE_Z true // set to false if the nozzle will fall down on your printed part when print has finished.
-#define DISABLE_INACTIVE_E true
-
-#define DEFAULT_MINIMUMFEEDRATE 0.0 // minimum feedrate
-#define DEFAULT_MINTRAVELFEEDRATE 0.0
-
-// @section lcd
-
-#if ENABLED(ULTIPANEL)
- #define MANUAL_FEEDRATE {50*60, 50*60, 4*60, 60} // Feedrates for manual moves along X, Y, Z, E from panel
- #define ULTIPANEL_FEEDMULTIPLY // Comment to disable setting feedrate multiplier via encoder
-#endif
-
-// @section extras
-
-// minimum time in microseconds that a movement needs to take if the buffer is emptied.
-#define DEFAULT_MINSEGMENTTIME 20000
-
-// If defined the movements slow down when the look ahead buffer is only half full
-#define SLOWDOWN
-
-// Frequency limit
-// See nophead's blog for more info
-// Not working O
-//#define XY_FREQUENCY_LIMIT 15
-
-// Minimum planner junction speed. Sets the default minimum speed the planner plans for at the end
-// of the buffer and all stops. This should not be much greater than zero and should only be changed
-// if unwanted behavior is observed on a user's machine when running at very slow speeds.
-#define MINIMUM_PLANNER_SPEED 0.05// (mm/sec)
-
-// Microstep setting (Only functional when stepper driver microstep pins are connected to MCU.
-#define MICROSTEP_MODES {16,16,16,16,16} // [1,2,4,8,16]
-
-// Motor Current setting (Only functional when motor driver current ref pins are connected to a digital trimpot on supported boards)
-#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
-
-// Motor Current controlled via PWM (Overridable on supported boards with PWM-driven motor driver current)
-//#define PWM_MOTOR_CURRENT {1300, 1300, 1250} // Values in milliamps
-
-// uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
-//#define DIGIPOT_I2C
-// Number of channels available for I2C digipot, For Azteeg X3 Pro we have 8
-#define DIGIPOT_I2C_NUM_CHANNELS 8
-// actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
-#define DIGIPOT_I2C_MOTOR_CURRENTS {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}
-
-//===========================================================================
-//=============================Additional Features===========================
-//===========================================================================
-
-#define ENCODER_RATE_MULTIPLIER // If defined, certain menu edit operations automatically multiply the steps when the encoder is moved quickly
-#define ENCODER_10X_STEPS_PER_SEC 75 // If the encoder steps per sec exceeds this value, multiply steps moved x10 to quickly advance the value
-#define ENCODER_100X_STEPS_PER_SEC 160 // If the encoder steps per sec exceeds this value, multiply steps moved x100 to really quickly advance the value
-
-//#define CHDK 4 //Pin for triggering CHDK to take a picture see how to use it here http://captain-slow.dk/2014/03/09/3d-printing-timelapses/
-#define CHDK_DELAY 50 //How long in ms the pin should stay HIGH before going LOW again
-
-// @section lcd
-
-// Include a page of printer information in the LCD Main Menu
-//#define LCD_INFO_MENU
-
-#if ENABLED(SDSUPPORT)
-
- // Some RAMPS and other boards don't detect when an SD card is inserted. You can work
- // around this by connecting a push button or single throw switch to the pin defined
- // as SD_DETECT_PIN in your board's pins definitions.
- // This setting should be disabled unless you are using a push button, pulling the pin to ground.
- // Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
- #define SD_DETECT_INVERTED
-
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
- #define SD_FINISHED_RELEASECOMMAND "M84 X Y Z E" // You might want to keep the z enabled so your bed stays in place.
-
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
- #define MENU_ADDAUTOSTART
-
- // Show a progress bar on HD44780 LCDs for SD printing
- #define LCD_PROGRESS_BAR
-
- #if ENABLED(LCD_PROGRESS_BAR)
- // Amount of time (ms) to show the bar
- #define PROGRESS_BAR_BAR_TIME 2000
- // Amount of time (ms) to show the status message
- #define PROGRESS_BAR_MSG_TIME 3000
- // Amount of time (ms) to retain the status message (0=forever)
- #define PROGRESS_MSG_EXPIRE 0
- // Enable this to show messages for MSG_TIME then hide them
- //#define PROGRESS_MSG_ONCE
- #endif
-
- // This allows hosts to request long names for files and folders with M33
- #define LONG_FILENAME_HOST_SUPPORT
-
- // This option allows you to abort SD printing when any endstop is triggered.
- // This feature must be enabled with "M540 S1" or from the LCD menu.
- // To have any effect, endstops must be enabled during SD printing.
- //#define ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED
-
-#endif // SDSUPPORT
-
-// for dogm lcd displays you can choose some additional fonts:
-#if ENABLED(DOGLCD)
- // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT
- // we don't have a big font for Cyrillic, Kana
- //#define USE_BIG_EDIT_FONT
-
- // If you have spare 2300Byte of progmem and want to use a
- // smaller font on the Info-screen uncomment the next line.
- //#define USE_SMALL_INFOFONT
-#endif // DOGLCD
-
-// @section safety
-
-// The hardware watchdog should reset the microcontroller disabling all outputs,
-// in case the firmware gets stuck and doesn't do temperature regulation.
-#define USE_WATCHDOG
-
-#if ENABLED(USE_WATCHDOG)
- // If you have a watchdog reboot in an ArduinoMega2560 then the device will hang forever, as a watchdog reset will leave the watchdog on.
- // The "WATCHDOG_RESET_MANUAL" goes around this by not using the hardware reset.
- // However, THIS FEATURE IS UNSAFE!, as it will only work if interrupts are disabled. And the code could hang in an interrupt routine with interrupts disabled.
- //#define WATCHDOG_RESET_MANUAL
-#endif
-
-// @section lcd
-
-// Babystepping enables the user to control the axis in tiny amounts, independently from the normal printing process
-// it can e.g. be used to change z-positions in the print startup phase in real-time
-// does not respect endstops!
-#define BABYSTEPPING
-#if ENABLED(BABYSTEPPING)
- #define BABYSTEP_XY //not only z, but also XY in the menu. more clutter, more functions
- //not implemented for deltabots!
- #define BABYSTEP_INVERT_Z false //true for inverse movements in Z
- #define BABYSTEP_MULTIPLICATOR 1 //faster movements
-#endif
-
-// @section extruder
-
-// extruder advance constant (s2/mm3)
-//
-// advance (steps) = STEPS_PER_CUBIC_MM_E * EXTRUDER_ADVANCE_K * cubic mm per second ^ 2
-//
-// Hooke's law says: force = k * distance
-// Bernoulli's principle says: v ^ 2 / 2 + g . h + pressure / density = constant
-// so: v ^ 2 is proportional to number of steps we advance the extruder
-//#define ADVANCE
-
-#if ENABLED(ADVANCE)
- #define EXTRUDER_ADVANCE_K .0
- #define D_FILAMENT 2.85
-#endif
-
-// Implementation of a linear pressure control
-// Assumption: advance = k * (delta velocity)
-// K=0 means advance disabled. A good value for a gregs wade extruder will be around K=75
-//#define LIN_ADVANCE
-
-#if ENABLED(LIN_ADVANCE)
- #define LIN_ADVANCE_K 75
-#endif
-
-// @section leveling
-
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #define MESH_MIN_X (X_MIN_POS + MESH_INSET)
- #define MESH_MAX_X (X_MAX_POS - (MESH_INSET))
- #define MESH_MIN_Y (Y_MIN_POS + MESH_INSET)
- #define MESH_MAX_Y (Y_MAX_POS - (MESH_INSET))
-#endif
-
-// @section extras
-
-// Arc interpretation settings:
-#define ARC_SUPPORT // Disabling this saves ~2738 bytes
-#define MM_PER_ARC_SEGMENT 1
-#define N_ARC_CORRECTION 25
-
-// Support for G5 with XYZE destination and IJPQ offsets. Requires ~2666 bytes.
-//#define BEZIER_CURVE_SUPPORT
-
-const unsigned int dropsegments = 2; //everything with less than this number of steps will be ignored as move and joined with the next movement
-
-// @section temperature
-
-// Control heater 0 and heater 1 in parallel.
-//#define HEATERS_PARALLEL
-
-//===========================================================================
-//================================= Buffers =================================
-//===========================================================================
-
-// @section hidden
-
-// The number of linear motions that can be in the plan at any give time.
-// THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2, i.g. 8,16,32 because shifts and ors are used to do the ring-buffering.
-#if ENABLED(SDSUPPORT)
- #define BLOCK_BUFFER_SIZE 16 // SD,LCD,Buttons take more memory, block buffer needs to be smaller
-#else
- #define BLOCK_BUFFER_SIZE 32 // maximize block buffer
-#endif
-
-// @section serial
-
-// The ASCII buffer for serial input
-#define MAX_CMD_SIZE 96
-#define BUFSIZE 4
-
-// Transfer Buffer Size
-// To save 386 bytes of PROGMEM (and TX_BUFFER_SIZE+3 bytes of RAM) set to 0.
-// To buffer a simple "ok" you need 4 bytes.
-// For ADVANCED_OK (M105) you need 32 bytes.
-// For debug-echo: 128 bytes for the optimal speed.
-// Other output doesn't need to be that speedy.
-// :[0,2,4,8,16,32,64,128,256]
-#define TX_BUFFER_SIZE 0
-
-// Enable an emergency-command parser to intercept certain commands as they
-// enter the serial receive buffer, so they cannot be blocked.
-// Currently handles M108, M112, M410
-// Does not work on boards using AT90USB (USBCON) processors!
-//#define EMERGENCY_PARSER
-
-// Bad Serial-connections can miss a received command by sending an 'ok'
-// Therefore some clients abort after 30 seconds in a timeout.
-// Some other clients start sending commands while receiving a 'wait'.
-// This "wait" is only sent when the buffer is empty. 1 second is a good value here.
-//#define NO_TIMEOUTS 1000 // Milliseconds
-
-// Some clients will have this feature soon. This could make the NO_TIMEOUTS unnecessary.
-//#define ADVANCED_OK
-
-// @section fwretract
-
-// Firmware based and LCD controlled retract
-// M207 and M208 can be used to define parameters for the retraction.
-// The retraction can be called by the slicer using G10 and G11
-// until then, intended retractions can be detected by moves that only extrude and the direction.
-// the moves are than replaced by the firmware controlled ones.
-
-//#define FWRETRACT //ONLY PARTIALLY TESTED
-#if ENABLED(FWRETRACT)
- #define MIN_RETRACT 0.1 //minimum extruded mm to accept a automatic gcode retraction attempt
- #define RETRACT_LENGTH 3 //default retract length (positive mm)
- #define RETRACT_LENGTH_SWAP 13 //default swap retract length (positive mm), for extruder change
- #define RETRACT_FEEDRATE 45 //default feedrate for retracting (mm/s)
- #define RETRACT_ZLIFT 0 //default retract Z-lift
- #define RETRACT_RECOVER_LENGTH 0 //default additional recover length (mm, added to retract length when recovering)
- #define RETRACT_RECOVER_LENGTH_SWAP 0 //default additional swap recover length (mm, added to retract length when recovering from extruder change)
- #define RETRACT_RECOVER_FEEDRATE 8 //default feedrate for recovering from retraction (mm/s)
-#endif
-
-// Add support for experimental filament exchange support M600; requires display
-#if ENABLED(ULTIPANEL)
- // #define FILAMENT_CHANGE_FEATURE // Enable filament exchange menu and M600 g-code (used for runout sensor too)
- #if ENABLED(FILAMENT_CHANGE_FEATURE)
- #define FILAMENT_CHANGE_X_POS 3 // X position of hotend
- #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend
- #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift)
- #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
- #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers)
- #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm
- // It is a short retract used immediately after print interrupt before move to filament exchange position
- #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
- #define FILAMENT_CHANGE_UNLOAD_LENGTH 100 // Unload filament length from hotend in mm
- // Longer length for bowden printers to unload filament from whole bowden tube,
- // shorter lenght for printers without bowden to unload filament from extruder only,
- // 0 to disable unloading for manual unloading
- #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast
- #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm
- // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
- // Short or zero length for printers without bowden where loading is not used
- #define FILAMENT_CHANGE_LOAD_FEEDRATE 10 // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
- #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is load over the hotend,
- // 0 to disable for manual extrusion
- // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
- // or until outcoming filament color is not clear for filament color change
- #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
- #endif
-#endif
-
-/******************************************************************************\
- * enable this section if you have TMC26X motor drivers.
- * you need to import the TMC26XStepper library into the Arduino IDE for this
- ******************************************************************************/
-
-// @section tmc
-
-//#define HAVE_TMCDRIVER
-#if ENABLED(HAVE_TMCDRIVER)
-
- //#define X_IS_TMC
- #define X_MAX_CURRENT 1000 //in mA
- #define X_SENSE_RESISTOR 91 //in mOhms
- #define X_MICROSTEPS 16 //number of microsteps
-
- //#define X2_IS_TMC
- #define X2_MAX_CURRENT 1000 //in mA
- #define X2_SENSE_RESISTOR 91 //in mOhms
- #define X2_MICROSTEPS 16 //number of microsteps
-
- //#define Y_IS_TMC
- #define Y_MAX_CURRENT 1000 //in mA
- #define Y_SENSE_RESISTOR 91 //in mOhms
- #define Y_MICROSTEPS 16 //number of microsteps
-
- //#define Y2_IS_TMC
- #define Y2_MAX_CURRENT 1000 //in mA
- #define Y2_SENSE_RESISTOR 91 //in mOhms
- #define Y2_MICROSTEPS 16 //number of microsteps
-
- //#define Z_IS_TMC
- #define Z_MAX_CURRENT 1000 //in mA
- #define Z_SENSE_RESISTOR 91 //in mOhms
- #define Z_MICROSTEPS 16 //number of microsteps
-
- //#define Z2_IS_TMC
- #define Z2_MAX_CURRENT 1000 //in mA
- #define Z2_SENSE_RESISTOR 91 //in mOhms
- #define Z2_MICROSTEPS 16 //number of microsteps
-
- //#define E0_IS_TMC
- #define E0_MAX_CURRENT 1000 //in mA
- #define E0_SENSE_RESISTOR 91 //in mOhms
- #define E0_MICROSTEPS 16 //number of microsteps
-
- //#define E1_IS_TMC
- #define E1_MAX_CURRENT 1000 //in mA
- #define E1_SENSE_RESISTOR 91 //in mOhms
- #define E1_MICROSTEPS 16 //number of microsteps
-
- //#define E2_IS_TMC
- #define E2_MAX_CURRENT 1000 //in mA
- #define E2_SENSE_RESISTOR 91 //in mOhms
- #define E2_MICROSTEPS 16 //number of microsteps
-
- //#define E3_IS_TMC
- #define E3_MAX_CURRENT 1000 //in mA
- #define E3_SENSE_RESISTOR 91 //in mOhms
- #define E3_MICROSTEPS 16 //number of microsteps
-
-#endif
-
-/******************************************************************************\
- * enable this section if you have L6470 motor drivers.
- * you need to import the L6470 library into the Arduino IDE for this
- ******************************************************************************/
-
-// @section l6470
-
-//#define HAVE_L6470DRIVER
-#if ENABLED(HAVE_L6470DRIVER)
-
- //#define X_IS_L6470
- #define X_MICROSTEPS 16 //number of microsteps
- #define X_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define X_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define X_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define X2_IS_L6470
- #define X2_MICROSTEPS 16 //number of microsteps
- #define X2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define X2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define X2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Y_IS_L6470
- #define Y_MICROSTEPS 16 //number of microsteps
- #define Y_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Y_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Y_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Y2_IS_L6470
- #define Y2_MICROSTEPS 16 //number of microsteps
- #define Y2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Y2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Y2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Z_IS_L6470
- #define Z_MICROSTEPS 16 //number of microsteps
- #define Z_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Z_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Z_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Z2_IS_L6470
- #define Z2_MICROSTEPS 16 //number of microsteps
- #define Z2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Z2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Z2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E0_IS_L6470
- #define E0_MICROSTEPS 16 //number of microsteps
- #define E0_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E0_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E0_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E1_IS_L6470
- #define E1_MICROSTEPS 16 //number of microsteps
- #define E1_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E1_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E1_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E2_IS_L6470
- #define E2_MICROSTEPS 16 //number of microsteps
- #define E2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E3_IS_L6470
- #define E3_MICROSTEPS 16 //number of microsteps
- #define E3_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E3_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E3_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
-#endif
-
-/**
- * TWI/I2C BUS
- *
- * This feature is an EXPERIMENTAL feature so it shall not be used on production
- * machines. Enabling this will allow you to send and receive I2C data from slave
- * devices on the bus.
- *
- * ; Example #1
- * ; This macro send the string "Marlin" to the slave device with address 0x63 (99)
- * ; It uses multiple M155 commands with one B arg
- * M155 A99 ; Target slave address
- * M155 B77 ; M
- * M155 B97 ; a
- * M155 B114 ; r
- * M155 B108 ; l
- * M155 B105 ; i
- * M155 B110 ; n
- * M155 S1 ; Send the current buffer
- *
- * ; Example #2
- * ; Request 6 bytes from slave device with address 0x63 (99)
- * M156 A99 B5
- *
- * ; Example #3
- * ; Example serial output of a M156 request
- * echo:i2c-reply: from:99 bytes:5 data:hello
- */
-
-// @section i2cbus
-
-//#define EXPERIMENTAL_I2CBUS
-
-#endif // CONFIGURATION_ADV_H
diff --git a/Marlin/example_configurations/K8200/README.md b/Marlin/example_configurations/K8200/README.md
deleted file mode 100644
index bb29f51..0000000
--- a/Marlin/example_configurations/K8200/README.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# Example Configuration for Vellemann [K8200](http://www.k8200.eu/)
-* Configuration files for **Vellemann K8200** (with [VM8201](http://www.vellemanprojects.eu/products/view/?id=416158) - LCD Option for K8200)
-* K8200 is a 3Drag clone - configuration should work with 3Drag http://reprap.org/wiki/3drag, too. Please report.
-
-* updated manually with parameters from genuine Vellemann Firmware "firmware_k8200_marlinv2" based on the recent development branch
-
-* VM8201 uses "DISPLAY_CHARSET_HD44870_JAPAN" and "ULTIMAKERCONTROLLER"
-* german (de) translation with umlaut is supported now - thanks to @AnHardt for the great hardware based umlaut support
-
-I [@CONSULitAS](https://github.com/CONSULitAS) tested the changes on my K8200 with 20x4-LCD and Arduino 1.6.1 for Windows (SD library added to IDE manually) - everything works well.
-
-**Source for genuine [Vellemann Firmware](http://www.k8200.eu/support/downloads/)**
-* V2.1.1 (for z axis upgrade, date branched: 2013-06-05): [firmware_k8200_v2.1.1.zip](http://www.k8200.eu/downloads/files/downloads/firmware_k8200_v2.1.1.zip)
- * see also https://github.com/CONSULitAS/Marlin-K8200/tree/Vellemann_firmware_k8200_v2.1.1.zip
-
-* V2 (with LCD/SD-Support, date branched: 2013-06-05): [firmware_k8200_marlinv2.zip](http://www.k8200.eu/downloads/files/downloads/firmware_k8200_marlinv2.zip)
- * see also https://github.com/CONSULitAS/Marlin-K8200/tree/Vellemann_firmware_k8200_marlinv2.zip
-
-* V1 (without LCD/SD-Support, date branched: 2012-10-02): [firmware_k8200_marlinv1.zip](http://www.k8200.eu/downloads/files/downloads/firmware_k8200_marlinv1.zip)
- * see also https://github.com/CONSULitAS/Marlin-K8200/tree/Vellemann_firmware_k8200_marlinv1.zip
diff --git a/Marlin/example_configurations/K8400/Configuration.h b/Marlin/example_configurations/K8400/Configuration.h
deleted file mode 100644
index 47ab342..0000000
--- a/Marlin/example_configurations/K8400/Configuration.h
+++ /dev/null
@@ -1,1327 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Configuration.h
- *
- * Basic settings such as:
- *
- * - Type of electronics
- * - Type of temperature sensor
- * - Printer geometry
- * - Endstop configuration
- * - LCD controller
- * - Extra features
- *
- * Advanced settings can be found in Configuration_adv.h
- *
- */
-#ifndef CONFIGURATION_H
-#define CONFIGURATION_H
-
-/**
- *
- * ***********************************
- * ** ATTENTION TO ALL DEVELOPERS **
- * ***********************************
- *
- * You must increment this version number for every significant change such as,
- * but not limited to: ADD, DELETE RENAME OR REPURPOSE any directive/option.
- *
- * Note: Update also Version.h !
- */
-#define CONFIGURATION_H_VERSION 010100
-
-//===========================================================================
-//============================= Getting Started =============================
-//===========================================================================
-
-/**
- * Here are some standard links for getting your machine calibrated:
- *
- * http://reprap.org/wiki/Calibration
- * http://youtu.be/wAL9d7FgInk
- * http://calculator.josefprusa.cz
- * http://reprap.org/wiki/Triffid_Hunter%27s_Calibration_Guide
- * http://www.thingiverse.com/thing:5573
- * https://sites.google.com/site/repraplogphase/calibration-of-your-reprap
- * http://www.thingiverse.com/thing:298812
- */
-
-//===========================================================================
-//============================= DELTA Printer ===============================
-//===========================================================================
-// For a Delta printer replace the configuration files with the files in the
-// example_configurations/delta directory.
-//
-
-//===========================================================================
-//============================= SCARA Printer ===============================
-//===========================================================================
-// For a Scara printer replace the configuration files with the files in the
-// example_configurations/SCARA directory.
-//
-
-// @section info
-
-// User-specified version info of this build to display in [Pronterface, etc] terminal window during
-// startup. Implementation of an idea by Prof Braino to inform user that any changes made to this
-// build by the user have been successfully uploaded into firmware.
-#define STRING_CONFIG_H_AUTHOR "(Anthony Birkett, default config)" // Who made the changes.
-#define SHOW_BOOTSCREEN
-#define STRING_SPLASH_LINE1 SHORT_BUILD_VERSION // will be shown during boot in line 1
-#define STRING_SPLASH_LINE2 WEBSITE_URL // will be shown during boot in line 2
-
-//
-// *** VENDORS PLEASE READ *****************************************************
-//
-// Marlin now allow you to have a vendor boot image to be displayed on machine
-// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
-//
-// We suggest for you to take advantage of this new feature and keep the Marlin
-// boot image unmodified. For an example have a look at the bq Hephestos 2
-// example configuration folder.
-//
-//#define SHOW_CUSTOM_BOOTSCREEN
-// @section machine
-
-// SERIAL_PORT selects which serial port should be used for communication with the host.
-// This allows the connection of wireless adapters (for instance) to non-default port pins.
-// Serial port 0 is still used by the Arduino bootloader regardless of this setting.
-// :[0,1,2,3,4,5,6,7]
-#define SERIAL_PORT 0
-
-// This determines the communication speed of the printer
-// :[2400,9600,19200,38400,57600,115200,250000]
-#define BAUDRATE 250000
-
-// Enable the Bluetooth serial interface on AT90USB devices
-//#define BLUETOOTH
-
-// The following define selects which electronics board you have.
-// Please choose the name from boards.h that matches your setup
-#ifndef MOTHERBOARD
- #define MOTHERBOARD BOARD_K8400
-#endif
-
-// Optional custom name for your RepStrap or other custom machine
-// Displayed in the LCD "Ready" message
-//#define CUSTOM_MACHINE_NAME "3D Printer"
-
-// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
-// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
-//#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
-
-// This defines the number of extruders
-// :[1,2,3,4]
-#define EXTRUDERS 1
-
-// For Cyclops or any "multi-extruder" that shares a single nozzle.
-//#define SINGLENOZZLE
-
-// A dual extruder that uses a single stepper motor
-// Don't forget to set SSDE_SERVO_ANGLES and HOTEND_OFFSET_X/Y/Z
-//#define SWITCHING_EXTRUDER
-#if ENABLED(SWITCHING_EXTRUDER)
- #define SWITCHING_EXTRUDER_SERVO_NR 0
- #define SWITCHING_EXTRUDER_SERVO_ANGLES { 0, 90 } // Angles for E0, E1
- //#define HOTEND_OFFSET_Z {0.0, 0.0}
-#endif
-
-/**
- * "Mixing Extruder"
- * - Adds a new code, M165, to set the current mix factors.
- * - Extends the stepping routines to move multiple steppers in proportion to the mix.
- * - Optional support for Repetier Host M163, M164, and virtual extruder.
- * - This implementation supports only a single extruder.
- * - Enable DIRECT_MIXING_IN_G1 for Pia Taubert's reference implementation
- */
-//#define MIXING_EXTRUDER
-#if ENABLED(MIXING_EXTRUDER)
- #define MIXING_STEPPERS 2 // Number of steppers in your mixing extruder
- #define MIXING_VIRTUAL_TOOLS 16 // Use the Virtual Tool method with M163 and M164
- //#define DIRECT_MIXING_IN_G1 // Allow ABCDHI mix factors in G1 movement commands
-#endif
-
-// Offset of the extruders (uncomment if using more than one and relying on firmware to position when changing).
-// The offset has to be X=0, Y=0 for the extruder 0 hotend (default extruder).
-// For the other hotends it is their distance from the extruder 0 hotend.
-//#define HOTEND_OFFSET_X {0.0, 20.00} // (in mm) for each extruder, offset of the hotend on the X axis
-//#define HOTEND_OFFSET_Y {0.0, 5.00} // (in mm) for each extruder, offset of the hotend on the Y axis
-
-//// The following define selects which power supply you have. Please choose the one that matches your setup
-// 1 = ATX
-// 2 = X-Box 360 203Watts (the blue wire connected to PS_ON and the red wire to VCC)
-// :{1:'ATX',2:'X-Box 360'}
-#define POWER_SUPPLY 1
-
-// Define this to have the electronics keep the power supply off on startup. If you don't know what this is leave it.
-//#define PS_DEFAULT_OFF
-
-// @section temperature
-
-//===========================================================================
-//============================= Thermal Settings ============================
-//===========================================================================
-//
-//--NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table
-//
-//// Temperature sensor settings:
-// -3 is thermocouple with MAX31855 (only for sensor 0)
-// -2 is thermocouple with MAX6675 (only for sensor 0)
-// -1 is thermocouple with AD595
-// 0 is not used
-// 1 is 100k thermistor - best choice for EPCOS 100k (4.7k pullup)
-// 2 is 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)
-// 3 is Mendel-parts thermistor (4.7k pullup)
-// 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !!
-// 5 is 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup)
-// 6 is 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup)
-// 7 is 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup)
-// 71 is 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup)
-// 8 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup)
-// 9 is 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup)
-// 10 is 100k RS thermistor 198-961 (4.7k pullup)
-// 11 is 100k beta 3950 1% thermistor (4.7k pullup)
-// 12 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed)
-// 13 is 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE"
-// 20 is the PT100 circuit found in the Ultimainboard V2.x
-// 60 is 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
-// 66 is 4.7M High Temperature thermistor from Dyze Design
-// 70 is the 100K thermistor found in the bq Hephestos 2
-//
-// 1k ohm pullup tables - This is not normal, you would have to have changed out your 4.7k for 1k
-// (but gives greater accuracy and more stable PID)
-// 51 is 100k thermistor - EPCOS (1k pullup)
-// 52 is 200k thermistor - ATC Semitec 204GT-2 (1k pullup)
-// 55 is 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup)
-//
-// 1047 is Pt1000 with 4k7 pullup
-// 1010 is Pt1000 with 1k pullup (non standard)
-// 147 is Pt100 with 4k7 pullup
-// 110 is Pt100 with 1k pullup (non standard)
-// 998 and 999 are Dummy Tables. They will ALWAYS read 25°C or the temperature defined below.
-// Use it for Testing or Development purposes. NEVER for production machine.
-//#define DUMMY_THERMISTOR_998_VALUE 25
-//#define DUMMY_THERMISTOR_999_VALUE 100
-// :{ '0': "Not used",'1':"100k / 4.7k - EPCOS",'2':"200k / 4.7k - ATC Semitec 204GT-2",'3':"Mendel-parts / 4.7k",'4':"10k !! do not use for a hotend. Bad resolution at high temp. !!",'5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)",'6':"100k / 4.7k EPCOS - Not as accurate as Table 1",'7':"100k / 4.7k Honeywell 135-104LAG-J01",'8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT",'9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1",'10':"100k / 4.7k RS 198-961",'11':"100k / 4.7k beta 3950 1%",'12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)",'13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'",'20':"PT100 (Ultimainboard V2.x)",'51':"100k / 1k - EPCOS",'52':"200k / 1k - ATC Semitec 204GT-2",'55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)",'60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950",'66':"Dyze Design 4.7M High Temperature thermistor",'70':"the 100K thermistor found in the bq Hephestos 2",'71':"100k / 4.7k Honeywell 135-104LAF-J01",'147':"Pt100 / 4.7k",'1047':"Pt1000 / 4.7k",'110':"Pt100 / 1k (non-standard)",'1010':"Pt1000 / 1k (non standard)",'-3':"Thermocouple + MAX31855 (only for sensor 0)",'-2':"Thermocouple + MAX6675 (only for sensor 0)",'-1':"Thermocouple + AD595",'998':"Dummy 1",'999':"Dummy 2" }
-#define TEMP_SENSOR_0 5
-#define TEMP_SENSOR_1 0
-#define TEMP_SENSOR_2 0
-#define TEMP_SENSOR_3 0
-#define TEMP_SENSOR_BED 0
-
-// This makes temp sensor 1 a redundant sensor for sensor 0. If the temperatures difference between these sensors is to high the print will be aborted.
-//#define TEMP_SENSOR_1_AS_REDUNDANT
-#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 10
-
-// Extruder temperature must be close to target for this long before M109 returns success
-#define TEMP_RESIDENCY_TIME 2 // (seconds)
-#define TEMP_HYSTERESIS 5 // (degC) range of +/- temperatures considered "close" to the target one
-#define TEMP_WINDOW 1 // (degC) Window around target to start the residency timer x degC early.
-
-// Bed temperature must be close to target for this long before M190 returns success
-#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.
-
-// The minimal temperature defines the temperature below which the heater will not be enabled It is used
-// to check that the wiring to the thermistor is not broken.
-// Otherwise this would lead to the heater being powered on all the time.
-#define HEATER_0_MINTEMP 5
-#define HEATER_1_MINTEMP 5
-#define HEATER_2_MINTEMP 5
-#define HEATER_3_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 275
-#define HEATER_1_MAXTEMP 275
-#define HEATER_2_MAXTEMP 275
-#define HEATER_3_MAXTEMP 275
-#define BED_MAXTEMP 150
-
-//===========================================================================
-//============================= PID Settings ================================
-//===========================================================================
-// PID Tuning Guide here: http://reprap.org/wiki/PID_Tuning
-
-// Comment the following line to disable PID and enable bang-bang.
-#define PIDTEMP
-#define BANG_MAX 255 // limits current to nozzle while in bang-bang mode; 255=full current
-#define PID_MAX BANG_MAX // limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
-#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
- //#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
- // Set/get with gcode: M301 E[extruder number, 0-2]
- #define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
- // is more than PID_FUNCTIONAL_RANGE then the PID will be shut off and the heater will be set to min/max.
- #define PID_INTEGRAL_DRIVE_MAX PID_MAX //limit for the integral term
- #define K1 0.95 //smoothing factor within the PID
-
- // If you are using a pre-configured hotend then you can use one of the value sets by uncommenting it
- // Ultimaker
- //#define DEFAULT_Kp 22.2
- //#define DEFAULT_Ki 1.08
- //#define DEFAULT_Kd 114
-
- // MakerGear
- //#define DEFAULT_Kp 7.0
- //#define DEFAULT_Ki 0.1
- //#define DEFAULT_Kd 12
-
- // Mendel Parts V9 on 12V
- #define DEFAULT_Kp 63.0
- #define DEFAULT_Ki 2.25
- #define DEFAULT_Kd 440
-
-#endif // PIDTEMP
-
-//===========================================================================
-//============================= PID > Bed Temperature Control ===============
-//===========================================================================
-// Select PID or bang-bang with PIDTEMPBED. If bang-bang, BED_LIMIT_SWITCHING will enable hysteresis
-//
-// Uncomment this to enable PID on the bed. It uses the same frequency PWM as the extruder.
-// If your PID_dT is the default, and correct for your hardware/configuration, that means 7.689Hz,
-// which is fine for driving a square wave into a resistive load and does not significantly impact you FET heating.
-// This also works fine on a Fotek SSR-10DA Solid State Relay into a 250W heater.
-// If your configuration is significantly different than this and you don't understand the issues involved, you probably
-// shouldn't use bed PID until someone else verifies your hardware works.
-// If this is enabled, find your own PID constants below.
-//#define PIDTEMPBED
-
-//#define BED_LIMIT_SWITCHING
-
-// This sets the max power delivered to the bed, and replaces the HEATER_BED_DUTY_CYCLE_DIVIDER option.
-// all forms of bed control obey this (PID, bang-bang, bang-bang with hysteresis)
-// setting this to anything other than 255 enables a form of PWM to the bed just like HEATER_BED_DUTY_CYCLE_DIVIDER did,
-// so you shouldn't use it unless you are OK with PWM on your bed. (see the comment on enabling PIDTEMPBED)
-#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current
-
-#if ENABLED(PIDTEMPBED)
-
- //#define PID_BED_DEBUG // Sends debug data to the serial port.
-
- #define PID_BED_INTEGRAL_DRIVE_MAX MAX_BED_POWER //limit for the integral term
-
- //120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
- //from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10)
- #define DEFAULT_bedKp 10.00
- #define DEFAULT_bedKi .023
- #define DEFAULT_bedKd 305.4
-
- //120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
- //from pidautotune
- //#define DEFAULT_bedKp 97.1
- //#define DEFAULT_bedKi 1.41
- //#define DEFAULT_bedKd 1675.16
-
- // FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles.
-#endif // PIDTEMPBED
-
-// @section extruder
-
-//this prevents dangerous Extruder moves, i.e. if the temperature is under the limit
-//can be software-disabled for whatever purposes by
-#define PREVENT_DANGEROUS_EXTRUDE
-//if PREVENT_DANGEROUS_EXTRUDE is on, you can still disable (uncomment) very long bits of extrusion separately.
-#define PREVENT_LENGTHY_EXTRUDE
-
-#define EXTRUDE_MINTEMP 160
-#define EXTRUDE_MAXLENGTH (X_MAX_LENGTH+Y_MAX_LENGTH) //prevent extrusion of very large distances.
-
-//===========================================================================
-//======================== Thermal Runaway Protection =======================
-//===========================================================================
-
-/**
- * Thermal Protection protects your printer from damage and fire if a
- * thermistor falls out or temperature sensors fail in any way.
- *
- * The issue: If a thermistor falls out or a temperature sensor fails,
- * Marlin can no longer sense the actual temperature. Since a disconnected
- * thermistor reads as a low temperature, the firmware will keep the heater on.
- *
- * If you get "Thermal Runaway" or "Heating failed" errors the
- * details can be tuned in Configuration_adv.h
- */
-
-#define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders
-#define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed
-
-//===========================================================================
-//============================= Mechanical Settings =========================
-//===========================================================================
-
-// @section machine
-
-// Uncomment one of these options to enable CoreXY, CoreXZ, or CoreYZ kinematics
-//#define COREXY
-//#define COREXZ
-//#define COREYZ
-
-// Enable this option for Toshiba steppers
-//#define CONFIG_STEPPERS_TOSHIBA
-
-//===========================================================================
-//============================== Endstop Settings ===========================
-//===========================================================================
-
-// @section homing
-
-// Specify here all the endstop connectors that are connected to any endstop or probe.
-// Almost all printers will be using one per axis. Probes will use one or more of the
-// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
-#define USE_XMIN_PLUG
-#define USE_YMIN_PLUG
-#define USE_ZMIN_PLUG
-//#define USE_XMAX_PLUG
-//#define USE_YMAX_PLUG
-//#define USE_ZMAX_PLUG
-
-// coarse Endstop Settings
-#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
-
-#if DISABLED(ENDSTOPPULLUPS)
- // fine endstop settings: Individual pullups. will be ignored if ENDSTOPPULLUPS is defined
- //#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 // set to true to invert the logic of the endstop.
-#define Y_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Z_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define X_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Y_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Z_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Z_MIN_PROBE_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-
-//===========================================================================
-//============================= Z Probe Options =============================
-//===========================================================================
-
-//
-// Probe Type
-// Probes are sensors/switches that are activated / deactivated before/after use.
-//
-// Allen Key Probes, Servo Probes, Z-Sled Probes, FIX_MOUNTED_PROBE, etc.
-// You must activate one of these to use AUTO_BED_LEVELING_FEATURE below.
-//
-// Use M851 to set the Z probe vertical offset from the nozzle. Store with M500.
-//
-
-// A Fix-Mounted Probe either doesn't deploy or needs manual deployment.
-// For example an inductive probe, or a setup that uses the nozzle to probe.
-// An inductive probe must be deactivated to go below
-// its trigger-point if hardware endstops are active.
-//#define FIX_MOUNTED_PROBE
-
-// The BLTouch probe emulates a servo probe.
-//#define BLTOUCH
-
-// Z Servo Probe, such as an endstop switch on a rotating arm.
-//#define Z_ENDSTOP_SERVO_NR 0
-//#define Z_SERVO_ANGLES {70,0} // Z Servo Deploy and Stow angles
-
-// Enable if you have a Z probe mounted on a sled like those designed by Charles Bell.
-//#define Z_PROBE_SLED
-//#define SLED_DOCKING_OFFSET 5 // The extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.
-
-// Z Probe to nozzle (X,Y) offset, relative to (0, 0).
-// X and Y offsets must be integers.
-//
-// In the following example the X and Y offsets are both positive:
-// #define X_PROBE_OFFSET_FROM_EXTRUDER 10
-// #define Y_PROBE_OFFSET_FROM_EXTRUDER 10
-//
-// +-- BACK ---+
-// | |
-// L | (+) P | R <-- probe (20,20)
-// E | | I
-// F | (-) N (+) | G <-- nozzle (10,10)
-// T | | H
-// | (-) | T
-// | |
-// O-- FRONT --+
-// (0,0)
-#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]
-
-// X and Y axis travel speed (mm/m) between probes
-#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
-#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
-// Speed for the "accurate" probe of each point
-#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
-
-//
-// Allen Key Probe is defined in the Delta example configurations.
-//
-
-// Enable Z_MIN_PROBE_ENDSTOP to use _both_ a Z Probe and a Z-min-endstop on the same machine.
-// With this option the Z_MIN_PROBE_PIN will only be used for probing, never for homing.
-//
-// *** PLEASE READ ALL INSTRUCTIONS BELOW FOR SAFETY! ***
-//
-// To continue using the Z-min-endstop for homing, be sure to disable Z_SAFE_HOMING.
-// Example: To park the head outside the bed area when homing with G28.
-//
-// To use a separate Z probe, your board must define a Z_MIN_PROBE_PIN.
-//
-// For a servo-based Z probe, you must set up servo support below, including
-// NUM_SERVOS, Z_ENDSTOP_SERVO_NR and Z_SERVO_ANGLES.
-//
-// - RAMPS 1.3/1.4 boards may be able to use the 5V, GND, and Aux4->D32 pin.
-// - Use 5V for powered (usu. inductive) sensors.
-// - Otherwise connect:
-// - normally-closed switches to GND and D32.
-// - normally-open switches to 5V and D32.
-//
-// Normally-closed switches are advised and are the default.
-//
-// The Z_MIN_PROBE_PIN sets the Arduino pin to use. (See your board's pins file.)
-// Since the RAMPS Aux4->D32 pin maps directly to the Arduino D32 pin, D32 is the
-// default pin for all RAMPS-based boards. Some other boards map differently.
-// To set or change the pin for your board, edit the appropriate pins_XXXXX.h file.
-//
-// WARNING:
-// Setting the wrong pin may have unexpected and potentially disastrous consequences.
-// Use with caution and do your homework.
-//
-//#define Z_MIN_PROBE_ENDSTOP
-
-// Enable Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN to use the Z_MIN_PIN for your Z_MIN_PROBE.
-// The Z_MIN_PIN will then be used for both Z-homing and probing.
-#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
-
-// To use a probe you must enable one of the two options above!
-
-// This option disables the use of the Z_MIN_PROBE_PIN
-// To enable the Z probe pin but disable its use, uncomment the line below. This only affects a
-// Z probe switch if you have a separate Z min endstop also and have activated Z_MIN_PROBE_ENDSTOP above.
-// If you're using the Z MIN endstop connector for your Z probe, this has no effect.
-//#define DISABLE_Z_MIN_PROBE_ENDSTOP
-
-// Enable Z Probe Repeatability test to see how accurate your probe is
-//#define Z_MIN_PROBE_REPEATABILITY_TEST
-
-//
-// Probe Raise options provide clearance for the probe to deploy, stow, and travel.
-//
-#define Z_PROBE_DEPLOY_HEIGHT 15 // Raise to make room for the probe to deploy / stow
-#define Z_PROBE_TRAVEL_HEIGHT 5 // Raise between probing points.
-
-//
-// For M851 give a range for adjusting the Z probe offset
-//
-#define Z_PROBE_OFFSET_RANGE_MIN -20
-#define Z_PROBE_OFFSET_RANGE_MAX 20
-
-// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
-// :{0:'Low',1:'High'}
-#define X_ENABLE_ON 0
-#define Y_ENABLE_ON 0
-#define Z_ENABLE_ON 0
-#define E_ENABLE_ON 0 // For all extruders
-
-// Disables axis stepper immediately when it's not being used.
-// WARNING: When motors turn off there is a chance of losing position accuracy!
-#define DISABLE_X false
-#define DISABLE_Y false
-#define DISABLE_Z false
-// Warn on display about possibly reduced accuracy
-//#define DISABLE_REDUCED_ACCURACY_WARNING
-
-// @section extruder
-
-#define DISABLE_E false // For all extruders
-#define DISABLE_INACTIVE_EXTRUDER true //disable only inactive extruders and keep active extruder enabled
-
-// @section machine
-
-// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way.
-#define INVERT_X_DIR false
-#define INVERT_Y_DIR true
-#define INVERT_Z_DIR true
-
-// @section extruder
-
-// For direct drive extruder v9 set to true, for geared extruder set to false.
-#define INVERT_E0_DIR false
-#define INVERT_E1_DIR true
-#define INVERT_E2_DIR false
-#define INVERT_E3_DIR false
-
-// @section homing
-
-//#define Z_HOMING_HEIGHT 4 // (in mm) Minimal z height before homing (G28) for Z clearance above the bed, clamps, ...
- // Be sure you have this distance over your Z_MAX_POS in case.
-
-// ENDSTOP SETTINGS:
-// Sets direction of endstops when homing; 1=MAX, -1=MIN
-// :[-1,1]
-#define X_HOME_DIR -1
-#define Y_HOME_DIR -1
-#define Z_HOME_DIR -1
-
-#define min_software_endstops true // If true, axis won't move to coordinates less than HOME_POS.
-#define max_software_endstops true // If true, axis won't move to coordinates greater than the defined lengths below.
-
-// @section machine
-
-// Travel limits after homing (units are in mm)
-#define X_MIN_POS 0
-#define Y_MIN_POS 20
-#define Z_MIN_POS 0
-#define X_MAX_POS 200
-#define Y_MAX_POS 200
-#define Z_MAX_POS 190
-
-//===========================================================================
-//========================= Filament Runout Sensor ==========================
-//===========================================================================
-//#define FILAMENT_RUNOUT_SENSOR // Uncomment for defining a filament runout sensor such as a mechanical or opto endstop to check the existence of filament
- // In RAMPS uses servo pin 2. Can be changed in pins file. For other boards pin definition should be made.
- // It is assumed that when logic high = filament available
- // when logic low = filament ran out
-#if ENABLED(FILAMENT_RUNOUT_SENSOR)
- const bool FIL_RUNOUT_INVERTING = false; // set to true to invert the logic of the sensor.
- #define ENDSTOPPULLUP_FIL_RUNOUT // Uncomment to use internal pullup for filament runout pins if the sensor is defined.
- #define FILAMENT_RUNOUT_SCRIPT "M600"
-#endif
-
-//===========================================================================
-//============================ Mesh Bed Leveling ============================
-//===========================================================================
-
-//#define MESH_BED_LEVELING // Enable mesh bed leveling.
-
-#if ENABLED(MESH_BED_LEVELING)
- #define MESH_INSET 10 // Mesh inset margin on print area
- #define MESH_NUM_X_POINTS 3 // Don't use more than 7 points per axis, implementation limited.
- #define MESH_NUM_Y_POINTS 3
- #define MESH_HOME_SEARCH_Z 4 // Z after Home, bed somewhere below but above 0.0.
-
- //#define MESH_G28_REST_ORIGIN // After homing all axes ('G28' or 'G28 XYZ') rest at origin [0,0,0]
-
- //#define MANUAL_BED_LEVELING // Add display menu option for bed leveling.
-
- #if ENABLED(MANUAL_BED_LEVELING)
- #define MBL_Z_STEP 0.025 // Step size while manually probing Z axis.
- #endif // MANUAL_BED_LEVELING
-
-#endif // MESH_BED_LEVELING
-
-//===========================================================================
-//============================ Bed Auto Leveling ============================
-//===========================================================================
-
-// @section bedlevel
-
-//#define AUTO_BED_LEVELING_FEATURE // Delete the comment to enable (remove // at the start of the line)
-
-// Enable this feature to get detailed logging of G28, G29, M48, etc.
-// Logging is off by default. Enable this logging feature with 'M111 S32'.
-// NOTE: Requires a huge amount of PROGMEM.
-//#define DEBUG_LEVELING_FEATURE
-
-#if ENABLED(AUTO_BED_LEVELING_FEATURE)
-
- // There are 2 different ways to specify probing locations:
- //
- // - "grid" mode
- // Probe several points in a rectangular grid.
- // You specify the rectangle and the density of sample points.
- // This mode is preferred because there are more measurements.
- //
- // - "3-point" mode
- // Probe 3 arbitrary points on the bed (that aren't collinear)
- // You specify the XY coordinates of all 3 points.
-
- // Enable this to sample the bed in a grid (least squares solution).
- // Note: this feature generates 10KB extra code size.
- #define AUTO_BED_LEVELING_GRID
-
- #if ENABLED(AUTO_BED_LEVELING_GRID)
-
- #define LEFT_PROBE_BED_POSITION 15
- #define RIGHT_PROBE_BED_POSITION 170
- #define FRONT_PROBE_BED_POSITION 20
- #define BACK_PROBE_BED_POSITION 170
-
- #define MIN_PROBE_EDGE 10 // The Z probe minimum square sides can be no smaller than this.
-
- // Set the number of grid points per dimension.
- // You probably don't need more than 3 (squared=9).
- #define AUTO_BED_LEVELING_GRID_POINTS 2
-
- #else // !AUTO_BED_LEVELING_GRID
-
- // Arbitrary points to probe.
- // A simple cross-product is used to estimate the plane of the bed.
- #define ABL_PROBE_PT_1_X 15
- #define ABL_PROBE_PT_1_Y 180
- #define ABL_PROBE_PT_2_X 15
- #define ABL_PROBE_PT_2_Y 20
- #define ABL_PROBE_PT_3_X 170
- #define ABL_PROBE_PT_3_Y 20
-
- #endif // !AUTO_BED_LEVELING_GRID
-
- //#define Z_PROBE_END_SCRIPT "G1 Z10 F12000\nG1 X15 Y330\nG1 Z0.5\nG1 Z10" // These commands will be executed in the end of G29 routine.
- // Useful to retract a deployable Z probe.
-
- // If you've enabled AUTO_BED_LEVELING_FEATURE and are using the Z Probe for Z Homing,
- // it is highly recommended you also enable Z_SAFE_HOMING below!
-
-#endif // AUTO_BED_LEVELING_FEATURE
-
-
-// @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 // Distance between the nozzle to printbed after homing
-
-// Use "Z Safe Homing" to avoid homing with a Z probe outside the bed area.
-//
-// With this feature enabled:
-//
-// - Allow Z homing only after X and Y homing AND stepper drivers still enabled.
-// - If stepper drivers time out, it will need X and Y homing again before Z homing.
-// - Move the Z probe (or nozzle) to a defined XY point before Z Homing when homing all axes (G28).
-// - Prevent Z homing when the Z probe is outside bed area.
-//#define Z_SAFE_HOMING
-
-#if ENABLED(Z_SAFE_HOMING)
- #define Z_SAFE_HOMING_X_POINT ((X_MIN_POS + X_MAX_POS) / 2) // X point for Z homing when homing all axis (G28).
- #define Z_SAFE_HOMING_Y_POINT ((Y_MIN_POS + Y_MAX_POS) / 2) // Y point for Z homing when homing all axis (G28).
-#endif
-
-// Homing speeds (mm/m)
-#define HOMING_FEEDRATE_XY (50*60)
-#define HOMING_FEEDRATE_Z (8*60)
-
-//
-// MOVEMENT SETTINGS
-// @section motion
-//
-
-// default settings
-
-#define DEFAULT_AXIS_STEPS_PER_UNIT {134.74,134.74,4266.66,148.7} // default steps per unit for Ultimaker
-#define DEFAULT_MAX_FEEDRATE {160, 160, 10, 10000} // (mm/sec)
-#define DEFAULT_MAX_ACCELERATION {9000,9000,100,10000} // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for Skeinforge 40+, for older versions raise them a lot.
-
-#define DEFAULT_ACCELERATION 6000 // X, Y, Z and E acceleration in mm/s^2 for printing moves
-#define DEFAULT_RETRACT_ACCELERATION 6000 // E acceleration in mm/s^2 for retracts
-#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
-
-// The speed change that does not require acceleration (i.e. the software might assume it can be done instantaneously)
-#define DEFAULT_XYJERK 10.0 // (mm/sec)
-#define DEFAULT_ZJERK 0.5 // (mm/sec)
-#define DEFAULT_EJERK 20.0 // (mm/sec)
-
-
-//=============================================================================
-//============================= Additional Features ===========================
-//=============================================================================
-
-// @section extras
-
-//
-// EEPROM
-//
-// The microcontroller can store settings in the EEPROM, e.g. max velocity...
-// M500 - stores parameters in EEPROM
-// M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily).
-// M502 - reverts to the default "factory settings". You still need to store them in EEPROM afterwards if you want to.
-//define this to enable EEPROM support
-#define EEPROM_SETTINGS
-
-#if ENABLED(EEPROM_SETTINGS)
- // To disable EEPROM Serial responses and decrease program space by ~1700 byte: comment this out:
- #define EEPROM_CHITCHAT // Please keep turned on if you can.
-#endif
-
-//
-// Host Keepalive
-//
-// When enabled Marlin will send a busy status message to the host
-// every couple of seconds when it can't accept commands.
-//
-#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.
-
-//
-// M100 Free Memory Watcher
-//
-//#define M100_FREE_MEMORY_WATCHER // uncomment to add the M100 Free Memory Watcher for debug purpose
-
-//
-// G20/G21 Inch mode support
-//
-//#define INCH_MODE_SUPPORT
-
-//
-// M149 Set temperature units support
-//
-//#define TEMPERATURE_UNITS_SUPPORT
-
-// @section temperature
-
-// Preheat Constants
-#define PREHEAT_1_TEMP_HOTEND 210
-#define PREHEAT_1_TEMP_BED 0
-#define PREHEAT_1_FAN_SPEED 165 // Value from 0 to 255
-
-#define PREHEAT_2_TEMP_HOTEND 245
-#define PREHEAT_2_TEMP_BED 0
-#define PREHEAT_2_FAN_SPEED 165 // Value from 0 to 255
-
-//
-// Nozzle Park -- EXPERIMENTAL
-//
-// When enabled allows the user to define a special XYZ position, inside the
-// machine's topology, to park the nozzle when idle or when receiving the G27
-// command.
-//
-// The "P" paramenter controls what is the action applied to the Z axis:
-// P0: (Default) If current Z-pos is lower than Z-park then the nozzle will
-// be raised to reach Z-park height.
-//
-// P1: No matter the current Z-pos, the nozzle will be raised/lowered to
-// reach Z-park height.
-//
-// P2: The nozzle height will be raised by Z-park amount but never going over
-// the machine's limit of Z_MAX_POS.
-//
-//#define NOZZLE_PARK_FEATURE
-
-#if ENABLED(NOZZLE_PARK_FEATURE)
- // Specify a park position as { X, Y, Z }
- #define NOZZLE_PARK_POINT { (X_MIN_POS + 10), (Y_MAX_POS - 10), 20 }
-#endif
-
-//
-// Clean Nozzle Feature -- EXPERIMENTAL
-//
-// When enabled allows the user to send G12 to start the nozzle cleaning
-// process, the G-Code accepts two parameters:
-// "P" for pattern selection
-// "S" for defining the number of strokes/repetitions
-//
-// Available list of patterns:
-// P0: This is the default pattern, this process requires a sponge type
-// material at a fixed bed location, the cleaning process is based on
-// "strokes" i.e. back-and-forth movements between the starting and end
-// points.
-//
-// P1: This starts a zig-zag pattern between (X0, Y0) and (X1, Y1), "T"
-// defines the number of zig-zag triangles to be done. "S" defines the
-// number of strokes aka one back-and-forth movement. As an example
-// sending "G12 P1 S1 T3" will execute:
-//
-// --
-// | (X0, Y1) | /\ /\ /\ | (X1, Y1)
-// | | / \ / \ / \ |
-// A | | / \ / \ / \ |
-// | | / \ / \ / \ |
-// | (X0, Y0) | / \/ \/ \ | (X1, Y0)
-// -- +--------------------------------+
-// |________|_________|_________|
-// T1 T2 T3
-//
-// Caveats: End point Z should use the same value as Start point Z.
-//
-// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
-// may change to add new functionality like different wipe patterns.
-//
-//#define NOZZLE_CLEAN_FEATURE
-
-#if ENABLED(NOZZLE_CLEAN_FEATURE)
- // Number of pattern repetitions
- #define NOZZLE_CLEAN_STROKES 12
-
- // Specify positions as { X, Y, Z }
- #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
- #define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
-
- // Moves the nozzle to the initial position
- #define NOZZLE_CLEAN_GOBACK
-#endif
-
-//
-// Print job timer
-//
-// Enable this option to automatically start and stop the
-// print job timer when M104/M109/M190 commands are received.
-// M104 (extruder without wait) - high temp = none, low temp = stop timer
-// M109 (extruder with wait) - high temp = start timer, low temp = stop timer
-// M190 (bed with wait) - high temp = start timer, low temp = none
-//
-// In all cases the timer can be started and stopped using
-// the following commands:
-//
-// - M75 - Start the print job timer
-// - M76 - Pause the print job timer
-// - M77 - Stop the print job timer
-#define PRINTJOB_TIMER_AUTOSTART
-
-//
-// Print Counter
-//
-// When enabled Marlin will keep track of some print statistical data such as:
-// - Total print jobs
-// - Total successful print jobs
-// - Total failed print jobs
-// - Total time printing
-//
-// This information can be viewed by the M78 command.
-//#define PRINTCOUNTER
-
-//=============================================================================
-//============================= LCD and SD support ============================
-//=============================================================================
-
-// @section lcd
-
-//
-// LCD LANGUAGE
-//
-// Here you may choose the language used by Marlin on the LCD menus, the following
-// list of languages are available:
-// en, an, bg, ca, cn, cz, de, el, el-gr, es, eu, fi, fr, gl, hr, it,
-// kana, kana_utf8, nl, pl, pt, pt_utf8, pt-br, pt-br_utf8, ru, test
-//
-// :{'en':'English','an':'Aragonese','bg':'Bulgarian','ca':'Catalan','cn':'Chinese','cz':'Czech','de':'German','el':'Greek','el-gr':'Greek (Greece)','es':'Spanish','eu':'Basque-Euskera','fi':'Finnish','fr':'French','gl':'Galician','hr':'Croatian','it':'Italian','kana':'Japanese','kana_utf8':'Japanese (UTF8)','nl':'Dutch','pl':'Polish','pt':'Portuguese','pt-br':'Portuguese (Brazilian)','pt-br_utf8':'Portuguese (Brazilian UTF8)','pt_utf8':'Portuguese (UTF8)','ru':'Russian','test':'TEST'}
-//
-#define LCD_LANGUAGE en
-
-//
-// LCD Character Set
-//
-// Note: This option is NOT applicable to Graphical Displays.
-//
-// All character-based LCD's provide ASCII plus one of these
-// language extensions:
-//
-// - JAPANESE ... the most common
-// - WESTERN ... with more accented characters
-// - CYRILLIC ... for the Russian language
-//
-// To determine the language extension installed on your controller:
-//
-// - Compile and upload with LCD_LANGUAGE set to 'test'
-// - Click the controller to view the LCD menu
-// - The LCD will display Japanese, Western, or Cyrillic text
-//
-// See https://github.com/MarlinFirmware/Marlin/wiki/LCD-Language
-//
-// :['JAPANESE','WESTERN','CYRILLIC']
-//
-#define DISPLAY_CHARSET_HD44780 JAPANESE
-
-//
-// LCD TYPE
-//
-// You may choose ULTRA_LCD if you have character based LCD with 16x2, 16x4, 20x2,
-// 20x4 char/lines or DOGLCD for the full graphics display with 128x64 pixels
-// (ST7565R family). (This option will be set automatically for certain displays.)
-//
-// IMPORTANT NOTE: The U8glib library is required for Full Graphic Display!
-// https://github.com/olikraus/U8glib_Arduino
-//
-#define ULTRA_LCD // Character based
-//#define DOGLCD // Full graphics display
-
-//
-// SD CARD
-//
-// SD Card support is disabled by default. If your controller has an SD slot,
-// you must uncomment the following option or it won't work.
-//
-#define SDSUPPORT
-
-//
-// SD CARD: SPI SPEED
-//
-// Uncomment ONE of the following items to use a slower SPI transfer
-// speed. This is usually required if you're getting volume init errors.
-//
-//#define SPI_SPEED SPI_HALF_SPEED
-//#define SPI_SPEED SPI_QUARTER_SPEED
-//#define SPI_SPEED SPI_EIGHTH_SPEED
-
-//
-// SD CARD: ENABLE CRC
-//
-// Use CRC checks and retries on the SD communication.
-//
-//#define SD_CHECK_AND_RETRY
-
-//
-// ENCODER SETTINGS
-//
-// This option overrides the default number of encoder pulses needed to
-// produce one step. Should be increased for high-resolution encoders.
-//
-#define ENCODER_PULSES_PER_STEP 4
-
-//
-// Use this option to override the number of step signals required to
-// move between next/prev menu items.
-//
-#define ENCODER_STEPS_PER_MENU_ITEM 1
-
-/**
- * Encoder Direction Options
- *
- * Test your encoder's behavior first with both options disabled.
- *
- * Reversed Value Edit and Menu Nav? Enable REVERSE_ENCODER_DIRECTION.
- * Reversed Menu Navigation only? Enable REVERSE_MENU_DIRECTION.
- * Reversed Value Editing only? Enable BOTH options.
- */
-
-//
-// This option reverses the encoder direction everywhere
-//
-// Set this option if CLOCKWISE causes values to DECREASE
-//
-//#define REVERSE_ENCODER_DIRECTION
-
-//
-// This option reverses the encoder direction for navigating LCD menus.
-//
-// If CLOCKWISE normally moves DOWN this makes it go UP.
-// If CLOCKWISE normally moves UP this makes it go DOWN.
-//
-#define REVERSE_MENU_DIRECTION
-
-//
-// Individual Axis Homing
-//
-// Add individual axis homing items (Home X, Home Y, and Home Z) to the LCD menu.
-//
-//#define INDIVIDUAL_AXIS_HOMING_MENU
-
-//
-// SPEAKER/BUZZER
-//
-// If you have a speaker that can produce tones, enable it here.
-// By default Marlin assumes you have a buzzer with a fixed frequency.
-//
-//#define SPEAKER
-
-//
-// The duration and frequency for the UI feedback sound.
-// Set these to 0 to disable audio feedback in the LCD menus.
-//
-// Note: Test audio output with the G-Code:
-// M300 S P
-//
-//#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 100
-//#define LCD_FEEDBACK_FREQUENCY_HZ 1000
-
-//
-// CONTROLLER TYPE: Standard
-//
-// Marlin supports a wide variety of controllers.
-// Enable one of the following options to specify your controller.
-//
-
-//
-// ULTIMAKER Controller.
-//
-#define ULTIMAKERCONTROLLER
-
-//
-// ULTIPANEL as seen on Thingiverse.
-//
-//#define ULTIPANEL
-
-//
-// Cartesio UI
-// http://mauk.cc/webshop/cartesio-shop/electronics/user-interface
-//
-//#define CARTESIO_UI
-
-//
-// PanelOne from T3P3 (via RAMPS 1.4 AUX2/AUX3)
-// http://reprap.org/wiki/PanelOne
-//
-//#define PANEL_ONE
-
-//
-// MaKr3d Makr-Panel with graphic controller and SD support.
-// http://reprap.org/wiki/MaKr3d_MaKrPanel
-//
-//#define MAKRPANEL
-
-//
-// ReprapWorld Graphical LCD
-// https://reprapworld.com/?products_details&products_id/1218
-//
-//#define REPRAPWORLD_GRAPHICAL_LCD
-
-//
-// Activate one of these if you have a Panucatt Devices
-// Viki 2.0 or mini Viki with Graphic LCD
-// http://panucatt.com
-//
-//#define VIKI2
-//#define miniVIKI
-
-//
-// Adafruit ST7565 Full Graphic Controller.
-// https://github.com/eboston/Adafruit-ST7565-Full-Graphic-Controller/
-//
-//#define ELB_FULL_GRAPHIC_CONTROLLER
-
-//
-// RepRapDiscount Smart Controller.
-// http://reprap.org/wiki/RepRapDiscount_Smart_Controller
-//
-// Note: Usually sold with a white PCB.
-//
-//#define REPRAP_DISCOUNT_SMART_CONTROLLER
-
-//
-// GADGETS3D G3D LCD/SD Controller
-// http://reprap.org/wiki/RAMPS_1.3/1.4_GADGETS3D_Shield_with_Panel
-//
-// Note: Usually sold with a blue PCB.
-//
-//#define G3D_PANEL
-
-//
-// RepRapDiscount FULL GRAPHIC Smart Controller
-// http://reprap.org/wiki/RepRapDiscount_Full_Graphic_Smart_Controller
-//
-//#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
-
-//
-// MakerLab Mini Panel with graphic
-// controller and SD support - http://reprap.org/wiki/Mini_panel
-//
-//#define MINIPANEL
-
-//
-// RepRapWorld REPRAPWORLD_KEYPAD v1.1
-// http://reprapworld.com/?products_details&products_id=202&cPath=1591_1626
-//
-// REPRAPWORLD_KEYPAD_MOVE_STEP sets how much should the robot move when a key
-// is pressed, a value of 10.0 means 10mm per click.
-//
-//#define REPRAPWORLD_KEYPAD
-//#define REPRAPWORLD_KEYPAD_MOVE_STEP 10.0
-
-//
-// RigidBot Panel V1.0
-// http://www.inventapart.com/
-//
-//#define RIGIDBOT_PANEL
-
-//
-// BQ LCD Smart Controller shipped by
-// default with the BQ Hephestos 2 and Witbox 2.
-//
-//#define BQ_LCD_SMART_CONTROLLER
-
-//
-// CONTROLLER TYPE: I2C
-//
-// Note: These controllers require the installation of Arduino's LiquidCrystal_I2C
-// library. For more info: https://github.com/kiyoshigawa/LiquidCrystal_I2C
-//
-
-//
-// Elefu RA Board Control Panel
-// http://www.elefu.com/index.php?route=product/product&product_id=53
-//
-//#define RA_CONTROL_PANEL
-
-//
-// Sainsmart YW Robot (LCM1602) LCD Display
-//
-//#define LCD_I2C_SAINSMART_YWROBOT
-
-//
-// Generic LCM1602 LCD adapter
-//
-//#define LCM1602
-
-//
-// PANELOLU2 LCD with status LEDs,
-// separate encoder and click inputs.
-//
-// Note: This controller requires Arduino's LiquidTWI2 library v1.2.3 or later.
-// For more info: https://github.com/lincomatic/LiquidTWI2
-//
-// Note: The PANELOLU2 encoder click input can either be directly connected to
-// a pin (if BTN_ENC defined to != -1) or read through I2C (when BTN_ENC == -1).
-//
-//#define LCD_I2C_PANELOLU2
-
-//
-// Panucatt VIKI LCD with status LEDs,
-// integrated click & L/R/U/D buttons, separate encoder inputs.
-//
-//#define LCD_I2C_VIKI
-
-//
-// SSD1306 OLED full graphics generic display
-//
-//#define U8GLIB_SSD1306
-
-//
-// SAV OLEd LCD module support using either SSD1306 or SH1106 based LCD modules
-//
-//#define SAV_3DGLCD
-#if ENABLED(SAV_3DGLCD)
- //#define U8GLIB_SSD1306
- #define U8GLIB_SH1106
-#endif
-
-//
-// CONTROLLER TYPE: Shift register panels
-//
-// 2 wire Non-latching LCD SR from https://goo.gl/aJJ4sH
-// LCD configuration: http://reprap.org/wiki/SAV_3D_LCD
-//
-//#define SAV_3DLCD
-
-//=============================================================================
-//=============================== Extra Features ==============================
-//=============================================================================
-
-// @section extras
-
-// Increase the FAN PWM frequency. Removes the PWM noise but increases heating in the FET/Arduino
-//#define FAST_PWM_FAN
-
-// Use software PWM to drive the fan, as for the heaters. This uses a very low frequency
-// which is not as annoying as with the hardware PWM. On the other hand, if this frequency
-// is too low, you should also increment SOFT_PWM_SCALE.
-//#define FAN_SOFT_PWM
-
-// Incrementing this by 1 will double the software PWM frequency,
-// affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
-// However, control resolution will be halved for each increment;
-// at zero value, there are 128 effective control positions.
-#define SOFT_PWM_SCALE 0
-
-// Temperature status LEDs that display the hotend and bed temperature.
-// If all hotends and bed temperature and temperature setpoint are < 54C then the BLUE led is on.
-// Otherwise the RED led is on. There is 1C hysteresis.
-//#define TEMP_STAT_LEDS
-
-// M240 Triggers a camera by emulating a Canon RC-1 Remote
-// Data from: http://www.doc-diy.net/photo/rc-1_hacked/
-//#define PHOTOGRAPH_PIN 23
-
-// SkeinForge sends the wrong arc g-codes when using Arc Point as fillet procedure
-//#define SF_ARC_FIX
-
-// Support for the BariCUDA Paste Extruder.
-//#define BARICUDA
-
-//define BlinkM/CyzRgb Support
-//#define BLINKM
-
-/*********************************************************************\
-* R/C SERVO support
-* Sponsored by TrinityLabs, Reworked by codexmas
-**********************************************************************/
-
-// Number of servos
-//
-// If you select a configuration below, this will receive a default value and does not need to be set manually
-// set it manually if you have more servos than extruders and wish to manually control some
-// leaving it undefined or defining as 0 will disable the servo subsystem
-// If unsure, leave commented / disabled
-//
-//#define NUM_SERVOS 3 // Servo index starts with 0 for M280 command
-
-// Delay (in microseconds) before the next move will start, to give the servo time to reach its target angle.
-// 300ms is a good value but you can try less delay.
-// If the servo can't reach the requested position, increase it.
-#define SERVO_DELAY 300
-
-// Servo deactivation
-//
-// With this option servos are powered only during movement, then turned off to prevent jitter.
-//#define DEACTIVATE_SERVOS_AFTER_MOVE
-
-/**********************************************************************\
- * Support for a filament diameter sensor
- * Also allows adjustment of diameter at print time (vs at slicing)
- * Single extruder only at this point (extruder 0)
- *
- * Motherboards
- * 34 - RAMPS1.4 - uses Analog input 5 on the AUX2 connector
- * 81 - Printrboard - Uses Analog input 2 on the Exp1 connector (version B,C,D,E)
- * 301 - Rambo - uses Analog input 3
- * Note may require analog pins to be defined for different motherboards
- **********************************************************************/
-// Uncomment below to enable
-//#define FILAMENT_WIDTH_SENSOR
-
-#define DEFAULT_NOMINAL_FILAMENT_DIA 3.00 //Enter the diameter (in mm) of the filament generally used (3.0 mm or 1.75 mm) - this is then used in the slicer software. Used for sensor reading validation
-
-#if ENABLED(FILAMENT_WIDTH_SENSOR)
- #define FILAMENT_SENSOR_EXTRUDER_NUM 0 //The number of the extruder that has the filament sensor (0,1,2)
- #define MEASUREMENT_DELAY_CM 14 //measurement delay in cm. This is the distance from filament sensor to middle of barrel
-
- #define MEASURED_UPPER_LIMIT 3.30 //upper limit factor used for sensor reading validation in mm
- #define MEASURED_LOWER_LIMIT 1.90 //lower limit factor for sensor reading validation in mm
- #define MAX_MEASUREMENT_DELAY 20 //delay buffer size in bytes (1 byte = 1cm)- limits maximum measurement delay allowable (must be larger than MEASUREMENT_DELAY_CM and lower number saves RAM)
-
- #define DEFAULT_MEASURED_FILAMENT_DIA DEFAULT_NOMINAL_FILAMENT_DIA //set measured to nominal initially
-
- //When using an LCD, uncomment the line below to display the Filament sensor data on the last line instead of status. Status will appear for 5 sec.
- //#define FILAMENT_LCD_DISPLAY
-#endif
-
-#endif // CONFIGURATION_H
diff --git a/Marlin/example_configurations/K8400/Configuration_adv.h b/Marlin/example_configurations/K8400/Configuration_adv.h
deleted file mode 100644
index 64efac9..0000000
--- a/Marlin/example_configurations/K8400/Configuration_adv.h
+++ /dev/null
@@ -1,799 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Configuration_adv.h
- *
- * Advanced settings.
- * Only change these if you know exactly what you're doing.
- * Some of these settings can damage your printer if improperly set!
- *
- * Basic settings can be found in Configuration.h
- *
- */
-#ifndef CONFIGURATION_ADV_H
-#define CONFIGURATION_ADV_H
-
-/**
- *
- * ***********************************
- * ** ATTENTION TO ALL DEVELOPERS **
- * ***********************************
- *
- * You must increment this version number for every significant change such as,
- * but not limited to: ADD, DELETE RENAME OR REPURPOSE any directive/option.
- *
- * Note: Update also Version.h !
- */
-#define CONFIGURATION_ADV_H_VERSION 010100
-
-// @section temperature
-
-//===========================================================================
-//=============================Thermal Settings ============================
-//===========================================================================
-
-#if DISABLED(PIDTEMPBED)
- #define BED_CHECK_INTERVAL 1000 // ms between checks in bang-bang control
- #if ENABLED(BED_LIMIT_SWITCHING)
- #define BED_HYSTERESIS 1 // Only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS
- #endif
-#endif
-
-/**
- * Thermal Protection protects your printer from damage and fire if a
- * thermistor falls out or temperature sensors fail in any way.
- *
- * The issue: If a thermistor falls out or a temperature sensor fails,
- * Marlin can no longer sense the actual temperature. Since a disconnected
- * thermistor reads as a low temperature, the firmware will keep the heater on.
- *
- * The solution: Once the temperature reaches the target, start observing.
- * If the temperature stays too far below the target (hysteresis) for too long (period),
- * the firmware will halt the machine as a safety precaution.
- *
- * If you get false positives for "Thermal Runaway" increase THERMAL_PROTECTION_HYSTERESIS and/or THERMAL_PROTECTION_PERIOD
- */
-#if ENABLED(THERMAL_PROTECTION_HOTENDS)
- #define THERMAL_PROTECTION_PERIOD 40 // Seconds
- #define THERMAL_PROTECTION_HYSTERESIS 4 // Degrees Celsius
-
- /**
- * Whenever an M104 or M109 increases the target temperature the firmware will wait for the
- * WATCH_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_TEMP_INCREASE
- * degrees, the machine is halted, requiring a hard reset. This test restarts with any M104/M109,
- * but only if the current temperature is far enough below the target for a reliable test.
- *
- * If you get false positives for "Heating failed" increase WATCH_TEMP_PERIOD and/or decrease WATCH_TEMP_INCREASE
- * WATCH_TEMP_INCREASE should not be below 2.
- */
- #define WATCH_TEMP_PERIOD 20 // Seconds
- #define WATCH_TEMP_INCREASE 2 // Degrees Celsius
-#endif
-
-/**
- * Thermal Protection parameters for the bed are just as above for hotends.
- */
-#if ENABLED(THERMAL_PROTECTION_BED)
- #define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
- #define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
-
- /**
- * Whenever an M140 or M190 increases the target temperature the firmware will wait for the
- * WATCH_BED_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_BED_TEMP_INCREASE
- * degrees, the machine is halted, requiring a hard reset. This test restarts with any M140/M190,
- * but only if the current temperature is far enough below the target for a reliable test.
- *
- * If you get too many "Heating failed" errors, increase WATCH_BED_TEMP_PERIOD and/or decrease
- * WATCH_BED_TEMP_INCREASE. (WATCH_BED_TEMP_INCREASE should not be below 2.)
- */
- #define WATCH_BED_TEMP_PERIOD 60 // Seconds
- #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
-#endif
-
-#if ENABLED(PIDTEMP)
- // this adds an experimental additional term to the heating power, proportional to the extrusion speed.
- // if Kc is chosen well, the additional required power due to increased melting should be compensated.
- //#define PID_EXTRUSION_SCALING
- #if ENABLED(PID_EXTRUSION_SCALING)
- #define DEFAULT_Kc (100) //heating power=Kc*(e_speed)
- #define LPQ_MAX_LEN 50
- #endif
-#endif
-
-/**
- * Automatic Temperature:
- * The hotend target temperature is calculated by all the buffered lines of gcode.
- * The maximum buffered steps/sec of the extruder motor is called "se".
- * Start autotemp mode with M109 S B F
- * The target temperature is set to mintemp+factor*se[steps/sec] and is limited by
- * mintemp and maxtemp. Turn this off by executing M109 without F*
- * Also, if the temperature is set to a value below mintemp, it will not be changed by autotemp.
- * On an Ultimaker, some initial testing worked with M109 S215 B260 F1 in the start.gcode
- */
-#define AUTOTEMP
-#if ENABLED(AUTOTEMP)
- #define AUTOTEMP_OLDWEIGHT 0.98
-#endif
-
-//Show Temperature ADC value
-//The M105 command return, besides traditional information, the ADC value read from temperature sensors.
-//#define SHOW_TEMP_ADC_VALUES
-
-/**
- * High Temperature Thermistor Support
- *
- * Thermistors able to support high temperature tend to have a hard time getting
- * good readings at room and lower temperatures. This means HEATER_X_RAW_LO_TEMP
- * will probably be caught when the heating element first turns on during the
- * preheating process, which will trigger a min_temp_error as a safety measure
- * and force stop everything.
- * To circumvent this limitation, we allow for a preheat time (during which,
- * min_temp_error won't be triggered) and add a min_temp buffer to handle
- * aberrant readings.
- *
- * If you want to enable this feature for your hotend thermistor(s)
- * uncomment and set values > 0 in the constants below
- */
-
-// The number of consecutive low temperature errors that can occur
-// before a min_temp_error is triggered. (Shouldn't be more than 10.)
-//#define MAX_CONSECUTIVE_LOW_TEMPERATURE_ERROR_ALLOWED 0
-
-// The number of milliseconds a hotend will preheat before starting to check
-// the temperature. This value should NOT be set to the time it takes the
-// hot end to reach the target temperature, but the time it takes to reach
-// the minimum temperature your thermistor can read. The lower the better/safer.
-// This shouldn't need to be more than 30 seconds (30000)
-//#define MILLISECONDS_PREHEAT_TIME 0
-
-// @section extruder
-
-// extruder run-out prevention.
-//if the machine is idle, and the temperature over MINTEMP, every couple of SECONDS some filament is extruded
-//#define EXTRUDER_RUNOUT_PREVENT
-#define EXTRUDER_RUNOUT_MINTEMP 190
-#define EXTRUDER_RUNOUT_SECONDS 30
-#define EXTRUDER_RUNOUT_ESTEPS 14 // mm filament
-#define EXTRUDER_RUNOUT_SPEED 1500 // extrusion speed
-#define EXTRUDER_RUNOUT_EXTRUDE 100
-
-// @section temperature
-
-//These defines help to calibrate the AD595 sensor in case you get wrong temperature measurements.
-//The measured temperature is defined as "actualTemp = (measuredTemp * TEMP_SENSOR_AD595_GAIN) + TEMP_SENSOR_AD595_OFFSET"
-#define TEMP_SENSOR_AD595_OFFSET 0.0
-#define TEMP_SENSOR_AD595_GAIN 1.0
-
-//This is for controlling a fan to cool down the stepper drivers
-//it will turn on when any driver is enabled
-//and turn off after the set amount of seconds from last driver being disabled again
-#define CONTROLLERFAN_PIN 2 //Pin used for the fan to cool controller (-1 to disable)
-#define CONTROLLERFAN_SECS 60 //How many seconds, after all motors were disabled, the fan should run
-#define CONTROLLERFAN_SPEED 255 // == full speed
-
-// When first starting the main fan, run it at full speed for the
-// given number of milliseconds. This gets the fan spinning reliably
-// before setting a PWM value. (Does not work with software PWM for fan on Sanguinololu)
-//#define FAN_KICKSTART_TIME 100
-
-// This defines the minimal speed for the main fan, run in PWM mode
-// to enable uncomment and set minimal PWM speed for reliable running (1-255)
-// if fan speed is [1 - (FAN_MIN_PWM-1)] it is set to FAN_MIN_PWM
-//#define FAN_MIN_PWM 50
-
-// @section extruder
-
-// Extruder cooling fans
-// Configure fan pin outputs to automatically turn on/off when the associated
-// extruder temperature is above/below EXTRUDER_AUTO_FAN_TEMPERATURE.
-// Multiple extruders can be assigned to the same pin in which case
-// the fan will turn on when any selected extruder is above the threshold.
-#define EXTRUDER_0_AUTO_FAN_PIN -1
-#define EXTRUDER_1_AUTO_FAN_PIN -1
-#define EXTRUDER_2_AUTO_FAN_PIN -1
-#define EXTRUDER_3_AUTO_FAN_PIN -1
-#define EXTRUDER_AUTO_FAN_TEMPERATURE 50
-#define EXTRUDER_AUTO_FAN_SPEED 255 // == full speed
-
-//===========================================================================
-//============================ Mechanical Settings ==========================
-//===========================================================================
-
-// @section homing
-
-// If you want endstops to stay on (by default) even when not homing
-// enable this option. Override at any time with M120, M121.
-//#define ENDSTOPS_ALWAYS_ON_DEFAULT
-
-// @section extras
-
-//#define Z_LATE_ENABLE // Enable Z the last moment. Needed if your Z driver overheats.
-
-// Dual X Steppers
-// Uncomment this option to drive two X axis motors.
-// The next unused E driver will be assigned to the second X stepper.
-//#define X_DUAL_STEPPER_DRIVERS
-#if ENABLED(X_DUAL_STEPPER_DRIVERS)
- // Set true if the two X motors need to rotate in opposite directions
- #define INVERT_X2_VS_X_DIR true
-#endif
-
-
-// Dual Y Steppers
-// Uncomment this option to drive two Y axis motors.
-// The next unused E driver will be assigned to the second Y stepper.
-//#define Y_DUAL_STEPPER_DRIVERS
-#if ENABLED(Y_DUAL_STEPPER_DRIVERS)
- // Set true if the two Y motors need to rotate in opposite directions
- #define INVERT_Y2_VS_Y_DIR true
-#endif
-
-// A single Z stepper driver is usually used to drive 2 stepper motors.
-// Uncomment this option to use a separate stepper driver for each Z axis motor.
-// The next unused E driver will be assigned to the second Z stepper.
-//#define Z_DUAL_STEPPER_DRIVERS
-
-#if ENABLED(Z_DUAL_STEPPER_DRIVERS)
-
- // Z_DUAL_ENDSTOPS is a feature to enable the use of 2 endstops for both Z steppers - Let's call them Z stepper and Z2 stepper.
- // That way the machine is capable to align the bed during home, since both Z steppers are homed.
- // There is also an implementation of M666 (software endstops adjustment) to this feature.
- // After Z homing, this adjustment is applied to just one of the steppers in order to align the bed.
- // One just need to home the Z axis and measure the distance difference between both Z axis and apply the math: Z adjust = Z - Z2.
- // If the Z stepper axis is closer to the bed, the measure Z > Z2 (yes, it is.. think about it) and the Z adjust would be positive.
- // Play a little bit with small adjustments (0.5mm) and check the behaviour.
- // The M119 (endstops report) will start reporting the Z2 Endstop as well.
-
- //#define Z_DUAL_ENDSTOPS
-
- #if ENABLED(Z_DUAL_ENDSTOPS)
- #define Z2_USE_ENDSTOP _XMAX_
- #endif
-
-#endif // Z_DUAL_STEPPER_DRIVERS
-
-// Enable this for dual x-carriage printers.
-// A dual x-carriage design has the advantage that the inactive extruder can be parked which
-// prevents hot-end ooze contaminating the print. It also reduces the weight of each x-carriage
-// allowing faster printing speeds. Connect your X2 stepper to the first unused E plug.
-//#define DUAL_X_CARRIAGE
-#if ENABLED(DUAL_X_CARRIAGE)
- // Configuration for second X-carriage
- // Note: the first x-carriage is defined as the x-carriage which homes to the minimum endstop;
- // the second x-carriage always homes to the maximum endstop.
- #define X2_MIN_POS 80 // set minimum to ensure second x-carriage doesn't hit the parked first X-carriage
- #define X2_MAX_POS 353 // set maximum to the distance between toolheads when both heads are homed
- #define X2_HOME_DIR 1 // the second X-carriage always homes to the maximum endstop position
- #define X2_HOME_POS X2_MAX_POS // default home position is the maximum carriage position
- // However: In this mode the HOTEND_OFFSET_X value for the second extruder provides a software
- // override for X2_HOME_POS. This also allow recalibration of the distance between the two endstops
- // without modifying the firmware (through the "M218 T1 X???" command).
- // Remember: you should set the second extruder x-offset to 0 in your slicer.
-
- // There are a few selectable movement modes for dual x-carriages using M605 S
- // Mode 0: Full control. The slicer has full control over both x-carriages and can achieve optimal travel results
- // as long as it supports dual x-carriages. (M605 S0)
- // Mode 1: Auto-park mode. The firmware will automatically park and unpark the x-carriages on tool changes so
- // that additional slicer support is not required. (M605 S1)
- // Mode 2: Duplication mode. The firmware will transparently make the second x-carriage and extruder copy all
- // actions of the first x-carriage. This allows the printer to print 2 arbitrary items at
- // once. (2nd extruder x offset and temp offset are set using: M605 S2 [Xnnn] [Rmmm])
-
- // This is the default power-up mode which can be later using M605.
- #define DEFAULT_DUAL_X_CARRIAGE_MODE 0
-
- // Default settings in "Auto-park Mode"
- #define TOOLCHANGE_PARK_ZLIFT 0.2 // the distance to raise Z axis when parking an extruder
- #define TOOLCHANGE_UNPARK_ZLIFT 1 // the distance to raise Z axis when unparking an extruder
-
- // Default x offset in duplication mode (typically set to half print bed width)
- #define DEFAULT_DUPLICATION_X_OFFSET 100
-
-#endif //DUAL_X_CARRIAGE
-
-// @section homing
-
-//homing hits the endstop, then retracts by this distance, before it tries to slowly bump again:
-#define X_HOME_BUMP_MM 10
-#define Y_HOME_BUMP_MM 10
-#define Z_HOME_BUMP_MM 3
-#define HOMING_BUMP_DIVISOR {2, 2, 4} // Re-Bump Speed Divisor (Divides the Homing Feedrate)
-#define QUICK_HOME //if this is defined, if both x and y are to be homed, a diagonal move will be performed initially.
-
-// When G28 is called, this option will make Y home before X
-//#define HOME_Y_BEFORE_X
-
-// @section machine
-
-#define AXIS_RELATIVE_MODES {false, false, false, false}
-
-// Allow duplication mode with a basic dual-nozzle extruder
-//#define DUAL_NOZZLE_DUPLICATION_MODE
-
-// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
-#define INVERT_X_STEP_PIN false
-#define INVERT_Y_STEP_PIN false
-#define INVERT_Z_STEP_PIN false
-#define INVERT_E_STEP_PIN false
-
-// Default stepper release if idle. Set to 0 to deactivate.
-// Steppers will shut down DEFAULT_STEPPER_DEACTIVE_TIME seconds after the last move when DISABLE_INACTIVE_? is true.
-// Time can be set by M18 and M84.
-#define DEFAULT_STEPPER_DEACTIVE_TIME 120
-#define DISABLE_INACTIVE_X true
-#define DISABLE_INACTIVE_Y true
-#define DISABLE_INACTIVE_Z true // set to false if the nozzle will fall down on your printed part when print has finished.
-#define DISABLE_INACTIVE_E true
-
-#define DEFAULT_MINIMUMFEEDRATE 0.0 // minimum feedrate
-#define DEFAULT_MINTRAVELFEEDRATE 0.0
-
-// @section lcd
-
-#if ENABLED(ULTIPANEL)
- #define MANUAL_FEEDRATE {50*60, 50*60, 4*60, 60} // Feedrates for manual moves along X, Y, Z, E from panel
- #define ULTIPANEL_FEEDMULTIPLY // Comment to disable setting feedrate multiplier via encoder
-#endif
-
-// @section extras
-
-// minimum time in microseconds that a movement needs to take if the buffer is emptied.
-#define DEFAULT_MINSEGMENTTIME 20000
-
-// If defined the movements slow down when the look ahead buffer is only half full
-#define SLOWDOWN
-
-// Frequency limit
-// See nophead's blog for more info
-// Not working O
-//#define XY_FREQUENCY_LIMIT 15
-
-// Minimum planner junction speed. Sets the default minimum speed the planner plans for at the end
-// of the buffer and all stops. This should not be much greater than zero and should only be changed
-// if unwanted behavior is observed on a user's machine when running at very slow speeds.
-#define MINIMUM_PLANNER_SPEED 0.05// (mm/sec)
-
-// Microstep setting (Only functional when stepper driver microstep pins are connected to MCU.
-#define MICROSTEP_MODES {16,16,16,16,16} // [1,2,4,8,16]
-
-// Motor Current setting (Only functional when motor driver current ref pins are connected to a digital trimpot on supported boards)
-#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
-
-// Motor Current controlled via PWM (Overridable on supported boards with PWM-driven motor driver current)
-//#define PWM_MOTOR_CURRENT {1300, 1300, 1250} // Values in milliamps
-
-// uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
-//#define DIGIPOT_I2C
-// Number of channels available for I2C digipot, For Azteeg X3 Pro we have 8
-#define DIGIPOT_I2C_NUM_CHANNELS 8
-// actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
-#define DIGIPOT_I2C_MOTOR_CURRENTS {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}
-
-//===========================================================================
-//=============================Additional Features===========================
-//===========================================================================
-
-#define ENCODER_RATE_MULTIPLIER // If defined, certain menu edit operations automatically multiply the steps when the encoder is moved quickly
-#define ENCODER_10X_STEPS_PER_SEC 75 // If the encoder steps per sec exceeds this value, multiply steps moved x10 to quickly advance the value
-#define ENCODER_100X_STEPS_PER_SEC 160 // If the encoder steps per sec exceeds this value, multiply steps moved x100 to really quickly advance the value
-
-//#define CHDK 4 //Pin for triggering CHDK to take a picture see how to use it here http://captain-slow.dk/2014/03/09/3d-printing-timelapses/
-#define CHDK_DELAY 50 //How long in ms the pin should stay HIGH before going LOW again
-
-// @section lcd
-
-// Include a page of printer information in the LCD Main Menu
-//#define LCD_INFO_MENU
-
-#if ENABLED(SDSUPPORT)
-
- // Some RAMPS and other boards don't detect when an SD card is inserted. You can work
- // around this by connecting a push button or single throw switch to the pin defined
- // as SD_DETECT_PIN in your board's pins definitions.
- // This setting should be disabled unless you are using a push button, pulling the pin to ground.
- // Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
- #define SD_DETECT_INVERTED
-
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
- #define SD_FINISHED_RELEASECOMMAND "M84 X Y Z E" // You might want to keep the z enabled so your bed stays in place.
-
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
- //#define MENU_ADDAUTOSTART
-
- // Show a progress bar on HD44780 LCDs for SD printing
- //#define LCD_PROGRESS_BAR
-
- #if ENABLED(LCD_PROGRESS_BAR)
- // Amount of time (ms) to show the bar
- #define PROGRESS_BAR_BAR_TIME 2000
- // Amount of time (ms) to show the status message
- #define PROGRESS_BAR_MSG_TIME 3000
- // Amount of time (ms) to retain the status message (0=forever)
- #define PROGRESS_MSG_EXPIRE 0
- // Enable this to show messages for MSG_TIME then hide them
- //#define PROGRESS_MSG_ONCE
- #endif
-
- // This allows hosts to request long names for files and folders with M33
- //#define LONG_FILENAME_HOST_SUPPORT
-
- // This option allows you to abort SD printing when any endstop is triggered.
- // This feature must be enabled with "M540 S1" or from the LCD menu.
- // To have any effect, endstops must be enabled during SD printing.
- //#define ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED
-
-#endif // SDSUPPORT
-
-// for dogm lcd displays you can choose some additional fonts:
-#if ENABLED(DOGLCD)
- // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT
- // we don't have a big font for Cyrillic, Kana
- //#define USE_BIG_EDIT_FONT
-
- // If you have spare 2300Byte of progmem and want to use a
- // smaller font on the Info-screen uncomment the next line.
- //#define USE_SMALL_INFOFONT
-#endif // DOGLCD
-
-// @section safety
-
-// The hardware watchdog should reset the microcontroller disabling all outputs,
-// in case the firmware gets stuck and doesn't do temperature regulation.
-#define USE_WATCHDOG
-
-#if ENABLED(USE_WATCHDOG)
- // If you have a watchdog reboot in an ArduinoMega2560 then the device will hang forever, as a watchdog reset will leave the watchdog on.
- // The "WATCHDOG_RESET_MANUAL" goes around this by not using the hardware reset.
- // However, THIS FEATURE IS UNSAFE!, as it will only work if interrupts are disabled. And the code could hang in an interrupt routine with interrupts disabled.
- //#define WATCHDOG_RESET_MANUAL
-#endif
-
-// @section lcd
-
-// Babystepping enables the user to control the axis in tiny amounts, independently from the normal printing process
-// it can e.g. be used to change z-positions in the print startup phase in real-time
-// does not respect endstops!
-//#define BABYSTEPPING
-#if ENABLED(BABYSTEPPING)
- #define BABYSTEP_XY //not only z, but also XY in the menu. more clutter, more functions
- //not implemented for deltabots!
- #define BABYSTEP_INVERT_Z false //true for inverse movements in Z
- #define BABYSTEP_MULTIPLICATOR 1 //faster movements
-#endif
-
-// @section extruder
-
-// extruder advance constant (s2/mm3)
-//
-// advance (steps) = STEPS_PER_CUBIC_MM_E * EXTRUDER_ADVANCE_K * cubic mm per second ^ 2
-//
-// Hooke's law says: force = k * distance
-// Bernoulli's principle says: v ^ 2 / 2 + g . h + pressure / density = constant
-// so: v ^ 2 is proportional to number of steps we advance the extruder
-//#define ADVANCE
-
-#if ENABLED(ADVANCE)
- #define EXTRUDER_ADVANCE_K .0
- #define D_FILAMENT 2.85
-#endif
-
-// Implementation of a linear pressure control
-// Assumption: advance = k * (delta velocity)
-// K=0 means advance disabled. A good value for a gregs wade extruder will be around K=75
-//#define LIN_ADVANCE
-
-#if ENABLED(LIN_ADVANCE)
- #define LIN_ADVANCE_K 75
-#endif
-
-// @section leveling
-
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #define MESH_MIN_X (X_MIN_POS + MESH_INSET)
- #define MESH_MAX_X (X_MAX_POS - (MESH_INSET))
- #define MESH_MIN_Y (Y_MIN_POS + MESH_INSET)
- #define MESH_MAX_Y (Y_MAX_POS - (MESH_INSET))
-#endif
-
-// @section extras
-
-// Arc interpretation settings:
-#define ARC_SUPPORT // Disabling this saves ~2738 bytes
-#define MM_PER_ARC_SEGMENT 1
-#define N_ARC_CORRECTION 25
-
-// Support for G5 with XYZE destination and IJPQ offsets. Requires ~2666 bytes.
-//#define BEZIER_CURVE_SUPPORT
-
-const unsigned int dropsegments = 5; //everything with less than this number of steps will be ignored as move and joined with the next movement
-
-// @section temperature
-
-// Control heater 0 and heater 1 in parallel.
-//#define HEATERS_PARALLEL
-
-//===========================================================================
-//================================= Buffers =================================
-//===========================================================================
-
-// @section hidden
-
-// The number of linear motions that can be in the plan at any give time.
-// THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2, i.g. 8,16,32 because shifts and ors are used to do the ring-buffering.
-#if ENABLED(SDSUPPORT)
- #define BLOCK_BUFFER_SIZE 16 // SD,LCD,Buttons take more memory, block buffer needs to be smaller
-#else
- #define BLOCK_BUFFER_SIZE 16 // maximize block buffer
-#endif
-
-// @section serial
-
-// The ASCII buffer for serial input
-#define MAX_CMD_SIZE 96
-#define BUFSIZE 26
-
-// Transfer Buffer Size
-// To save 386 bytes of PROGMEM (and TX_BUFFER_SIZE+3 bytes of RAM) set to 0.
-// To buffer a simple "ok" you need 4 bytes.
-// For ADVANCED_OK (M105) you need 32 bytes.
-// For debug-echo: 128 bytes for the optimal speed.
-// Other output doesn't need to be that speedy.
-// :[0,2,4,8,16,32,64,128,256]
-#define TX_BUFFER_SIZE 0
-
-// Enable an emergency-command parser to intercept certain commands as they
-// enter the serial receive buffer, so they cannot be blocked.
-// Currently handles M108, M112, M410
-// Does not work on boards using AT90USB (USBCON) processors!
-//#define EMERGENCY_PARSER
-
-// Bad Serial-connections can miss a received command by sending an 'ok'
-// Therefore some clients abort after 30 seconds in a timeout.
-// Some other clients start sending commands while receiving a 'wait'.
-// This "wait" is only sent when the buffer is empty. 1 second is a good value here.
-//#define NO_TIMEOUTS 1000 // Milliseconds
-
-// Some clients will have this feature soon. This could make the NO_TIMEOUTS unnecessary.
-//#define ADVANCED_OK
-
-// @section fwretract
-
-// Firmware based and LCD controlled retract
-// M207 and M208 can be used to define parameters for the retraction.
-// The retraction can be called by the slicer using G10 and G11
-// until then, intended retractions can be detected by moves that only extrude and the direction.
-// the moves are than replaced by the firmware controlled ones.
-
-//#define FWRETRACT //ONLY PARTIALLY TESTED
-#if ENABLED(FWRETRACT)
- #define MIN_RETRACT 0.1 //minimum extruded mm to accept a automatic gcode retraction attempt
- #define RETRACT_LENGTH 3 //default retract length (positive mm)
- #define RETRACT_LENGTH_SWAP 13 //default swap retract length (positive mm), for extruder change
- #define RETRACT_FEEDRATE 45 //default feedrate for retracting (mm/s)
- #define RETRACT_ZLIFT 0 //default retract Z-lift
- #define RETRACT_RECOVER_LENGTH 0 //default additional recover length (mm, added to retract length when recovering)
- #define RETRACT_RECOVER_LENGTH_SWAP 0 //default additional swap recover length (mm, added to retract length when recovering from extruder change)
- #define RETRACT_RECOVER_FEEDRATE 8 //default feedrate for recovering from retraction (mm/s)
-#endif
-
-// Add support for experimental filament exchange support M600; requires display
-#if ENABLED(ULTIPANEL)
- #define FILAMENT_CHANGE_FEATURE // Enable filament exchange menu and M600 g-code (used for runout sensor too)
- #if ENABLED(FILAMENT_CHANGE_FEATURE)
- #define FILAMENT_CHANGE_X_POS 100 // X position of hotend
- #define FILAMENT_CHANGE_Y_POS 100 // Y position of hotend
- #define FILAMENT_CHANGE_Z_ADD 20 // Z addition of hotend (lift)
- #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
- #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers)
- #define FILAMENT_CHANGE_RETRACT_LENGTH 5 // Initial retract in mm
- // It is a short retract used immediately after print interrupt before move to filament exchange position
- #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
- #define FILAMENT_CHANGE_UNLOAD_LENGTH 600 // Unload filament length from hotend in mm
- // Longer length for bowden printers to unload filament from whole bowden tube,
- // shorter lenght for printers without bowden to unload filament from extruder only,
- // 0 to disable unloading for manual unloading
- #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast
- #define FILAMENT_CHANGE_LOAD_LENGTH 600 // Load filament length over hotend in mm
- // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
- // Short or zero length for printers without bowden where loading is not used
- #define FILAMENT_CHANGE_LOAD_FEEDRATE 10 // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
- #define FILAMENT_CHANGE_EXTRUDE_LENGTH 100 // Extrude filament length in mm after filament is load over the hotend,
- // 0 to disable for manual extrusion
- // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
- // or until outcoming filament color is not clear for filament color change
- #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
- #endif
-#endif
-
-/******************************************************************************\
- * enable this section if you have TMC26X motor drivers.
- * you need to import the TMC26XStepper library into the Arduino IDE for this
- ******************************************************************************/
-
-// @section tmc
-
-//#define HAVE_TMCDRIVER
-#if ENABLED(HAVE_TMCDRIVER)
-
- //#define X_IS_TMC
- #define X_MAX_CURRENT 1000 //in mA
- #define X_SENSE_RESISTOR 91 //in mOhms
- #define X_MICROSTEPS 16 //number of microsteps
-
- //#define X2_IS_TMC
- #define X2_MAX_CURRENT 1000 //in mA
- #define X2_SENSE_RESISTOR 91 //in mOhms
- #define X2_MICROSTEPS 16 //number of microsteps
-
- //#define Y_IS_TMC
- #define Y_MAX_CURRENT 1000 //in mA
- #define Y_SENSE_RESISTOR 91 //in mOhms
- #define Y_MICROSTEPS 16 //number of microsteps
-
- //#define Y2_IS_TMC
- #define Y2_MAX_CURRENT 1000 //in mA
- #define Y2_SENSE_RESISTOR 91 //in mOhms
- #define Y2_MICROSTEPS 16 //number of microsteps
-
- //#define Z_IS_TMC
- #define Z_MAX_CURRENT 1000 //in mA
- #define Z_SENSE_RESISTOR 91 //in mOhms
- #define Z_MICROSTEPS 16 //number of microsteps
-
- //#define Z2_IS_TMC
- #define Z2_MAX_CURRENT 1000 //in mA
- #define Z2_SENSE_RESISTOR 91 //in mOhms
- #define Z2_MICROSTEPS 16 //number of microsteps
-
- //#define E0_IS_TMC
- #define E0_MAX_CURRENT 1000 //in mA
- #define E0_SENSE_RESISTOR 91 //in mOhms
- #define E0_MICROSTEPS 16 //number of microsteps
-
- //#define E1_IS_TMC
- #define E1_MAX_CURRENT 1000 //in mA
- #define E1_SENSE_RESISTOR 91 //in mOhms
- #define E1_MICROSTEPS 16 //number of microsteps
-
- //#define E2_IS_TMC
- #define E2_MAX_CURRENT 1000 //in mA
- #define E2_SENSE_RESISTOR 91 //in mOhms
- #define E2_MICROSTEPS 16 //number of microsteps
-
- //#define E3_IS_TMC
- #define E3_MAX_CURRENT 1000 //in mA
- #define E3_SENSE_RESISTOR 91 //in mOhms
- #define E3_MICROSTEPS 16 //number of microsteps
-
-#endif
-
-/******************************************************************************\
- * enable this section if you have L6470 motor drivers.
- * you need to import the L6470 library into the Arduino IDE for this
- ******************************************************************************/
-
-// @section l6470
-
-//#define HAVE_L6470DRIVER
-#if ENABLED(HAVE_L6470DRIVER)
-
- //#define X_IS_L6470
- #define X_MICROSTEPS 16 //number of microsteps
- #define X_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define X_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define X_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define X2_IS_L6470
- #define X2_MICROSTEPS 16 //number of microsteps
- #define X2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define X2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define X2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Y_IS_L6470
- #define Y_MICROSTEPS 16 //number of microsteps
- #define Y_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Y_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Y_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Y2_IS_L6470
- #define Y2_MICROSTEPS 16 //number of microsteps
- #define Y2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Y2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Y2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Z_IS_L6470
- #define Z_MICROSTEPS 16 //number of microsteps
- #define Z_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Z_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Z_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Z2_IS_L6470
- #define Z2_MICROSTEPS 16 //number of microsteps
- #define Z2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Z2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Z2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E0_IS_L6470
- #define E0_MICROSTEPS 16 //number of microsteps
- #define E0_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E0_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E0_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E1_IS_L6470
- #define E1_MICROSTEPS 16 //number of microsteps
- #define E1_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E1_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E1_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E2_IS_L6470
- #define E2_MICROSTEPS 16 //number of microsteps
- #define E2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E3_IS_L6470
- #define E3_MICROSTEPS 16 //number of microsteps
- #define E3_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E3_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E3_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
-#endif
-
-/**
- * TWI/I2C BUS
- *
- * This feature is an EXPERIMENTAL feature so it shall not be used on production
- * machines. Enabling this will allow you to send and receive I2C data from slave
- * devices on the bus.
- *
- * ; Example #1
- * ; This macro send the string "Marlin" to the slave device with address 0x63 (99)
- * ; It uses multiple M155 commands with one B arg
- * M155 A99 ; Target slave address
- * M155 B77 ; M
- * M155 B97 ; a
- * M155 B114 ; r
- * M155 B108 ; l
- * M155 B105 ; i
- * M155 B110 ; n
- * M155 S1 ; Send the current buffer
- *
- * ; Example #2
- * ; Request 6 bytes from slave device with address 0x63 (99)
- * M156 A99 B5
- *
- * ; Example #3
- * ; Example serial output of a M156 request
- * echo:i2c-reply: from:99 bytes:5 data:hello
- */
-
-// @section i2cbus
-
-//#define EXPERIMENTAL_I2CBUS
-
-#endif // CONFIGURATION_ADV_H
diff --git a/Marlin/example_configurations/K8400/Dual-head/Configuration.h b/Marlin/example_configurations/K8400/Dual-head/Configuration.h
deleted file mode 100644
index 3ea963a..0000000
--- a/Marlin/example_configurations/K8400/Dual-head/Configuration.h
+++ /dev/null
@@ -1,1327 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Configuration.h
- *
- * Basic settings such as:
- *
- * - Type of electronics
- * - Type of temperature sensor
- * - Printer geometry
- * - Endstop configuration
- * - LCD controller
- * - Extra features
- *
- * Advanced settings can be found in Configuration_adv.h
- *
- */
-#ifndef CONFIGURATION_H
-#define CONFIGURATION_H
-
-/**
- *
- * ***********************************
- * ** ATTENTION TO ALL DEVELOPERS **
- * ***********************************
- *
- * You must increment this version number for every significant change such as,
- * but not limited to: ADD, DELETE RENAME OR REPURPOSE any directive/option.
- *
- * Note: Update also Version.h !
- */
-#define CONFIGURATION_H_VERSION 010100
-
-//===========================================================================
-//============================= Getting Started =============================
-//===========================================================================
-
-/**
- * Here are some standard links for getting your machine calibrated:
- *
- * http://reprap.org/wiki/Calibration
- * http://youtu.be/wAL9d7FgInk
- * http://calculator.josefprusa.cz
- * http://reprap.org/wiki/Triffid_Hunter%27s_Calibration_Guide
- * http://www.thingiverse.com/thing:5573
- * https://sites.google.com/site/repraplogphase/calibration-of-your-reprap
- * http://www.thingiverse.com/thing:298812
- */
-
-//===========================================================================
-//============================= DELTA Printer ===============================
-//===========================================================================
-// For a Delta printer replace the configuration files with the files in the
-// example_configurations/delta directory.
-//
-
-//===========================================================================
-//============================= SCARA Printer ===============================
-//===========================================================================
-// For a Scara printer replace the configuration files with the files in the
-// example_configurations/SCARA directory.
-//
-
-// @section info
-
-// User-specified version info of this build to display in [Pronterface, etc] terminal window during
-// startup. Implementation of an idea by Prof Braino to inform user that any changes made to this
-// build by the user have been successfully uploaded into firmware.
-#define STRING_CONFIG_H_AUTHOR "(Anthony Birkett, default config)" // Who made the changes.
-#define SHOW_BOOTSCREEN
-#define STRING_SPLASH_LINE1 SHORT_BUILD_VERSION // will be shown during boot in line 1
-#define STRING_SPLASH_LINE2 WEBSITE_URL // will be shown during boot in line 2
-
-//
-// *** VENDORS PLEASE READ *****************************************************
-//
-// Marlin now allow you to have a vendor boot image to be displayed on machine
-// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
-//
-// We suggest for you to take advantage of this new feature and keep the Marlin
-// boot image unmodified. For an example have a look at the bq Hephestos 2
-// example configuration folder.
-//
-//#define SHOW_CUSTOM_BOOTSCREEN
-// @section machine
-
-// SERIAL_PORT selects which serial port should be used for communication with the host.
-// This allows the connection of wireless adapters (for instance) to non-default port pins.
-// Serial port 0 is still used by the Arduino bootloader regardless of this setting.
-// :[0,1,2,3,4,5,6,7]
-#define SERIAL_PORT 0
-
-// This determines the communication speed of the printer
-// :[2400,9600,19200,38400,57600,115200,250000]
-#define BAUDRATE 250000
-
-// Enable the Bluetooth serial interface on AT90USB devices
-//#define BLUETOOTH
-
-// The following define selects which electronics board you have.
-// Please choose the name from boards.h that matches your setup
-#ifndef MOTHERBOARD
- #define MOTHERBOARD BOARD_K8400
-#endif
-
-// Optional custom name for your RepStrap or other custom machine
-// Displayed in the LCD "Ready" message
-//#define CUSTOM_MACHINE_NAME "3D Printer"
-
-// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
-// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
-//#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
-
-// This defines the number of extruders
-// :[1,2,3,4]
-#define EXTRUDERS 2
-
-// For Cyclops or any "multi-extruder" that shares a single nozzle.
-//#define SINGLENOZZLE
-
-// A dual extruder that uses a single stepper motor
-// Don't forget to set SSDE_SERVO_ANGLES and HOTEND_OFFSET_X/Y/Z
-//#define SWITCHING_EXTRUDER
-#if ENABLED(SWITCHING_EXTRUDER)
- #define SWITCHING_EXTRUDER_SERVO_NR 0
- #define SWITCHING_EXTRUDER_SERVO_ANGLES { 0, 90 } // Angles for E0, E1
- //#define HOTEND_OFFSET_Z {0.0, 0.0}
-#endif
-
-/**
- * "Mixing Extruder"
- * - Adds a new code, M165, to set the current mix factors.
- * - Extends the stepping routines to move multiple steppers in proportion to the mix.
- * - Optional support for Repetier Host M163, M164, and virtual extruder.
- * - This implementation supports only a single extruder.
- * - Enable DIRECT_MIXING_IN_G1 for Pia Taubert's reference implementation
- */
-//#define MIXING_EXTRUDER
-#if ENABLED(MIXING_EXTRUDER)
- #define MIXING_STEPPERS 2 // Number of steppers in your mixing extruder
- #define MIXING_VIRTUAL_TOOLS 16 // Use the Virtual Tool method with M163 and M164
- //#define DIRECT_MIXING_IN_G1 // Allow ABCDHI mix factors in G1 movement commands
-#endif
-
-// Offset of the extruders (uncomment if using more than one and relying on firmware to position when changing).
-// The offset has to be X=0, Y=0 for the extruder 0 hotend (default extruder).
-// For the other hotends it is their distance from the extruder 0 hotend.
-//#define HOTEND_OFFSET_X {0.0, 20.00} // (in mm) for each extruder, offset of the hotend on the X axis
-//#define HOTEND_OFFSET_Y {0.0, 5.00} // (in mm) for each extruder, offset of the hotend on the Y axis
-
-//// The following define selects which power supply you have. Please choose the one that matches your setup
-// 1 = ATX
-// 2 = X-Box 360 203Watts (the blue wire connected to PS_ON and the red wire to VCC)
-// :{1:'ATX',2:'X-Box 360'}
-#define POWER_SUPPLY 1
-
-// Define this to have the electronics keep the power supply off on startup. If you don't know what this is leave it.
-//#define PS_DEFAULT_OFF
-
-// @section temperature
-
-//===========================================================================
-//============================= Thermal Settings ============================
-//===========================================================================
-//
-//--NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table
-//
-//// Temperature sensor settings:
-// -3 is thermocouple with MAX31855 (only for sensor 0)
-// -2 is thermocouple with MAX6675 (only for sensor 0)
-// -1 is thermocouple with AD595
-// 0 is not used
-// 1 is 100k thermistor - best choice for EPCOS 100k (4.7k pullup)
-// 2 is 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)
-// 3 is Mendel-parts thermistor (4.7k pullup)
-// 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !!
-// 5 is 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup)
-// 6 is 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup)
-// 7 is 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup)
-// 71 is 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup)
-// 8 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup)
-// 9 is 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup)
-// 10 is 100k RS thermistor 198-961 (4.7k pullup)
-// 11 is 100k beta 3950 1% thermistor (4.7k pullup)
-// 12 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed)
-// 13 is 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE"
-// 20 is the PT100 circuit found in the Ultimainboard V2.x
-// 60 is 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
-// 66 is 4.7M High Temperature thermistor from Dyze Design
-// 70 is the 100K thermistor found in the bq Hephestos 2
-//
-// 1k ohm pullup tables - This is not normal, you would have to have changed out your 4.7k for 1k
-// (but gives greater accuracy and more stable PID)
-// 51 is 100k thermistor - EPCOS (1k pullup)
-// 52 is 200k thermistor - ATC Semitec 204GT-2 (1k pullup)
-// 55 is 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup)
-//
-// 1047 is Pt1000 with 4k7 pullup
-// 1010 is Pt1000 with 1k pullup (non standard)
-// 147 is Pt100 with 4k7 pullup
-// 110 is Pt100 with 1k pullup (non standard)
-// 998 and 999 are Dummy Tables. They will ALWAYS read 25°C or the temperature defined below.
-// Use it for Testing or Development purposes. NEVER for production machine.
-//#define DUMMY_THERMISTOR_998_VALUE 25
-//#define DUMMY_THERMISTOR_999_VALUE 100
-// :{ '0': "Not used",'1':"100k / 4.7k - EPCOS",'2':"200k / 4.7k - ATC Semitec 204GT-2",'3':"Mendel-parts / 4.7k",'4':"10k !! do not use for a hotend. Bad resolution at high temp. !!",'5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)",'6':"100k / 4.7k EPCOS - Not as accurate as Table 1",'7':"100k / 4.7k Honeywell 135-104LAG-J01",'8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT",'9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1",'10':"100k / 4.7k RS 198-961",'11':"100k / 4.7k beta 3950 1%",'12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)",'13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'",'20':"PT100 (Ultimainboard V2.x)",'51':"100k / 1k - EPCOS",'52':"200k / 1k - ATC Semitec 204GT-2",'55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)",'60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950",'66':"Dyze Design 4.7M High Temperature thermistor",'70':"the 100K thermistor found in the bq Hephestos 2",'71':"100k / 4.7k Honeywell 135-104LAF-J01",'147':"Pt100 / 4.7k",'1047':"Pt1000 / 4.7k",'110':"Pt100 / 1k (non-standard)",'1010':"Pt1000 / 1k (non standard)",'-3':"Thermocouple + MAX31855 (only for sensor 0)",'-2':"Thermocouple + MAX6675 (only for sensor 0)",'-1':"Thermocouple + AD595",'998':"Dummy 1",'999':"Dummy 2" }
-#define TEMP_SENSOR_0 5
-#define TEMP_SENSOR_1 5
-#define TEMP_SENSOR_2 0
-#define TEMP_SENSOR_3 0
-#define TEMP_SENSOR_BED 0
-
-// This makes temp sensor 1 a redundant sensor for sensor 0. If the temperatures difference between these sensors is to high the print will be aborted.
-//#define TEMP_SENSOR_1_AS_REDUNDANT
-#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 10
-
-// Extruder temperature must be close to target for this long before M109 returns success
-#define TEMP_RESIDENCY_TIME 2 // (seconds)
-#define TEMP_HYSTERESIS 5 // (degC) range of +/- temperatures considered "close" to the target one
-#define TEMP_WINDOW 1 // (degC) Window around target to start the residency timer x degC early.
-
-// Bed temperature must be close to target for this long before M190 returns success
-#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.
-
-// The minimal temperature defines the temperature below which the heater will not be enabled It is used
-// to check that the wiring to the thermistor is not broken.
-// Otherwise this would lead to the heater being powered on all the time.
-#define HEATER_0_MINTEMP 5
-#define HEATER_1_MINTEMP 5
-#define HEATER_2_MINTEMP 5
-#define HEATER_3_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 275
-#define HEATER_1_MAXTEMP 275
-#define HEATER_2_MAXTEMP 275
-#define HEATER_3_MAXTEMP 275
-#define BED_MAXTEMP 150
-
-//===========================================================================
-//============================= PID Settings ================================
-//===========================================================================
-// PID Tuning Guide here: http://reprap.org/wiki/PID_Tuning
-
-// Comment the following line to disable PID and enable bang-bang.
-#define PIDTEMP
-#define BANG_MAX 255 // limits current to nozzle while in bang-bang mode; 255=full current
-#define PID_MAX BANG_MAX // limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
-#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
- //#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
- // Set/get with gcode: M301 E[extruder number, 0-2]
- #define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
- // is more than PID_FUNCTIONAL_RANGE then the PID will be shut off and the heater will be set to min/max.
- #define PID_INTEGRAL_DRIVE_MAX PID_MAX //limit for the integral term
- #define K1 0.95 //smoothing factor within the PID
-
- // If you are using a pre-configured hotend then you can use one of the value sets by uncommenting it
- // Ultimaker
- //#define DEFAULT_Kp 22.2
- //#define DEFAULT_Ki 1.08
- //#define DEFAULT_Kd 114
-
- // MakerGear
- //#define DEFAULT_Kp 7.0
- //#define DEFAULT_Ki 0.1
- //#define DEFAULT_Kd 12
-
- // Mendel Parts V9 on 12V
- #define DEFAULT_Kp 63.0
- #define DEFAULT_Ki 2.25
- #define DEFAULT_Kd 440
-
-#endif // PIDTEMP
-
-//===========================================================================
-//============================= PID > Bed Temperature Control ===============
-//===========================================================================
-// Select PID or bang-bang with PIDTEMPBED. If bang-bang, BED_LIMIT_SWITCHING will enable hysteresis
-//
-// Uncomment this to enable PID on the bed. It uses the same frequency PWM as the extruder.
-// If your PID_dT is the default, and correct for your hardware/configuration, that means 7.689Hz,
-// which is fine for driving a square wave into a resistive load and does not significantly impact you FET heating.
-// This also works fine on a Fotek SSR-10DA Solid State Relay into a 250W heater.
-// If your configuration is significantly different than this and you don't understand the issues involved, you probably
-// shouldn't use bed PID until someone else verifies your hardware works.
-// If this is enabled, find your own PID constants below.
-//#define PIDTEMPBED
-
-//#define BED_LIMIT_SWITCHING
-
-// This sets the max power delivered to the bed, and replaces the HEATER_BED_DUTY_CYCLE_DIVIDER option.
-// all forms of bed control obey this (PID, bang-bang, bang-bang with hysteresis)
-// setting this to anything other than 255 enables a form of PWM to the bed just like HEATER_BED_DUTY_CYCLE_DIVIDER did,
-// so you shouldn't use it unless you are OK with PWM on your bed. (see the comment on enabling PIDTEMPBED)
-#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current
-
-#if ENABLED(PIDTEMPBED)
-
- //#define PID_BED_DEBUG // Sends debug data to the serial port.
-
- #define PID_BED_INTEGRAL_DRIVE_MAX MAX_BED_POWER //limit for the integral term
-
- //120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
- //from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10)
- #define DEFAULT_bedKp 10.00
- #define DEFAULT_bedKi .023
- #define DEFAULT_bedKd 305.4
-
- //120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
- //from pidautotune
- //#define DEFAULT_bedKp 97.1
- //#define DEFAULT_bedKi 1.41
- //#define DEFAULT_bedKd 1675.16
-
- // FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles.
-#endif // PIDTEMPBED
-
-// @section extruder
-
-//this prevents dangerous Extruder moves, i.e. if the temperature is under the limit
-//can be software-disabled for whatever purposes by
-#define PREVENT_DANGEROUS_EXTRUDE
-//if PREVENT_DANGEROUS_EXTRUDE is on, you can still disable (uncomment) very long bits of extrusion separately.
-#define PREVENT_LENGTHY_EXTRUDE
-
-#define EXTRUDE_MINTEMP 160
-#define EXTRUDE_MAXLENGTH (X_MAX_LENGTH+Y_MAX_LENGTH) //prevent extrusion of very large distances.
-
-//===========================================================================
-//======================== Thermal Runaway Protection =======================
-//===========================================================================
-
-/**
- * Thermal Protection protects your printer from damage and fire if a
- * thermistor falls out or temperature sensors fail in any way.
- *
- * The issue: If a thermistor falls out or a temperature sensor fails,
- * Marlin can no longer sense the actual temperature. Since a disconnected
- * thermistor reads as a low temperature, the firmware will keep the heater on.
- *
- * If you get "Thermal Runaway" or "Heating failed" errors the
- * details can be tuned in Configuration_adv.h
- */
-
-#define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders
-#define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed
-
-//===========================================================================
-//============================= Mechanical Settings =========================
-//===========================================================================
-
-// @section machine
-
-// Uncomment one of these options to enable CoreXY, CoreXZ, or CoreYZ kinematics
-//#define COREXY
-//#define COREXZ
-//#define COREYZ
-
-// Enable this option for Toshiba steppers
-//#define CONFIG_STEPPERS_TOSHIBA
-
-//===========================================================================
-//============================== Endstop Settings ===========================
-//===========================================================================
-
-// @section homing
-
-// Specify here all the endstop connectors that are connected to any endstop or probe.
-// Almost all printers will be using one per axis. Probes will use one or more of the
-// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
-#define USE_XMIN_PLUG
-#define USE_YMIN_PLUG
-#define USE_ZMIN_PLUG
-//#define USE_XMAX_PLUG
-//#define USE_YMAX_PLUG
-//#define USE_ZMAX_PLUG
-
-// coarse Endstop Settings
-#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
-
-#if DISABLED(ENDSTOPPULLUPS)
- // fine endstop settings: Individual pullups. will be ignored if ENDSTOPPULLUPS is defined
- //#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 // set to true to invert the logic of the endstop.
-#define Y_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Z_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define X_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Y_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Z_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Z_MIN_PROBE_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-
-//===========================================================================
-//============================= Z Probe Options =============================
-//===========================================================================
-
-//
-// Probe Type
-// Probes are sensors/switches that are activated / deactivated before/after use.
-//
-// Allen Key Probes, Servo Probes, Z-Sled Probes, FIX_MOUNTED_PROBE, etc.
-// You must activate one of these to use AUTO_BED_LEVELING_FEATURE below.
-//
-// Use M851 to set the Z probe vertical offset from the nozzle. Store with M500.
-//
-
-// A Fix-Mounted Probe either doesn't deploy or needs manual deployment.
-// For example an inductive probe, or a setup that uses the nozzle to probe.
-// An inductive probe must be deactivated to go below
-// its trigger-point if hardware endstops are active.
-//#define FIX_MOUNTED_PROBE
-
-// The BLTouch probe emulates a servo probe.
-//#define BLTOUCH
-
-// Z Servo Probe, such as an endstop switch on a rotating arm.
-//#define Z_ENDSTOP_SERVO_NR 0
-//#define Z_SERVO_ANGLES {70,0} // Z Servo Deploy and Stow angles
-
-// Enable if you have a Z probe mounted on a sled like those designed by Charles Bell.
-//#define Z_PROBE_SLED
-//#define SLED_DOCKING_OFFSET 5 // The extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.
-
-// Z Probe to nozzle (X,Y) offset, relative to (0, 0).
-// X and Y offsets must be integers.
-//
-// In the following example the X and Y offsets are both positive:
-// #define X_PROBE_OFFSET_FROM_EXTRUDER 10
-// #define Y_PROBE_OFFSET_FROM_EXTRUDER 10
-//
-// +-- BACK ---+
-// | |
-// L | (+) P | R <-- probe (20,20)
-// E | | I
-// F | (-) N (+) | G <-- nozzle (10,10)
-// T | | H
-// | (-) | T
-// | |
-// O-- FRONT --+
-// (0,0)
-#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]
-
-// X and Y axis travel speed (mm/m) between probes
-#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
-#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
-// Speed for the "accurate" probe of each point
-#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
-
-//
-// Allen Key Probe is defined in the Delta example configurations.
-//
-
-// Enable Z_MIN_PROBE_ENDSTOP to use _both_ a Z Probe and a Z-min-endstop on the same machine.
-// With this option the Z_MIN_PROBE_PIN will only be used for probing, never for homing.
-//
-// *** PLEASE READ ALL INSTRUCTIONS BELOW FOR SAFETY! ***
-//
-// To continue using the Z-min-endstop for homing, be sure to disable Z_SAFE_HOMING.
-// Example: To park the head outside the bed area when homing with G28.
-//
-// To use a separate Z probe, your board must define a Z_MIN_PROBE_PIN.
-//
-// For a servo-based Z probe, you must set up servo support below, including
-// NUM_SERVOS, Z_ENDSTOP_SERVO_NR and Z_SERVO_ANGLES.
-//
-// - RAMPS 1.3/1.4 boards may be able to use the 5V, GND, and Aux4->D32 pin.
-// - Use 5V for powered (usu. inductive) sensors.
-// - Otherwise connect:
-// - normally-closed switches to GND and D32.
-// - normally-open switches to 5V and D32.
-//
-// Normally-closed switches are advised and are the default.
-//
-// The Z_MIN_PROBE_PIN sets the Arduino pin to use. (See your board's pins file.)
-// Since the RAMPS Aux4->D32 pin maps directly to the Arduino D32 pin, D32 is the
-// default pin for all RAMPS-based boards. Some other boards map differently.
-// To set or change the pin for your board, edit the appropriate pins_XXXXX.h file.
-//
-// WARNING:
-// Setting the wrong pin may have unexpected and potentially disastrous consequences.
-// Use with caution and do your homework.
-//
-//#define Z_MIN_PROBE_ENDSTOP
-
-// Enable Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN to use the Z_MIN_PIN for your Z_MIN_PROBE.
-// The Z_MIN_PIN will then be used for both Z-homing and probing.
-#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
-
-// To use a probe you must enable one of the two options above!
-
-// This option disables the use of the Z_MIN_PROBE_PIN
-// To enable the Z probe pin but disable its use, uncomment the line below. This only affects a
-// Z probe switch if you have a separate Z min endstop also and have activated Z_MIN_PROBE_ENDSTOP above.
-// If you're using the Z MIN endstop connector for your Z probe, this has no effect.
-//#define DISABLE_Z_MIN_PROBE_ENDSTOP
-
-// Enable Z Probe Repeatability test to see how accurate your probe is
-//#define Z_MIN_PROBE_REPEATABILITY_TEST
-
-//
-// Probe Raise options provide clearance for the probe to deploy, stow, and travel.
-//
-#define Z_PROBE_DEPLOY_HEIGHT 15 // Raise to make room for the probe to deploy / stow
-#define Z_PROBE_TRAVEL_HEIGHT 5 // Raise between probing points.
-
-//
-// For M851 give a range for adjusting the Z probe offset
-//
-#define Z_PROBE_OFFSET_RANGE_MIN -20
-#define Z_PROBE_OFFSET_RANGE_MAX 20
-
-// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
-// :{0:'Low',1:'High'}
-#define X_ENABLE_ON 0
-#define Y_ENABLE_ON 0
-#define Z_ENABLE_ON 0
-#define E_ENABLE_ON 0 // For all extruders
-
-// Disables axis stepper immediately when it's not being used.
-// WARNING: When motors turn off there is a chance of losing position accuracy!
-#define DISABLE_X false
-#define DISABLE_Y false
-#define DISABLE_Z false
-// Warn on display about possibly reduced accuracy
-//#define DISABLE_REDUCED_ACCURACY_WARNING
-
-// @section extruder
-
-#define DISABLE_E false // For all extruders
-#define DISABLE_INACTIVE_EXTRUDER true //disable only inactive extruders and keep active extruder enabled
-
-// @section machine
-
-// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way.
-#define INVERT_X_DIR false
-#define INVERT_Y_DIR true
-#define INVERT_Z_DIR true
-
-// @section extruder
-
-// For direct drive extruder v9 set to true, for geared extruder set to false.
-#define INVERT_E0_DIR false
-#define INVERT_E1_DIR true
-#define INVERT_E2_DIR false
-#define INVERT_E3_DIR false
-
-// @section homing
-
-//#define Z_HOMING_HEIGHT 4 // (in mm) Minimal z height before homing (G28) for Z clearance above the bed, clamps, ...
- // Be sure you have this distance over your Z_MAX_POS in case.
-
-// ENDSTOP SETTINGS:
-// Sets direction of endstops when homing; 1=MAX, -1=MIN
-// :[-1,1]
-#define X_HOME_DIR -1
-#define Y_HOME_DIR -1
-#define Z_HOME_DIR -1
-
-#define min_software_endstops true // If true, axis won't move to coordinates less than HOME_POS.
-#define max_software_endstops true // If true, axis won't move to coordinates greater than the defined lengths below.
-
-// @section machine
-
-// Travel limits after homing (units are in mm)
-#define X_MIN_POS 0
-#define Y_MIN_POS 20
-#define Z_MIN_POS 0
-#define X_MAX_POS 200
-#define Y_MAX_POS 200
-#define Z_MAX_POS 190
-
-//===========================================================================
-//========================= Filament Runout Sensor ==========================
-//===========================================================================
-//#define FILAMENT_RUNOUT_SENSOR // Uncomment for defining a filament runout sensor such as a mechanical or opto endstop to check the existence of filament
- // In RAMPS uses servo pin 2. Can be changed in pins file. For other boards pin definition should be made.
- // It is assumed that when logic high = filament available
- // when logic low = filament ran out
-#if ENABLED(FILAMENT_RUNOUT_SENSOR)
- const bool FIL_RUNOUT_INVERTING = false; // set to true to invert the logic of the sensor.
- #define ENDSTOPPULLUP_FIL_RUNOUT // Uncomment to use internal pullup for filament runout pins if the sensor is defined.
- #define FILAMENT_RUNOUT_SCRIPT "M600"
-#endif
-
-//===========================================================================
-//============================ Mesh Bed Leveling ============================
-//===========================================================================
-
-//#define MESH_BED_LEVELING // Enable mesh bed leveling.
-
-#if ENABLED(MESH_BED_LEVELING)
- #define MESH_INSET 10 // Mesh inset margin on print area
- #define MESH_NUM_X_POINTS 3 // Don't use more than 7 points per axis, implementation limited.
- #define MESH_NUM_Y_POINTS 3
- #define MESH_HOME_SEARCH_Z 4 // Z after Home, bed somewhere below but above 0.0.
-
- //#define MESH_G28_REST_ORIGIN // After homing all axes ('G28' or 'G28 XYZ') rest at origin [0,0,0]
-
- //#define MANUAL_BED_LEVELING // Add display menu option for bed leveling.
-
- #if ENABLED(MANUAL_BED_LEVELING)
- #define MBL_Z_STEP 0.025 // Step size while manually probing Z axis.
- #endif // MANUAL_BED_LEVELING
-
-#endif // MESH_BED_LEVELING
-
-//===========================================================================
-//============================ Bed Auto Leveling ============================
-//===========================================================================
-
-// @section bedlevel
-
-//#define AUTO_BED_LEVELING_FEATURE // Delete the comment to enable (remove // at the start of the line)
-
-// Enable this feature to get detailed logging of G28, G29, M48, etc.
-// Logging is off by default. Enable this logging feature with 'M111 S32'.
-// NOTE: Requires a huge amount of PROGMEM.
-//#define DEBUG_LEVELING_FEATURE
-
-#if ENABLED(AUTO_BED_LEVELING_FEATURE)
-
- // There are 2 different ways to specify probing locations:
- //
- // - "grid" mode
- // Probe several points in a rectangular grid.
- // You specify the rectangle and the density of sample points.
- // This mode is preferred because there are more measurements.
- //
- // - "3-point" mode
- // Probe 3 arbitrary points on the bed (that aren't collinear)
- // You specify the XY coordinates of all 3 points.
-
- // Enable this to sample the bed in a grid (least squares solution).
- // Note: this feature generates 10KB extra code size.
- #define AUTO_BED_LEVELING_GRID
-
- #if ENABLED(AUTO_BED_LEVELING_GRID)
-
- #define LEFT_PROBE_BED_POSITION 15
- #define RIGHT_PROBE_BED_POSITION 170
- #define FRONT_PROBE_BED_POSITION 20
- #define BACK_PROBE_BED_POSITION 170
-
- #define MIN_PROBE_EDGE 10 // The Z probe minimum square sides can be no smaller than this.
-
- // Set the number of grid points per dimension.
- // You probably don't need more than 3 (squared=9).
- #define AUTO_BED_LEVELING_GRID_POINTS 2
-
- #else // !AUTO_BED_LEVELING_GRID
-
- // Arbitrary points to probe.
- // A simple cross-product is used to estimate the plane of the bed.
- #define ABL_PROBE_PT_1_X 15
- #define ABL_PROBE_PT_1_Y 180
- #define ABL_PROBE_PT_2_X 15
- #define ABL_PROBE_PT_2_Y 20
- #define ABL_PROBE_PT_3_X 170
- #define ABL_PROBE_PT_3_Y 20
-
- #endif // !AUTO_BED_LEVELING_GRID
-
- //#define Z_PROBE_END_SCRIPT "G1 Z10 F12000\nG1 X15 Y330\nG1 Z0.5\nG1 Z10" // These commands will be executed in the end of G29 routine.
- // Useful to retract a deployable Z probe.
-
- // If you've enabled AUTO_BED_LEVELING_FEATURE and are using the Z Probe for Z Homing,
- // it is highly recommended you also enable Z_SAFE_HOMING below!
-
-#endif // AUTO_BED_LEVELING_FEATURE
-
-
-// @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 // Distance between the nozzle to printbed after homing
-
-// Use "Z Safe Homing" to avoid homing with a Z probe outside the bed area.
-//
-// With this feature enabled:
-//
-// - Allow Z homing only after X and Y homing AND stepper drivers still enabled.
-// - If stepper drivers time out, it will need X and Y homing again before Z homing.
-// - Move the Z probe (or nozzle) to a defined XY point before Z Homing when homing all axes (G28).
-// - Prevent Z homing when the Z probe is outside bed area.
-//#define Z_SAFE_HOMING
-
-#if ENABLED(Z_SAFE_HOMING)
- #define Z_SAFE_HOMING_X_POINT ((X_MIN_POS + X_MAX_POS) / 2) // X point for Z homing when homing all axis (G28).
- #define Z_SAFE_HOMING_Y_POINT ((Y_MIN_POS + Y_MAX_POS) / 2) // Y point for Z homing when homing all axis (G28).
-#endif
-
-// Homing speeds (mm/m)
-#define HOMING_FEEDRATE_XY (50*60)
-#define HOMING_FEEDRATE_Z (8*60)
-
-//
-// MOVEMENT SETTINGS
-// @section motion
-//
-
-// default settings
-
-#define DEFAULT_AXIS_STEPS_PER_UNIT {134.74,134.74,4266.66,148.7} // default steps per unit for Ultimaker
-#define DEFAULT_MAX_FEEDRATE {160, 160, 10, 10000} // (mm/sec)
-#define DEFAULT_MAX_ACCELERATION {9000,9000,100,10000} // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for Skeinforge 40+, for older versions raise them a lot.
-
-#define DEFAULT_ACCELERATION 6000 // X, Y, Z and E acceleration in mm/s^2 for printing moves
-#define DEFAULT_RETRACT_ACCELERATION 6000 // E acceleration in mm/s^2 for retracts
-#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
-
-// The speed change that does not require acceleration (i.e. the software might assume it can be done instantaneously)
-#define DEFAULT_XYJERK 10.0 // (mm/sec)
-#define DEFAULT_ZJERK 0.5 // (mm/sec)
-#define DEFAULT_EJERK 20.0 // (mm/sec)
-
-
-//=============================================================================
-//============================= Additional Features ===========================
-//=============================================================================
-
-// @section extras
-
-//
-// EEPROM
-//
-// The microcontroller can store settings in the EEPROM, e.g. max velocity...
-// M500 - stores parameters in EEPROM
-// M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily).
-// M502 - reverts to the default "factory settings". You still need to store them in EEPROM afterwards if you want to.
-//define this to enable EEPROM support
-#define EEPROM_SETTINGS
-
-#if ENABLED(EEPROM_SETTINGS)
- // To disable EEPROM Serial responses and decrease program space by ~1700 byte: comment this out:
- #define EEPROM_CHITCHAT // Please keep turned on if you can.
-#endif
-
-//
-// Host Keepalive
-//
-// When enabled Marlin will send a busy status message to the host
-// every couple of seconds when it can't accept commands.
-//
-#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.
-
-//
-// M100 Free Memory Watcher
-//
-//#define M100_FREE_MEMORY_WATCHER // uncomment to add the M100 Free Memory Watcher for debug purpose
-
-//
-// G20/G21 Inch mode support
-//
-//#define INCH_MODE_SUPPORT
-
-//
-// M149 Set temperature units support
-//
-//#define TEMPERATURE_UNITS_SUPPORT
-
-// @section temperature
-
-// Preheat Constants
-#define PREHEAT_1_TEMP_HOTEND 210
-#define PREHEAT_1_TEMP_BED 0
-#define PREHEAT_1_FAN_SPEED 165 // Value from 0 to 255
-
-#define PREHEAT_2_TEMP_HOTEND 245
-#define PREHEAT_2_TEMP_BED 0
-#define PREHEAT_2_FAN_SPEED 165 // Value from 0 to 255
-
-//
-// Nozzle Park -- EXPERIMENTAL
-//
-// When enabled allows the user to define a special XYZ position, inside the
-// machine's topology, to park the nozzle when idle or when receiving the G27
-// command.
-//
-// The "P" paramenter controls what is the action applied to the Z axis:
-// P0: (Default) If current Z-pos is lower than Z-park then the nozzle will
-// be raised to reach Z-park height.
-//
-// P1: No matter the current Z-pos, the nozzle will be raised/lowered to
-// reach Z-park height.
-//
-// P2: The nozzle height will be raised by Z-park amount but never going over
-// the machine's limit of Z_MAX_POS.
-//
-//#define NOZZLE_PARK_FEATURE
-
-#if ENABLED(NOZZLE_PARK_FEATURE)
- // Specify a park position as { X, Y, Z }
- #define NOZZLE_PARK_POINT { (X_MIN_POS + 10), (Y_MAX_POS - 10), 20 }
-#endif
-
-//
-// Clean Nozzle Feature -- EXPERIMENTAL
-//
-// When enabled allows the user to send G12 to start the nozzle cleaning
-// process, the G-Code accepts two parameters:
-// "P" for pattern selection
-// "S" for defining the number of strokes/repetitions
-//
-// Available list of patterns:
-// P0: This is the default pattern, this process requires a sponge type
-// material at a fixed bed location, the cleaning process is based on
-// "strokes" i.e. back-and-forth movements between the starting and end
-// points.
-//
-// P1: This starts a zig-zag pattern between (X0, Y0) and (X1, Y1), "T"
-// defines the number of zig-zag triangles to be done. "S" defines the
-// number of strokes aka one back-and-forth movement. As an example
-// sending "G12 P1 S1 T3" will execute:
-//
-// --
-// | (X0, Y1) | /\ /\ /\ | (X1, Y1)
-// | | / \ / \ / \ |
-// A | | / \ / \ / \ |
-// | | / \ / \ / \ |
-// | (X0, Y0) | / \/ \/ \ | (X1, Y0)
-// -- +--------------------------------+
-// |________|_________|_________|
-// T1 T2 T3
-//
-// Caveats: End point Z should use the same value as Start point Z.
-//
-// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
-// may change to add new functionality like different wipe patterns.
-//
-//#define NOZZLE_CLEAN_FEATURE
-
-#if ENABLED(NOZZLE_CLEAN_FEATURE)
- // Number of pattern repetitions
- #define NOZZLE_CLEAN_STROKES 12
-
- // Specify positions as { X, Y, Z }
- #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
- #define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
-
- // Moves the nozzle to the initial position
- #define NOZZLE_CLEAN_GOBACK
-#endif
-
-//
-// Print job timer
-//
-// Enable this option to automatically start and stop the
-// print job timer when M104/M109/M190 commands are received.
-// M104 (extruder without wait) - high temp = none, low temp = stop timer
-// M109 (extruder with wait) - high temp = start timer, low temp = stop timer
-// M190 (bed with wait) - high temp = start timer, low temp = none
-//
-// In all cases the timer can be started and stopped using
-// the following commands:
-//
-// - M75 - Start the print job timer
-// - M76 - Pause the print job timer
-// - M77 - Stop the print job timer
-#define PRINTJOB_TIMER_AUTOSTART
-
-//
-// Print Counter
-//
-// When enabled Marlin will keep track of some print statistical data such as:
-// - Total print jobs
-// - Total successful print jobs
-// - Total failed print jobs
-// - Total time printing
-//
-// This information can be viewed by the M78 command.
-//#define PRINTCOUNTER
-
-//=============================================================================
-//============================= LCD and SD support ============================
-//=============================================================================
-
-// @section lcd
-
-//
-// LCD LANGUAGE
-//
-// Here you may choose the language used by Marlin on the LCD menus, the following
-// list of languages are available:
-// en, an, bg, ca, cn, cz, de, el, el-gr, es, eu, fi, fr, gl, hr, it,
-// kana, kana_utf8, nl, pl, pt, pt_utf8, pt-br, pt-br_utf8, ru, test
-//
-// :{'en':'English','an':'Aragonese','bg':'Bulgarian','ca':'Catalan','cn':'Chinese','cz':'Czech','de':'German','el':'Greek','el-gr':'Greek (Greece)','es':'Spanish','eu':'Basque-Euskera','fi':'Finnish','fr':'French','gl':'Galician','hr':'Croatian','it':'Italian','kana':'Japanese','kana_utf8':'Japanese (UTF8)','nl':'Dutch','pl':'Polish','pt':'Portuguese','pt-br':'Portuguese (Brazilian)','pt-br_utf8':'Portuguese (Brazilian UTF8)','pt_utf8':'Portuguese (UTF8)','ru':'Russian','test':'TEST'}
-//
-#define LCD_LANGUAGE en
-
-//
-// LCD Character Set
-//
-// Note: This option is NOT applicable to Graphical Displays.
-//
-// All character-based LCD's provide ASCII plus one of these
-// language extensions:
-//
-// - JAPANESE ... the most common
-// - WESTERN ... with more accented characters
-// - CYRILLIC ... for the Russian language
-//
-// To determine the language extension installed on your controller:
-//
-// - Compile and upload with LCD_LANGUAGE set to 'test'
-// - Click the controller to view the LCD menu
-// - The LCD will display Japanese, Western, or Cyrillic text
-//
-// See https://github.com/MarlinFirmware/Marlin/wiki/LCD-Language
-//
-// :['JAPANESE','WESTERN','CYRILLIC']
-//
-#define DISPLAY_CHARSET_HD44780 JAPANESE
-
-//
-// LCD TYPE
-//
-// You may choose ULTRA_LCD if you have character based LCD with 16x2, 16x4, 20x2,
-// 20x4 char/lines or DOGLCD for the full graphics display with 128x64 pixels
-// (ST7565R family). (This option will be set automatically for certain displays.)
-//
-// IMPORTANT NOTE: The U8glib library is required for Full Graphic Display!
-// https://github.com/olikraus/U8glib_Arduino
-//
-#define ULTRA_LCD // Character based
-//#define DOGLCD // Full graphics display
-
-//
-// SD CARD
-//
-// SD Card support is disabled by default. If your controller has an SD slot,
-// you must uncomment the following option or it won't work.
-//
-#define SDSUPPORT
-
-//
-// SD CARD: SPI SPEED
-//
-// Uncomment ONE of the following items to use a slower SPI transfer
-// speed. This is usually required if you're getting volume init errors.
-//
-//#define SPI_SPEED SPI_HALF_SPEED
-//#define SPI_SPEED SPI_QUARTER_SPEED
-//#define SPI_SPEED SPI_EIGHTH_SPEED
-
-//
-// SD CARD: ENABLE CRC
-//
-// Use CRC checks and retries on the SD communication.
-//
-//#define SD_CHECK_AND_RETRY
-
-//
-// ENCODER SETTINGS
-//
-// This option overrides the default number of encoder pulses needed to
-// produce one step. Should be increased for high-resolution encoders.
-//
-#define ENCODER_PULSES_PER_STEP 4
-
-//
-// Use this option to override the number of step signals required to
-// move between next/prev menu items.
-//
-#define ENCODER_STEPS_PER_MENU_ITEM 1
-
-/**
- * Encoder Direction Options
- *
- * Test your encoder's behavior first with both options disabled.
- *
- * Reversed Value Edit and Menu Nav? Enable REVERSE_ENCODER_DIRECTION.
- * Reversed Menu Navigation only? Enable REVERSE_MENU_DIRECTION.
- * Reversed Value Editing only? Enable BOTH options.
- */
-
-//
-// This option reverses the encoder direction everywhere
-//
-// Set this option if CLOCKWISE causes values to DECREASE
-//
-//#define REVERSE_ENCODER_DIRECTION
-
-//
-// This option reverses the encoder direction for navigating LCD menus.
-//
-// If CLOCKWISE normally moves DOWN this makes it go UP.
-// If CLOCKWISE normally moves UP this makes it go DOWN.
-//
-#define REVERSE_MENU_DIRECTION
-
-//
-// Individual Axis Homing
-//
-// Add individual axis homing items (Home X, Home Y, and Home Z) to the LCD menu.
-//
-//#define INDIVIDUAL_AXIS_HOMING_MENU
-
-//
-// SPEAKER/BUZZER
-//
-// If you have a speaker that can produce tones, enable it here.
-// By default Marlin assumes you have a buzzer with a fixed frequency.
-//
-//#define SPEAKER
-
-//
-// The duration and frequency for the UI feedback sound.
-// Set these to 0 to disable audio feedback in the LCD menus.
-//
-// Note: Test audio output with the G-Code:
-// M300 S P
-//
-//#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 100
-//#define LCD_FEEDBACK_FREQUENCY_HZ 1000
-
-//
-// CONTROLLER TYPE: Standard
-//
-// Marlin supports a wide variety of controllers.
-// Enable one of the following options to specify your controller.
-//
-
-//
-// ULTIMAKER Controller.
-//
-#define ULTIMAKERCONTROLLER
-
-//
-// ULTIPANEL as seen on Thingiverse.
-//
-//#define ULTIPANEL
-
-//
-// Cartesio UI
-// http://mauk.cc/webshop/cartesio-shop/electronics/user-interface
-//
-//#define CARTESIO_UI
-
-//
-// PanelOne from T3P3 (via RAMPS 1.4 AUX2/AUX3)
-// http://reprap.org/wiki/PanelOne
-//
-//#define PANEL_ONE
-
-//
-// MaKr3d Makr-Panel with graphic controller and SD support.
-// http://reprap.org/wiki/MaKr3d_MaKrPanel
-//
-//#define MAKRPANEL
-
-//
-// ReprapWorld Graphical LCD
-// https://reprapworld.com/?products_details&products_id/1218
-//
-//#define REPRAPWORLD_GRAPHICAL_LCD
-
-//
-// Activate one of these if you have a Panucatt Devices
-// Viki 2.0 or mini Viki with Graphic LCD
-// http://panucatt.com
-//
-//#define VIKI2
-//#define miniVIKI
-
-//
-// Adafruit ST7565 Full Graphic Controller.
-// https://github.com/eboston/Adafruit-ST7565-Full-Graphic-Controller/
-//
-//#define ELB_FULL_GRAPHIC_CONTROLLER
-
-//
-// RepRapDiscount Smart Controller.
-// http://reprap.org/wiki/RepRapDiscount_Smart_Controller
-//
-// Note: Usually sold with a white PCB.
-//
-//#define REPRAP_DISCOUNT_SMART_CONTROLLER
-
-//
-// GADGETS3D G3D LCD/SD Controller
-// http://reprap.org/wiki/RAMPS_1.3/1.4_GADGETS3D_Shield_with_Panel
-//
-// Note: Usually sold with a blue PCB.
-//
-//#define G3D_PANEL
-
-//
-// RepRapDiscount FULL GRAPHIC Smart Controller
-// http://reprap.org/wiki/RepRapDiscount_Full_Graphic_Smart_Controller
-//
-//#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
-
-//
-// MakerLab Mini Panel with graphic
-// controller and SD support - http://reprap.org/wiki/Mini_panel
-//
-//#define MINIPANEL
-
-//
-// RepRapWorld REPRAPWORLD_KEYPAD v1.1
-// http://reprapworld.com/?products_details&products_id=202&cPath=1591_1626
-//
-// REPRAPWORLD_KEYPAD_MOVE_STEP sets how much should the robot move when a key
-// is pressed, a value of 10.0 means 10mm per click.
-//
-//#define REPRAPWORLD_KEYPAD
-//#define REPRAPWORLD_KEYPAD_MOVE_STEP 10.0
-
-//
-// RigidBot Panel V1.0
-// http://www.inventapart.com/
-//
-//#define RIGIDBOT_PANEL
-
-//
-// BQ LCD Smart Controller shipped by
-// default with the BQ Hephestos 2 and Witbox 2.
-//
-//#define BQ_LCD_SMART_CONTROLLER
-
-//
-// CONTROLLER TYPE: I2C
-//
-// Note: These controllers require the installation of Arduino's LiquidCrystal_I2C
-// library. For more info: https://github.com/kiyoshigawa/LiquidCrystal_I2C
-//
-
-//
-// Elefu RA Board Control Panel
-// http://www.elefu.com/index.php?route=product/product&product_id=53
-//
-//#define RA_CONTROL_PANEL
-
-//
-// Sainsmart YW Robot (LCM1602) LCD Display
-//
-//#define LCD_I2C_SAINSMART_YWROBOT
-
-//
-// Generic LCM1602 LCD adapter
-//
-//#define LCM1602
-
-//
-// PANELOLU2 LCD with status LEDs,
-// separate encoder and click inputs.
-//
-// Note: This controller requires Arduino's LiquidTWI2 library v1.2.3 or later.
-// For more info: https://github.com/lincomatic/LiquidTWI2
-//
-// Note: The PANELOLU2 encoder click input can either be directly connected to
-// a pin (if BTN_ENC defined to != -1) or read through I2C (when BTN_ENC == -1).
-//
-//#define LCD_I2C_PANELOLU2
-
-//
-// Panucatt VIKI LCD with status LEDs,
-// integrated click & L/R/U/D buttons, separate encoder inputs.
-//
-//#define LCD_I2C_VIKI
-
-//
-// SSD1306 OLED full graphics generic display
-//
-//#define U8GLIB_SSD1306
-
-//
-// SAV OLEd LCD module support using either SSD1306 or SH1106 based LCD modules
-//
-//#define SAV_3DGLCD
-#if ENABLED(SAV_3DGLCD)
- //#define U8GLIB_SSD1306
- #define U8GLIB_SH1106
-#endif
-
-//
-// CONTROLLER TYPE: Shift register panels
-//
-// 2 wire Non-latching LCD SR from https://goo.gl/aJJ4sH
-// LCD configuration: http://reprap.org/wiki/SAV_3D_LCD
-//
-//#define SAV_3DLCD
-
-//=============================================================================
-//=============================== Extra Features ==============================
-//=============================================================================
-
-// @section extras
-
-// Increase the FAN PWM frequency. Removes the PWM noise but increases heating in the FET/Arduino
-//#define FAST_PWM_FAN
-
-// Use software PWM to drive the fan, as for the heaters. This uses a very low frequency
-// which is not as annoying as with the hardware PWM. On the other hand, if this frequency
-// is too low, you should also increment SOFT_PWM_SCALE.
-//#define FAN_SOFT_PWM
-
-// Incrementing this by 1 will double the software PWM frequency,
-// affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
-// However, control resolution will be halved for each increment;
-// at zero value, there are 128 effective control positions.
-#define SOFT_PWM_SCALE 0
-
-// Temperature status LEDs that display the hotend and bed temperature.
-// If all hotends and bed temperature and temperature setpoint are < 54C then the BLUE led is on.
-// Otherwise the RED led is on. There is 1C hysteresis.
-//#define TEMP_STAT_LEDS
-
-// M240 Triggers a camera by emulating a Canon RC-1 Remote
-// Data from: http://www.doc-diy.net/photo/rc-1_hacked/
-//#define PHOTOGRAPH_PIN 23
-
-// SkeinForge sends the wrong arc g-codes when using Arc Point as fillet procedure
-//#define SF_ARC_FIX
-
-// Support for the BariCUDA Paste Extruder.
-//#define BARICUDA
-
-//define BlinkM/CyzRgb Support
-//#define BLINKM
-
-/*********************************************************************\
-* R/C SERVO support
-* Sponsored by TrinityLabs, Reworked by codexmas
-**********************************************************************/
-
-// Number of servos
-//
-// If you select a configuration below, this will receive a default value and does not need to be set manually
-// set it manually if you have more servos than extruders and wish to manually control some
-// leaving it undefined or defining as 0 will disable the servo subsystem
-// If unsure, leave commented / disabled
-//
-//#define NUM_SERVOS 3 // Servo index starts with 0 for M280 command
-
-// Delay (in microseconds) before the next move will start, to give the servo time to reach its target angle.
-// 300ms is a good value but you can try less delay.
-// If the servo can't reach the requested position, increase it.
-#define SERVO_DELAY 300
-
-// Servo deactivation
-//
-// With this option servos are powered only during movement, then turned off to prevent jitter.
-//#define DEACTIVATE_SERVOS_AFTER_MOVE
-
-/**********************************************************************\
- * Support for a filament diameter sensor
- * Also allows adjustment of diameter at print time (vs at slicing)
- * Single extruder only at this point (extruder 0)
- *
- * Motherboards
- * 34 - RAMPS1.4 - uses Analog input 5 on the AUX2 connector
- * 81 - Printrboard - Uses Analog input 2 on the Exp1 connector (version B,C,D,E)
- * 301 - Rambo - uses Analog input 3
- * Note may require analog pins to be defined for different motherboards
- **********************************************************************/
-// Uncomment below to enable
-//#define FILAMENT_WIDTH_SENSOR
-
-#define DEFAULT_NOMINAL_FILAMENT_DIA 3.00 //Enter the diameter (in mm) of the filament generally used (3.0 mm or 1.75 mm) - this is then used in the slicer software. Used for sensor reading validation
-
-#if ENABLED(FILAMENT_WIDTH_SENSOR)
- #define FILAMENT_SENSOR_EXTRUDER_NUM 0 //The number of the extruder that has the filament sensor (0,1,2)
- #define MEASUREMENT_DELAY_CM 14 //measurement delay in cm. This is the distance from filament sensor to middle of barrel
-
- #define MEASURED_UPPER_LIMIT 3.30 //upper limit factor used for sensor reading validation in mm
- #define MEASURED_LOWER_LIMIT 1.90 //lower limit factor for sensor reading validation in mm
- #define MAX_MEASUREMENT_DELAY 20 //delay buffer size in bytes (1 byte = 1cm)- limits maximum measurement delay allowable (must be larger than MEASUREMENT_DELAY_CM and lower number saves RAM)
-
- #define DEFAULT_MEASURED_FILAMENT_DIA DEFAULT_NOMINAL_FILAMENT_DIA //set measured to nominal initially
-
- //When using an LCD, uncomment the line below to display the Filament sensor data on the last line instead of status. Status will appear for 5 sec.
- //#define FILAMENT_LCD_DISPLAY
-#endif
-
-#endif // CONFIGURATION_H
diff --git a/Marlin/example_configurations/K8400/README.md b/Marlin/example_configurations/K8400/README.md
deleted file mode 100644
index c9089b5..0000000
--- a/Marlin/example_configurations/K8400/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Configuration for Velleman K8400 Vertex
-http://www.k8400.eu/
-
-Configuration files for the K8400, ported upstream from the official Velleman firmware.
-Like it's predecessor, (K8200), the K8400 is a 3Drag clone. There are some minor differences, documented in pins_K8400.h.
-
-Single and dual head configurations provided. Copy the correct Configuration.h and Configuration_adv.h to the /Marlin/ directory.
-
-**NOTE: This configuration includes the community sourced feed rate fix. Use 100% feed rate in Repetier!**
-
-For implementation and updated K8400 firmware, see https://github.com/birkett/Velleman-K8400-Firmware
-
-### Original Sources
-Credit to Velleman for the original 1.0.x based code:
-http://www.vertex3dprinter.eu/downloads/files/vertex/firmware/vertex-m1-v1.4-h2.zip
diff --git a/Marlin/example_configurations/RepRapWorld/Megatronics/Configuration.h b/Marlin/example_configurations/RepRapWorld/Megatronics/Configuration.h
deleted file mode 100644
index 1c37511..0000000
--- a/Marlin/example_configurations/RepRapWorld/Megatronics/Configuration.h
+++ /dev/null
@@ -1,1327 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Configuration.h
- *
- * Basic settings such as:
- *
- * - Type of electronics
- * - Type of temperature sensor
- * - Printer geometry
- * - Endstop configuration
- * - LCD controller
- * - Extra features
- *
- * Advanced settings can be found in Configuration_adv.h
- *
- */
-#ifndef CONFIGURATION_H
-#define CONFIGURATION_H
-
-/**
- *
- * ***********************************
- * ** ATTENTION TO ALL DEVELOPERS **
- * ***********************************
- *
- * You must increment this version number for every significant change such as,
- * but not limited to: ADD, DELETE RENAME OR REPURPOSE any directive/option.
- *
- * Note: Update also Version.h !
- */
-#define CONFIGURATION_H_VERSION 010100
-
-//===========================================================================
-//============================= Getting Started =============================
-//===========================================================================
-
-/**
- * Here are some standard links for getting your machine calibrated:
- *
- * http://reprap.org/wiki/Calibration
- * http://youtu.be/wAL9d7FgInk
- * http://calculator.josefprusa.cz
- * http://reprap.org/wiki/Triffid_Hunter%27s_Calibration_Guide
- * http://www.thingiverse.com/thing:5573
- * https://sites.google.com/site/repraplogphase/calibration-of-your-reprap
- * http://www.thingiverse.com/thing:298812
- */
-
-//===========================================================================
-//============================= DELTA Printer ===============================
-//===========================================================================
-// For a Delta printer replace the configuration files with the files in the
-// example_configurations/delta directory.
-//
-
-//===========================================================================
-//============================= SCARA Printer ===============================
-//===========================================================================
-// For a Scara printer replace the configuration files with the files in the
-// example_configurations/SCARA directory.
-//
-
-// @section info
-
-// User-specified version info of this build to display in [Pronterface, etc] terminal window during
-// startup. Implementation of an idea by Prof Braino to inform user that any changes made to this
-// build by the user have been successfully uploaded into firmware.
-#define STRING_CONFIG_H_AUTHOR "RepRapWorld.com" // Who made the changes.
-#define SHOW_BOOTSCREEN
-#define STRING_SPLASH_LINE1 SHORT_BUILD_VERSION // will be shown during boot in line 1
-#define STRING_SPLASH_LINE2 WEBSITE_URL // will be shown during boot in line 2
-
-//
-// *** VENDORS PLEASE READ *****************************************************
-//
-// Marlin now allow you to have a vendor boot image to be displayed on machine
-// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
-//
-// We suggest for you to take advantage of this new feature and keep the Marlin
-// boot image unmodified. For an example have a look at the bq Hephestos 2
-// example configuration folder.
-//
-//#define SHOW_CUSTOM_BOOTSCREEN
-// @section machine
-
-// SERIAL_PORT selects which serial port should be used for communication with the host.
-// This allows the connection of wireless adapters (for instance) to non-default port pins.
-// Serial port 0 is still used by the Arduino bootloader regardless of this setting.
-// :[0,1,2,3,4,5,6,7]
-#define SERIAL_PORT 0
-
-// This determines the communication speed of the printer
-// :[2400,9600,19200,38400,57600,115200,250000]
-#define BAUDRATE 250000
-
-// Enable the Bluetooth serial interface on AT90USB devices
-//#define BLUETOOTH
-
-// The following define selects which electronics board you have.
-// Please choose the name from boards.h that matches your setup
-#ifndef MOTHERBOARD
- #define MOTHERBOARD BOARD_MEGATRONICS_3
-#endif
-
-// Optional custom name for your RepStrap or other custom machine
-// Displayed in the LCD "Ready" message
-//#define CUSTOM_MACHINE_NAME "3D Printer"
-
-// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
-// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
-//#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
-
-// This defines the number of extruders
-// :[1,2,3,4]
-#define EXTRUDERS 1
-
-// For Cyclops or any "multi-extruder" that shares a single nozzle.
-//#define SINGLENOZZLE
-
-// A dual extruder that uses a single stepper motor
-// Don't forget to set SSDE_SERVO_ANGLES and HOTEND_OFFSET_X/Y/Z
-//#define SWITCHING_EXTRUDER
-#if ENABLED(SWITCHING_EXTRUDER)
- #define SWITCHING_EXTRUDER_SERVO_NR 0
- #define SWITCHING_EXTRUDER_SERVO_ANGLES { 0, 90 } // Angles for E0, E1
- //#define HOTEND_OFFSET_Z {0.0, 0.0}
-#endif
-
-/**
- * "Mixing Extruder"
- * - Adds a new code, M165, to set the current mix factors.
- * - Extends the stepping routines to move multiple steppers in proportion to the mix.
- * - Optional support for Repetier Host M163, M164, and virtual extruder.
- * - This implementation supports only a single extruder.
- * - Enable DIRECT_MIXING_IN_G1 for Pia Taubert's reference implementation
- */
-//#define MIXING_EXTRUDER
-#if ENABLED(MIXING_EXTRUDER)
- #define MIXING_STEPPERS 2 // Number of steppers in your mixing extruder
- #define MIXING_VIRTUAL_TOOLS 16 // Use the Virtual Tool method with M163 and M164
- //#define DIRECT_MIXING_IN_G1 // Allow ABCDHI mix factors in G1 movement commands
-#endif
-
-// Offset of the extruders (uncomment if using more than one and relying on firmware to position when changing).
-// The offset has to be X=0, Y=0 for the extruder 0 hotend (default extruder).
-// For the other hotends it is their distance from the extruder 0 hotend.
-//#define HOTEND_OFFSET_X {0.0, 20.00} // (in mm) for each extruder, offset of the hotend on the X axis
-//#define HOTEND_OFFSET_Y {0.0, 5.00} // (in mm) for each extruder, offset of the hotend on the Y axis
-
-//// The following define selects which power supply you have. Please choose the one that matches your setup
-// 1 = ATX
-// 2 = X-Box 360 203Watts (the blue wire connected to PS_ON and the red wire to VCC)
-// :{1:'ATX',2:'X-Box 360'}
-#define POWER_SUPPLY 1
-
-// Define this to have the electronics keep the power supply off on startup. If you don't know what this is leave it.
-//#define PS_DEFAULT_OFF
-
-// @section temperature
-
-//===========================================================================
-//============================= Thermal Settings ============================
-//===========================================================================
-//
-//--NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table
-//
-//// Temperature sensor settings:
-// -3 is thermocouple with MAX31855 (only for sensor 0)
-// -2 is thermocouple with MAX6675 (only for sensor 0)
-// -1 is thermocouple with AD595
-// 0 is not used
-// 1 is 100k thermistor - best choice for EPCOS 100k (4.7k pullup)
-// 2 is 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)
-// 3 is Mendel-parts thermistor (4.7k pullup)
-// 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !!
-// 5 is 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup)
-// 6 is 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup)
-// 7 is 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup)
-// 71 is 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup)
-// 8 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup)
-// 9 is 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup)
-// 10 is 100k RS thermistor 198-961 (4.7k pullup)
-// 11 is 100k beta 3950 1% thermistor (4.7k pullup)
-// 12 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed)
-// 13 is 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE"
-// 20 is the PT100 circuit found in the Ultimainboard V2.x
-// 60 is 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
-// 66 is 4.7M High Temperature thermistor from Dyze Design
-// 70 is the 100K thermistor found in the bq Hephestos 2
-//
-// 1k ohm pullup tables - This is not normal, you would have to have changed out your 4.7k for 1k
-// (but gives greater accuracy and more stable PID)
-// 51 is 100k thermistor - EPCOS (1k pullup)
-// 52 is 200k thermistor - ATC Semitec 204GT-2 (1k pullup)
-// 55 is 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup)
-//
-// 1047 is Pt1000 with 4k7 pullup
-// 1010 is Pt1000 with 1k pullup (non standard)
-// 147 is Pt100 with 4k7 pullup
-// 110 is Pt100 with 1k pullup (non standard)
-// 998 and 999 are Dummy Tables. They will ALWAYS read 25°C or the temperature defined below.
-// Use it for Testing or Development purposes. NEVER for production machine.
-//#define DUMMY_THERMISTOR_998_VALUE 25
-//#define DUMMY_THERMISTOR_999_VALUE 100
-// :{ '0': "Not used",'1':"100k / 4.7k - EPCOS",'2':"200k / 4.7k - ATC Semitec 204GT-2",'3':"Mendel-parts / 4.7k",'4':"10k !! do not use for a hotend. Bad resolution at high temp. !!",'5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)",'6':"100k / 4.7k EPCOS - Not as accurate as Table 1",'7':"100k / 4.7k Honeywell 135-104LAG-J01",'8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT",'9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1",'10':"100k / 4.7k RS 198-961",'11':"100k / 4.7k beta 3950 1%",'12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)",'13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'",'20':"PT100 (Ultimainboard V2.x)",'51':"100k / 1k - EPCOS",'52':"200k / 1k - ATC Semitec 204GT-2",'55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)",'60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950",'66':"Dyze Design 4.7M High Temperature thermistor",'70':"the 100K thermistor found in the bq Hephestos 2",'71':"100k / 4.7k Honeywell 135-104LAF-J01",'147':"Pt100 / 4.7k",'1047':"Pt1000 / 4.7k",'110':"Pt100 / 1k (non-standard)",'1010':"Pt1000 / 1k (non standard)",'-3':"Thermocouple + MAX31855 (only for sensor 0)",'-2':"Thermocouple + MAX6675 (only for sensor 0)",'-1':"Thermocouple + AD595",'998':"Dummy 1",'999':"Dummy 2" }
-#define TEMP_SENSOR_0 1
-#define TEMP_SENSOR_1 0
-#define TEMP_SENSOR_2 0
-#define TEMP_SENSOR_3 0
-#define TEMP_SENSOR_BED 1
-
-// This makes temp sensor 1 a redundant sensor for sensor 0. If the temperatures difference between these sensors is to high the print will be aborted.
-//#define TEMP_SENSOR_1_AS_REDUNDANT
-#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 10
-
-// Extruder temperature must be close to target for this long before M109 returns success
-#define TEMP_RESIDENCY_TIME 10 // (seconds)
-#define TEMP_HYSTERESIS 3 // (degC) range of +/- temperatures considered "close" to the target one
-#define TEMP_WINDOW 1 // (degC) Window around target to start the residency timer x degC early.
-
-// Bed temperature must be close to target for this long before M190 returns success
-#define TEMP_BED_RESIDENCY_TIME 0 // (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.
-
-// The minimal temperature defines the temperature below which the heater will not be enabled It is used
-// to check that the wiring to the thermistor is not broken.
-// Otherwise this would lead to the heater being powered on all the time.
-#define HEATER_0_MINTEMP 5
-#define HEATER_1_MINTEMP 5
-#define HEATER_2_MINTEMP 5
-#define HEATER_3_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 275
-#define HEATER_1_MAXTEMP 275
-#define HEATER_2_MAXTEMP 275
-#define HEATER_3_MAXTEMP 275
-#define BED_MAXTEMP 150
-
-//===========================================================================
-//============================= PID Settings ================================
-//===========================================================================
-// PID Tuning Guide here: http://reprap.org/wiki/PID_Tuning
-
-// Comment the following line to disable PID and enable bang-bang.
-#define PIDTEMP
-#define BANG_MAX 255 // limits current to nozzle while in bang-bang mode; 255=full current
-#define PID_MAX BANG_MAX // limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
-#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
- //#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
- // Set/get with gcode: M301 E[extruder number, 0-2]
- #define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
- // is more than PID_FUNCTIONAL_RANGE then the PID will be shut off and the heater will be set to min/max.
- #define PID_INTEGRAL_DRIVE_MAX PID_MAX //limit for the integral term
- #define K1 0.95 //smoothing factor within the PID
-
- // If you are using a pre-configured hotend then you can use one of the value sets by uncommenting it
- // Ultimaker
- #define DEFAULT_Kp 22.2
- #define DEFAULT_Ki 1.08
- #define DEFAULT_Kd 114
-
- // MakerGear
- //#define DEFAULT_Kp 7.0
- //#define DEFAULT_Ki 0.1
- //#define DEFAULT_Kd 12
-
- // Mendel Parts V9 on 12V
- //#define DEFAULT_Kp 63.0
- //#define DEFAULT_Ki 2.25
- //#define DEFAULT_Kd 440
-
-#endif // PIDTEMP
-
-//===========================================================================
-//============================= PID > Bed Temperature Control ===============
-//===========================================================================
-// Select PID or bang-bang with PIDTEMPBED. If bang-bang, BED_LIMIT_SWITCHING will enable hysteresis
-//
-// Uncomment this to enable PID on the bed. It uses the same frequency PWM as the extruder.
-// If your PID_dT is the default, and correct for your hardware/configuration, that means 7.689Hz,
-// which is fine for driving a square wave into a resistive load and does not significantly impact you FET heating.
-// This also works fine on a Fotek SSR-10DA Solid State Relay into a 250W heater.
-// If your configuration is significantly different than this and you don't understand the issues involved, you probably
-// shouldn't use bed PID until someone else verifies your hardware works.
-// If this is enabled, find your own PID constants below.
-//#define PIDTEMPBED
-
-//#define BED_LIMIT_SWITCHING
-
-// This sets the max power delivered to the bed, and replaces the HEATER_BED_DUTY_CYCLE_DIVIDER option.
-// all forms of bed control obey this (PID, bang-bang, bang-bang with hysteresis)
-// setting this to anything other than 255 enables a form of PWM to the bed just like HEATER_BED_DUTY_CYCLE_DIVIDER did,
-// so you shouldn't use it unless you are OK with PWM on your bed. (see the comment on enabling PIDTEMPBED)
-#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current
-
-#if ENABLED(PIDTEMPBED)
-
- //#define PID_BED_DEBUG // Sends debug data to the serial port.
-
- #define PID_BED_INTEGRAL_DRIVE_MAX MAX_BED_POWER //limit for the integral term
-
- //120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
- //from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10)
- #define DEFAULT_bedKp 10.00
- #define DEFAULT_bedKi .023
- #define DEFAULT_bedKd 305.4
-
- //120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
- //from pidautotune
- //#define DEFAULT_bedKp 97.1
- //#define DEFAULT_bedKi 1.41
- //#define DEFAULT_bedKd 1675.16
-
- // FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles.
-#endif // PIDTEMPBED
-
-// @section extruder
-
-//this prevents dangerous Extruder moves, i.e. if the temperature is under the limit
-//can be software-disabled for whatever purposes by
-#define PREVENT_DANGEROUS_EXTRUDE
-//if PREVENT_DANGEROUS_EXTRUDE is on, you can still disable (uncomment) very long bits of extrusion separately.
-#define PREVENT_LENGTHY_EXTRUDE
-
-#define EXTRUDE_MINTEMP 170
-#define EXTRUDE_MAXLENGTH (X_MAX_LENGTH+Y_MAX_LENGTH) //prevent extrusion of very large distances.
-
-//===========================================================================
-//======================== Thermal Runaway Protection =======================
-//===========================================================================
-
-/**
- * Thermal Protection protects your printer from damage and fire if a
- * thermistor falls out or temperature sensors fail in any way.
- *
- * The issue: If a thermistor falls out or a temperature sensor fails,
- * Marlin can no longer sense the actual temperature. Since a disconnected
- * thermistor reads as a low temperature, the firmware will keep the heater on.
- *
- * If you get "Thermal Runaway" or "Heating failed" errors the
- * details can be tuned in Configuration_adv.h
- */
-
-#define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders
-#define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed
-
-//===========================================================================
-//============================= Mechanical Settings =========================
-//===========================================================================
-
-// @section machine
-
-// Uncomment one of these options to enable CoreXY, CoreXZ, or CoreYZ kinematics
-//#define COREXY
-//#define COREXZ
-//#define COREYZ
-
-// Enable this option for Toshiba steppers
-//#define CONFIG_STEPPERS_TOSHIBA
-
-//===========================================================================
-//============================== Endstop Settings ===========================
-//===========================================================================
-
-// @section homing
-
-// Specify here all the endstop connectors that are connected to any endstop or probe.
-// Almost all printers will be using one per axis. Probes will use one or more of the
-// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
-#define USE_XMIN_PLUG
-#define USE_YMIN_PLUG
-#define USE_ZMIN_PLUG
-//#define USE_XMAX_PLUG
-//#define USE_YMAX_PLUG
-//#define USE_ZMAX_PLUG
-
-// coarse Endstop Settings
-#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
-
-#if DISABLED(ENDSTOPPULLUPS)
- // fine endstop settings: Individual pullups. will be ignored if ENDSTOPPULLUPS is defined
- //#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 // set to true to invert the logic of the endstop.
-#define Y_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Z_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define X_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Y_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Z_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Z_MIN_PROBE_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
-
-//===========================================================================
-//============================= Z Probe Options =============================
-//===========================================================================
-
-//
-// Probe Type
-// Probes are sensors/switches that are activated / deactivated before/after use.
-//
-// Allen Key Probes, Servo Probes, Z-Sled Probes, FIX_MOUNTED_PROBE, etc.
-// You must activate one of these to use AUTO_BED_LEVELING_FEATURE below.
-//
-// Use M851 to set the Z probe vertical offset from the nozzle. Store with M500.
-//
-
-// A Fix-Mounted Probe either doesn't deploy or needs manual deployment.
-// For example an inductive probe, or a setup that uses the nozzle to probe.
-// An inductive probe must be deactivated to go below
-// its trigger-point if hardware endstops are active.
-//#define FIX_MOUNTED_PROBE
-
-// The BLTouch probe emulates a servo probe.
-//#define BLTOUCH
-
-// Z Servo Probe, such as an endstop switch on a rotating arm.
-//#define Z_ENDSTOP_SERVO_NR 0
-//#define Z_SERVO_ANGLES {70,0} // Z Servo Deploy and Stow angles
-
-// Enable if you have a Z probe mounted on a sled like those designed by Charles Bell.
-//#define Z_PROBE_SLED
-//#define SLED_DOCKING_OFFSET 5 // The extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.
-
-// Z Probe to nozzle (X,Y) offset, relative to (0, 0).
-// X and Y offsets must be integers.
-//
-// In the following example the X and Y offsets are both positive:
-// #define X_PROBE_OFFSET_FROM_EXTRUDER 10
-// #define Y_PROBE_OFFSET_FROM_EXTRUDER 10
-//
-// +-- BACK ---+
-// | |
-// L | (+) P | R <-- probe (20,20)
-// E | | I
-// F | (-) N (+) | G <-- nozzle (10,10)
-// T | | H
-// | (-) | T
-// | |
-// O-- FRONT --+
-// (0,0)
-#define X_PROBE_OFFSET_FROM_EXTRUDER -25 // X offset: -left +right [of the nozzle]
-#define Y_PROBE_OFFSET_FROM_EXTRUDER -29 // Y offset: -front +behind [the nozzle]
-#define Z_PROBE_OFFSET_FROM_EXTRUDER -12.35 // Z offset: -below +above [the nozzle]
-
-// X and Y axis travel speed (mm/m) between probes
-#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
-#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
-// Speed for the "accurate" probe of each point
-#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
-
-//
-// Allen Key Probe is defined in the Delta example configurations.
-//
-
-// Enable Z_MIN_PROBE_ENDSTOP to use _both_ a Z Probe and a Z-min-endstop on the same machine.
-// With this option the Z_MIN_PROBE_PIN will only be used for probing, never for homing.
-//
-// *** PLEASE READ ALL INSTRUCTIONS BELOW FOR SAFETY! ***
-//
-// To continue using the Z-min-endstop for homing, be sure to disable Z_SAFE_HOMING.
-// Example: To park the head outside the bed area when homing with G28.
-//
-// To use a separate Z probe, your board must define a Z_MIN_PROBE_PIN.
-//
-// For a servo-based Z probe, you must set up servo support below, including
-// NUM_SERVOS, Z_ENDSTOP_SERVO_NR and Z_SERVO_ANGLES.
-//
-// - RAMPS 1.3/1.4 boards may be able to use the 5V, GND, and Aux4->D32 pin.
-// - Use 5V for powered (usu. inductive) sensors.
-// - Otherwise connect:
-// - normally-closed switches to GND and D32.
-// - normally-open switches to 5V and D32.
-//
-// Normally-closed switches are advised and are the default.
-//
-// The Z_MIN_PROBE_PIN sets the Arduino pin to use. (See your board's pins file.)
-// Since the RAMPS Aux4->D32 pin maps directly to the Arduino D32 pin, D32 is the
-// default pin for all RAMPS-based boards. Some other boards map differently.
-// To set or change the pin for your board, edit the appropriate pins_XXXXX.h file.
-//
-// WARNING:
-// Setting the wrong pin may have unexpected and potentially disastrous consequences.
-// Use with caution and do your homework.
-//
-//#define Z_MIN_PROBE_ENDSTOP
-
-// Enable Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN to use the Z_MIN_PIN for your Z_MIN_PROBE.
-// The Z_MIN_PIN will then be used for both Z-homing and probing.
-#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
-
-// To use a probe you must enable one of the two options above!
-
-// This option disables the use of the Z_MIN_PROBE_PIN
-// To enable the Z probe pin but disable its use, uncomment the line below. This only affects a
-// Z probe switch if you have a separate Z min endstop also and have activated Z_MIN_PROBE_ENDSTOP above.
-// If you're using the Z MIN endstop connector for your Z probe, this has no effect.
-//#define DISABLE_Z_MIN_PROBE_ENDSTOP
-
-// Enable Z Probe Repeatability test to see how accurate your probe is
-//#define Z_MIN_PROBE_REPEATABILITY_TEST
-
-//
-// Probe Raise options provide clearance for the probe to deploy, stow, and travel.
-//
-#define Z_PROBE_DEPLOY_HEIGHT 15 // Raise to make room for the probe to deploy / stow
-#define Z_PROBE_TRAVEL_HEIGHT 5 // Raise between probing points.
-
-//
-// For M851 give a range for adjusting the Z probe offset
-//
-#define Z_PROBE_OFFSET_RANGE_MIN -20
-#define Z_PROBE_OFFSET_RANGE_MAX 20
-
-// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
-// :{0:'Low',1:'High'}
-#define X_ENABLE_ON 0
-#define Y_ENABLE_ON 0
-#define Z_ENABLE_ON 0
-#define E_ENABLE_ON 0 // For all extruders
-
-// Disables axis stepper immediately when it's not being used.
-// WARNING: When motors turn off there is a chance of losing position accuracy!
-#define DISABLE_X false
-#define DISABLE_Y false
-#define DISABLE_Z false
-// Warn on display about possibly reduced accuracy
-//#define DISABLE_REDUCED_ACCURACY_WARNING
-
-// @section extruder
-
-#define DISABLE_E false // For all extruders
-#define DISABLE_INACTIVE_EXTRUDER true //disable only inactive extruders and keep active extruder enabled
-
-// @section machine
-
-// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way.
-#define INVERT_X_DIR false
-#define INVERT_Y_DIR true
-#define INVERT_Z_DIR false
-
-// @section extruder
-
-// For direct drive extruder v9 set to true, for geared extruder set to false.
-#define INVERT_E0_DIR false
-#define INVERT_E1_DIR false
-#define INVERT_E2_DIR false
-#define INVERT_E3_DIR false
-
-// @section homing
-
-//#define Z_HOMING_HEIGHT 4 // (in mm) Minimal z height before homing (G28) for Z clearance above the bed, clamps, ...
- // Be sure you have this distance over your Z_MAX_POS in case.
-
-// ENDSTOP SETTINGS:
-// Sets direction of endstops when homing; 1=MAX, -1=MIN
-// :[-1,1]
-#define X_HOME_DIR -1
-#define Y_HOME_DIR -1
-#define Z_HOME_DIR -1
-
-#define min_software_endstops true // If true, axis won't move to coordinates less than HOME_POS.
-#define max_software_endstops true // If true, axis won't move to coordinates greater than the defined lengths below.
-
-// @section machine
-
-// Travel limits after homing (units are in mm)
-#define X_MIN_POS 0
-#define Y_MIN_POS 0
-#define Z_MIN_POS 0
-#define X_MAX_POS 200
-#define Y_MAX_POS 200
-#define Z_MAX_POS 200
-
-//===========================================================================
-//========================= Filament Runout Sensor ==========================
-//===========================================================================
-//#define FILAMENT_RUNOUT_SENSOR // Uncomment for defining a filament runout sensor such as a mechanical or opto endstop to check the existence of filament
- // In RAMPS uses servo pin 2. Can be changed in pins file. For other boards pin definition should be made.
- // It is assumed that when logic high = filament available
- // when logic low = filament ran out
-#if ENABLED(FILAMENT_RUNOUT_SENSOR)
- const bool FIL_RUNOUT_INVERTING = false; // set to true to invert the logic of the sensor.
- #define ENDSTOPPULLUP_FIL_RUNOUT // Uncomment to use internal pullup for filament runout pins if the sensor is defined.
- #define FILAMENT_RUNOUT_SCRIPT "M600"
-#endif
-
-//===========================================================================
-//============================ Mesh Bed Leveling ============================
-//===========================================================================
-
-//#define MESH_BED_LEVELING // Enable mesh bed leveling.
-
-#if ENABLED(MESH_BED_LEVELING)
- #define MESH_INSET 10 // Mesh inset margin on print area
- #define MESH_NUM_X_POINTS 3 // Don't use more than 7 points per axis, implementation limited.
- #define MESH_NUM_Y_POINTS 3
- #define MESH_HOME_SEARCH_Z 4 // Z after Home, bed somewhere below but above 0.0.
-
- //#define MESH_G28_REST_ORIGIN // After homing all axes ('G28' or 'G28 XYZ') rest at origin [0,0,0]
-
- //#define MANUAL_BED_LEVELING // Add display menu option for bed leveling.
-
- #if ENABLED(MANUAL_BED_LEVELING)
- #define MBL_Z_STEP 0.025 // Step size while manually probing Z axis.
- #endif // MANUAL_BED_LEVELING
-
-#endif // MESH_BED_LEVELING
-
-//===========================================================================
-//============================ Bed Auto Leveling ============================
-//===========================================================================
-
-// @section bedlevel
-
-//#define AUTO_BED_LEVELING_FEATURE // Delete the comment to enable (remove // at the start of the line)
-
-// Enable this feature to get detailed logging of G28, G29, M48, etc.
-// Logging is off by default. Enable this logging feature with 'M111 S32'.
-// NOTE: Requires a huge amount of PROGMEM.
-//#define DEBUG_LEVELING_FEATURE
-
-#if ENABLED(AUTO_BED_LEVELING_FEATURE)
-
- // There are 2 different ways to specify probing locations:
- //
- // - "grid" mode
- // Probe several points in a rectangular grid.
- // You specify the rectangle and the density of sample points.
- // This mode is preferred because there are more measurements.
- //
- // - "3-point" mode
- // Probe 3 arbitrary points on the bed (that aren't collinear)
- // You specify the XY coordinates of all 3 points.
-
- // Enable this to sample the bed in a grid (least squares solution).
- // Note: this feature generates 10KB extra code size.
- #define AUTO_BED_LEVELING_GRID
-
- #if ENABLED(AUTO_BED_LEVELING_GRID)
-
- #define LEFT_PROBE_BED_POSITION 15
- #define RIGHT_PROBE_BED_POSITION 170
- #define FRONT_PROBE_BED_POSITION 20
- #define BACK_PROBE_BED_POSITION 170
-
- #define MIN_PROBE_EDGE 10 // The Z probe minimum square sides can be no smaller than this.
-
- // Set the number of grid points per dimension.
- // You probably don't need more than 3 (squared=9).
- #define AUTO_BED_LEVELING_GRID_POINTS 2
-
- #else // !AUTO_BED_LEVELING_GRID
-
- // Arbitrary points to probe.
- // A simple cross-product is used to estimate the plane of the bed.
- #define ABL_PROBE_PT_1_X 15
- #define ABL_PROBE_PT_1_Y 180
- #define ABL_PROBE_PT_2_X 15
- #define ABL_PROBE_PT_2_Y 20
- #define ABL_PROBE_PT_3_X 170
- #define ABL_PROBE_PT_3_Y 20
-
- #endif // !AUTO_BED_LEVELING_GRID
-
- //#define Z_PROBE_END_SCRIPT "G1 Z10 F12000\nG1 X15 Y330\nG1 Z0.5\nG1 Z10" // These commands will be executed in the end of G29 routine.
- // Useful to retract a deployable Z probe.
-
- // If you've enabled AUTO_BED_LEVELING_FEATURE and are using the Z Probe for Z Homing,
- // it is highly recommended you also enable Z_SAFE_HOMING below!
-
-#endif // AUTO_BED_LEVELING_FEATURE
-
-
-// @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 // Distance between the nozzle to printbed after homing
-
-// Use "Z Safe Homing" to avoid homing with a Z probe outside the bed area.
-//
-// With this feature enabled:
-//
-// - Allow Z homing only after X and Y homing AND stepper drivers still enabled.
-// - If stepper drivers time out, it will need X and Y homing again before Z homing.
-// - Move the Z probe (or nozzle) to a defined XY point before Z Homing when homing all axes (G28).
-// - Prevent Z homing when the Z probe is outside bed area.
-//#define Z_SAFE_HOMING
-
-#if ENABLED(Z_SAFE_HOMING)
- #define Z_SAFE_HOMING_X_POINT ((X_MIN_POS + X_MAX_POS) / 2) // X point for Z homing when homing all axis (G28).
- #define Z_SAFE_HOMING_Y_POINT ((Y_MIN_POS + Y_MAX_POS) / 2) // Y point for Z homing when homing all axis (G28).
-#endif
-
-// Homing speeds (mm/m)
-#define HOMING_FEEDRATE_XY (50*60)
-#define HOMING_FEEDRATE_Z (4*60)
-
-//
-// MOVEMENT SETTINGS
-// @section motion
-//
-
-// default settings
-
-#define DEFAULT_AXIS_STEPS_PER_UNIT {78.7402*2,78.7402*2,5120.00,760*1*1.5} // default steps per unit for Ultimaker
-#define DEFAULT_MAX_FEEDRATE {300, 300, 5, 25} // (mm/sec)
-#define DEFAULT_MAX_ACCELERATION {3000,3000,100,10000} // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for Skeinforge 40+, for older versions raise them a lot.
-
-#define DEFAULT_ACCELERATION 3000 // X, Y, Z and E acceleration in mm/s^2 for printing moves
-#define DEFAULT_RETRACT_ACCELERATION 3000 // E acceleration in mm/s^2 for retracts
-#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
-
-// The speed change that does not require acceleration (i.e. the software might assume it can be done instantaneously)
-#define DEFAULT_XYJERK 20.0 // (mm/sec)
-#define DEFAULT_ZJERK 0.4 // (mm/sec)
-#define DEFAULT_EJERK 5.0 // (mm/sec)
-
-
-//=============================================================================
-//============================= Additional Features ===========================
-//=============================================================================
-
-// @section extras
-
-//
-// EEPROM
-//
-// The microcontroller can store settings in the EEPROM, e.g. max velocity...
-// M500 - stores parameters in EEPROM
-// M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily).
-// M502 - reverts to the default "factory settings". You still need to store them in EEPROM afterwards if you want to.
-//define this to enable EEPROM support
-//#define EEPROM_SETTINGS
-
-#if ENABLED(EEPROM_SETTINGS)
- // To disable EEPROM Serial responses and decrease program space by ~1700 byte: comment this out:
- #define EEPROM_CHITCHAT // Please keep turned on if you can.
-#endif
-
-//
-// Host Keepalive
-//
-// When enabled Marlin will send a busy status message to the host
-// every couple of seconds when it can't accept commands.
-//
-#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.
-
-//
-// M100 Free Memory Watcher
-//
-//#define M100_FREE_MEMORY_WATCHER // uncomment to add the M100 Free Memory Watcher for debug purpose
-
-//
-// G20/G21 Inch mode support
-//
-//#define INCH_MODE_SUPPORT
-
-//
-// M149 Set temperature units support
-//
-//#define TEMPERATURE_UNITS_SUPPORT
-
-// @section temperature
-
-// Preheat Constants
-#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
-
-//
-// Nozzle Park -- EXPERIMENTAL
-//
-// When enabled allows the user to define a special XYZ position, inside the
-// machine's topology, to park the nozzle when idle or when receiving the G27
-// command.
-//
-// The "P" paramenter controls what is the action applied to the Z axis:
-// P0: (Default) If current Z-pos is lower than Z-park then the nozzle will
-// be raised to reach Z-park height.
-//
-// P1: No matter the current Z-pos, the nozzle will be raised/lowered to
-// reach Z-park height.
-//
-// P2: The nozzle height will be raised by Z-park amount but never going over
-// the machine's limit of Z_MAX_POS.
-//
-//#define NOZZLE_PARK_FEATURE
-
-#if ENABLED(NOZZLE_PARK_FEATURE)
- // Specify a park position as { X, Y, Z }
- #define NOZZLE_PARK_POINT { (X_MIN_POS + 10), (Y_MAX_POS - 10), 20 }
-#endif
-
-//
-// Clean Nozzle Feature -- EXPERIMENTAL
-//
-// When enabled allows the user to send G12 to start the nozzle cleaning
-// process, the G-Code accepts two parameters:
-// "P" for pattern selection
-// "S" for defining the number of strokes/repetitions
-//
-// Available list of patterns:
-// P0: This is the default pattern, this process requires a sponge type
-// material at a fixed bed location, the cleaning process is based on
-// "strokes" i.e. back-and-forth movements between the starting and end
-// points.
-//
-// P1: This starts a zig-zag pattern between (X0, Y0) and (X1, Y1), "T"
-// defines the number of zig-zag triangles to be done. "S" defines the
-// number of strokes aka one back-and-forth movement. As an example
-// sending "G12 P1 S1 T3" will execute:
-//
-// --
-// | (X0, Y1) | /\ /\ /\ | (X1, Y1)
-// | | / \ / \ / \ |
-// A | | / \ / \ / \ |
-// | | / \ / \ / \ |
-// | (X0, Y0) | / \/ \/ \ | (X1, Y0)
-// -- +--------------------------------+
-// |________|_________|_________|
-// T1 T2 T3
-//
-// Caveats: End point Z should use the same value as Start point Z.
-//
-// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
-// may change to add new functionality like different wipe patterns.
-//
-//#define NOZZLE_CLEAN_FEATURE
-
-#if ENABLED(NOZZLE_CLEAN_FEATURE)
- // Number of pattern repetitions
- #define NOZZLE_CLEAN_STROKES 12
-
- // Specify positions as { X, Y, Z }
- #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
- #define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
-
- // Moves the nozzle to the initial position
- #define NOZZLE_CLEAN_GOBACK
-#endif
-
-//
-// Print job timer
-//
-// Enable this option to automatically start and stop the
-// print job timer when M104/M109/M190 commands are received.
-// M104 (extruder without wait) - high temp = none, low temp = stop timer
-// M109 (extruder with wait) - high temp = start timer, low temp = stop timer
-// M190 (bed with wait) - high temp = start timer, low temp = none
-//
-// In all cases the timer can be started and stopped using
-// the following commands:
-//
-// - M75 - Start the print job timer
-// - M76 - Pause the print job timer
-// - M77 - Stop the print job timer
-#define PRINTJOB_TIMER_AUTOSTART
-
-//
-// Print Counter
-//
-// When enabled Marlin will keep track of some print statistical data such as:
-// - Total print jobs
-// - Total successful print jobs
-// - Total failed print jobs
-// - Total time printing
-//
-// This information can be viewed by the M78 command.
-//#define PRINTCOUNTER
-
-//=============================================================================
-//============================= LCD and SD support ============================
-//=============================================================================
-
-// @section lcd
-
-//
-// LCD LANGUAGE
-//
-// Here you may choose the language used by Marlin on the LCD menus, the following
-// list of languages are available:
-// en, an, bg, ca, cn, cz, de, el, el-gr, es, eu, fi, fr, gl, hr, it,
-// kana, kana_utf8, nl, pl, pt, pt_utf8, pt-br, pt-br_utf8, ru, test
-//
-// :{'en':'English','an':'Aragonese','bg':'Bulgarian','ca':'Catalan','cn':'Chinese','cz':'Czech','de':'German','el':'Greek','el-gr':'Greek (Greece)','es':'Spanish','eu':'Basque-Euskera','fi':'Finnish','fr':'French','gl':'Galician','hr':'Croatian','it':'Italian','kana':'Japanese','kana_utf8':'Japanese (UTF8)','nl':'Dutch','pl':'Polish','pt':'Portuguese','pt-br':'Portuguese (Brazilian)','pt-br_utf8':'Portuguese (Brazilian UTF8)','pt_utf8':'Portuguese (UTF8)','ru':'Russian','test':'TEST'}
-//
-#define LCD_LANGUAGE en
-
-//
-// LCD Character Set
-//
-// Note: This option is NOT applicable to Graphical Displays.
-//
-// All character-based LCD's provide ASCII plus one of these
-// language extensions:
-//
-// - JAPANESE ... the most common
-// - WESTERN ... with more accented characters
-// - CYRILLIC ... for the Russian language
-//
-// To determine the language extension installed on your controller:
-//
-// - Compile and upload with LCD_LANGUAGE set to 'test'
-// - Click the controller to view the LCD menu
-// - The LCD will display Japanese, Western, or Cyrillic text
-//
-// See https://github.com/MarlinFirmware/Marlin/wiki/LCD-Language
-//
-// :['JAPANESE','WESTERN','CYRILLIC']
-//
-#define DISPLAY_CHARSET_HD44780 JAPANESE
-
-//
-// LCD TYPE
-//
-// You may choose ULTRA_LCD if you have character based LCD with 16x2, 16x4, 20x2,
-// 20x4 char/lines or DOGLCD for the full graphics display with 128x64 pixels
-// (ST7565R family). (This option will be set automatically for certain displays.)
-//
-// IMPORTANT NOTE: The U8glib library is required for Full Graphic Display!
-// https://github.com/olikraus/U8glib_Arduino
-//
-#define ULTRA_LCD // Character based
-//#define DOGLCD // Full graphics display
-
-//
-// SD CARD
-//
-// SD Card support is disabled by default. If your controller has an SD slot,
-// you must uncomment the following option or it won't work.
-//
-#define SDSUPPORT
-
-//
-// SD CARD: SPI SPEED
-//
-// Uncomment ONE of the following items to use a slower SPI transfer
-// speed. This is usually required if you're getting volume init errors.
-//
-//#define SPI_SPEED SPI_HALF_SPEED
-//#define SPI_SPEED SPI_QUARTER_SPEED
-//#define SPI_SPEED SPI_EIGHTH_SPEED
-
-//
-// SD CARD: ENABLE CRC
-//
-// Use CRC checks and retries on the SD communication.
-//
-#define SD_CHECK_AND_RETRY
-
-//
-// ENCODER SETTINGS
-//
-// This option overrides the default number of encoder pulses needed to
-// produce one step. Should be increased for high-resolution encoders.
-//
-//#define ENCODER_PULSES_PER_STEP 1
-
-//
-// Use this option to override the number of step signals required to
-// move between next/prev menu items.
-//
-//#define ENCODER_STEPS_PER_MENU_ITEM 5
-
-/**
- * Encoder Direction Options
- *
- * Test your encoder's behavior first with both options disabled.
- *
- * Reversed Value Edit and Menu Nav? Enable REVERSE_ENCODER_DIRECTION.
- * Reversed Menu Navigation only? Enable REVERSE_MENU_DIRECTION.
- * Reversed Value Editing only? Enable BOTH options.
- */
-
-//
-// This option reverses the encoder direction everywhere
-//
-// Set this option if CLOCKWISE causes values to DECREASE
-//
-//#define REVERSE_ENCODER_DIRECTION
-
-//
-// This option reverses the encoder direction for navigating LCD menus.
-//
-// If CLOCKWISE normally moves DOWN this makes it go UP.
-// If CLOCKWISE normally moves UP this makes it go DOWN.
-//
-//#define REVERSE_MENU_DIRECTION
-
-//
-// Individual Axis Homing
-//
-// Add individual axis homing items (Home X, Home Y, and Home Z) to the LCD menu.
-//
-//#define INDIVIDUAL_AXIS_HOMING_MENU
-
-//
-// SPEAKER/BUZZER
-//
-// If you have a speaker that can produce tones, enable it here.
-// By default Marlin assumes you have a buzzer with a fixed frequency.
-//
-//#define SPEAKER
-
-//
-// The duration and frequency for the UI feedback sound.
-// Set these to 0 to disable audio feedback in the LCD menus.
-//
-// Note: Test audio output with the G-Code:
-// M300 S P
-//
-//#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 100
-//#define LCD_FEEDBACK_FREQUENCY_HZ 1000
-
-//
-// CONTROLLER TYPE: Standard
-//
-// Marlin supports a wide variety of controllers.
-// Enable one of the following options to specify your controller.
-//
-
-//
-// ULTIMAKER Controller.
-//
-//#define ULTIMAKERCONTROLLER
-
-//
-// ULTIPANEL as seen on Thingiverse.
-//
-//#define ULTIPANEL
-
-//
-// Cartesio UI
-// http://mauk.cc/webshop/cartesio-shop/electronics/user-interface
-//
-//#define CARTESIO_UI
-
-//
-// PanelOne from T3P3 (via RAMPS 1.4 AUX2/AUX3)
-// http://reprap.org/wiki/PanelOne
-//
-//#define PANEL_ONE
-
-//
-// MaKr3d Makr-Panel with graphic controller and SD support.
-// http://reprap.org/wiki/MaKr3d_MaKrPanel
-//
-//#define MAKRPANEL
-
-//
-// ReprapWorld Graphical LCD
-// https://reprapworld.com/?products_details&products_id/1218
-//
-//#define REPRAPWORLD_GRAPHICAL_LCD
-
-//
-// Activate one of these if you have a Panucatt Devices
-// Viki 2.0 or mini Viki with Graphic LCD
-// http://panucatt.com
-//
-//#define VIKI2
-//#define miniVIKI
-
-//
-// Adafruit ST7565 Full Graphic Controller.
-// https://github.com/eboston/Adafruit-ST7565-Full-Graphic-Controller/
-//
-//#define ELB_FULL_GRAPHIC_CONTROLLER
-
-//
-// RepRapDiscount Smart Controller.
-// http://reprap.org/wiki/RepRapDiscount_Smart_Controller
-//
-// Note: Usually sold with a white PCB.
-//
-//#define REPRAP_DISCOUNT_SMART_CONTROLLER
-
-//
-// GADGETS3D G3D LCD/SD Controller
-// http://reprap.org/wiki/RAMPS_1.3/1.4_GADGETS3D_Shield_with_Panel
-//
-// Note: Usually sold with a blue PCB.
-//
-//#define G3D_PANEL
-
-//
-// RepRapDiscount FULL GRAPHIC Smart Controller
-// http://reprap.org/wiki/RepRapDiscount_Full_Graphic_Smart_Controller
-//
-//#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
-
-//
-// MakerLab Mini Panel with graphic
-// controller and SD support - http://reprap.org/wiki/Mini_panel
-//
-//#define MINIPANEL
-
-//
-// RepRapWorld REPRAPWORLD_KEYPAD v1.1
-// http://reprapworld.com/?products_details&products_id=202&cPath=1591_1626
-//
-// REPRAPWORLD_KEYPAD_MOVE_STEP sets how much should the robot move when a key
-// is pressed, a value of 10.0 means 10mm per click.
-//
-#define REPRAPWORLD_KEYPAD
-#define REPRAPWORLD_KEYPAD_MOVE_STEP 1.0
-
-//
-// RigidBot Panel V1.0
-// http://www.inventapart.com/
-//
-//#define RIGIDBOT_PANEL
-
-//
-// BQ LCD Smart Controller shipped by
-// default with the BQ Hephestos 2 and Witbox 2.
-//
-//#define BQ_LCD_SMART_CONTROLLER
-
-//
-// CONTROLLER TYPE: I2C
-//
-// Note: These controllers require the installation of Arduino's LiquidCrystal_I2C
-// library. For more info: https://github.com/kiyoshigawa/LiquidCrystal_I2C
-//
-
-//
-// Elefu RA Board Control Panel
-// http://www.elefu.com/index.php?route=product/product&product_id=53
-//
-//#define RA_CONTROL_PANEL
-
-//
-// Sainsmart YW Robot (LCM1602) LCD Display
-//
-//#define LCD_I2C_SAINSMART_YWROBOT
-
-//
-// Generic LCM1602 LCD adapter
-//
-//#define LCM1602
-
-//
-// PANELOLU2 LCD with status LEDs,
-// separate encoder and click inputs.
-//
-// Note: This controller requires Arduino's LiquidTWI2 library v1.2.3 or later.
-// For more info: https://github.com/lincomatic/LiquidTWI2
-//
-// Note: The PANELOLU2 encoder click input can either be directly connected to
-// a pin (if BTN_ENC defined to != -1) or read through I2C (when BTN_ENC == -1).
-//
-//#define LCD_I2C_PANELOLU2
-
-//
-// Panucatt VIKI LCD with status LEDs,
-// integrated click & L/R/U/D buttons, separate encoder inputs.
-//
-//#define LCD_I2C_VIKI
-
-//
-// SSD1306 OLED full graphics generic display
-//
-//#define U8GLIB_SSD1306
-
-//
-// SAV OLEd LCD module support using either SSD1306 or SH1106 based LCD modules
-//
-//#define SAV_3DGLCD
-#if ENABLED(SAV_3DGLCD)
- //#define U8GLIB_SSD1306
- #define U8GLIB_SH1106
-#endif
-
-//
-// CONTROLLER TYPE: Shift register panels
-//
-// 2 wire Non-latching LCD SR from https://goo.gl/aJJ4sH
-// LCD configuration: http://reprap.org/wiki/SAV_3D_LCD
-//
-//#define SAV_3DLCD
-
-//=============================================================================
-//=============================== Extra Features ==============================
-//=============================================================================
-
-// @section extras
-
-// Increase the FAN PWM frequency. Removes the PWM noise but increases heating in the FET/Arduino
-//#define FAST_PWM_FAN
-
-// Use software PWM to drive the fan, as for the heaters. This uses a very low frequency
-// which is not as annoying as with the hardware PWM. On the other hand, if this frequency
-// is too low, you should also increment SOFT_PWM_SCALE.
-//#define FAN_SOFT_PWM
-
-// Incrementing this by 1 will double the software PWM frequency,
-// affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
-// However, control resolution will be halved for each increment;
-// at zero value, there are 128 effective control positions.
-#define SOFT_PWM_SCALE 0
-
-// Temperature status LEDs that display the hotend and bed temperature.
-// If all hotends and bed temperature and temperature setpoint are < 54C then the BLUE led is on.
-// Otherwise the RED led is on. There is 1C hysteresis.
-//#define TEMP_STAT_LEDS
-
-// M240 Triggers a camera by emulating a Canon RC-1 Remote
-// Data from: http://www.doc-diy.net/photo/rc-1_hacked/
-//#define PHOTOGRAPH_PIN 23
-
-// SkeinForge sends the wrong arc g-codes when using Arc Point as fillet procedure
-//#define SF_ARC_FIX
-
-// Support for the BariCUDA Paste Extruder.
-//#define BARICUDA
-
-//define BlinkM/CyzRgb Support
-//#define BLINKM
-
-/*********************************************************************\
-* R/C SERVO support
-* Sponsored by TrinityLabs, Reworked by codexmas
-**********************************************************************/
-
-// Number of servos
-//
-// If you select a configuration below, this will receive a default value and does not need to be set manually
-// set it manually if you have more servos than extruders and wish to manually control some
-// leaving it undefined or defining as 0 will disable the servo subsystem
-// If unsure, leave commented / disabled
-//
-//#define NUM_SERVOS 3 // Servo index starts with 0 for M280 command
-
-// Delay (in microseconds) before the next move will start, to give the servo time to reach its target angle.
-// 300ms is a good value but you can try less delay.
-// If the servo can't reach the requested position, increase it.
-#define SERVO_DELAY 300
-
-// Servo deactivation
-//
-// With this option servos are powered only during movement, then turned off to prevent jitter.
-//#define DEACTIVATE_SERVOS_AFTER_MOVE
-
-/**********************************************************************\
- * Support for a filament diameter sensor
- * Also allows adjustment of diameter at print time (vs at slicing)
- * Single extruder only at this point (extruder 0)
- *
- * Motherboards
- * 34 - RAMPS1.4 - uses Analog input 5 on the AUX2 connector
- * 81 - Printrboard - Uses Analog input 2 on the Exp1 connector (version B,C,D,E)
- * 301 - Rambo - uses Analog input 3
- * Note may require analog pins to be defined for different motherboards
- **********************************************************************/
-// Uncomment below to enable
-//#define FILAMENT_WIDTH_SENSOR
-
-#define DEFAULT_NOMINAL_FILAMENT_DIA 3.00 //Enter the diameter (in mm) of the filament generally used (3.0 mm or 1.75 mm) - this is then used in the slicer software. Used for sensor reading validation
-
-#if ENABLED(FILAMENT_WIDTH_SENSOR)
- #define FILAMENT_SENSOR_EXTRUDER_NUM 0 //The number of the extruder that has the filament sensor (0,1,2)
- #define MEASUREMENT_DELAY_CM 14 //measurement delay in cm. This is the distance from filament sensor to middle of barrel
-
- #define MEASURED_UPPER_LIMIT 3.30 //upper limit factor used for sensor reading validation in mm
- #define MEASURED_LOWER_LIMIT 1.90 //lower limit factor for sensor reading validation in mm
- #define MAX_MEASUREMENT_DELAY 20 //delay buffer size in bytes (1 byte = 1cm)- limits maximum measurement delay allowable (must be larger than MEASUREMENT_DELAY_CM and lower number saves RAM)
-
- #define DEFAULT_MEASURED_FILAMENT_DIA DEFAULT_NOMINAL_FILAMENT_DIA //set measured to nominal initially
-
- //When using an LCD, uncomment the line below to display the Filament sensor data on the last line instead of status. Status will appear for 5 sec.
- //#define FILAMENT_LCD_DISPLAY
-#endif
-
-#endif // CONFIGURATION_H
diff --git a/Marlin/example_configurations/RigidBot/Configuration.h b/Marlin/example_configurations/RigidBot/Configuration.h
deleted file mode 100644
index bbe545c..0000000
--- a/Marlin/example_configurations/RigidBot/Configuration.h
+++ /dev/null
@@ -1,1327 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Configuration.h
- *
- * Basic settings such as:
- *
- * - Type of electronics
- * - Type of temperature sensor
- * - Printer geometry
- * - Endstop configuration
- * - LCD controller
- * - Extra features
- *
- * Advanced settings can be found in Configuration_adv.h
- *
- */
-#ifndef CONFIGURATION_H
-#define CONFIGURATION_H
-
-/**
- *
- * ***********************************
- * ** ATTENTION TO ALL DEVELOPERS **
- * ***********************************
- *
- * You must increment this version number for every significant change such as,
- * but not limited to: ADD, DELETE RENAME OR REPURPOSE any directive/option.
- *
- * Note: Update also Version.h !
- */
-#define CONFIGURATION_H_VERSION 010100
-
-//===========================================================================
-//============================= Getting Started =============================
-//===========================================================================
-
-/**
- * Here are some standard links for getting your machine calibrated:
- *
- * http://reprap.org/wiki/Calibration
- * http://youtu.be/wAL9d7FgInk
- * http://calculator.josefprusa.cz
- * http://reprap.org/wiki/Triffid_Hunter%27s_Calibration_Guide
- * http://www.thingiverse.com/thing:5573
- * https://sites.google.com/site/repraplogphase/calibration-of-your-reprap
- * http://www.thingiverse.com/thing:298812
- */
-
-//===========================================================================
-//============================= DELTA Printer ===============================
-//===========================================================================
-// For a Delta printer replace the configuration files with the files in the
-// example_configurations/delta directory.
-//
-
-//===========================================================================
-//============================= SCARA Printer ===============================
-//===========================================================================
-// For a Scara printer replace the configuration files with the files in the
-// example_configurations/SCARA directory.
-//
-
-// @section info
-
-// User-specified version info of this build to display in [Pronterface, etc] terminal window during
-// startup. Implementation of an idea by Prof Braino to inform user that any changes made to this
-// build by the user have been successfully uploaded into firmware.
-#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
-#define SHOW_BOOTSCREEN
-#define STRING_SPLASH_LINE1 SHORT_BUILD_VERSION // will be shown during boot in line 1
-#define STRING_SPLASH_LINE2 WEBSITE_URL // will be shown during boot in line 2
-
-//
-// *** VENDORS PLEASE READ *****************************************************
-//
-// Marlin now allow you to have a vendor boot image to be displayed on machine
-// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
-//
-// We suggest for you to take advantage of this new feature and keep the Marlin
-// boot image unmodified. For an example have a look at the bq Hephestos 2
-// example configuration folder.
-//
-//#define SHOW_CUSTOM_BOOTSCREEN
-// @section machine
-
-// SERIAL_PORT selects which serial port should be used for communication with the host.
-// This allows the connection of wireless adapters (for instance) to non-default port pins.
-// Serial port 0 is still used by the Arduino bootloader regardless of this setting.
-// :[0,1,2,3,4,5,6,7]
-#define SERIAL_PORT 0
-
-// This determines the communication speed of the printer
-// :[2400,9600,19200,38400,57600,115200,250000]
-#define BAUDRATE 115200
-
-// Enable the Bluetooth serial interface on AT90USB devices
-//#define BLUETOOTH
-
-// The following define selects which electronics board you have.
-// Please choose the name from boards.h that matches your setup
-// for Rigidbot version 1 : #define MOTHERBOARD BOARD_RIGIDBOARD
-// for Rigidbot Version 2 : #define MOTHERBOARD BOARD_RIGIDBOARD_V2
-
-#ifndef MOTHERBOARD
- #define MOTHERBOARD BOARD_RIGIDBOARD_V2
-#endif
-
-// Optional custom name for your RepStrap or other custom machine
-// Displayed in the LCD "Ready" message
-//#define CUSTOM_MACHINE_NAME "3D Printer"
-
-// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
-// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
-//#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
-
-// This defines the number of extruders
-// :[1,2,3,4]
-#define EXTRUDERS 1 // Single extruder. Set to 2 for dual extruders
-
-// For Cyclops or any "multi-extruder" that shares a single nozzle.
-//#define SINGLENOZZLE
-
-// A dual extruder that uses a single stepper motor
-// Don't forget to set SSDE_SERVO_ANGLES and HOTEND_OFFSET_X/Y/Z
-//#define SWITCHING_EXTRUDER
-#if ENABLED(SWITCHING_EXTRUDER)
- #define SWITCHING_EXTRUDER_SERVO_NR 0
- #define SWITCHING_EXTRUDER_SERVO_ANGLES { 0, 90 } // Angles for E0, E1
- //#define HOTEND_OFFSET_Z {0.0, 0.0}
-#endif
-
-/**
- * "Mixing Extruder"
- * - Adds a new code, M165, to set the current mix factors.
- * - Extends the stepping routines to move multiple steppers in proportion to the mix.
- * - Optional support for Repetier Host M163, M164, and virtual extruder.
- * - This implementation supports only a single extruder.
- * - Enable DIRECT_MIXING_IN_G1 for Pia Taubert's reference implementation
- */
-//#define MIXING_EXTRUDER
-#if ENABLED(MIXING_EXTRUDER)
- #define MIXING_STEPPERS 2 // Number of steppers in your mixing extruder
- #define MIXING_VIRTUAL_TOOLS 16 // Use the Virtual Tool method with M163 and M164
- //#define DIRECT_MIXING_IN_G1 // Allow ABCDHI mix factors in G1 movement commands
-#endif
-
-// Offset of the extruders (uncomment if using more than one and relying on firmware to position when changing).
-// The offset has to be X=0, Y=0 for the extruder 0 hotend (default extruder).
-// For the other hotends it is their distance from the extruder 0 hotend.
-#define HOTEND_OFFSET_X {0.0, 36.00} // (in mm) for each extruder, offset of the hotend on the X axis
-#define HOTEND_OFFSET_Y {0.0, 0.00} // (in mm) for each extruder, offset of the hotend on the Y axis
-
-//// The following define selects which power supply you have. Please choose the one that matches your setup
-// 1 = ATX
-// 2 = X-Box 360 203Watts (the blue wire connected to PS_ON and the red wire to VCC)
-// :{1:'ATX',2:'X-Box 360'}
-#define POWER_SUPPLY 1
-
-// Define this to have the electronics keep the power supply off on startup. If you don't know what this is leave it.
-//#define PS_DEFAULT_OFF
-
-// @section temperature
-
-//===========================================================================
-//============================= Thermal Settings ============================
-//===========================================================================
-//
-//--NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table
-//
-//// Temperature sensor settings:
-// -3 is thermocouple with MAX31855 (only for sensor 0)
-// -2 is thermocouple with MAX6675 (only for sensor 0)
-// -1 is thermocouple with AD595
-// 0 is not used
-// 1 is 100k thermistor - best choice for EPCOS 100k (4.7k pullup)
-// 2 is 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)
-// 3 is Mendel-parts thermistor (4.7k pullup)
-// 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !!
-// 5 is 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup)
-// 6 is 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup)
-// 7 is 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup)
-// 71 is 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup)
-// 8 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup)
-// 9 is 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup)
-// 10 is 100k RS thermistor 198-961 (4.7k pullup)
-// 11 is 100k beta 3950 1% thermistor (4.7k pullup)
-// 12 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed)
-// 13 is 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE"
-// 20 is the PT100 circuit found in the Ultimainboard V2.x
-// 60 is 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
-// 66 is 4.7M High Temperature thermistor from Dyze Design
-// 70 is the 100K thermistor found in the bq Hephestos 2
-//
-// 1k ohm pullup tables - This is not normal, you would have to have changed out your 4.7k for 1k
-// (but gives greater accuracy and more stable PID)
-// 51 is 100k thermistor - EPCOS (1k pullup)
-// 52 is 200k thermistor - ATC Semitec 204GT-2 (1k pullup)
-// 55 is 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup)
-//
-// 1047 is Pt1000 with 4k7 pullup
-// 1010 is Pt1000 with 1k pullup (non standard)
-// 147 is Pt100 with 4k7 pullup
-// 110 is Pt100 with 1k pullup (non standard)
-// 998 and 999 are Dummy Tables. They will ALWAYS read 25°C or the temperature defined below.
-// Use it for Testing or Development purposes. NEVER for production machine.
-//#define DUMMY_THERMISTOR_998_VALUE 25
-//#define DUMMY_THERMISTOR_999_VALUE 100
-// :{ '0': "Not used",'1':"100k / 4.7k - EPCOS",'2':"200k / 4.7k - ATC Semitec 204GT-2",'3':"Mendel-parts / 4.7k",'4':"10k !! do not use for a hotend. Bad resolution at high temp. !!",'5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)",'6':"100k / 4.7k EPCOS - Not as accurate as Table 1",'7':"100k / 4.7k Honeywell 135-104LAG-J01",'8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT",'9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1",'10':"100k / 4.7k RS 198-961",'11':"100k / 4.7k beta 3950 1%",'12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)",'13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'",'20':"PT100 (Ultimainboard V2.x)",'51':"100k / 1k - EPCOS",'52':"200k / 1k - ATC Semitec 204GT-2",'55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)",'60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950",'66':"Dyze Design 4.7M High Temperature thermistor",'70':"the 100K thermistor found in the bq Hephestos 2",'71':"100k / 4.7k Honeywell 135-104LAF-J01",'147':"Pt100 / 4.7k",'1047':"Pt1000 / 4.7k",'110':"Pt100 / 1k (non-standard)",'1010':"Pt1000 / 1k (non standard)",'-3':"Thermocouple + MAX31855 (only for sensor 0)",'-2':"Thermocouple + MAX6675 (only for sensor 0)",'-1':"Thermocouple + AD595",'998':"Dummy 1",'999':"Dummy 2" }
-#define TEMP_SENSOR_0 1 // DGlass3D = 5; RigidBot = 1; 3DSv6 = 5
-#define TEMP_SENSOR_1 0
-#define TEMP_SENSOR_2 0
-#define TEMP_SENSOR_3 0
-#define TEMP_SENSOR_BED 1
-
-// This makes temp sensor 1 a redundant sensor for sensor 0. If the temperatures difference between these sensors is to high the print will be aborted.
-//#define TEMP_SENSOR_1_AS_REDUNDANT
-//#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 10
-
-// Extruder temperature must be close to target for this long before M109 returns success
-#define TEMP_RESIDENCY_TIME 10 // (seconds)
-#define TEMP_HYSTERESIS 3 // (degC) range of +/- temperatures considered "close" to the target one
-#define TEMP_WINDOW 1 // (degC) Window around target to start the residency timer x degC early.
-
-// Bed temperature must be close to target for this long before M190 returns success
-#define TEMP_BED_RESIDENCY_TIME 0 // (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.
-
-// The minimal temperature defines the temperature below which the heater will not be enabled It is used
-// to check that the wiring to the thermistor is not broken.
-// Otherwise this would lead to the heater being powered on all the time.
-#define HEATER_0_MINTEMP 5
-#define HEATER_1_MINTEMP 5
-#define HEATER_2_MINTEMP 5
-#define HEATER_3_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 275
-#define HEATER_1_MAXTEMP 275
-#define HEATER_2_MAXTEMP 275
-#define HEATER_3_MAXTEMP 275
-#define BED_MAXTEMP 150
-
-//===========================================================================
-//============================= PID Settings ================================
-//===========================================================================
-// PID Tuning Guide here: http://reprap.org/wiki/PID_Tuning
-
-// Comment the following line to disable PID and enable bang-bang.
-#define PIDTEMP
-#define BANG_MAX 255 // limits current to nozzle while in bang-bang mode; 255=full current
-#define PID_MAX BANG_MAX // limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
-#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
- //#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
- // Set/get with gcode: M301 E[extruder number, 0-2]
- #define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
- // is more than PID_FUNCTIONAL_RANGE then the PID will be shut off and the heater will be set to min/max.
- #define PID_INTEGRAL_DRIVE_MAX PID_MAX //limit for the integral term
- #define K1 0.95 //smoothing factor within the PID
-
- // If you are using a pre-configured hotend then you can use one of the value sets by uncommenting it
-
- // Rigidbot hotend
- #define DEFAULT_Kp 16.17
- #define DEFAULT_Ki 0.85
- #define DEFAULT_Kd 76.55
-
- // Base DGlass3D/E3Dv6 hotend
- //#define DEFAULT_Kp 10
- //#define DEFAULT_Ki 0.85
- //#define DEFAULT_Kd 245
-
- // E3D w/ rigidbot cartridge
- //#define DEFAULT_Kp 16.30
- //#define DEFAULT_Ki 0.95
- //#define DEFAULT_Kd 69.69
-
-#endif // PIDTEMP
-
-//===========================================================================
-//============================= PID > Bed Temperature Control ===============
-//===========================================================================
-// Select PID or bang-bang with PIDTEMPBED. If bang-bang, BED_LIMIT_SWITCHING will enable hysteresis
-//
-// Uncomment this to enable PID on the bed. It uses the same frequency PWM as the extruder.
-// If your PID_dT is the default, and correct for your hardware/configuration, that means 7.689Hz,
-// which is fine for driving a square wave into a resistive load and does not significantly impact you FET heating.
-// This also works fine on a Fotek SSR-10DA Solid State Relay into a 250W heater.
-// If your configuration is significantly different than this and you don't understand the issues involved, you probably
-// shouldn't use bed PID until someone else verifies your hardware works.
-// If this is enabled, find your own PID constants below.
-//#define PIDTEMPBED
-
-//#define BED_LIMIT_SWITCHING
-
-// This sets the max power delivered to the bed, and replaces the HEATER_BED_DUTY_CYCLE_DIVIDER option.
-// all forms of bed control obey this (PID, bang-bang, bang-bang with hysteresis)
-// setting this to anything other than 255 enables a form of PWM to the bed just like HEATER_BED_DUTY_CYCLE_DIVIDER did,
-// so you shouldn't use it unless you are OK with PWM on your bed. (see the comment on enabling PIDTEMPBED)
-#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current
-
-#if ENABLED(PIDTEMPBED)
-
- //#define PID_BED_DEBUG // Sends debug data to the serial port.
-
- #define PID_BED_INTEGRAL_DRIVE_MAX MAX_BED_POWER //limit for the integral term
-
- //RigidBot, from pid autotune
- #define DEFAULT_bedKp 355
- #define DEFAULT_bedKi 66.5
- #define DEFAULT_bedKd 480
-
- // FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles.
-#endif // PIDTEMPBED
-
-// @section extruder
-
-//this prevents dangerous Extruder moves, i.e. if the temperature is under the limit
-//can be software-disabled for whatever purposes by
-#define PREVENT_DANGEROUS_EXTRUDE
-//if PREVENT_DANGEROUS_EXTRUDE is on, you can still disable (uncomment) very long bits of extrusion separately.
-#define PREVENT_LENGTHY_EXTRUDE
-
-#define EXTRUDE_MINTEMP 170
-#define EXTRUDE_MAXLENGTH (X_MAX_LENGTH+Y_MAX_LENGTH) //prevent extrusion of very large distances.
-
-//===========================================================================
-//======================== Thermal Runaway Protection =======================
-//===========================================================================
-
-/**
- * Thermal Protection protects your printer from damage and fire if a
- * thermistor falls out or temperature sensors fail in any way.
- *
- * The issue: If a thermistor falls out or a temperature sensor fails,
- * Marlin can no longer sense the actual temperature. Since a disconnected
- * thermistor reads as a low temperature, the firmware will keep the heater on.
- *
- * If you get "Thermal Runaway" or "Heating failed" errors the
- * details can be tuned in Configuration_adv.h
- */
-
-#define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders
-#define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed
-
-//===========================================================================
-//============================= Mechanical Settings =========================
-//===========================================================================
-
-// @section machine
-
-// Uncomment one of these options to enable CoreXY, CoreXZ, or CoreYZ kinematics
-//#define COREXY
-//#define COREXZ
-//#define COREYZ
-
-// Enable this option for Toshiba steppers
-//#define CONFIG_STEPPERS_TOSHIBA
-
-//===========================================================================
-//============================== Endstop Settings ===========================
-//===========================================================================
-
-// @section homing
-
-// Specify here all the endstop connectors that are connected to any endstop or probe.
-// Almost all printers will be using one per axis. Probes will use one or more of the
-// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
-#define USE_XMIN_PLUG
-#define USE_YMIN_PLUG
-#define USE_ZMIN_PLUG
-//#define USE_XMAX_PLUG
-//#define USE_YMAX_PLUG
-//#define USE_ZMAX_PLUG
-
-// coarse Endstop Settings
-#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
-
-#if DISABLED(ENDSTOPPULLUPS)
- // fine endstop settings: Individual pullups. will be ignored if ENDSTOPPULLUPS is defined
- //#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 // set to true to invert the logic of the endstop.
-#define Y_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Z_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define X_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Y_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Z_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Z_MIN_PROBE_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
-
-//===========================================================================
-//============================= Z Probe Options =============================
-//===========================================================================
-
-//
-// Probe Type
-// Probes are sensors/switches that are activated / deactivated before/after use.
-//
-// Allen Key Probes, Servo Probes, Z-Sled Probes, FIX_MOUNTED_PROBE, etc.
-// You must activate one of these to use AUTO_BED_LEVELING_FEATURE below.
-//
-// Use M851 to set the Z probe vertical offset from the nozzle. Store with M500.
-//
-
-// A Fix-Mounted Probe either doesn't deploy or needs manual deployment.
-// For example an inductive probe, or a setup that uses the nozzle to probe.
-// An inductive probe must be deactivated to go below
-// its trigger-point if hardware endstops are active.
-//#define FIX_MOUNTED_PROBE
-
-// The BLTouch probe emulates a servo probe.
-//#define BLTOUCH
-
-// Z Servo Probe, such as an endstop switch on a rotating arm.
-//#define Z_ENDSTOP_SERVO_NR 0
-//#define Z_SERVO_ANGLES {70,0} // Z Servo Deploy and Stow angles
-
-// Enable if you have a Z probe mounted on a sled like those designed by Charles Bell.
-//#define Z_PROBE_SLED
-//#define SLED_DOCKING_OFFSET 5 // The extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.
-
-// Z Probe to nozzle (X,Y) offset, relative to (0, 0).
-// X and Y offsets must be integers.
-//
-// In the following example the X and Y offsets are both positive:
-// #define X_PROBE_OFFSET_FROM_EXTRUDER 10
-// #define Y_PROBE_OFFSET_FROM_EXTRUDER 10
-//
-// +-- BACK ---+
-// | |
-// L | (+) P | R <-- probe (20,20)
-// E | | I
-// F | (-) N (+) | G <-- nozzle (10,10)
-// T | | H
-// | (-) | T
-// | |
-// O-- FRONT --+
-// (0,0)
-#define X_PROBE_OFFSET_FROM_EXTRUDER -25 // X offset: -left +right [of the nozzle]
-#define Y_PROBE_OFFSET_FROM_EXTRUDER -29 // Y offset: -front +behind [the nozzle]
-#define Z_PROBE_OFFSET_FROM_EXTRUDER -12.35 // Z offset: -below +above [the nozzle]
-
-// X and Y axis travel speed (mm/m) between probes
-#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
-#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
-// Speed for the "accurate" probe of each point
-#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
-
-//
-// Allen Key Probe is defined in the Delta example configurations.
-//
-
-// Enable Z_MIN_PROBE_ENDSTOP to use _both_ a Z Probe and a Z-min-endstop on the same machine.
-// With this option the Z_MIN_PROBE_PIN will only be used for probing, never for homing.
-//
-// *** PLEASE READ ALL INSTRUCTIONS BELOW FOR SAFETY! ***
-//
-// To continue using the Z-min-endstop for homing, be sure to disable Z_SAFE_HOMING.
-// Example: To park the head outside the bed area when homing with G28.
-//
-// To use a separate Z probe, your board must define a Z_MIN_PROBE_PIN.
-//
-// For a servo-based Z probe, you must set up servo support below, including
-// NUM_SERVOS, Z_ENDSTOP_SERVO_NR and Z_SERVO_ANGLES.
-//
-// - RAMPS 1.3/1.4 boards may be able to use the 5V, GND, and Aux4->D32 pin.
-// - Use 5V for powered (usu. inductive) sensors.
-// - Otherwise connect:
-// - normally-closed switches to GND and D32.
-// - normally-open switches to 5V and D32.
-//
-// Normally-closed switches are advised and are the default.
-//
-// The Z_MIN_PROBE_PIN sets the Arduino pin to use. (See your board's pins file.)
-// Since the RAMPS Aux4->D32 pin maps directly to the Arduino D32 pin, D32 is the
-// default pin for all RAMPS-based boards. Some other boards map differently.
-// To set or change the pin for your board, edit the appropriate pins_XXXXX.h file.
-//
-// WARNING:
-// Setting the wrong pin may have unexpected and potentially disastrous consequences.
-// Use with caution and do your homework.
-//
-//#define Z_MIN_PROBE_ENDSTOP
-
-// Enable Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN to use the Z_MIN_PIN for your Z_MIN_PROBE.
-// The Z_MIN_PIN will then be used for both Z-homing and probing.
-#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
-
-// To use a probe you must enable one of the two options above!
-
-// This option disables the use of the Z_MIN_PROBE_PIN
-// To enable the Z probe pin but disable its use, uncomment the line below. This only affects a
-// Z probe switch if you have a separate Z min endstop also and have activated Z_MIN_PROBE_ENDSTOP above.
-// If you're using the Z MIN endstop connector for your Z probe, this has no effect.
-//#define DISABLE_Z_MIN_PROBE_ENDSTOP
-
-// Enable Z Probe Repeatability test to see how accurate your probe is
-//#define Z_MIN_PROBE_REPEATABILITY_TEST
-
-//
-// Probe Raise options provide clearance for the probe to deploy, stow, and travel.
-//
-#define Z_PROBE_DEPLOY_HEIGHT 15 // Raise to make room for the probe to deploy / stow
-#define Z_PROBE_TRAVEL_HEIGHT 5 // Raise between probing points.
-
-//
-// For M851 give a range for adjusting the Z probe offset
-//
-#define Z_PROBE_OFFSET_RANGE_MIN -20
-#define Z_PROBE_OFFSET_RANGE_MAX 20
-
-// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
-// :{0:'Low',1:'High'}
-#define X_ENABLE_ON 0
-#define Y_ENABLE_ON 0
-#define Z_ENABLE_ON 0
-#define E_ENABLE_ON 0 // For all extruders
-
-// Disables axis stepper immediately when it's not being used.
-// WARNING: When motors turn off there is a chance of losing position accuracy!
-#define DISABLE_X false
-#define DISABLE_Y false
-#define DISABLE_Z false
-// Warn on display about possibly reduced accuracy
-//#define DISABLE_REDUCED_ACCURACY_WARNING
-
-// @section extruder
-
-#define DISABLE_E false // For all extruders
-#define DISABLE_INACTIVE_EXTRUDER true //disable only inactive extruders and keep active extruder enabled
-
-// @section machine
-
-// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way.
-#define INVERT_X_DIR true
-#define INVERT_Y_DIR false
-#define INVERT_Z_DIR false
-
-// @section extruder
-
-// For direct drive extruder v9 set to true, for geared extruder set to false.
-#define INVERT_E0_DIR true
-#define INVERT_E1_DIR true
-#define INVERT_E2_DIR false
-#define INVERT_E3_DIR false
-
-// @section homing
-
-//#define Z_HOMING_HEIGHT 4 // (in mm) Minimal z height before homing (G28) for Z clearance above the bed, clamps, ...
- // Be sure you have this distance over your Z_MAX_POS in case.
-
-// ENDSTOP SETTINGS:
-// Sets direction of endstops when homing; 1=MAX, -1=MIN
-// :[-1,1]
-#define X_HOME_DIR -1
-#define Y_HOME_DIR -1
-#define Z_HOME_DIR -1
-
-#define min_software_endstops true // If true, axis won't move to coordinates less than HOME_POS.
-#define max_software_endstops true // If true, axis won't move to coordinates greater than the defined lengths below.
-
-// @section machine
-
-// Travel limits after homing (units are in mm)
-#define X_MIN_POS 0
-#define Y_MIN_POS 0
-#define Z_MIN_POS 0
-#define X_MAX_POS 254 // RigidBot regular is 254mm, RigitBot Big is 406mm
-#define Y_MAX_POS 248 // RigidBot regular is 248mm, RigitBot Big is 304mm
-#define Z_MAX_POS 254 // RigidBot regular and Big are 254mm
-
-//===========================================================================
-//========================= Filament Runout Sensor ==========================
-//===========================================================================
-//#define FILAMENT_RUNOUT_SENSOR // Uncomment for defining a filament runout sensor such as a mechanical or opto endstop to check the existence of filament
- // In RAMPS uses servo pin 2. Can be changed in pins file. For other boards pin definition should be made.
- // It is assumed that when logic high = filament available
- // when logic low = filament ran out
-#if ENABLED(FILAMENT_RUNOUT_SENSOR)
- const bool FIL_RUNOUT_INVERTING = false; // set to true to invert the logic of the sensor.
- #define ENDSTOPPULLUP_FIL_RUNOUT // Uncomment to use internal pullup for filament runout pins if the sensor is defined.
- #define FILAMENT_RUNOUT_SCRIPT "M600"
-#endif
-
-//===========================================================================
-//============================ Mesh Bed Leveling ============================
-//===========================================================================
-
-//#define MESH_BED_LEVELING // Enable mesh bed leveling.
-
-#if ENABLED(MESH_BED_LEVELING)
- #define MESH_INSET 10 // Mesh inset margin on print area
- #define MESH_NUM_X_POINTS 3 // Don't use more than 7 points per axis, implementation limited.
- #define MESH_NUM_Y_POINTS 3
- #define MESH_HOME_SEARCH_Z 4 // Z after Home, bed somewhere below but above 0.0.
-
- //#define MESH_G28_REST_ORIGIN // After homing all axes ('G28' or 'G28 XYZ') rest at origin [0,0,0]
-
- //#define MANUAL_BED_LEVELING // Add display menu option for bed leveling.
-
- #if ENABLED(MANUAL_BED_LEVELING)
- #define MBL_Z_STEP 0.025 // Step size while manually probing Z axis.
- #endif // MANUAL_BED_LEVELING
-
-#endif // MESH_BED_LEVELING
-
-//===========================================================================
-//============================ Bed Auto Leveling ============================
-//===========================================================================
-
-// @section bedlevel
-
-//#define AUTO_BED_LEVELING_FEATURE // Delete the comment to enable (remove // at the start of the line)
-
-// Enable this feature to get detailed logging of G28, G29, M48, etc.
-// Logging is off by default. Enable this logging feature with 'M111 S32'.
-// NOTE: Requires a huge amount of PROGMEM.
-//#define DEBUG_LEVELING_FEATURE
-
-#if ENABLED(AUTO_BED_LEVELING_FEATURE)
-
- // There are 2 different ways to specify probing locations:
- //
- // - "grid" mode
- // Probe several points in a rectangular grid.
- // You specify the rectangle and the density of sample points.
- // This mode is preferred because there are more measurements.
- //
- // - "3-point" mode
- // Probe 3 arbitrary points on the bed (that aren't collinear)
- // You specify the XY coordinates of all 3 points.
-
- // Enable this to sample the bed in a grid (least squares solution).
- // Note: this feature generates 10KB extra code size.
- #define AUTO_BED_LEVELING_GRID
-
- #if ENABLED(AUTO_BED_LEVELING_GRID)
-
- #define LEFT_PROBE_BED_POSITION 15
- #define RIGHT_PROBE_BED_POSITION 170
- #define FRONT_PROBE_BED_POSITION 20
- #define BACK_PROBE_BED_POSITION 170
-
- #define MIN_PROBE_EDGE 10 // The Z probe minimum square sides can be no smaller than this.
-
- // Set the number of grid points per dimension.
- // You probably don't need more than 3 (squared=9).
- #define AUTO_BED_LEVELING_GRID_POINTS 2
-
- #else // !AUTO_BED_LEVELING_GRID
-
- // Arbitrary points to probe.
- // A simple cross-product is used to estimate the plane of the bed.
- #define ABL_PROBE_PT_1_X 15
- #define ABL_PROBE_PT_1_Y 180
- #define ABL_PROBE_PT_2_X 15
- #define ABL_PROBE_PT_2_Y 20
- #define ABL_PROBE_PT_3_X 170
- #define ABL_PROBE_PT_3_Y 20
-
- #endif // !AUTO_BED_LEVELING_GRID
-
- //#define Z_PROBE_END_SCRIPT "G1 Z10 F12000\nG1 X15 Y330\nG1 Z0.5\nG1 Z10" // These commands will be executed in the end of G29 routine.
- // Useful to retract a deployable Z probe.
-
- // If you've enabled AUTO_BED_LEVELING_FEATURE and are using the Z Probe for Z Homing,
- // it is highly recommended you also enable Z_SAFE_HOMING below!
-
-#endif // AUTO_BED_LEVELING_FEATURE
-
-
-// @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 // Distance between the nozzle to printbed after homing
-
-// Use "Z Safe Homing" to avoid homing with a Z probe outside the bed area.
-//
-// With this feature enabled:
-//
-// - Allow Z homing only after X and Y homing AND stepper drivers still enabled.
-// - If stepper drivers time out, it will need X and Y homing again before Z homing.
-// - Move the Z probe (or nozzle) to a defined XY point before Z Homing when homing all axes (G28).
-// - Prevent Z homing when the Z probe is outside bed area.
-//#define Z_SAFE_HOMING
-
-#if ENABLED(Z_SAFE_HOMING)
- #define Z_SAFE_HOMING_X_POINT ((X_MIN_POS + X_MAX_POS) / 2) // X point for Z homing when homing all axis (G28).
- #define Z_SAFE_HOMING_Y_POINT ((Y_MIN_POS + Y_MAX_POS) / 2) // Y point for Z homing when homing all axis (G28).
-#endif
-
-// Homing speeds (mm/m)
-#define HOMING_FEEDRATE_XY (50*60)
-#define HOMING_FEEDRATE_Z (15*60)
-
-//
-// MOVEMENT SETTINGS
-// @section motion
-//
-
-// default settings
-
-#define DEFAULT_AXIS_STEPS_PER_UNIT {44.3090, 22.1545, 1600, 53.5} // default steps per unit for RigidBot with standard hardware
- // default steps for 16-teth polleys {100.06,50.06,1600,76}, HPX2-MAX E=504, RigidBot E=53.5, Peter Stoneham's=76
-#define DEFAULT_MAX_FEEDRATE {500, 500, 5, 25} // (mm/sec)
-#define DEFAULT_MAX_ACCELERATION {800, 800, 100, 10000} // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for Skeinforge 40+, for older versions raise them a lot.
-
-#define DEFAULT_ACCELERATION 600 // X, Y, Z and E acceleration in mm/s^2 for printing moves
-#define DEFAULT_RETRACT_ACCELERATION 1000 // E acceleration in mm/s^2 for retracts
-#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
-
-// The speed change that does not require acceleration (i.e. the software might assume it can be done instantaneously)
-#define DEFAULT_XYJERK 8.0 // (mm/sec)
-#define DEFAULT_ZJERK 0.4 // (mm/sec)
-#define DEFAULT_EJERK 5.0 // (mm/sec)
-
-
-//=============================================================================
-//============================= Additional Features ===========================
-//=============================================================================
-
-// @section extras
-
-//
-// EEPROM
-//
-// The microcontroller can store settings in the EEPROM, e.g. max velocity...
-// M500 - stores parameters in EEPROM
-// M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily).
-// M502 - reverts to the default "factory settings". You still need to store them in EEPROM afterwards if you want to.
-//define this to enable EEPROM support
-#define EEPROM_SETTINGS
-
-#if ENABLED(EEPROM_SETTINGS)
- // To disable EEPROM Serial responses and decrease program space by ~1700 byte: comment this out:
- #define EEPROM_CHITCHAT // Please keep turned on if you can.
-#endif
-
-//
-// Host Keepalive
-//
-// When enabled Marlin will send a busy status message to the host
-// every couple of seconds when it can't accept commands.
-//
-#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.
-
-//
-// M100 Free Memory Watcher
-//
-//#define M100_FREE_MEMORY_WATCHER // uncomment to add the M100 Free Memory Watcher for debug purpose
-
-//
-// G20/G21 Inch mode support
-//
-//#define INCH_MODE_SUPPORT
-
-//
-// M149 Set temperature units support
-//
-//#define TEMPERATURE_UNITS_SUPPORT
-
-// @section temperature
-
-// Preheat Constants
-#define PREHEAT_1_TEMP_HOTEND 180
-#define PREHEAT_1_TEMP_BED 70
-#define PREHEAT_1_FAN_SPEED 255 // Value from 0 to 255
-
-#define PREHEAT_2_TEMP_HOTEND 240
-#define PREHEAT_2_TEMP_BED 110
-#define PREHEAT_2_FAN_SPEED 255 // Value from 0 to 255
-
-//
-// Nozzle Park -- EXPERIMENTAL
-//
-// When enabled allows the user to define a special XYZ position, inside the
-// machine's topology, to park the nozzle when idle or when receiving the G27
-// command.
-//
-// The "P" paramenter controls what is the action applied to the Z axis:
-// P0: (Default) If current Z-pos is lower than Z-park then the nozzle will
-// be raised to reach Z-park height.
-//
-// P1: No matter the current Z-pos, the nozzle will be raised/lowered to
-// reach Z-park height.
-//
-// P2: The nozzle height will be raised by Z-park amount but never going over
-// the machine's limit of Z_MAX_POS.
-//
-//#define NOZZLE_PARK_FEATURE
-
-#if ENABLED(NOZZLE_PARK_FEATURE)
- // Specify a park position as { X, Y, Z }
- #define NOZZLE_PARK_POINT { (X_MIN_POS + 10), (Y_MAX_POS - 10), 20 }
-#endif
-
-//
-// Clean Nozzle Feature -- EXPERIMENTAL
-//
-// When enabled allows the user to send G12 to start the nozzle cleaning
-// process, the G-Code accepts two parameters:
-// "P" for pattern selection
-// "S" for defining the number of strokes/repetitions
-//
-// Available list of patterns:
-// P0: This is the default pattern, this process requires a sponge type
-// material at a fixed bed location, the cleaning process is based on
-// "strokes" i.e. back-and-forth movements between the starting and end
-// points.
-//
-// P1: This starts a zig-zag pattern between (X0, Y0) and (X1, Y1), "T"
-// defines the number of zig-zag triangles to be done. "S" defines the
-// number of strokes aka one back-and-forth movement. As an example
-// sending "G12 P1 S1 T3" will execute:
-//
-// --
-// | (X0, Y1) | /\ /\ /\ | (X1, Y1)
-// | | / \ / \ / \ |
-// A | | / \ / \ / \ |
-// | | / \ / \ / \ |
-// | (X0, Y0) | / \/ \/ \ | (X1, Y0)
-// -- +--------------------------------+
-// |________|_________|_________|
-// T1 T2 T3
-//
-// Caveats: End point Z should use the same value as Start point Z.
-//
-// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
-// may change to add new functionality like different wipe patterns.
-//
-//#define NOZZLE_CLEAN_FEATURE
-
-#if ENABLED(NOZZLE_CLEAN_FEATURE)
- // Number of pattern repetitions
- #define NOZZLE_CLEAN_STROKES 12
-
- // Specify positions as { X, Y, Z }
- #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
- #define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
-
- // Moves the nozzle to the initial position
- #define NOZZLE_CLEAN_GOBACK
-#endif
-
-//
-// Print job timer
-//
-// Enable this option to automatically start and stop the
-// print job timer when M104/M109/M190 commands are received.
-// M104 (extruder without wait) - high temp = none, low temp = stop timer
-// M109 (extruder with wait) - high temp = start timer, low temp = stop timer
-// M190 (bed with wait) - high temp = start timer, low temp = none
-//
-// In all cases the timer can be started and stopped using
-// the following commands:
-//
-// - M75 - Start the print job timer
-// - M76 - Pause the print job timer
-// - M77 - Stop the print job timer
-#define PRINTJOB_TIMER_AUTOSTART
-
-//
-// Print Counter
-//
-// When enabled Marlin will keep track of some print statistical data such as:
-// - Total print jobs
-// - Total successful print jobs
-// - Total failed print jobs
-// - Total time printing
-//
-// This information can be viewed by the M78 command.
-//#define PRINTCOUNTER
-
-//=============================================================================
-//============================= LCD and SD support ============================
-//=============================================================================
-
-// @section lcd
-
-//
-// LCD LANGUAGE
-//
-// Here you may choose the language used by Marlin on the LCD menus, the following
-// list of languages are available:
-// en, an, bg, ca, cn, cz, de, el, el-gr, es, eu, fi, fr, gl, hr, it,
-// kana, kana_utf8, nl, pl, pt, pt_utf8, pt-br, pt-br_utf8, ru, test
-//
-// :{'en':'English','an':'Aragonese','bg':'Bulgarian','ca':'Catalan','cn':'Chinese','cz':'Czech','de':'German','el':'Greek','el-gr':'Greek (Greece)','es':'Spanish','eu':'Basque-Euskera','fi':'Finnish','fr':'French','gl':'Galician','hr':'Croatian','it':'Italian','kana':'Japanese','kana_utf8':'Japanese (UTF8)','nl':'Dutch','pl':'Polish','pt':'Portuguese','pt-br':'Portuguese (Brazilian)','pt-br_utf8':'Portuguese (Brazilian UTF8)','pt_utf8':'Portuguese (UTF8)','ru':'Russian','test':'TEST'}
-//
-#define LCD_LANGUAGE en
-
-//
-// LCD Character Set
-//
-// Note: This option is NOT applicable to Graphical Displays.
-//
-// All character-based LCD's provide ASCII plus one of these
-// language extensions:
-//
-// - JAPANESE ... the most common
-// - WESTERN ... with more accented characters
-// - CYRILLIC ... for the Russian language
-//
-// To determine the language extension installed on your controller:
-//
-// - Compile and upload with LCD_LANGUAGE set to 'test'
-// - Click the controller to view the LCD menu
-// - The LCD will display Japanese, Western, or Cyrillic text
-//
-// See https://github.com/MarlinFirmware/Marlin/wiki/LCD-Language
-//
-// :['JAPANESE','WESTERN','CYRILLIC']
-//
-#define DISPLAY_CHARSET_HD44780 JAPANESE
-
-//
-// LCD TYPE
-//
-// You may choose ULTRA_LCD if you have character based LCD with 16x2, 16x4, 20x2,
-// 20x4 char/lines or DOGLCD for the full graphics display with 128x64 pixels
-// (ST7565R family). (This option will be set automatically for certain displays.)
-//
-// IMPORTANT NOTE: The U8glib library is required for Full Graphic Display!
-// https://github.com/olikraus/U8glib_Arduino
-//
-//#define ULTRA_LCD // Character based
-//#define DOGLCD // Full graphics display
-
-//
-// SD CARD
-//
-// SD Card support is disabled by default. If your controller has an SD slot,
-// you must uncomment the following option or it won't work.
-//
-#define SDSUPPORT
-
-//
-// SD CARD: SPI SPEED
-//
-// Uncomment ONE of the following items to use a slower SPI transfer
-// speed. This is usually required if you're getting volume init errors.
-//
-//#define SPI_SPEED SPI_HALF_SPEED
-//#define SPI_SPEED SPI_QUARTER_SPEED
-#define SPI_SPEED SPI_EIGHTH_SPEED
-
-//
-// SD CARD: ENABLE CRC
-//
-// Use CRC checks and retries on the SD communication.
-//
-//#define SD_CHECK_AND_RETRY
-
-//
-// ENCODER SETTINGS
-//
-// This option overrides the default number of encoder pulses needed to
-// produce one step. Should be increased for high-resolution encoders.
-//
-//#define ENCODER_PULSES_PER_STEP 1
-
-//
-// Use this option to override the number of step signals required to
-// move between next/prev menu items.
-//
-//#define ENCODER_STEPS_PER_MENU_ITEM 5
-
-/**
- * Encoder Direction Options
- *
- * Test your encoder's behavior first with both options disabled.
- *
- * Reversed Value Edit and Menu Nav? Enable REVERSE_ENCODER_DIRECTION.
- * Reversed Menu Navigation only? Enable REVERSE_MENU_DIRECTION.
- * Reversed Value Editing only? Enable BOTH options.
- */
-
-//
-// This option reverses the encoder direction everywhere
-//
-// Set this option if CLOCKWISE causes values to DECREASE
-//
-//#define REVERSE_ENCODER_DIRECTION
-
-//
-// This option reverses the encoder direction for navigating LCD menus.
-//
-// If CLOCKWISE normally moves DOWN this makes it go UP.
-// If CLOCKWISE normally moves UP this makes it go DOWN.
-//
-//#define REVERSE_MENU_DIRECTION
-
-//
-// Individual Axis Homing
-//
-// Add individual axis homing items (Home X, Home Y, and Home Z) to the LCD menu.
-//
-//#define INDIVIDUAL_AXIS_HOMING_MENU
-
-//
-// SPEAKER/BUZZER
-//
-// If you have a speaker that can produce tones, enable it here.
-// By default Marlin assumes you have a buzzer with a fixed frequency.
-//
-//#define SPEAKER
-
-//
-// The duration and frequency for the UI feedback sound.
-// Set these to 0 to disable audio feedback in the LCD menus.
-//
-// Note: Test audio output with the G-Code:
-// M300 S P
-//
-//#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 100
-//#define LCD_FEEDBACK_FREQUENCY_HZ 1000
-
-//
-// CONTROLLER TYPE: Standard
-//
-// Marlin supports a wide variety of controllers.
-// Enable one of the following options to specify your controller.
-//
-
-//
-// ULTIMAKER Controller.
-//
-//#define ULTIMAKERCONTROLLER
-
-//
-// ULTIPANEL as seen on Thingiverse.
-//
-//#define ULTIPANEL
-
-//
-// Cartesio UI
-// http://mauk.cc/webshop/cartesio-shop/electronics/user-interface
-//
-//#define CARTESIO_UI
-
-//
-// PanelOne from T3P3 (via RAMPS 1.4 AUX2/AUX3)
-// http://reprap.org/wiki/PanelOne
-//
-//#define PANEL_ONE
-
-//
-// MaKr3d Makr-Panel with graphic controller and SD support.
-// http://reprap.org/wiki/MaKr3d_MaKrPanel
-//
-//#define MAKRPANEL
-
-//
-// ReprapWorld Graphical LCD
-// https://reprapworld.com/?products_details&products_id/1218
-//
-//#define REPRAPWORLD_GRAPHICAL_LCD
-
-//
-// Activate one of these if you have a Panucatt Devices
-// Viki 2.0 or mini Viki with Graphic LCD
-// http://panucatt.com
-//
-//#define VIKI2
-//#define miniVIKI
-
-//
-// Adafruit ST7565 Full Graphic Controller.
-// https://github.com/eboston/Adafruit-ST7565-Full-Graphic-Controller/
-//
-//#define ELB_FULL_GRAPHIC_CONTROLLER
-
-//
-// RepRapDiscount Smart Controller.
-// http://reprap.org/wiki/RepRapDiscount_Smart_Controller
-//
-// Note: Usually sold with a white PCB.
-//
-//#define REPRAP_DISCOUNT_SMART_CONTROLLER
-
-//
-// GADGETS3D G3D LCD/SD Controller
-// http://reprap.org/wiki/RAMPS_1.3/1.4_GADGETS3D_Shield_with_Panel
-//
-// Note: Usually sold with a blue PCB.
-//
-//#define G3D_PANEL
-
-//
-// RepRapDiscount FULL GRAPHIC Smart Controller
-// http://reprap.org/wiki/RepRapDiscount_Full_Graphic_Smart_Controller
-//
-// RigidBoard: To rewire this for a RigidBot see http://rigidtalk.com/wiki/index.php?title=LCD_Smart_Controller
-//
-//#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
-
-//
-// MakerLab Mini Panel with graphic
-// controller and SD support - http://reprap.org/wiki/Mini_panel
-//
-//#define MINIPANEL
-
-//
-// RepRapWorld REPRAPWORLD_KEYPAD v1.1
-// http://reprapworld.com/?products_details&products_id=202&cPath=1591_1626
-//
-// REPRAPWORLD_KEYPAD_MOVE_STEP sets how much should the robot move when a key
-// is pressed, a value of 10.0 means 10mm per click.
-//
-//#define REPRAPWORLD_KEYPAD
-//#define REPRAPWORLD_KEYPAD_MOVE_STEP 1.0
-
-//
-// RigidBot Panel V1.0
-// http://www.inventapart.com/
-//
-#define RIGIDBOT_PANEL
-
-//
-// BQ LCD Smart Controller shipped by
-// default with the BQ Hephestos 2 and Witbox 2.
-//
-//#define BQ_LCD_SMART_CONTROLLER
-
-//
-// CONTROLLER TYPE: I2C
-//
-// Note: These controllers require the installation of Arduino's LiquidCrystal_I2C
-// library. For more info: https://github.com/kiyoshigawa/LiquidCrystal_I2C
-//
-
-//
-// Elefu RA Board Control Panel
-// http://www.elefu.com/index.php?route=product/product&product_id=53
-//
-//#define RA_CONTROL_PANEL
-
-//
-// Sainsmart YW Robot (LCM1602) LCD Display
-//
-//#define LCD_I2C_SAINSMART_YWROBOT
-
-//
-// Generic LCM1602 LCD adapter
-//
-//#define LCM1602
-
-//
-// PANELOLU2 LCD with status LEDs,
-// separate encoder and click inputs.
-//
-// Note: This controller requires Arduino's LiquidTWI2 library v1.2.3 or later.
-// For more info: https://github.com/lincomatic/LiquidTWI2
-//
-// Note: The PANELOLU2 encoder click input can either be directly connected to
-// a pin (if BTN_ENC defined to != -1) or read through I2C (when BTN_ENC == -1).
-//
-//#define LCD_I2C_PANELOLU2
-
-//
-// Panucatt VIKI LCD with status LEDs,
-// integrated click & L/R/U/D buttons, separate encoder inputs.
-//
-//#define LCD_I2C_VIKI
-
-//
-// SSD1306 OLED full graphics generic display
-//
-//#define U8GLIB_SSD1306
-
-//
-// SAV OLEd LCD module support using either SSD1306 or SH1106 based LCD modules
-//
-//#define SAV_3DGLCD
-#if ENABLED(SAV_3DGLCD)
- //#define U8GLIB_SSD1306
- #define U8GLIB_SH1106
-#endif
-
-//
-// CONTROLLER TYPE: Shift register panels
-//
-// 2 wire Non-latching LCD SR from https://goo.gl/aJJ4sH
-// LCD configuration: http://reprap.org/wiki/SAV_3D_LCD
-//
-//#define SAV_3DLCD
-
-//=============================================================================
-//=============================== Extra Features ==============================
-//=============================================================================
-
-// @section extras
-
-// Increase the FAN PWM frequency. Removes the PWM noise but increases heating in the FET/Arduino
-//#define FAST_PWM_FAN
-
-// Use software PWM to drive the fan, as for the heaters. This uses a very low frequency
-// which is not as annoying as with the hardware PWM. On the other hand, if this frequency
-// is too low, you should also increment SOFT_PWM_SCALE.
-//#define FAN_SOFT_PWM
-
-// Incrementing this by 1 will double the software PWM frequency,
-// affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
-// However, control resolution will be halved for each increment;
-// at zero value, there are 128 effective control positions.
-#define SOFT_PWM_SCALE 0
-
-// Temperature status LEDs that display the hotend and bed temperature.
-// If all hotends and bed temperature and temperature setpoint are < 54C then the BLUE led is on.
-// Otherwise the RED led is on. There is 1C hysteresis.
-//#define TEMP_STAT_LEDS
-
-// M240 Triggers a camera by emulating a Canon RC-1 Remote
-// Data from: http://www.doc-diy.net/photo/rc-1_hacked/
-//#define PHOTOGRAPH_PIN 23
-
-// SkeinForge sends the wrong arc g-codes when using Arc Point as fillet procedure
-//#define SF_ARC_FIX
-
-// Support for the BariCUDA Paste Extruder.
-//#define BARICUDA
-
-//define BlinkM/CyzRgb Support
-//#define BLINKM
-
-/*********************************************************************\
-* R/C SERVO support
-* Sponsored by TrinityLabs, Reworked by codexmas
-**********************************************************************/
-
-// Number of servos
-//
-// If you select a configuration below, this will receive a default value and does not need to be set manually
-// set it manually if you have more servos than extruders and wish to manually control some
-// leaving it undefined or defining as 0 will disable the servo subsystem
-// If unsure, leave commented / disabled
-//
-#define NUM_SERVOS 0 // DGlass3D - Servo index starts with 0 for M280 command
-
-// Delay (in microseconds) before the next move will start, to give the servo time to reach its target angle.
-// 300ms is a good value but you can try less delay.
-// If the servo can't reach the requested position, increase it.
-#define SERVO_DELAY 300
-
-// Servo deactivation
-//
-// With this option servos are powered only during movement, then turned off to prevent jitter.
-//#define DEACTIVATE_SERVOS_AFTER_MOVE
-
-/**********************************************************************\
- * Support for a filament diameter sensor
- * Also allows adjustment of diameter at print time (vs at slicing)
- * Single extruder only at this point (extruder 0)
- *
- * Motherboards
- * 34 - RAMPS1.4 - uses Analog input 5 on the AUX2 connector
- * 81 - Printrboard - Uses Analog input 2 on the Exp1 connector (version B,C,D,E)
- * 301 - Rambo - uses Analog input 3
- * Note may require analog pins to be defined for different motherboards
- **********************************************************************/
-// Uncomment below to enable
-//#define FILAMENT_WIDTH_SENSOR
-
-#define DEFAULT_NOMINAL_FILAMENT_DIA 3.00 //Enter the diameter (in mm) of the filament generally used (3.0 mm or 1.75 mm) - this is then used in the slicer software. Used for sensor reading validation
-
-#if ENABLED(FILAMENT_WIDTH_SENSOR)
- #define FILAMENT_SENSOR_EXTRUDER_NUM 0 //The number of the extruder that has the filament sensor (0,1,2)
- #define MEASUREMENT_DELAY_CM 14 //measurement delay in cm. This is the distance from filament sensor to middle of barrel
-
- #define MEASURED_UPPER_LIMIT 3.30 //upper limit factor used for sensor reading validation in mm
- #define MEASURED_LOWER_LIMIT 1.90 //lower limit factor for sensor reading validation in mm
- #define MAX_MEASUREMENT_DELAY 20 //delay buffer size in bytes (1 byte = 1cm)- limits maximum measurement delay allowable (must be larger than MEASUREMENT_DELAY_CM and lower number saves RAM)
-
- #define DEFAULT_MEASURED_FILAMENT_DIA DEFAULT_NOMINAL_FILAMENT_DIA //set measured to nominal initially
-
- //When using an LCD, uncomment the line below to display the Filament sensor data on the last line instead of status. Status will appear for 5 sec.
- //#define FILAMENT_LCD_DISPLAY
-#endif
-
-#endif // CONFIGURATION_H
diff --git a/Marlin/example_configurations/RigidBot/Configuration_adv.h b/Marlin/example_configurations/RigidBot/Configuration_adv.h
deleted file mode 100644
index 2118f83..0000000
--- a/Marlin/example_configurations/RigidBot/Configuration_adv.h
+++ /dev/null
@@ -1,799 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Configuration_adv.h
- *
- * Advanced settings.
- * Only change these if you know exactly what you're doing.
- * Some of these settings can damage your printer if improperly set!
- *
- * Basic settings can be found in Configuration.h
- *
- */
-#ifndef CONFIGURATION_ADV_H
-#define CONFIGURATION_ADV_H
-
-/**
- *
- * ***********************************
- * ** ATTENTION TO ALL DEVELOPERS **
- * ***********************************
- *
- * You must increment this version number for every significant change such as,
- * but not limited to: ADD, DELETE RENAME OR REPURPOSE any directive/option.
- *
- * Note: Update also Version.h !
- */
-#define CONFIGURATION_ADV_H_VERSION 010100
-
-// @section temperature
-
-//===========================================================================
-//=============================Thermal Settings ============================
-//===========================================================================
-
-#if DISABLED(PIDTEMPBED)
- #define BED_CHECK_INTERVAL 5000 // ms between checks in bang-bang control
- #if ENABLED(BED_LIMIT_SWITCHING)
- #define BED_HYSTERESIS 2 // Only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS
- #endif
-#endif
-
-/**
- * Thermal Protection protects your printer from damage and fire if a
- * thermistor falls out or temperature sensors fail in any way.
- *
- * The issue: If a thermistor falls out or a temperature sensor fails,
- * Marlin can no longer sense the actual temperature. Since a disconnected
- * thermistor reads as a low temperature, the firmware will keep the heater on.
- *
- * The solution: Once the temperature reaches the target, start observing.
- * If the temperature stays too far below the target (hysteresis) for too long (period),
- * the firmware will halt the machine as a safety precaution.
- *
- * If you get false positives for "Thermal Runaway" increase THERMAL_PROTECTION_HYSTERESIS and/or THERMAL_PROTECTION_PERIOD
- */
-#if ENABLED(THERMAL_PROTECTION_HOTENDS)
- #define THERMAL_PROTECTION_PERIOD 40 // Seconds
- #define THERMAL_PROTECTION_HYSTERESIS 4 // Degrees Celsius
-
- /**
- * Whenever an M104 or M109 increases the target temperature the firmware will wait for the
- * WATCH_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_TEMP_INCREASE
- * degrees, the machine is halted, requiring a hard reset. This test restarts with any M104/M109,
- * but only if the current temperature is far enough below the target for a reliable test.
- *
- * If you get false positives for "Heating failed" increase WATCH_TEMP_PERIOD and/or decrease WATCH_TEMP_INCREASE
- * WATCH_TEMP_INCREASE should not be below 2.
- */
- #define WATCH_TEMP_PERIOD 20 // Seconds
- #define WATCH_TEMP_INCREASE 2 // Degrees Celsius
-#endif
-
-/**
- * Thermal Protection parameters for the bed are just as above for hotends.
- */
-#if ENABLED(THERMAL_PROTECTION_BED)
- #define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
- #define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
-
- /**
- * Whenever an M140 or M190 increases the target temperature the firmware will wait for the
- * WATCH_BED_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_BED_TEMP_INCREASE
- * degrees, the machine is halted, requiring a hard reset. This test restarts with any M140/M190,
- * but only if the current temperature is far enough below the target for a reliable test.
- *
- * If you get too many "Heating failed" errors, increase WATCH_BED_TEMP_PERIOD and/or decrease
- * WATCH_BED_TEMP_INCREASE. (WATCH_BED_TEMP_INCREASE should not be below 2.)
- */
- #define WATCH_BED_TEMP_PERIOD 60 // Seconds
- #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
-#endif
-
-#if ENABLED(PIDTEMP)
- // this adds an experimental additional term to the heating power, proportional to the extrusion speed.
- // if Kc is chosen well, the additional required power due to increased melting should be compensated.
- //#define PID_EXTRUSION_SCALING
- #if ENABLED(PID_EXTRUSION_SCALING)
- #define DEFAULT_Kc (100) //heating power=Kc*(e_speed)
- #define LPQ_MAX_LEN 50
- #endif
-#endif
-
-/**
- * Automatic Temperature:
- * The hotend target temperature is calculated by all the buffered lines of gcode.
- * The maximum buffered steps/sec of the extruder motor is called "se".
- * Start autotemp mode with M109 S B F
- * The target temperature is set to mintemp+factor*se[steps/sec] and is limited by
- * mintemp and maxtemp. Turn this off by executing M109 without F*
- * Also, if the temperature is set to a value below mintemp, it will not be changed by autotemp.
- * On an Ultimaker, some initial testing worked with M109 S215 B260 F1 in the start.gcode
- */
-#define AUTOTEMP
-#if ENABLED(AUTOTEMP)
- #define AUTOTEMP_OLDWEIGHT 0.98
-#endif
-
-//Show Temperature ADC value
-//The M105 command return, besides traditional information, the ADC value read from temperature sensors.
-//#define SHOW_TEMP_ADC_VALUES
-
-/**
- * High Temperature Thermistor Support
- *
- * Thermistors able to support high temperature tend to have a hard time getting
- * good readings at room and lower temperatures. This means HEATER_X_RAW_LO_TEMP
- * will probably be caught when the heating element first turns on during the
- * preheating process, which will trigger a min_temp_error as a safety measure
- * and force stop everything.
- * To circumvent this limitation, we allow for a preheat time (during which,
- * min_temp_error won't be triggered) and add a min_temp buffer to handle
- * aberrant readings.
- *
- * If you want to enable this feature for your hotend thermistor(s)
- * uncomment and set values > 0 in the constants below
- */
-
-// The number of consecutive low temperature errors that can occur
-// before a min_temp_error is triggered. (Shouldn't be more than 10.)
-//#define MAX_CONSECUTIVE_LOW_TEMPERATURE_ERROR_ALLOWED 0
-
-// The number of milliseconds a hotend will preheat before starting to check
-// the temperature. This value should NOT be set to the time it takes the
-// hot end to reach the target temperature, but the time it takes to reach
-// the minimum temperature your thermistor can read. The lower the better/safer.
-// This shouldn't need to be more than 30 seconds (30000)
-//#define MILLISECONDS_PREHEAT_TIME 0
-
-// @section extruder
-
-// extruder run-out prevention.
-//if the machine is idle, and the temperature over MINTEMP, every couple of SECONDS some filament is extruded
-//#define EXTRUDER_RUNOUT_PREVENT
-#define EXTRUDER_RUNOUT_MINTEMP 190
-#define EXTRUDER_RUNOUT_SECONDS 30
-#define EXTRUDER_RUNOUT_ESTEPS 14 // mm filament
-#define EXTRUDER_RUNOUT_SPEED 1500 // extrusion speed
-#define EXTRUDER_RUNOUT_EXTRUDE 100
-
-// @section temperature
-
-//These defines help to calibrate the AD595 sensor in case you get wrong temperature measurements.
-//The measured temperature is defined as "actualTemp = (measuredTemp * TEMP_SENSOR_AD595_GAIN) + TEMP_SENSOR_AD595_OFFSET"
-#define TEMP_SENSOR_AD595_OFFSET 0.0
-#define TEMP_SENSOR_AD595_GAIN 1.0
-
-//This is for controlling a fan to cool down the stepper drivers
-//it will turn on when any driver is enabled
-//and turn off after the set amount of seconds from last driver being disabled again
-#define CONTROLLERFAN_PIN 4 // RigidBot: Fans/Water Pump to cool the hotend cool side.
-#define CONTROLLERFAN_SECS 60 //How many seconds, after all motors were disabled, the fan should run
-#define CONTROLLERFAN_SPEED 255 // == full speed
-
-// When first starting the main fan, run it at full speed for the
-// given number of milliseconds. This gets the fan spinning reliably
-// before setting a PWM value. (Does not work with software PWM for fan on Sanguinololu)
-//#define FAN_KICKSTART_TIME 100
-
-// This defines the minimal speed for the main fan, run in PWM mode
-// to enable uncomment and set minimal PWM speed for reliable running (1-255)
-// if fan speed is [1 - (FAN_MIN_PWM-1)] it is set to FAN_MIN_PWM
-//#define FAN_MIN_PWM 50
-
-// @section extruder
-
-// Extruder cooling fans
-// Configure fan pin outputs to automatically turn on/off when the associated
-// extruder temperature is above/below EXTRUDER_AUTO_FAN_TEMPERATURE.
-// Multiple extruders can be assigned to the same pin in which case
-// the fan will turn on when any selected extruder is above the threshold.
-#define EXTRUDER_0_AUTO_FAN_PIN -1
-#define EXTRUDER_1_AUTO_FAN_PIN -1
-#define EXTRUDER_2_AUTO_FAN_PIN -1
-#define EXTRUDER_3_AUTO_FAN_PIN -1
-#define EXTRUDER_AUTO_FAN_TEMPERATURE 50
-#define EXTRUDER_AUTO_FAN_SPEED 255 // == full speed
-
-//===========================================================================
-//============================ Mechanical Settings ==========================
-//===========================================================================
-
-// @section homing
-
-// If you want endstops to stay on (by default) even when not homing
-// enable this option. Override at any time with M120, M121.
-//#define ENDSTOPS_ALWAYS_ON_DEFAULT
-
-// @section extras
-
-//#define Z_LATE_ENABLE // Enable Z the last moment. Needed if your Z driver overheats.
-
-// Dual X Steppers
-// Uncomment this option to drive two X axis motors.
-// The next unused E driver will be assigned to the second X stepper.
-//#define X_DUAL_STEPPER_DRIVERS
-#if ENABLED(X_DUAL_STEPPER_DRIVERS)
- // Set true if the two X motors need to rotate in opposite directions
- #define INVERT_X2_VS_X_DIR true
-#endif
-
-
-// Dual Y Steppers
-// Uncomment this option to drive two Y axis motors.
-// The next unused E driver will be assigned to the second Y stepper.
-//#define Y_DUAL_STEPPER_DRIVERS
-#if ENABLED(Y_DUAL_STEPPER_DRIVERS)
- // Set true if the two Y motors need to rotate in opposite directions
- #define INVERT_Y2_VS_Y_DIR true
-#endif
-
-// A single Z stepper driver is usually used to drive 2 stepper motors.
-// Uncomment this option to use a separate stepper driver for each Z axis motor.
-// The next unused E driver will be assigned to the second Z stepper.
-//#define Z_DUAL_STEPPER_DRIVERS
-
-#if ENABLED(Z_DUAL_STEPPER_DRIVERS)
-
- // Z_DUAL_ENDSTOPS is a feature to enable the use of 2 endstops for both Z steppers - Let's call them Z stepper and Z2 stepper.
- // That way the machine is capable to align the bed during home, since both Z steppers are homed.
- // There is also an implementation of M666 (software endstops adjustment) to this feature.
- // After Z homing, this adjustment is applied to just one of the steppers in order to align the bed.
- // One just need to home the Z axis and measure the distance difference between both Z axis and apply the math: Z adjust = Z - Z2.
- // If the Z stepper axis is closer to the bed, the measure Z > Z2 (yes, it is.. think about it) and the Z adjust would be positive.
- // Play a little bit with small adjustments (0.5mm) and check the behaviour.
- // The M119 (endstops report) will start reporting the Z2 Endstop as well.
-
- //#define Z_DUAL_ENDSTOPS
-
- #if ENABLED(Z_DUAL_ENDSTOPS)
- #define Z2_USE_ENDSTOP _XMAX_
- #endif
-
-#endif // Z_DUAL_STEPPER_DRIVERS
-
-// Enable this for dual x-carriage printers.
-// A dual x-carriage design has the advantage that the inactive extruder can be parked which
-// prevents hot-end ooze contaminating the print. It also reduces the weight of each x-carriage
-// allowing faster printing speeds. Connect your X2 stepper to the first unused E plug.
-//#define DUAL_X_CARRIAGE
-#if ENABLED(DUAL_X_CARRIAGE)
- // Configuration for second X-carriage
- // Note: the first x-carriage is defined as the x-carriage which homes to the minimum endstop;
- // the second x-carriage always homes to the maximum endstop.
- #define X2_MIN_POS 80 // set minimum to ensure second x-carriage doesn't hit the parked first X-carriage
- #define X2_MAX_POS 353 // set maximum to the distance between toolheads when both heads are homed
- #define X2_HOME_DIR 1 // the second X-carriage always homes to the maximum endstop position
- #define X2_HOME_POS X2_MAX_POS // default home position is the maximum carriage position
- // However: In this mode the HOTEND_OFFSET_X value for the second extruder provides a software
- // override for X2_HOME_POS. This also allow recalibration of the distance between the two endstops
- // without modifying the firmware (through the "M218 T1 X???" command).
- // Remember: you should set the second extruder x-offset to 0 in your slicer.
-
- // There are a few selectable movement modes for dual x-carriages using M605 S
- // Mode 0: Full control. The slicer has full control over both x-carriages and can achieve optimal travel results
- // as long as it supports dual x-carriages. (M605 S0)
- // Mode 1: Auto-park mode. The firmware will automatically park and unpark the x-carriages on tool changes so
- // that additional slicer support is not required. (M605 S1)
- // Mode 2: Duplication mode. The firmware will transparently make the second x-carriage and extruder copy all
- // actions of the first x-carriage. This allows the printer to print 2 arbitrary items at
- // once. (2nd extruder x offset and temp offset are set using: M605 S2 [Xnnn] [Rmmm])
-
- // This is the default power-up mode which can be later using M605.
- #define DEFAULT_DUAL_X_CARRIAGE_MODE 0
-
- // Default settings in "Auto-park Mode"
- #define TOOLCHANGE_PARK_ZLIFT 0.2 // the distance to raise Z axis when parking an extruder
- #define TOOLCHANGE_UNPARK_ZLIFT 1 // the distance to raise Z axis when unparking an extruder
-
- // Default x offset in duplication mode (typically set to half print bed width)
- #define DEFAULT_DUPLICATION_X_OFFSET 100
-
-#endif //DUAL_X_CARRIAGE
-
-// @section homing
-
-//homing hits the endstop, then retracts by this distance, before it tries to slowly bump again:
-#define X_HOME_BUMP_MM 5
-#define Y_HOME_BUMP_MM 5
-#define Z_HOME_BUMP_MM 2
-#define HOMING_BUMP_DIVISOR {2, 2, 4} // Re-Bump Speed Divisor (Divides the Homing Feedrate)
-//#define QUICK_HOME //if this is defined, if both x and y are to be homed, a diagonal move will be performed initially.
-
-// When G28 is called, this option will make Y home before X
-//#define HOME_Y_BEFORE_X
-
-// @section machine
-
-#define AXIS_RELATIVE_MODES {false, false, false, false}
-
-// Allow duplication mode with a basic dual-nozzle extruder
-//#define DUAL_NOZZLE_DUPLICATION_MODE
-
-// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
-#define INVERT_X_STEP_PIN false
-#define INVERT_Y_STEP_PIN false
-#define INVERT_Z_STEP_PIN false
-#define INVERT_E_STEP_PIN false
-
-// Default stepper release if idle. Set to 0 to deactivate.
-// Steppers will shut down DEFAULT_STEPPER_DEACTIVE_TIME seconds after the last move when DISABLE_INACTIVE_? is true.
-// Time can be set by M18 and M84.
-#define DEFAULT_STEPPER_DEACTIVE_TIME 60
-#define DISABLE_INACTIVE_X true
-#define DISABLE_INACTIVE_Y true
-#define DISABLE_INACTIVE_Z true // set to false if the nozzle will fall down on your printed part when print has finished.
-#define DISABLE_INACTIVE_E true
-
-#define DEFAULT_MINIMUMFEEDRATE 0.0 // minimum feedrate
-#define DEFAULT_MINTRAVELFEEDRATE 0.0
-
-// @section lcd
-
-#if ENABLED(ULTIPANEL)
- #define MANUAL_FEEDRATE {50*60, 50*60, 4*60, 60} // Feedrates for manual moves along X, Y, Z, E from panel
- #define ULTIPANEL_FEEDMULTIPLY // Comment to disable setting feedrate multiplier via encoder
-#endif
-
-// @section extras
-
-// minimum time in microseconds that a movement needs to take if the buffer is emptied.
-#define DEFAULT_MINSEGMENTTIME 20000
-
-// If defined the movements slow down when the look ahead buffer is only half full
-#define SLOWDOWN
-
-// Frequency limit
-// See nophead's blog for more info
-// Not working O
-//#define XY_FREQUENCY_LIMIT 15
-
-// Minimum planner junction speed. Sets the default minimum speed the planner plans for at the end
-// of the buffer and all stops. This should not be much greater than zero and should only be changed
-// if unwanted behavior is observed on a user's machine when running at very slow speeds.
-#define MINIMUM_PLANNER_SPEED 0.05// (mm/sec)
-
-// Microstep setting (Only functional when stepper driver microstep pins are connected to MCU.
-#define MICROSTEP_MODES {16,16,16,16,16} // [1,2,4,8,16]
-
-// Motor Current setting (Only functional when motor driver current ref pins are connected to a digital trimpot on supported boards)
-#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
-
-// Motor Current controlled via PWM (Overridable on supported boards with PWM-driven motor driver current)
-//#define PWM_MOTOR_CURRENT {1300, 1300, 1250} // Values in milliamps
-
-// uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
-//#define DIGIPOT_I2C
-// Number of channels available for I2C digipot, For Azteeg X3 Pro we have 8
-#define DIGIPOT_I2C_NUM_CHANNELS 8
-// actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
-#define DIGIPOT_I2C_MOTOR_CURRENTS {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}
-
-//===========================================================================
-//=============================Additional Features===========================
-//===========================================================================
-
-//#define ENCODER_RATE_MULTIPLIER // If defined, certain menu edit operations automatically multiply the steps when the encoder is moved quickly
-//#define ENCODER_10X_STEPS_PER_SEC 75 // If the encoder steps per sec exceeds this value, multiply steps moved x10 to quickly advance the value
-//#define ENCODER_100X_STEPS_PER_SEC 160 // If the encoder steps per sec exceeds this value, multiply steps moved x100 to really quickly advance the value
-
-//#define CHDK 4 //Pin for triggering CHDK to take a picture see how to use it here http://captain-slow.dk/2014/03/09/3d-printing-timelapses/
-#define CHDK_DELAY 50 //How long in ms the pin should stay HIGH before going LOW again
-
-// @section lcd
-
-// Include a page of printer information in the LCD Main Menu
-//#define LCD_INFO_MENU
-
-#if ENABLED(SDSUPPORT)
-
- // Some RAMPS and other boards don't detect when an SD card is inserted. You can work
- // around this by connecting a push button or single throw switch to the pin defined
- // as SD_DETECT_PIN in your board's pins definitions.
- // This setting should be disabled unless you are using a push button, pulling the pin to ground.
- // Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
- #define SD_DETECT_INVERTED
-
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
- #define SD_FINISHED_RELEASECOMMAND "M84 X Y Z E" // You might want to keep the z enabled so your bed stays in place.
-
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
- //#define MENU_ADDAUTOSTART
-
- // Show a progress bar on HD44780 LCDs for SD printing
- //#define LCD_PROGRESS_BAR
-
- #if ENABLED(LCD_PROGRESS_BAR)
- // Amount of time (ms) to show the bar
- #define PROGRESS_BAR_BAR_TIME 2000
- // Amount of time (ms) to show the status message
- #define PROGRESS_BAR_MSG_TIME 3000
- // Amount of time (ms) to retain the status message (0=forever)
- #define PROGRESS_MSG_EXPIRE 0
- // Enable this to show messages for MSG_TIME then hide them
- //#define PROGRESS_MSG_ONCE
- #endif
-
- // This allows hosts to request long names for files and folders with M33
- //#define LONG_FILENAME_HOST_SUPPORT
-
- // This option allows you to abort SD printing when any endstop is triggered.
- // This feature must be enabled with "M540 S1" or from the LCD menu.
- // To have any effect, endstops must be enabled during SD printing.
- //#define ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED
-
-#endif // SDSUPPORT
-
-// for dogm lcd displays you can choose some additional fonts:
-#if ENABLED(DOGLCD)
- // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT
- // we don't have a big font for Cyrillic, Kana
- //#define USE_BIG_EDIT_FONT
-
- // If you have spare 2300Byte of progmem and want to use a
- // smaller font on the Info-screen uncomment the next line.
- //#define USE_SMALL_INFOFONT
-#endif // DOGLCD
-
-// @section safety
-
-// The hardware watchdog should reset the microcontroller disabling all outputs,
-// in case the firmware gets stuck and doesn't do temperature regulation.
-#define USE_WATCHDOG
-
-#if ENABLED(USE_WATCHDOG)
- // If you have a watchdog reboot in an ArduinoMega2560 then the device will hang forever, as a watchdog reset will leave the watchdog on.
- // The "WATCHDOG_RESET_MANUAL" goes around this by not using the hardware reset.
- // However, THIS FEATURE IS UNSAFE!, as it will only work if interrupts are disabled. And the code could hang in an interrupt routine with interrupts disabled.
- //#define WATCHDOG_RESET_MANUAL
-#endif
-
-// @section lcd
-
-// Babystepping enables the user to control the axis in tiny amounts, independently from the normal printing process
-// it can e.g. be used to change z-positions in the print startup phase in real-time
-// does not respect endstops!
-//#define BABYSTEPPING
-#if ENABLED(BABYSTEPPING)
- #define BABYSTEP_XY //not only z, but also XY in the menu. more clutter, more functions
- //not implemented for deltabots!
- #define BABYSTEP_INVERT_Z false //true for inverse movements in Z
- #define BABYSTEP_MULTIPLICATOR 1 //faster movements
-#endif
-
-// @section extruder
-
-// extruder advance constant (s2/mm3)
-//
-// advance (steps) = STEPS_PER_CUBIC_MM_E * EXTRUDER_ADVANCE_K * cubic mm per second ^ 2
-//
-// Hooke's law says: force = k * distance
-// Bernoulli's principle says: v ^ 2 / 2 + g . h + pressure / density = constant
-// so: v ^ 2 is proportional to number of steps we advance the extruder
-//#define ADVANCE
-
-#if ENABLED(ADVANCE)
- #define EXTRUDER_ADVANCE_K .0
- #define D_FILAMENT 1.75
-#endif
-
-// Implementation of a linear pressure control
-// Assumption: advance = k * (delta velocity)
-// K=0 means advance disabled. A good value for a gregs wade extruder will be around K=75
-//#define LIN_ADVANCE
-
-#if ENABLED(LIN_ADVANCE)
- #define LIN_ADVANCE_K 75
-#endif
-
-// @section leveling
-
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #define MESH_MIN_X (X_MIN_POS + MESH_INSET)
- #define MESH_MAX_X (X_MAX_POS - (MESH_INSET))
- #define MESH_MIN_Y (Y_MIN_POS + MESH_INSET)
- #define MESH_MAX_Y (Y_MAX_POS - (MESH_INSET))
-#endif
-
-// @section extras
-
-// Arc interpretation settings:
-#define ARC_SUPPORT // Disabling this saves ~2738 bytes
-#define MM_PER_ARC_SEGMENT 1
-#define N_ARC_CORRECTION 25
-
-// Support for G5 with XYZE destination and IJPQ offsets. Requires ~2666 bytes.
-//#define BEZIER_CURVE_SUPPORT
-
-const unsigned int dropsegments = 5; //everything with less than this number of steps will be ignored as move and joined with the next movement
-
-// @section temperature
-
-// Control heater 0 and heater 1 in parallel.
-//#define HEATERS_PARALLEL
-
-//===========================================================================
-//================================= Buffers =================================
-//===========================================================================
-
-// @section hidden
-
-// The number of linear motions that can be in the plan at any give time.
-// THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2, i.g. 8,16,32 because shifts and ors are used to do the ring-buffering.
-#if ENABLED(SDSUPPORT)
- #define BLOCK_BUFFER_SIZE 16 // SD,LCD,Buttons take more memory, block buffer needs to be smaller
-#else
- #define BLOCK_BUFFER_SIZE 16 // maximize block buffer
-#endif
-
-// @section serial
-
-// The ASCII buffer for serial input
-#define MAX_CMD_SIZE 96
-#define BUFSIZE 8
-
-// Transfer Buffer Size
-// To save 386 bytes of PROGMEM (and TX_BUFFER_SIZE+3 bytes of RAM) set to 0.
-// To buffer a simple "ok" you need 4 bytes.
-// For ADVANCED_OK (M105) you need 32 bytes.
-// For debug-echo: 128 bytes for the optimal speed.
-// Other output doesn't need to be that speedy.
-// :[0,2,4,8,16,32,64,128,256]
-#define TX_BUFFER_SIZE 0
-
-// Enable an emergency-command parser to intercept certain commands as they
-// enter the serial receive buffer, so they cannot be blocked.
-// Currently handles M108, M112, M410
-// Does not work on boards using AT90USB (USBCON) processors!
-//#define EMERGENCY_PARSER
-
-// Bad Serial-connections can miss a received command by sending an 'ok'
-// Therefore some clients abort after 30 seconds in a timeout.
-// Some other clients start sending commands while receiving a 'wait'.
-// This "wait" is only sent when the buffer is empty. 1 second is a good value here.
-//#define NO_TIMEOUTS 1000 // Milliseconds
-
-// Some clients will have this feature soon. This could make the NO_TIMEOUTS unnecessary.
-//#define ADVANCED_OK
-
-// @section fwretract
-
-// Firmware based and LCD controlled retract
-// M207 and M208 can be used to define parameters for the retraction.
-// The retraction can be called by the slicer using G10 and G11
-// until then, intended retractions can be detected by moves that only extrude and the direction.
-// the moves are than replaced by the firmware controlled ones.
-
-//#define FWRETRACT //ONLY PARTIALLY TESTED
-#if ENABLED(FWRETRACT)
- #define MIN_RETRACT 0.1 //minimum extruded mm to accept a automatic gcode retraction attempt
- #define RETRACT_LENGTH 3 //default retract length (positive mm)
- #define RETRACT_LENGTH_SWAP 13 //default swap retract length (positive mm), for extruder change
- #define RETRACT_FEEDRATE 45 //default feedrate for retracting (mm/s)
- #define RETRACT_ZLIFT 0 //default retract Z-lift
- #define RETRACT_RECOVER_LENGTH 0 //default additional recover length (mm, added to retract length when recovering)
- #define RETRACT_RECOVER_LENGTH_SWAP 0 //default additional swap recover length (mm, added to retract length when recovering from extruder change)
- #define RETRACT_RECOVER_FEEDRATE 8 //default feedrate for recovering from retraction (mm/s)
-#endif
-
-// Add support for experimental filament exchange support M600; requires display
-#if ENABLED(ULTIPANEL)
- // #define FILAMENT_CHANGE_FEATURE // Enable filament exchange menu and M600 g-code (used for runout sensor too)
- #if ENABLED(FILAMENT_CHANGE_FEATURE)
- #define FILAMENT_CHANGE_X_POS 3 // X position of hotend
- #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend
- #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift)
- #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
- #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers)
- #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm
- // It is a short retract used immediately after print interrupt before move to filament exchange position
- #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
- #define FILAMENT_CHANGE_UNLOAD_LENGTH 100 // Unload filament length from hotend in mm
- // Longer length for bowden printers to unload filament from whole bowden tube,
- // shorter lenght for printers without bowden to unload filament from extruder only,
- // 0 to disable unloading for manual unloading
- #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast
- #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm
- // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
- // Short or zero length for printers without bowden where loading is not used
- #define FILAMENT_CHANGE_LOAD_FEEDRATE 10 // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
- #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is load over the hotend,
- // 0 to disable for manual extrusion
- // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
- // or until outcoming filament color is not clear for filament color change
- #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
- #endif
-#endif
-
-/******************************************************************************\
- * enable this section if you have TMC26X motor drivers.
- * you need to import the TMC26XStepper library into the Arduino IDE for this
- ******************************************************************************/
-
-// @section tmc
-
-//#define HAVE_TMCDRIVER
-#if ENABLED(HAVE_TMCDRIVER)
-
- //#define X_IS_TMC
- #define X_MAX_CURRENT 1000 //in mA
- #define X_SENSE_RESISTOR 91 //in mOhms
- #define X_MICROSTEPS 16 //number of microsteps
-
- //#define X2_IS_TMC
- #define X2_MAX_CURRENT 1000 //in mA
- #define X2_SENSE_RESISTOR 91 //in mOhms
- #define X2_MICROSTEPS 16 //number of microsteps
-
- //#define Y_IS_TMC
- #define Y_MAX_CURRENT 1000 //in mA
- #define Y_SENSE_RESISTOR 91 //in mOhms
- #define Y_MICROSTEPS 16 //number of microsteps
-
- //#define Y2_IS_TMC
- #define Y2_MAX_CURRENT 1000 //in mA
- #define Y2_SENSE_RESISTOR 91 //in mOhms
- #define Y2_MICROSTEPS 16 //number of microsteps
-
- //#define Z_IS_TMC
- #define Z_MAX_CURRENT 1000 //in mA
- #define Z_SENSE_RESISTOR 91 //in mOhms
- #define Z_MICROSTEPS 16 //number of microsteps
-
- //#define Z2_IS_TMC
- #define Z2_MAX_CURRENT 1000 //in mA
- #define Z2_SENSE_RESISTOR 91 //in mOhms
- #define Z2_MICROSTEPS 16 //number of microsteps
-
- //#define E0_IS_TMC
- #define E0_MAX_CURRENT 1000 //in mA
- #define E0_SENSE_RESISTOR 91 //in mOhms
- #define E0_MICROSTEPS 16 //number of microsteps
-
- //#define E1_IS_TMC
- #define E1_MAX_CURRENT 1000 //in mA
- #define E1_SENSE_RESISTOR 91 //in mOhms
- #define E1_MICROSTEPS 16 //number of microsteps
-
- //#define E2_IS_TMC
- #define E2_MAX_CURRENT 1000 //in mA
- #define E2_SENSE_RESISTOR 91 //in mOhms
- #define E2_MICROSTEPS 16 //number of microsteps
-
- //#define E3_IS_TMC
- #define E3_MAX_CURRENT 1000 //in mA
- #define E3_SENSE_RESISTOR 91 //in mOhms
- #define E3_MICROSTEPS 16 //number of microsteps
-
-#endif
-
-/******************************************************************************\
- * enable this section if you have L6470 motor drivers.
- * you need to import the L6470 library into the Arduino IDE for this
- ******************************************************************************/
-
-// @section l6470
-
-//#define HAVE_L6470DRIVER
-#if ENABLED(HAVE_L6470DRIVER)
-
- //#define X_IS_L6470
- #define X_MICROSTEPS 16 //number of microsteps
- #define X_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define X_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define X_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define X2_IS_L6470
- #define X2_MICROSTEPS 16 //number of microsteps
- #define X2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define X2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define X2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Y_IS_L6470
- #define Y_MICROSTEPS 16 //number of microsteps
- #define Y_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Y_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Y_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Y2_IS_L6470
- #define Y2_MICROSTEPS 16 //number of microsteps
- #define Y2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Y2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Y2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Z_IS_L6470
- #define Z_MICROSTEPS 16 //number of microsteps
- #define Z_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Z_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Z_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Z2_IS_L6470
- #define Z2_MICROSTEPS 16 //number of microsteps
- #define Z2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Z2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Z2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E0_IS_L6470
- #define E0_MICROSTEPS 16 //number of microsteps
- #define E0_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E0_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E0_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E1_IS_L6470
- #define E1_MICROSTEPS 16 //number of microsteps
- #define E1_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E1_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E1_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E2_IS_L6470
- #define E2_MICROSTEPS 16 //number of microsteps
- #define E2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E3_IS_L6470
- #define E3_MICROSTEPS 16 //number of microsteps
- #define E3_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E3_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E3_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
-#endif
-
-/**
- * TWI/I2C BUS
- *
- * This feature is an EXPERIMENTAL feature so it shall not be used on production
- * machines. Enabling this will allow you to send and receive I2C data from slave
- * devices on the bus.
- *
- * ; Example #1
- * ; This macro send the string "Marlin" to the slave device with address 0x63 (99)
- * ; It uses multiple M155 commands with one B arg
- * M155 A99 ; Target slave address
- * M155 B77 ; M
- * M155 B97 ; a
- * M155 B114 ; r
- * M155 B108 ; l
- * M155 B105 ; i
- * M155 B110 ; n
- * M155 S1 ; Send the current buffer
- *
- * ; Example #2
- * ; Request 6 bytes from slave device with address 0x63 (99)
- * M156 A99 B5
- *
- * ; Example #3
- * ; Example serial output of a M156 request
- * echo:i2c-reply: from:99 bytes:5 data:hello
- */
-
-// @section i2cbus
-
-//#define EXPERIMENTAL_I2CBUS
-
-#endif // CONFIGURATION_ADV_H
diff --git a/Marlin/example_configurations/SCARA/Configuration.h b/Marlin/example_configurations/SCARA/Configuration.h
deleted file mode 100644
index bc60b75..0000000
--- a/Marlin/example_configurations/SCARA/Configuration.h
+++ /dev/null
@@ -1,1335 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Configuration.h
- *
- * Basic settings such as:
- *
- * - Type of electronics
- * - Type of temperature sensor
- * - Printer geometry
- * - Endstop configuration
- * - LCD controller
- * - Extra features
- *
- * Advanced settings can be found in Configuration_adv.h
- *
- */
-#ifndef CONFIGURATION_H
-#define CONFIGURATION_H
-
-/**
- *
- * ***********************************
- * ** ATTENTION TO ALL DEVELOPERS **
- * ***********************************
- *
- * You must increment this version number for every significant change such as,
- * but not limited to: ADD, DELETE RENAME OR REPURPOSE any directive/option.
- *
- * Note: Update also Version.h !
- */
-#define CONFIGURATION_H_VERSION 010100
-
-//===========================================================================
-//============================= Getting Started =============================
-//===========================================================================
-
-/**
- * Here are some standard links for getting your machine calibrated:
- *
- * http://reprap.org/wiki/Calibration
- * http://youtu.be/wAL9d7FgInk
- * http://calculator.josefprusa.cz
- * http://reprap.org/wiki/Triffid_Hunter%27s_Calibration_Guide
- * http://www.thingiverse.com/thing:5573
- * https://sites.google.com/site/repraplogphase/calibration-of-your-reprap
- * http://www.thingiverse.com/thing:298812
- */
-
-//===========================================================================
-//============================= DELTA Printer ===============================
-//===========================================================================
-// For a Delta printer replace the configuration files with the files in the
-// example_configurations/delta directory.
-//
-
-//===========================================================================
-//========================= SCARA Settings ==================================
-//===========================================================================
-// SCARA-mode for Marlin has been developed by QHARLEY in ZA in 2012/2013. Implemented
-// and slightly reworked by JCERNY in 06/2014 with the goal to bring it into Master-Branch
-// QHARLEYS Autobedlevelling has not been ported, because Marlin has now Bed-levelling
-// You might need Z-Min endstop on SCARA-Printer to use this feature. Actually untested!
-// Uncomment to use Morgan scara mode
-#define SCARA
-#define SCARA_SEGMENTS_PER_SECOND 200 // If movement is choppy try lowering this value
-// Length of inner support arm
-#define Linkage_1 150 //mm Preprocessor cannot handle decimal point...
-// Length of outer support arm Measure arm lengths precisely and enter
-#define Linkage_2 150 //mm
-
-// SCARA tower offset (position of Tower relative to bed zero position)
-// This needs to be reasonably accurate as it defines the printbed position in the SCARA space.
-#define SCARA_offset_x 100 //mm
-#define SCARA_offset_y -56 //mm
-#define SCARA_RAD2DEG 57.2957795 // to convert RAD to degrees
-
-#define THETA_HOMING_OFFSET 0 //calculatated from Calibration Guide and command M360 / M114 see picture in http://reprap.harleystudio.co.za/?page_id=1073
-#define PSI_HOMING_OFFSET 0 //calculatated from Calibration Guide and command M364 / M114 see picture in http://reprap.harleystudio.co.za/?page_id=1073
-
-//some helper variables to make kinematics faster
-#define L1_2 sq(Linkage_1) // do not change
-#define L2_2 sq(Linkage_2) // do not change
-
-//===========================================================================
-//========================= SCARA Settings end ==============================
-//===========================================================================
-
-// @section info
-
-// User-specified version info of this build to display in [Pronterface, etc] terminal window during
-// startup. Implementation of an idea by Prof Braino to inform user that any changes made to this
-// build by the user have been successfully uploaded into firmware.
-#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
-#define SHOW_BOOTSCREEN
-#define STRING_SPLASH_LINE1 SHORT_BUILD_VERSION // will be shown during boot in line 1
-#define STRING_SPLASH_LINE2 WEBSITE_URL // will be shown during boot in line 2
-
-//
-// *** VENDORS PLEASE READ *****************************************************
-//
-// Marlin now allow you to have a vendor boot image to be displayed on machine
-// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
-//
-// We suggest for you to take advantage of this new feature and keep the Marlin
-// boot image unmodified. For an example have a look at the bq Hephestos 2
-// example configuration folder.
-//
-//#define SHOW_CUSTOM_BOOTSCREEN
-// @section machine
-
-// SERIAL_PORT selects which serial port should be used for communication with the host.
-// This allows the connection of wireless adapters (for instance) to non-default port pins.
-// Serial port 0 is still used by the Arduino bootloader regardless of this setting.
-// :[0,1,2,3,4,5,6,7]
-#define SERIAL_PORT 0
-
-// This determines the communication speed of the printer
-// :[2400,9600,19200,38400,57600,115200,250000]
-#define BAUDRATE 250000
-
-// Enable the Bluetooth serial interface on AT90USB devices
-//#define BLUETOOTH
-
-// The following define selects which electronics board you have.
-// Please choose the name from boards.h that matches your setup
-#ifndef MOTHERBOARD
- #define MOTHERBOARD BOARD_RAMPS_14_EFB
-#endif
-
-// Optional custom name for your RepStrap or other custom machine
-// Displayed in the LCD "Ready" message
-//#define CUSTOM_MACHINE_NAME "3D Printer"
-
-// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
-// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
-//#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
-
-// This defines the number of extruders
-// :[1,2,3,4]
-#define EXTRUDERS 1
-
-// For Cyclops or any "multi-extruder" that shares a single nozzle.
-//#define SINGLENOZZLE
-
-// A dual extruder that uses a single stepper motor
-// Don't forget to set SSDE_SERVO_ANGLES and HOTEND_OFFSET_X/Y/Z
-//#define SWITCHING_EXTRUDER
-#if ENABLED(SWITCHING_EXTRUDER)
- #define SWITCHING_EXTRUDER_SERVO_NR 0
- #define SWITCHING_EXTRUDER_SERVO_ANGLES { 0, 90 } // Angles for E0, E1
- //#define HOTEND_OFFSET_Z {0.0, 0.0}
-#endif
-
-/**
- * "Mixing Extruder"
- * - Adds a new code, M165, to set the current mix factors.
- * - Extends the stepping routines to move multiple steppers in proportion to the mix.
- * - Optional support for Repetier Host M163, M164, and virtual extruder.
- * - This implementation supports only a single extruder.
- * - Enable DIRECT_MIXING_IN_G1 for Pia Taubert's reference implementation
- */
-//#define MIXING_EXTRUDER
-#if ENABLED(MIXING_EXTRUDER)
- #define MIXING_STEPPERS 2 // Number of steppers in your mixing extruder
- #define MIXING_VIRTUAL_TOOLS 16 // Use the Virtual Tool method with M163 and M164
- //#define DIRECT_MIXING_IN_G1 // Allow ABCDHI mix factors in G1 movement commands
-#endif
-
-// Offset of the extruders (uncomment if using more than one and relying on firmware to position when changing).
-// The offset has to be X=0, Y=0 for the extruder 0 hotend (default extruder).
-// For the other hotends it is their distance from the extruder 0 hotend.
-//#define HOTEND_OFFSET_X {0.0, 20.00} // (in mm) for each extruder, offset of the hotend on the X axis
-//#define HOTEND_OFFSET_Y {0.0, 5.00} // (in mm) for each extruder, offset of the hotend on the Y axis
-
-//// The following define selects which power supply you have. Please choose the one that matches your setup
-// 1 = ATX
-// 2 = X-Box 360 203Watts (the blue wire connected to PS_ON and the red wire to VCC)
-// :{1:'ATX',2:'X-Box 360'}
-#define POWER_SUPPLY 1
-
-// Define this to have the electronics keep the power supply off on startup. If you don't know what this is leave it.
-//#define PS_DEFAULT_OFF
-
-// @section temperature
-
-//===========================================================================
-//============================= Thermal Settings ============================
-//===========================================================================
-//
-//--NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table
-//
-//// Temperature sensor settings:
-// -3 is thermocouple with MAX31855 (only for sensor 0)
-// -2 is thermocouple with MAX6675 (only for sensor 0)
-// -1 is thermocouple with AD595
-// 0 is not used
-// 1 is 100k thermistor - best choice for EPCOS 100k (4.7k pullup)
-// 2 is 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)
-// 3 is Mendel-parts thermistor (4.7k pullup)
-// 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !!
-// 5 is 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup)
-// 6 is 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup)
-// 7 is 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup)
-// 71 is 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup)
-// 8 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup)
-// 9 is 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup)
-// 10 is 100k RS thermistor 198-961 (4.7k pullup)
-// 11 is 100k beta 3950 1% thermistor (4.7k pullup)
-// 12 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed)
-// 13 is 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE"
-// 20 is the PT100 circuit found in the Ultimainboard V2.x
-// 60 is 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
-// 66 is 4.7M High Temperature thermistor from Dyze Design
-// 70 is the 100K thermistor found in the bq Hephestos 2
-//
-// 1k ohm pullup tables - This is not normal, you would have to have changed out your 4.7k for 1k
-// (but gives greater accuracy and more stable PID)
-// 51 is 100k thermistor - EPCOS (1k pullup)
-// 52 is 200k thermistor - ATC Semitec 204GT-2 (1k pullup)
-// 55 is 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup)
-//
-// 1047 is Pt1000 with 4k7 pullup
-// 1010 is Pt1000 with 1k pullup (non standard)
-// 147 is Pt100 with 4k7 pullup
-// 110 is Pt100 with 1k pullup (non standard)
-// 998 and 999 are Dummy Tables. They will ALWAYS read 25°C or the temperature defined below.
-// Use it for Testing or Development purposes. NEVER for production machine.
-//#define DUMMY_THERMISTOR_998_VALUE 25
-//#define DUMMY_THERMISTOR_999_VALUE 100
-// :{ '0': "Not used",'1':"100k / 4.7k - EPCOS",'2':"200k / 4.7k - ATC Semitec 204GT-2",'3':"Mendel-parts / 4.7k",'4':"10k !! do not use for a hotend. Bad resolution at high temp. !!",'5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)",'6':"100k / 4.7k EPCOS - Not as accurate as Table 1",'7':"100k / 4.7k Honeywell 135-104LAG-J01",'8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT",'9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1",'10':"100k / 4.7k RS 198-961",'11':"100k / 4.7k beta 3950 1%",'12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)",'13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'",'20':"PT100 (Ultimainboard V2.x)",'51':"100k / 1k - EPCOS",'52':"200k / 1k - ATC Semitec 204GT-2",'55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)",'60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950",'66':"Dyze Design 4.7M High Temperature thermistor",'70':"the 100K thermistor found in the bq Hephestos 2",'71':"100k / 4.7k Honeywell 135-104LAF-J01",'147':"Pt100 / 4.7k",'1047':"Pt1000 / 4.7k",'110':"Pt100 / 1k (non-standard)",'1010':"Pt1000 / 1k (non standard)",'-3':"Thermocouple + MAX31855 (only for sensor 0)",'-2':"Thermocouple + MAX6675 (only for sensor 0)",'-1':"Thermocouple + AD595",'998':"Dummy 1",'999':"Dummy 2" }
-#define TEMP_SENSOR_0 1
-#define TEMP_SENSOR_1 0
-#define TEMP_SENSOR_2 0
-#define TEMP_SENSOR_3 0
-#define TEMP_SENSOR_BED 1
-
-// This makes temp sensor 1 a redundant sensor for sensor 0. If the temperatures difference between these sensors is to high the print will be aborted.
-//#define TEMP_SENSOR_1_AS_REDUNDANT
-#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 10
-
-// Extruder temperature must be close to target for this long before M109 returns success
-#define TEMP_RESIDENCY_TIME 3 // (seconds)
-#define TEMP_HYSTERESIS 2 // (degC) range of +/- temperatures considered "close" to the target one
-#define TEMP_WINDOW 1 // (degC) Window around target to start the residency timer x degC early.
-
-// Bed temperature must be close to target for this long before M190 returns success
-#define TEMP_BED_RESIDENCY_TIME 0 // (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.
-
-// The minimal temperature defines the temperature below which the heater will not be enabled It is used
-// to check that the wiring to the thermistor is not broken.
-// Otherwise this would lead to the heater being powered on all the time.
-#define HEATER_0_MINTEMP 5
-#define HEATER_1_MINTEMP 5
-#define HEATER_2_MINTEMP 5
-#define HEATER_3_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 275
-#define HEATER_1_MAXTEMP 275
-#define HEATER_2_MAXTEMP 275
-#define HEATER_3_MAXTEMP 275
-#define BED_MAXTEMP 150
-
-//===========================================================================
-//============================= PID Settings ================================
-//===========================================================================
-// PID Tuning Guide here: http://reprap.org/wiki/PID_Tuning
-
-// Comment the following line to disable PID and enable bang-bang.
-#define PIDTEMP
-#define BANG_MAX 255 // limits current to nozzle while in bang-bang mode; 255=full current
-#define PID_MAX BANG_MAX // limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
-#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
- //#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
- // Set/get with gcode: M301 E[extruder number, 0-2]
- #define PID_FUNCTIONAL_RANGE 20 // If the temperature difference between the target temperature and the actual temperature
- // is more than PID_FUNCTIONAL_RANGE then the PID will be shut off and the heater will be set to min/max.
- #define PID_INTEGRAL_DRIVE_MAX PID_MAX //limit for the integral term
- #define K1 0.95 //smoothing factor within the PID
-
- // Merlin Hotend: From Autotune
- #define DEFAULT_Kp 24.5
- #define DEFAULT_Ki 1.72
- #define DEFAULT_Kd 87.73
-
-#endif // PIDTEMP
-
-//===========================================================================
-//============================= PID > Bed Temperature Control ===============
-//===========================================================================
-// Select PID or bang-bang with PIDTEMPBED. If bang-bang, BED_LIMIT_SWITCHING will enable hysteresis
-//
-// Uncomment this to enable PID on the bed. It uses the same frequency PWM as the extruder.
-// If your PID_dT is the default, and correct for your hardware/configuration, that means 7.689Hz,
-// which is fine for driving a square wave into a resistive load and does not significantly impact you FET heating.
-// This also works fine on a Fotek SSR-10DA Solid State Relay into a 250W heater.
-// If your configuration is significantly different than this and you don't understand the issues involved, you probably
-// shouldn't use bed PID until someone else verifies your hardware works.
-// If this is enabled, find your own PID constants below.
-#define PIDTEMPBED
-
-//#define BED_LIMIT_SWITCHING
-
-// This sets the max power delivered to the bed, and replaces the HEATER_BED_DUTY_CYCLE_DIVIDER option.
-// all forms of bed control obey this (PID, bang-bang, bang-bang with hysteresis)
-// setting this to anything other than 255 enables a form of PWM to the bed just like HEATER_BED_DUTY_CYCLE_DIVIDER did,
-// so you shouldn't use it unless you are OK with PWM on your bed. (see the comment on enabling PIDTEMPBED)
-#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current
-
-#if ENABLED(PIDTEMPBED)
-
- //#define PID_BED_DEBUG // Sends debug data to the serial port.
-
- #define PID_BED_INTEGRAL_DRIVE_MAX MAX_BED_POWER //limit for the integral term
-
- //12v Heatbed Mk3 12V in parallel
- //from pidautotune
- #define DEFAULT_bedKp 630.14
- #define DEFAULT_bedKi 121.71
- #define DEFAULT_bedKd 815.64
-
- // FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles.
-#endif // PIDTEMPBED
-
-// @section extruder
-
-//this prevents dangerous Extruder moves, i.e. if the temperature is under the limit
-//can be software-disabled for whatever purposes by
-//#define PREVENT_DANGEROUS_EXTRUDE
-//if PREVENT_DANGEROUS_EXTRUDE is on, you can still disable (uncomment) very long bits of extrusion separately.
-#define PREVENT_LENGTHY_EXTRUDE
-
-#define EXTRUDE_MINTEMP 150
-#define EXTRUDE_MAXLENGTH (X_MAX_LENGTH+Y_MAX_LENGTH) //prevent extrusion of very large distances.
-
-//===========================================================================
-//======================== Thermal Runaway Protection =======================
-//===========================================================================
-
-/**
- * Thermal Protection protects your printer from damage and fire if a
- * thermistor falls out or temperature sensors fail in any way.
- *
- * The issue: If a thermistor falls out or a temperature sensor fails,
- * Marlin can no longer sense the actual temperature. Since a disconnected
- * thermistor reads as a low temperature, the firmware will keep the heater on.
- *
- * If you get "Thermal Runaway" or "Heating failed" errors the
- * details can be tuned in Configuration_adv.h
- */
-
-#define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders
-#define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed
-
-//===========================================================================
-//============================= Mechanical Settings =========================
-//===========================================================================
-
-// @section machine
-
-// Uncomment one of these options to enable CoreXY, CoreXZ, or CoreYZ kinematics
-//#define COREXY
-//#define COREXZ
-//#define COREYZ
-
-// Enable this option for Toshiba steppers
-//#define CONFIG_STEPPERS_TOSHIBA
-
-//===========================================================================
-//============================== Endstop Settings ===========================
-//===========================================================================
-
-// @section homing
-
-// Specify here all the endstop connectors that are connected to any endstop or probe.
-// Almost all printers will be using one per axis. Probes will use one or more of the
-// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
-#define USE_XMIN_PLUG
-#define USE_YMIN_PLUG
-//#define USE_ZMIN_PLUG
-//#define USE_XMAX_PLUG
-//#define USE_YMAX_PLUG
-#define USE_ZMAX_PLUG
-
-// coarse Endstop Settings
-//#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
-
-#if DISABLED(ENDSTOPPULLUPS)
- // fine endstop settings: Individual pullups. will be ignored if ENDSTOPPULLUPS is defined
- //#define ENDSTOPPULLUP_XMAX
- //#define ENDSTOPPULLUP_YMAX
- #define ENDSTOPPULLUP_ZMAX // open pin, inverted
- #define ENDSTOPPULLUP_XMIN // open pin, inverted
- #define ENDSTOPPULLUP_YMIN // open pin, inverted
- //#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 // set to true to invert the logic of the endstop.
-#define Y_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Z_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define X_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Y_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Z_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
-#define Z_MIN_PROBE_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
-
-//===========================================================================
-//============================= Z Probe Options =============================
-//===========================================================================
-
-//
-// Probe Type
-// Probes are sensors/switches that are activated / deactivated before/after use.
-//
-// Allen Key Probes, Servo Probes, Z-Sled Probes, FIX_MOUNTED_PROBE, etc.
-// You must activate one of these to use AUTO_BED_LEVELING_FEATURE below.
-//
-// Use M851 to set the Z probe vertical offset from the nozzle. Store with M500.
-//
-
-// A Fix-Mounted Probe either doesn't deploy or needs manual deployment.
-// For example an inductive probe, or a setup that uses the nozzle to probe.
-// An inductive probe must be deactivated to go below
-// its trigger-point if hardware endstops are active.
-//#define FIX_MOUNTED_PROBE
-
-// The BLTouch probe emulates a servo probe.
-//#define BLTOUCH
-
-// Z Servo Probe, such as an endstop switch on a rotating arm.
-//#define Z_ENDSTOP_SERVO_NR 0
-//#define Z_SERVO_ANGLES {70,0} // Z Servo Deploy and Stow angles
-
-// Enable if you have a Z probe mounted on a sled like those designed by Charles Bell.
-//#define Z_PROBE_SLED
-//#define SLED_DOCKING_OFFSET 5 // The extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.
-
-// Z Probe to nozzle (X,Y) offset, relative to (0, 0).
-// X and Y offsets must be integers.
-//
-// In the following example the X and Y offsets are both positive:
-// #define X_PROBE_OFFSET_FROM_EXTRUDER 10
-// #define Y_PROBE_OFFSET_FROM_EXTRUDER 10
-//
-// +-- BACK ---+
-// | |
-// L | (+) P | R <-- probe (20,20)
-// E | | I
-// F | (-) N (+) | G <-- nozzle (10,10)
-// T | | H
-// | (-) | T
-// | |
-// O-- FRONT --+
-// (0,0)
-#define X_PROBE_OFFSET_FROM_EXTRUDER -25 // X offset: -left +right [of the nozzle]
-#define Y_PROBE_OFFSET_FROM_EXTRUDER -29 // Y offset: -front +behind [the nozzle]
-#define Z_PROBE_OFFSET_FROM_EXTRUDER -12.35 // Z offset: -below +above [the nozzle]
-
-// X and Y axis travel speed (mm/m) between probes
-#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
-#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
-// Speed for the "accurate" probe of each point
-#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
-
-//
-// Allen Key Probe is defined in the Delta example configurations.
-//
-
-// Enable Z_MIN_PROBE_ENDSTOP to use _both_ a Z Probe and a Z-min-endstop on the same machine.
-// With this option the Z_MIN_PROBE_PIN will only be used for probing, never for homing.
-//
-// *** PLEASE READ ALL INSTRUCTIONS BELOW FOR SAFETY! ***
-//
-// To continue using the Z-min-endstop for homing, be sure to disable Z_SAFE_HOMING.
-// Example: To park the head outside the bed area when homing with G28.
-//
-// To use a separate Z probe, your board must define a Z_MIN_PROBE_PIN.
-//
-// For a servo-based Z probe, you must set up servo support below, including
-// NUM_SERVOS, Z_ENDSTOP_SERVO_NR and Z_SERVO_ANGLES.
-//
-// - RAMPS 1.3/1.4 boards may be able to use the 5V, GND, and Aux4->D32 pin.
-// - Use 5V for powered (usu. inductive) sensors.
-// - Otherwise connect:
-// - normally-closed switches to GND and D32.
-// - normally-open switches to 5V and D32.
-//
-// Normally-closed switches are advised and are the default.
-//
-// The Z_MIN_PROBE_PIN sets the Arduino pin to use. (See your board's pins file.)
-// Since the RAMPS Aux4->D32 pin maps directly to the Arduino D32 pin, D32 is the
-// default pin for all RAMPS-based boards. Some other boards map differently.
-// To set or change the pin for your board, edit the appropriate pins_XXXXX.h file.
-//
-// WARNING:
-// Setting the wrong pin may have unexpected and potentially disastrous consequences.
-// Use with caution and do your homework.
-//
-//#define Z_MIN_PROBE_ENDSTOP
-
-// Enable Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN to use the Z_MIN_PIN for your Z_MIN_PROBE.
-// The Z_MIN_PIN will then be used for both Z-homing and probing.
-#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
-
-// To use a probe you must enable one of the two options above!
-
-// This option disables the use of the Z_MIN_PROBE_PIN
-// To enable the Z probe pin but disable its use, uncomment the line below. This only affects a
-// Z probe switch if you have a separate Z min endstop also and have activated Z_MIN_PROBE_ENDSTOP above.
-// If you're using the Z MIN endstop connector for your Z probe, this has no effect.
-//#define DISABLE_Z_MIN_PROBE_ENDSTOP
-
-// Enable Z Probe Repeatability test to see how accurate your probe is
-//#define Z_MIN_PROBE_REPEATABILITY_TEST
-
-//
-// Probe Raise options provide clearance for the probe to deploy, stow, and travel.
-//
-#define Z_PROBE_DEPLOY_HEIGHT 15 // Raise to make room for the probe to deploy / stow
-#define Z_PROBE_TRAVEL_HEIGHT 5 // Raise between probing points.
-
-//
-// For M851 give a range for adjusting the Z probe offset
-//
-#define Z_PROBE_OFFSET_RANGE_MIN -20
-#define Z_PROBE_OFFSET_RANGE_MAX 20
-
-// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
-// :{0:'Low',1:'High'}
-#define X_ENABLE_ON 0
-#define Y_ENABLE_ON 0
-#define Z_ENABLE_ON 0
-#define E_ENABLE_ON 0 // For all extruders
-
-// Disables axis stepper immediately when it's not being used.
-// WARNING: When motors turn off there is a chance of losing position accuracy!
-#define DISABLE_X false
-#define DISABLE_Y false
-#define DISABLE_Z false
-// Warn on display about possibly reduced accuracy
-//#define DISABLE_REDUCED_ACCURACY_WARNING
-
-// @section extruder
-
-#define DISABLE_E false // For all extruders
-#define DISABLE_INACTIVE_EXTRUDER true //disable only inactive extruders and keep active extruder enabled
-
-// @section machine
-
-// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way.
-#define INVERT_X_DIR false
-#define INVERT_Y_DIR false
-#define INVERT_Z_DIR true
-
-// @section extruder
-
-// For direct drive extruder v9 set to true, for geared extruder set to false.
-#define INVERT_E0_DIR false
-#define INVERT_E1_DIR false
-#define INVERT_E2_DIR false
-#define INVERT_E3_DIR false
-
-// @section homing
-
-//#define Z_HOMING_HEIGHT 4 // (in mm) Minimal z height before homing (G28) for Z clearance above the bed, clamps, ...
- // Be sure you have this distance over your Z_MAX_POS in case.
-
-// ENDSTOP SETTINGS:
-// Sets direction of endstops when homing; 1=MAX, -1=MIN
-// :[-1,1]
-#define X_HOME_DIR 1
-#define Y_HOME_DIR 1
-#define Z_HOME_DIR -1
-
-#define min_software_endstops true // If true, axis won't move to coordinates less than HOME_POS.
-#define max_software_endstops true // If true, axis won't move to coordinates greater than the defined lengths below.
-
-// @section machine
-
-// Travel limits after homing (units are in mm)
-#define X_MIN_POS 0
-#define Y_MIN_POS 0
-#define Z_MIN_POS MANUAL_Z_HOME_POS
-#define X_MAX_POS 200
-#define Y_MAX_POS 200
-#define Z_MAX_POS 225
-
-//===========================================================================
-//========================= Filament Runout Sensor ==========================
-//===========================================================================
-//#define FILAMENT_RUNOUT_SENSOR // Uncomment for defining a filament runout sensor such as a mechanical or opto endstop to check the existence of filament
- // In RAMPS uses servo pin 2. Can be changed in pins file. For other boards pin definition should be made.
- // It is assumed that when logic high = filament available
- // when logic low = filament ran out
-#if ENABLED(FILAMENT_RUNOUT_SENSOR)
- const bool FIL_RUNOUT_INVERTING = false; // set to true to invert the logic of the sensor.
- #define ENDSTOPPULLUP_FIL_RUNOUT // Uncomment to use internal pullup for filament runout pins if the sensor is defined.
- #define FILAMENT_RUNOUT_SCRIPT "M600"
-#endif
-
-//===========================================================================
-//============================ Mesh Bed Leveling ============================
-//===========================================================================
-
-//#define MESH_BED_LEVELING // Enable mesh bed leveling.
-
-#if ENABLED(MESH_BED_LEVELING)
- #define MESH_INSET 10 // Mesh inset margin on print area
- #define MESH_NUM_X_POINTS 3 // Don't use more than 7 points per axis, implementation limited.
- #define MESH_NUM_Y_POINTS 3
- #define MESH_HOME_SEARCH_Z 4 // Z after Home, bed somewhere below but above 0.0.
-
- //#define MESH_G28_REST_ORIGIN // After homing all axes ('G28' or 'G28 XYZ') rest at origin [0,0,0]
-
- //#define MANUAL_BED_LEVELING // Add display menu option for bed leveling.
-
- #if ENABLED(MANUAL_BED_LEVELING)
- #define MBL_Z_STEP 0.025 // Step size while manually probing Z axis.
- #endif // MANUAL_BED_LEVELING
-
-#endif // MESH_BED_LEVELING
-
-//===========================================================================
-//============================ Bed Auto Leveling ============================
-//===========================================================================
-
-// @section bedlevel
-
-//#define AUTO_BED_LEVELING_FEATURE // Delete the comment to enable (remove // at the start of the line)
-
-// Enable this feature to get detailed logging of G28, G29, M48, etc.
-// Logging is off by default. Enable this logging feature with 'M111 S32'.
-// NOTE: Requires a huge amount of PROGMEM.
-//#define DEBUG_LEVELING_FEATURE
-
-#if ENABLED(AUTO_BED_LEVELING_FEATURE)
-
- // There are 2 different ways to specify probing locations:
- //
- // - "grid" mode
- // Probe several points in a rectangular grid.
- // You specify the rectangle and the density of sample points.
- // This mode is preferred because there are more measurements.
- //
- // - "3-point" mode
- // Probe 3 arbitrary points on the bed (that aren't collinear)
- // You specify the XY coordinates of all 3 points.
-
- // Enable this to sample the bed in a grid (least squares solution).
- // Note: this feature generates 10KB extra code size.
- #define AUTO_BED_LEVELING_GRID
-
- #if ENABLED(AUTO_BED_LEVELING_GRID)
-
- #define LEFT_PROBE_BED_POSITION 15
- #define RIGHT_PROBE_BED_POSITION 170
- #define FRONT_PROBE_BED_POSITION 20
- #define BACK_PROBE_BED_POSITION 170
-
- #define MIN_PROBE_EDGE 10 // The Z probe minimum square sides can be no smaller than this.
-
- // Set the number of grid points per dimension.
- // You probably don't need more than 3 (squared=9).
- #define AUTO_BED_LEVELING_GRID_POINTS 2
-
- #else // !AUTO_BED_LEVELING_GRID
-
- // Arbitrary points to probe.
- // A simple cross-product is used to estimate the plane of the bed.
- #define ABL_PROBE_PT_1_X 15
- #define ABL_PROBE_PT_1_Y 180
- #define ABL_PROBE_PT_2_X 15
- #define ABL_PROBE_PT_2_Y 20
- #define ABL_PROBE_PT_3_X 170
- #define ABL_PROBE_PT_3_Y 20
-
- #endif // !AUTO_BED_LEVELING_GRID
-
- //#define Z_PROBE_END_SCRIPT "G1 Z10 F12000\nG1 X15 Y330\nG1 Z0.5\nG1 Z10" // These commands will be executed in the end of G29 routine.
- // Useful to retract a deployable Z probe.
-
- // If you've enabled AUTO_BED_LEVELING_FEATURE and are using the Z Probe for Z Homing,
- // it is highly recommended you also enable Z_SAFE_HOMING below!
-
-#endif // AUTO_BED_LEVELING_FEATURE
-
-
-// @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 -22
-#define MANUAL_Y_HOME_POS -52
-#define MANUAL_Z_HOME_POS 0.1 // Distance between the nozzle to printbed after homing
-
-// Use "Z Safe Homing" to avoid homing with a Z probe outside the bed area.
-//
-// With this feature enabled:
-//
-// - Allow Z homing only after X and Y homing AND stepper drivers still enabled.
-// - If stepper drivers time out, it will need X and Y homing again before Z homing.
-// - Move the Z probe (or nozzle) to a defined XY point before Z Homing when homing all axes (G28).
-// - Prevent Z homing when the Z probe is outside bed area.
-//#define Z_SAFE_HOMING
-
-#if ENABLED(Z_SAFE_HOMING)
- #define Z_SAFE_HOMING_X_POINT ((X_MIN_POS + X_MAX_POS) / 2) // X point for Z homing when homing all axis (G28).
- #define Z_SAFE_HOMING_Y_POINT ((Y_MIN_POS + Y_MAX_POS) / 2) // Y point for Z homing when homing all axis (G28).
-#endif
-
-// Homing speeds (mm/m)
-#define HOMING_FEEDRATE_XY (40*60)
-#define HOMING_FEEDRATE_Z (10*60)
-
-//
-// MOVEMENT SETTINGS
-// @section motion
-//
-
-// default settings
-
-#define DEFAULT_AXIS_STEPS_PER_UNIT {103.69,106.65,200/1.25,1000} // default steps per unit for SCARA
-#define DEFAULT_MAX_FEEDRATE {300, 300, 30, 25} // (mm/sec)
-#define DEFAULT_MAX_ACCELERATION {300,300,20,1000} // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for Skeinforge 40+, for older versions raise them a lot.
-
-#define DEFAULT_ACCELERATION 400 // X, Y, Z and E acceleration in mm/s^2 for printing moves
-#define DEFAULT_RETRACT_ACCELERATION 2000 // E acceleration in mm/s^2 for retracts
-#define DEFAULT_TRAVEL_ACCELERATION 400 // X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
-
-// The speed change that does not require acceleration (i.e. the software might assume it can be done instantaneously)
-#define DEFAULT_XYJERK 5 // (mm/sec)
-#define DEFAULT_ZJERK 0.4 // (mm/sec)
-#define DEFAULT_EJERK 3 // (mm/sec)
-
-
-//=============================================================================
-//============================= Additional Features ===========================
-//=============================================================================
-
-// @section extras
-
-//
-// EEPROM
-//
-// The microcontroller can store settings in the EEPROM, e.g. max velocity...
-// M500 - stores parameters in EEPROM
-// M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily).
-// M502 - reverts to the default "factory settings". You still need to store them in EEPROM afterwards if you want to.
-//define this to enable EEPROM support
-//#define EEPROM_SETTINGS
-
-#if ENABLED(EEPROM_SETTINGS)
- // To disable EEPROM Serial responses and decrease program space by ~1700 byte: comment this out:
- #define EEPROM_CHITCHAT // Please keep turned on if you can.
-#endif
-
-//
-// Host Keepalive
-//
-// When enabled Marlin will send a busy status message to the host
-// every couple of seconds when it can't accept commands.
-//
-#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.
-
-//
-// M100 Free Memory Watcher
-//
-//#define M100_FREE_MEMORY_WATCHER // uncomment to add the M100 Free Memory Watcher for debug purpose
-
-//
-// G20/G21 Inch mode support
-//
-//#define INCH_MODE_SUPPORT
-
-//
-// M149 Set temperature units support
-//
-//#define TEMPERATURE_UNITS_SUPPORT
-
-// @section temperature
-
-// Preheat Constants
-#define PREHEAT_1_TEMP_HOTEND 180
-#define PREHEAT_1_TEMP_BED 70
-#define PREHEAT_1_FAN_SPEED 255 // Value from 0 to 255
-
-#define PREHEAT_2_TEMP_HOTEND 240
-#define PREHEAT_2_TEMP_BED 100
-#define PREHEAT_2_FAN_SPEED 255 // Value from 0 to 255
-
-//
-// Nozzle Park -- EXPERIMENTAL
-//
-// When enabled allows the user to define a special XYZ position, inside the
-// machine's topology, to park the nozzle when idle or when receiving the G27
-// command.
-//
-// The "P" paramenter controls what is the action applied to the Z axis:
-// P0: (Default) If current Z-pos is lower than Z-park then the nozzle will
-// be raised to reach Z-park height.
-//
-// P1: No matter the current Z-pos, the nozzle will be raised/lowered to
-// reach Z-park height.
-//
-// P2: The nozzle height will be raised by Z-park amount but never going over
-// the machine's limit of Z_MAX_POS.
-//
-//#define NOZZLE_PARK_FEATURE
-
-#if ENABLED(NOZZLE_PARK_FEATURE)
- // Specify a park position as { X, Y, Z }
- #define NOZZLE_PARK_POINT { (X_MIN_POS + 10), (Y_MAX_POS - 10), 20 }
-#endif
-
-//
-// Clean Nozzle Feature -- EXPERIMENTAL
-//
-// When enabled allows the user to send G12 to start the nozzle cleaning
-// process, the G-Code accepts two parameters:
-// "P" for pattern selection
-// "S" for defining the number of strokes/repetitions
-//
-// Available list of patterns:
-// P0: This is the default pattern, this process requires a sponge type
-// material at a fixed bed location, the cleaning process is based on
-// "strokes" i.e. back-and-forth movements between the starting and end
-// points.
-//
-// P1: This starts a zig-zag pattern between (X0, Y0) and (X1, Y1), "T"
-// defines the number of zig-zag triangles to be done. "S" defines the
-// number of strokes aka one back-and-forth movement. As an example
-// sending "G12 P1 S1 T3" will execute:
-//
-// --
-// | (X0, Y1) | /\ /\ /\ | (X1, Y1)
-// | | / \ / \ / \ |
-// A | | / \ / \ / \ |
-// | | / \ / \ / \ |
-// | (X0, Y0) | / \/ \/ \ | (X1, Y0)
-// -- +--------------------------------+
-// |________|_________|_________|
-// T1 T2 T3
-//
-// Caveats: End point Z should use the same value as Start point Z.
-//
-// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
-// may change to add new functionality like different wipe patterns.
-//
-//#define NOZZLE_CLEAN_FEATURE
-
-#if ENABLED(NOZZLE_CLEAN_FEATURE)
- // Number of pattern repetitions
- #define NOZZLE_CLEAN_STROKES 12
-
- // Specify positions as { X, Y, Z }
- #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
- #define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
-
- // Moves the nozzle to the initial position
- #define NOZZLE_CLEAN_GOBACK
-#endif
-
-//
-// Print job timer
-//
-// Enable this option to automatically start and stop the
-// print job timer when M104/M109/M190 commands are received.
-// M104 (extruder without wait) - high temp = none, low temp = stop timer
-// M109 (extruder with wait) - high temp = start timer, low temp = stop timer
-// M190 (bed with wait) - high temp = start timer, low temp = none
-//
-// In all cases the timer can be started and stopped using
-// the following commands:
-//
-// - M75 - Start the print job timer
-// - M76 - Pause the print job timer
-// - M77 - Stop the print job timer
-#define PRINTJOB_TIMER_AUTOSTART
-
-//
-// Print Counter
-//
-// When enabled Marlin will keep track of some print statistical data such as:
-// - Total print jobs
-// - Total successful print jobs
-// - Total failed print jobs
-// - Total time printing
-//
-// This information can be viewed by the M78 command.
-//#define PRINTCOUNTER
-
-//=============================================================================
-//============================= LCD and SD support ============================
-//=============================================================================
-
-// @section lcd
-
-//
-// LCD LANGUAGE
-//
-// Here you may choose the language used by Marlin on the LCD menus, the following
-// list of languages are available:
-// en, an, bg, ca, cn, cz, de, el, el-gr, es, eu, fi, fr, gl, hr, it,
-// kana, kana_utf8, nl, pl, pt, pt_utf8, pt-br, pt-br_utf8, ru, test
-//
-// :{'en':'English','an':'Aragonese','bg':'Bulgarian','ca':'Catalan','cn':'Chinese','cz':'Czech','de':'German','el':'Greek','el-gr':'Greek (Greece)','es':'Spanish','eu':'Basque-Euskera','fi':'Finnish','fr':'French','gl':'Galician','hr':'Croatian','it':'Italian','kana':'Japanese','kana_utf8':'Japanese (UTF8)','nl':'Dutch','pl':'Polish','pt':'Portuguese','pt-br':'Portuguese (Brazilian)','pt-br_utf8':'Portuguese (Brazilian UTF8)','pt_utf8':'Portuguese (UTF8)','ru':'Russian','test':'TEST'}
-//
-//#define LCD_LANGUAGE en
-
-//
-// LCD Character Set
-//
-// Note: This option is NOT applicable to Graphical Displays.
-//
-// All character-based LCD's provide ASCII plus one of these
-// language extensions:
-//
-// - JAPANESE ... the most common
-// - WESTERN ... with more accented characters
-// - CYRILLIC ... for the Russian language
-//
-// To determine the language extension installed on your controller:
-//
-// - Compile and upload with LCD_LANGUAGE set to 'test'
-// - Click the controller to view the LCD menu
-// - The LCD will display Japanese, Western, or Cyrillic text
-//
-// See https://github.com/MarlinFirmware/Marlin/wiki/LCD-Language
-//
-// :['JAPANESE','WESTERN','CYRILLIC']
-//
-#define DISPLAY_CHARSET_HD44780 JAPANESE
-
-//
-// LCD TYPE
-//
-// You may choose ULTRA_LCD if you have character based LCD with 16x2, 16x4, 20x2,
-// 20x4 char/lines or DOGLCD for the full graphics display with 128x64 pixels
-// (ST7565R family). (This option will be set automatically for certain displays.)
-//
-// IMPORTANT NOTE: The U8glib library is required for Full Graphic Display!
-// https://github.com/olikraus/U8glib_Arduino
-//
-//#define ULTRA_LCD // Character based
-//#define DOGLCD // Full graphics display
-
-//
-// SD CARD
-//
-// SD Card support is disabled by default. If your controller has an SD slot,
-// you must uncomment the following option or it won't work.
-//
-//#define SDSUPPORT
-
-//
-// SD CARD: SPI SPEED
-//
-// Uncomment ONE of the following items to use a slower SPI transfer
-// speed. This is usually required if you're getting volume init errors.
-//
-//#define SPI_SPEED SPI_HALF_SPEED
-//#define SPI_SPEED SPI_QUARTER_SPEED
-//#define SPI_SPEED SPI_EIGHTH_SPEED
-
-//
-// SD CARD: ENABLE CRC
-//
-// Use CRC checks and retries on the SD communication.
-//
-//#define SD_CHECK_AND_RETRY
-
-//
-// ENCODER SETTINGS
-//
-// This option overrides the default number of encoder pulses needed to
-// produce one step. Should be increased for high-resolution encoders.
-//
-//#define ENCODER_PULSES_PER_STEP 1
-
-//
-// Use this option to override the number of step signals required to
-// move between next/prev menu items.
-//
-//#define ENCODER_STEPS_PER_MENU_ITEM 5
-
-/**
- * Encoder Direction Options
- *
- * Test your encoder's behavior first with both options disabled.
- *
- * Reversed Value Edit and Menu Nav? Enable REVERSE_ENCODER_DIRECTION.
- * Reversed Menu Navigation only? Enable REVERSE_MENU_DIRECTION.
- * Reversed Value Editing only? Enable BOTH options.
- */
-
-//
-// This option reverses the encoder direction everywhere
-//
-// Set this option if CLOCKWISE causes values to DECREASE
-//
-//#define REVERSE_ENCODER_DIRECTION
-
-//
-// This option reverses the encoder direction for navigating LCD menus.
-//
-// If CLOCKWISE normally moves DOWN this makes it go UP.
-// If CLOCKWISE normally moves UP this makes it go DOWN.
-//
-//#define REVERSE_MENU_DIRECTION
-
-//
-// Individual Axis Homing
-//
-// Add individual axis homing items (Home X, Home Y, and Home Z) to the LCD menu.
-//
-//#define INDIVIDUAL_AXIS_HOMING_MENU
-
-//
-// SPEAKER/BUZZER
-//
-// If you have a speaker that can produce tones, enable it here.
-// By default Marlin assumes you have a buzzer with a fixed frequency.
-//
-//#define SPEAKER
-
-//
-// The duration and frequency for the UI feedback sound.
-// Set these to 0 to disable audio feedback in the LCD menus.
-//
-// Note: Test audio output with the G-Code:
-// M300 S P
-//
-//#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 100
-//#define LCD_FEEDBACK_FREQUENCY_HZ 1000
-
-//
-// CONTROLLER TYPE: Standard
-//
-// Marlin supports a wide variety of controllers.
-// Enable one of the following options to specify your controller.
-//
-
-//
-// ULTIMAKER Controller.
-//
-//#define ULTIMAKERCONTROLLER
-
-//
-// ULTIPANEL as seen on Thingiverse.
-//
-//#define ULTIPANEL
-
-//
-// Cartesio UI
-// http://mauk.cc/webshop/cartesio-shop/electronics/user-interface
-//
-//#define CARTESIO_UI
-
-//
-// PanelOne from T3P3 (via RAMPS 1.4 AUX2/AUX3)
-// http://reprap.org/wiki/PanelOne
-//
-//#define PANEL_ONE
-
-//
-// MaKr3d Makr-Panel with graphic controller and SD support.
-// http://reprap.org/wiki/MaKr3d_MaKrPanel
-//
-//#define MAKRPANEL
-
-//
-// ReprapWorld Graphical LCD
-// https://reprapworld.com/?products_details&products_id/1218
-//
-//#define REPRAPWORLD_GRAPHICAL_LCD
-
-//
-// Activate one of these if you have a Panucatt Devices
-// Viki 2.0 or mini Viki with Graphic LCD
-// http://panucatt.com
-//
-//#define VIKI2
-//#define miniVIKI
-
-//
-// Adafruit ST7565 Full Graphic Controller.
-// https://github.com/eboston/Adafruit-ST7565-Full-Graphic-Controller/
-//
-//#define ELB_FULL_GRAPHIC_CONTROLLER
-
-//
-// RepRapDiscount Smart Controller.
-// http://reprap.org/wiki/RepRapDiscount_Smart_Controller
-//
-// Note: Usually sold with a white PCB.
-//
-//#define REPRAP_DISCOUNT_SMART_CONTROLLER
-
-//
-// GADGETS3D G3D LCD/SD Controller
-// http://reprap.org/wiki/RAMPS_1.3/1.4_GADGETS3D_Shield_with_Panel
-//
-// Note: Usually sold with a blue PCB.
-//
-//#define G3D_PANEL
-
-//
-// RepRapDiscount FULL GRAPHIC Smart Controller
-// http://reprap.org/wiki/RepRapDiscount_Full_Graphic_Smart_Controller
-//
-//#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
-
-//
-// MakerLab Mini Panel with graphic
-// controller and SD support - http://reprap.org/wiki/Mini_panel
-//
-//#define MINIPANEL
-
-//
-// RepRapWorld REPRAPWORLD_KEYPAD v1.1
-// http://reprapworld.com/?products_details&products_id=202&cPath=1591_1626
-//
-// REPRAPWORLD_KEYPAD_MOVE_STEP sets how much should the robot move when a key
-// is pressed, a value of 10.0 means 10mm per click.
-//
-//#define REPRAPWORLD_KEYPAD
-//#define REPRAPWORLD_KEYPAD_MOVE_STEP 1.0
-
-//
-// RigidBot Panel V1.0
-// http://www.inventapart.com/
-//
-//#define RIGIDBOT_PANEL
-
-//
-// BQ LCD Smart Controller shipped by
-// default with the BQ Hephestos 2 and Witbox 2.
-//
-//#define BQ_LCD_SMART_CONTROLLER
-
-//
-// CONTROLLER TYPE: I2C
-//
-// Note: These controllers require the installation of Arduino's LiquidCrystal_I2C
-// library. For more info: https://github.com/kiyoshigawa/LiquidCrystal_I2C
-//
-
-//
-// Elefu RA Board Control Panel
-// http://www.elefu.com/index.php?route=product/product&product_id=53
-//
-//#define RA_CONTROL_PANEL
-
-//
-// Sainsmart YW Robot (LCM1602) LCD Display
-//
-//#define LCD_I2C_SAINSMART_YWROBOT
-
-//
-// Generic LCM1602 LCD adapter
-//
-//#define LCM1602
-
-//
-// PANELOLU2 LCD with status LEDs,
-// separate encoder and click inputs.
-//
-// Note: This controller requires Arduino's LiquidTWI2 library v1.2.3 or later.
-// For more info: https://github.com/lincomatic/LiquidTWI2
-//
-// Note: The PANELOLU2 encoder click input can either be directly connected to
-// a pin (if BTN_ENC defined to != -1) or read through I2C (when BTN_ENC == -1).
-//
-//#define LCD_I2C_PANELOLU2
-
-//
-// Panucatt VIKI LCD with status LEDs,
-// integrated click & L/R/U/D buttons, separate encoder inputs.
-//
-//#define LCD_I2C_VIKI
-
-//
-// SSD1306 OLED full graphics generic display
-//
-//#define U8GLIB_SSD1306
-
-//
-// SAV OLEd LCD module support using either SSD1306 or SH1106 based LCD modules
-//
-//#define SAV_3DGLCD
-#if ENABLED(SAV_3DGLCD)
- //#define U8GLIB_SSD1306
- #define U8GLIB_SH1106
-#endif
-
-//
-// CONTROLLER TYPE: Shift register panels
-//
-// 2 wire Non-latching LCD SR from https://goo.gl/aJJ4sH
-// LCD configuration: http://reprap.org/wiki/SAV_3D_LCD
-//
-//#define SAV_3DLCD
-
-//=============================================================================
-//=============================== Extra Features ==============================
-//=============================================================================
-
-// @section extras
-
-// Increase the FAN PWM frequency. Removes the PWM noise but increases heating in the FET/Arduino
-//#define FAST_PWM_FAN
-
-// Use software PWM to drive the fan, as for the heaters. This uses a very low frequency
-// which is not as annoying as with the hardware PWM. On the other hand, if this frequency
-// is too low, you should also increment SOFT_PWM_SCALE.
-//#define FAN_SOFT_PWM
-
-// Incrementing this by 1 will double the software PWM frequency,
-// affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
-// However, control resolution will be halved for each increment;
-// at zero value, there are 128 effective control positions.
-#define SOFT_PWM_SCALE 0
-
-// Temperature status LEDs that display the hotend and bed temperature.
-// If all hotends and bed temperature and temperature setpoint are < 54C then the BLUE led is on.
-// Otherwise the RED led is on. There is 1C hysteresis.
-//#define TEMP_STAT_LEDS
-
-// M240 Triggers a camera by emulating a Canon RC-1 Remote
-// Data from: http://www.doc-diy.net/photo/rc-1_hacked/
-//#define PHOTOGRAPH_PIN 23
-
-// SkeinForge sends the wrong arc g-codes when using Arc Point as fillet procedure
-//#define SF_ARC_FIX
-
-// Support for the BariCUDA Paste Extruder.
-//#define BARICUDA
-
-//define BlinkM/CyzRgb Support
-//#define BLINKM
-
-/*********************************************************************\
-* R/C SERVO support
-* Sponsored by TrinityLabs, Reworked by codexmas
-**********************************************************************/
-
-// Number of servos
-//
-// If you select a configuration below, this will receive a default value and does not need to be set manually
-// set it manually if you have more servos than extruders and wish to manually control some
-// leaving it undefined or defining as 0 will disable the servo subsystem
-// If unsure, leave commented / disabled
-//
-//#define NUM_SERVOS 3 // Servo index starts with 0 for M280 command
-
-// Delay (in microseconds) before the next move will start, to give the servo time to reach its target angle.
-// 300ms is a good value but you can try less delay.
-// If the servo can't reach the requested position, increase it.
-#define SERVO_DELAY 300
-
-// Servo deactivation
-//
-// With this option servos are powered only during movement, then turned off to prevent jitter.
-//#define DEACTIVATE_SERVOS_AFTER_MOVE
-
-/**********************************************************************\
- * Support for a filament diameter sensor
- * Also allows adjustment of diameter at print time (vs at slicing)
- * Single extruder only at this point (extruder 0)
- *
- * Motherboards
- * 34 - RAMPS1.4 - uses Analog input 5 on the AUX2 connector
- * 81 - Printrboard - Uses Analog input 2 on the Exp1 connector (version B,C,D,E)
- * 301 - Rambo - uses Analog input 3
- * Note may require analog pins to be defined for different motherboards
- **********************************************************************/
-// Uncomment below to enable
-//#define FILAMENT_WIDTH_SENSOR
-
-#define DEFAULT_NOMINAL_FILAMENT_DIA 3.00 //Enter the diameter (in mm) of the filament generally used (3.0 mm or 1.75 mm) - this is then used in the slicer software. Used for sensor reading validation
-
-#if ENABLED(FILAMENT_WIDTH_SENSOR)
- #define FILAMENT_SENSOR_EXTRUDER_NUM 0 //The number of the extruder that has the filament sensor (0,1,2)
- #define MEASUREMENT_DELAY_CM 14 //measurement delay in cm. This is the distance from filament sensor to middle of barrel
-
- #define MEASURED_UPPER_LIMIT 3.30 //upper limit factor used for sensor reading validation in mm
- #define MEASURED_LOWER_LIMIT 1.90 //lower limit factor for sensor reading validation in mm
- #define MAX_MEASUREMENT_DELAY 20 //delay buffer size in bytes (1 byte = 1cm)- limits maximum measurement delay allowable (must be larger than MEASUREMENT_DELAY_CM and lower number saves RAM)
-
- #define DEFAULT_MEASURED_FILAMENT_DIA DEFAULT_NOMINAL_FILAMENT_DIA //set measured to nominal initially
-
- //When using an LCD, uncomment the line below to display the Filament sensor data on the last line instead of status. Status will appear for 5 sec.
- //#define FILAMENT_LCD_DISPLAY
-#endif
-
-#endif // CONFIGURATION_H
diff --git a/Marlin/example_configurations/SCARA/Configuration_adv.h b/Marlin/example_configurations/SCARA/Configuration_adv.h
deleted file mode 100644
index 07f1e56..0000000
--- a/Marlin/example_configurations/SCARA/Configuration_adv.h
+++ /dev/null
@@ -1,799 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Configuration_adv.h
- *
- * Advanced settings.
- * Only change these if you know exactly what you're doing.
- * Some of these settings can damage your printer if improperly set!
- *
- * Basic settings can be found in Configuration.h
- *
- */
-#ifndef CONFIGURATION_ADV_H
-#define CONFIGURATION_ADV_H
-
-/**
- *
- * ***********************************
- * ** ATTENTION TO ALL DEVELOPERS **
- * ***********************************
- *
- * You must increment this version number for every significant change such as,
- * but not limited to: ADD, DELETE RENAME OR REPURPOSE any directive/option.
- *
- * Note: Update also Version.h !
- */
-#define CONFIGURATION_ADV_H_VERSION 010100
-
-// @section temperature
-
-//===========================================================================
-//=============================Thermal Settings ============================
-//===========================================================================
-
-#if DISABLED(PIDTEMPBED)
- #define BED_CHECK_INTERVAL 3000 // ms between checks in bang-bang control
- #if ENABLED(BED_LIMIT_SWITCHING)
- #define BED_HYSTERESIS 2 // Only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS
- #endif
-#endif
-
-/**
- * Thermal Protection protects your printer from damage and fire if a
- * thermistor falls out or temperature sensors fail in any way.
- *
- * The issue: If a thermistor falls out or a temperature sensor fails,
- * Marlin can no longer sense the actual temperature. Since a disconnected
- * thermistor reads as a low temperature, the firmware will keep the heater on.
- *
- * The solution: Once the temperature reaches the target, start observing.
- * If the temperature stays too far below the target (hysteresis) for too long (period),
- * the firmware will halt the machine as a safety precaution.
- *
- * If you get false positives for "Thermal Runaway" increase THERMAL_PROTECTION_HYSTERESIS and/or THERMAL_PROTECTION_PERIOD
- */
-#if ENABLED(THERMAL_PROTECTION_HOTENDS)
- #define THERMAL_PROTECTION_PERIOD 40 // Seconds
- #define THERMAL_PROTECTION_HYSTERESIS 4 // Degrees Celsius
-
- /**
- * Whenever an M104 or M109 increases the target temperature the firmware will wait for the
- * WATCH_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_TEMP_INCREASE
- * degrees, the machine is halted, requiring a hard reset. This test restarts with any M104/M109,
- * but only if the current temperature is far enough below the target for a reliable test.
- *
- * If you get false positives for "Heating failed" increase WATCH_TEMP_PERIOD and/or decrease WATCH_TEMP_INCREASE
- * WATCH_TEMP_INCREASE should not be below 2.
- */
- #define WATCH_TEMP_PERIOD 20 // Seconds
- #define WATCH_TEMP_INCREASE 2 // Degrees Celsius
-#endif
-
-/**
- * Thermal Protection parameters for the bed are just as above for hotends.
- */
-#if ENABLED(THERMAL_PROTECTION_BED)
- #define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
- #define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
-
- /**
- * Whenever an M140 or M190 increases the target temperature the firmware will wait for the
- * WATCH_BED_TEMP_PERIOD to expire, and if the temperature hasn't increased by WATCH_BED_TEMP_INCREASE
- * degrees, the machine is halted, requiring a hard reset. This test restarts with any M140/M190,
- * but only if the current temperature is far enough below the target for a reliable test.
- *
- * If you get too many "Heating failed" errors, increase WATCH_BED_TEMP_PERIOD and/or decrease
- * WATCH_BED_TEMP_INCREASE. (WATCH_BED_TEMP_INCREASE should not be below 2.)
- */
- #define WATCH_BED_TEMP_PERIOD 60 // Seconds
- #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
-#endif
-
-#if ENABLED(PIDTEMP)
- // this adds an experimental additional term to the heating power, proportional to the extrusion speed.
- // if Kc is chosen well, the additional required power due to increased melting should be compensated.
- //#define PID_EXTRUSION_SCALING
- #if ENABLED(PID_EXTRUSION_SCALING)
- #define DEFAULT_Kc (100) //heating power=Kc*(e_speed)
- #define LPQ_MAX_LEN 50
- #endif
-#endif
-
-/**
- * Automatic Temperature:
- * The hotend target temperature is calculated by all the buffered lines of gcode.
- * The maximum buffered steps/sec of the extruder motor is called "se".
- * Start autotemp mode with M109 S B F
- * The target temperature is set to mintemp+factor*se[steps/sec] and is limited by
- * mintemp and maxtemp. Turn this off by executing M109 without F*
- * Also, if the temperature is set to a value below mintemp, it will not be changed by autotemp.
- * On an Ultimaker, some initial testing worked with M109 S215 B260 F1 in the start.gcode
- */
-#define AUTOTEMP
-#if ENABLED(AUTOTEMP)
- #define AUTOTEMP_OLDWEIGHT 0.98
-#endif
-
-//Show Temperature ADC value
-//The M105 command return, besides traditional information, the ADC value read from temperature sensors.
-//#define SHOW_TEMP_ADC_VALUES
-
-/**
- * High Temperature Thermistor Support
- *
- * Thermistors able to support high temperature tend to have a hard time getting
- * good readings at room and lower temperatures. This means HEATER_X_RAW_LO_TEMP
- * will probably be caught when the heating element first turns on during the
- * preheating process, which will trigger a min_temp_error as a safety measure
- * and force stop everything.
- * To circumvent this limitation, we allow for a preheat time (during which,
- * min_temp_error won't be triggered) and add a min_temp buffer to handle
- * aberrant readings.
- *
- * If you want to enable this feature for your hotend thermistor(s)
- * uncomment and set values > 0 in the constants below
- */
-
-// The number of consecutive low temperature errors that can occur
-// before a min_temp_error is triggered. (Shouldn't be more than 10.)
-//#define MAX_CONSECUTIVE_LOW_TEMPERATURE_ERROR_ALLOWED 0
-
-// The number of milliseconds a hotend will preheat before starting to check
-// the temperature. This value should NOT be set to the time it takes the
-// hot end to reach the target temperature, but the time it takes to reach
-// the minimum temperature your thermistor can read. The lower the better/safer.
-// This shouldn't need to be more than 30 seconds (30000)
-//#define MILLISECONDS_PREHEAT_TIME 0
-
-// @section extruder
-
-// extruder run-out prevention.
-//if the machine is idle, and the temperature over MINTEMP, every couple of SECONDS some filament is extruded
-//#define EXTRUDER_RUNOUT_PREVENT
-#define EXTRUDER_RUNOUT_MINTEMP 180
-#define EXTRUDER_RUNOUT_SECONDS 30
-#define EXTRUDER_RUNOUT_ESTEPS 14 // mm filament
-#define EXTRUDER_RUNOUT_SPEED 180 // extrusion speed
-#define EXTRUDER_RUNOUT_EXTRUDE 100
-
-// @section temperature
-
-//These defines help to calibrate the AD595 sensor in case you get wrong temperature measurements.
-//The measured temperature is defined as "actualTemp = (measuredTemp * TEMP_SENSOR_AD595_GAIN) + TEMP_SENSOR_AD595_OFFSET"
-#define TEMP_SENSOR_AD595_OFFSET 0.0
-#define TEMP_SENSOR_AD595_GAIN 1.0
-
-//This is for controlling a fan to cool down the stepper drivers
-//it will turn on when any driver is enabled
-//and turn off after the set amount of seconds from last driver being disabled again
-#define CONTROLLERFAN_PIN -1 //Pin used for the fan to cool controller (-1 to disable)
-#define CONTROLLERFAN_SECS 60 //How many seconds, after all motors were disabled, the fan should run
-#define CONTROLLERFAN_SPEED 255 // == full speed
-
-// When first starting the main fan, run it at full speed for the
-// given number of milliseconds. This gets the fan spinning reliably
-// before setting a PWM value. (Does not work with software PWM for fan on Sanguinololu)
-//#define FAN_KICKSTART_TIME 100
-
-// This defines the minimal speed for the main fan, run in PWM mode
-// to enable uncomment and set minimal PWM speed for reliable running (1-255)
-// if fan speed is [1 - (FAN_MIN_PWM-1)] it is set to FAN_MIN_PWM
-//#define FAN_MIN_PWM 50
-
-// @section extruder
-
-// Extruder cooling fans
-// Configure fan pin outputs to automatically turn on/off when the associated
-// extruder temperature is above/below EXTRUDER_AUTO_FAN_TEMPERATURE.
-// Multiple extruders can be assigned to the same pin in which case
-// the fan will turn on when any selected extruder is above the threshold.
-#define EXTRUDER_0_AUTO_FAN_PIN -1
-#define EXTRUDER_1_AUTO_FAN_PIN -1
-#define EXTRUDER_2_AUTO_FAN_PIN -1
-#define EXTRUDER_3_AUTO_FAN_PIN -1
-#define EXTRUDER_AUTO_FAN_TEMPERATURE 50
-#define EXTRUDER_AUTO_FAN_SPEED 255 // == full speed
-
-//===========================================================================
-//============================ Mechanical Settings ==========================
-//===========================================================================
-
-// @section homing
-
-// If you want endstops to stay on (by default) even when not homing
-// enable this option. Override at any time with M120, M121.
-//#define ENDSTOPS_ALWAYS_ON_DEFAULT
-
-// @section extras
-
-//#define Z_LATE_ENABLE // Enable Z the last moment. Needed if your Z driver overheats.
-
-// Dual X Steppers
-// Uncomment this option to drive two X axis motors.
-// The next unused E driver will be assigned to the second X stepper.
-//#define X_DUAL_STEPPER_DRIVERS
-#if ENABLED(X_DUAL_STEPPER_DRIVERS)
- // Set true if the two X motors need to rotate in opposite directions
- #define INVERT_X2_VS_X_DIR true
-#endif
-
-
-// Dual Y Steppers
-// Uncomment this option to drive two Y axis motors.
-// The next unused E driver will be assigned to the second Y stepper.
-//#define Y_DUAL_STEPPER_DRIVERS
-#if ENABLED(Y_DUAL_STEPPER_DRIVERS)
- // Set true if the two Y motors need to rotate in opposite directions
- #define INVERT_Y2_VS_Y_DIR true
-#endif
-
-// A single Z stepper driver is usually used to drive 2 stepper motors.
-// Uncomment this option to use a separate stepper driver for each Z axis motor.
-// The next unused E driver will be assigned to the second Z stepper.
-//#define Z_DUAL_STEPPER_DRIVERS
-
-#if ENABLED(Z_DUAL_STEPPER_DRIVERS)
-
- // Z_DUAL_ENDSTOPS is a feature to enable the use of 2 endstops for both Z steppers - Let's call them Z stepper and Z2 stepper.
- // That way the machine is capable to align the bed during home, since both Z steppers are homed.
- // There is also an implementation of M666 (software endstops adjustment) to this feature.
- // After Z homing, this adjustment is applied to just one of the steppers in order to align the bed.
- // One just need to home the Z axis and measure the distance difference between both Z axis and apply the math: Z adjust = Z - Z2.
- // If the Z stepper axis is closer to the bed, the measure Z > Z2 (yes, it is.. think about it) and the Z adjust would be positive.
- // Play a little bit with small adjustments (0.5mm) and check the behaviour.
- // The M119 (endstops report) will start reporting the Z2 Endstop as well.
-
- //#define Z_DUAL_ENDSTOPS
-
- #if ENABLED(Z_DUAL_ENDSTOPS)
- #define Z2_USE_ENDSTOP _XMAX_
- #endif
-
-#endif // Z_DUAL_STEPPER_DRIVERS
-
-// Enable this for dual x-carriage printers.
-// A dual x-carriage design has the advantage that the inactive extruder can be parked which
-// prevents hot-end ooze contaminating the print. It also reduces the weight of each x-carriage
-// allowing faster printing speeds. Connect your X2 stepper to the first unused E plug.
-//#define DUAL_X_CARRIAGE
-#if ENABLED(DUAL_X_CARRIAGE)
- // Configuration for second X-carriage
- // Note: the first x-carriage is defined as the x-carriage which homes to the minimum endstop;
- // the second x-carriage always homes to the maximum endstop.
- #define X2_MIN_POS 80 // set minimum to ensure second x-carriage doesn't hit the parked first X-carriage
- #define X2_MAX_POS 353 // set maximum to the distance between toolheads when both heads are homed
- #define X2_HOME_DIR 1 // the second X-carriage always homes to the maximum endstop position
- #define X2_HOME_POS X2_MAX_POS // default home position is the maximum carriage position
- // However: In this mode the HOTEND_OFFSET_X value for the second extruder provides a software
- // override for X2_HOME_POS. This also allow recalibration of the distance between the two endstops
- // without modifying the firmware (through the "M218 T1 X???" command).
- // Remember: you should set the second extruder x-offset to 0 in your slicer.
-
- // There are a few selectable movement modes for dual x-carriages using M605 S
- // Mode 0: Full control. The slicer has full control over both x-carriages and can achieve optimal travel results
- // as long as it supports dual x-carriages. (M605 S0)
- // Mode 1: Auto-park mode. The firmware will automatically park and unpark the x-carriages on tool changes so
- // that additional slicer support is not required. (M605 S1)
- // Mode 2: Duplication mode. The firmware will transparently make the second x-carriage and extruder copy all
- // actions of the first x-carriage. This allows the printer to print 2 arbitrary items at
- // once. (2nd extruder x offset and temp offset are set using: M605 S2 [Xnnn] [Rmmm])
-
- // This is the default power-up mode which can be later using M605.
- #define DEFAULT_DUAL_X_CARRIAGE_MODE 0
-
- // Default settings in "Auto-park Mode"
- #define TOOLCHANGE_PARK_ZLIFT 0.2 // the distance to raise Z axis when parking an extruder
- #define TOOLCHANGE_UNPARK_ZLIFT 1 // the distance to raise Z axis when unparking an extruder
-
- // Default x offset in duplication mode (typically set to half print bed width)
- #define DEFAULT_DUPLICATION_X_OFFSET 100
-
-#endif //DUAL_X_CARRIAGE
-
-// @section homing
-
-//homing hits the endstop, then retracts by this distance, before it tries to slowly bump again:
-#define X_HOME_BUMP_MM 3
-#define Y_HOME_BUMP_MM 3
-#define Z_HOME_BUMP_MM 3
-#define HOMING_BUMP_DIVISOR {2, 2, 4} // Re-Bump Speed Divisor (Divides the Homing Feedrate)
-//#define QUICK_HOME //if this is defined, if both x and y are to be homed, a diagonal move will be performed initially.
-
-// When G28 is called, this option will make Y home before X
-//#define HOME_Y_BEFORE_X
-
-// @section machine
-
-#define AXIS_RELATIVE_MODES {false, false, false, false}
-
-// Allow duplication mode with a basic dual-nozzle extruder
-//#define DUAL_NOZZLE_DUPLICATION_MODE
-
-// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
-#define INVERT_X_STEP_PIN false
-#define INVERT_Y_STEP_PIN false
-#define INVERT_Z_STEP_PIN false
-#define INVERT_E_STEP_PIN false
-
-// Default stepper release if idle. Set to 0 to deactivate.
-// Steppers will shut down DEFAULT_STEPPER_DEACTIVE_TIME seconds after the last move when DISABLE_INACTIVE_? is true.
-// Time can be set by M18 and M84.
-#define DEFAULT_STEPPER_DEACTIVE_TIME 240
-#define DISABLE_INACTIVE_X true
-#define DISABLE_INACTIVE_Y true
-#define DISABLE_INACTIVE_Z true // set to false if the nozzle will fall down on your printed part when print has finished.
-#define DISABLE_INACTIVE_E true
-
-#define DEFAULT_MINIMUMFEEDRATE 0.0 // minimum feedrate
-#define DEFAULT_MINTRAVELFEEDRATE 0.0
-
-// @section lcd
-
-#if ENABLED(ULTIPANEL)
- #define MANUAL_FEEDRATE {50*60, 50*60, 10*60, 60} // Feedrates for manual moves along X, Y, Z, E from panel
- #define ULTIPANEL_FEEDMULTIPLY // Comment to disable setting feedrate multiplier via encoder
-#endif
-
-// @section extras
-
-// minimum time in microseconds that a movement needs to take if the buffer is emptied.
-#define DEFAULT_MINSEGMENTTIME 20000
-
-// If defined the movements slow down when the look ahead buffer is only half full
-//#define SLOWDOWN
-
-// Frequency limit
-// See nophead's blog for more info
-// Not working O
-//#define XY_FREQUENCY_LIMIT 15
-
-// Minimum planner junction speed. Sets the default minimum speed the planner plans for at the end
-// of the buffer and all stops. This should not be much greater than zero and should only be changed
-// if unwanted behavior is observed on a user's machine when running at very slow speeds.
-#define MINIMUM_PLANNER_SPEED 0.05// (mm/sec)
-
-// Microstep setting (Only functional when stepper driver microstep pins are connected to MCU.
-#define MICROSTEP_MODES {16,16,16,16,16} // [1,2,4,8,16]
-
-// Motor Current setting (Only functional when motor driver current ref pins are connected to a digital trimpot on supported boards)
-#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
-
-// Motor Current controlled via PWM (Overridable on supported boards with PWM-driven motor driver current)
-//#define PWM_MOTOR_CURRENT {1300, 1300, 1250} // Values in milliamps
-
-// uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
-//#define DIGIPOT_I2C
-// Number of channels available for I2C digipot, For Azteeg X3 Pro we have 8
-#define DIGIPOT_I2C_NUM_CHANNELS 8
-// actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
-#define DIGIPOT_I2C_MOTOR_CURRENTS {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}
-
-//===========================================================================
-//=============================Additional Features===========================
-//===========================================================================
-
-#define ENCODER_RATE_MULTIPLIER // If defined, certain menu edit operations automatically multiply the steps when the encoder is moved quickly
-#define ENCODER_10X_STEPS_PER_SEC 75 // If the encoder steps per sec exceeds this value, multiply steps moved x10 to quickly advance the value
-#define ENCODER_100X_STEPS_PER_SEC 160 // If the encoder steps per sec exceeds this value, multiply steps moved x100 to really quickly advance the value
-
-//#define CHDK 4 //Pin for triggering CHDK to take a picture see how to use it here http://captain-slow.dk/2014/03/09/3d-printing-timelapses/
-#define CHDK_DELAY 50 //How long in ms the pin should stay HIGH before going LOW again
-
-// @section lcd
-
-// Include a page of printer information in the LCD Main Menu
-//#define LCD_INFO_MENU
-
-#if ENABLED(SDSUPPORT)
-
- // Some RAMPS and other boards don't detect when an SD card is inserted. You can work
- // around this by connecting a push button or single throw switch to the pin defined
- // as SD_DETECT_PIN in your board's pins definitions.
- // This setting should be disabled unless you are using a push button, pulling the pin to ground.
- // Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER).
- #define SD_DETECT_INVERTED
-
- #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
- #define SD_FINISHED_RELEASECOMMAND "M84 X Y Z E" // You might want to keep the z enabled so your bed stays in place.
-
- #define SDCARD_RATHERRECENTFIRST //reverse file order of sd card menu display. Its sorted practically after the file system block order.
- // if a file is deleted, it frees a block. hence, the order is not purely chronological. To still have auto0.g accessible, there is again the option to do that.
- // using:
- //#define MENU_ADDAUTOSTART
-
- // Show a progress bar on HD44780 LCDs for SD printing
- //#define LCD_PROGRESS_BAR
-
- #if ENABLED(LCD_PROGRESS_BAR)
- // Amount of time (ms) to show the bar
- #define PROGRESS_BAR_BAR_TIME 2000
- // Amount of time (ms) to show the status message
- #define PROGRESS_BAR_MSG_TIME 3000
- // Amount of time (ms) to retain the status message (0=forever)
- #define PROGRESS_MSG_EXPIRE 0
- // Enable this to show messages for MSG_TIME then hide them
- //#define PROGRESS_MSG_ONCE
- #endif
-
- // This allows hosts to request long names for files and folders with M33
- //#define LONG_FILENAME_HOST_SUPPORT
-
- // This option allows you to abort SD printing when any endstop is triggered.
- // This feature must be enabled with "M540 S1" or from the LCD menu.
- // To have any effect, endstops must be enabled during SD printing.
- //#define ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED
-
-#endif // SDSUPPORT
-
-// for dogm lcd displays you can choose some additional fonts:
-#if ENABLED(DOGLCD)
- // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT
- // we don't have a big font for Cyrillic, Kana
- //#define USE_BIG_EDIT_FONT
-
- // If you have spare 2300Byte of progmem and want to use a
- // smaller font on the Info-screen uncomment the next line.
- //#define USE_SMALL_INFOFONT
-#endif // DOGLCD
-
-// @section safety
-
-// The hardware watchdog should reset the microcontroller disabling all outputs,
-// in case the firmware gets stuck and doesn't do temperature regulation.
-#define USE_WATCHDOG
-
-#if ENABLED(USE_WATCHDOG)
- // If you have a watchdog reboot in an ArduinoMega2560 then the device will hang forever, as a watchdog reset will leave the watchdog on.
- // The "WATCHDOG_RESET_MANUAL" goes around this by not using the hardware reset.
- // However, THIS FEATURE IS UNSAFE!, as it will only work if interrupts are disabled. And the code could hang in an interrupt routine with interrupts disabled.
- //#define WATCHDOG_RESET_MANUAL
-#endif
-
-// @section lcd
-
-// Babystepping enables the user to control the axis in tiny amounts, independently from the normal printing process
-// it can e.g. be used to change z-positions in the print startup phase in real-time
-// does not respect endstops!
-//#define BABYSTEPPING
-#if ENABLED(BABYSTEPPING)
- #define BABYSTEP_XY //not only z, but also XY in the menu. more clutter, more functions
- //not implemented for deltabots!
- #define BABYSTEP_INVERT_Z false //true for inverse movements in Z
- #define BABYSTEP_MULTIPLICATOR 1 //faster movements
-#endif
-
-// @section extruder
-
-// extruder advance constant (s2/mm3)
-//
-// advance (steps) = STEPS_PER_CUBIC_MM_E * EXTRUDER_ADVANCE_K * cubic mm per second ^ 2
-//
-// Hooke's law says: force = k * distance
-// Bernoulli's principle says: v ^ 2 / 2 + g . h + pressure / density = constant
-// so: v ^ 2 is proportional to number of steps we advance the extruder
-#define ADVANCE
-
-#if ENABLED(ADVANCE)
- #define EXTRUDER_ADVANCE_K .0
- #define D_FILAMENT 1.75
-#endif
-
-// Implementation of a linear pressure control
-// Assumption: advance = k * (delta velocity)
-// K=0 means advance disabled. A good value for a gregs wade extruder will be around K=75
-//#define LIN_ADVANCE
-
-#if ENABLED(LIN_ADVANCE)
- #define LIN_ADVANCE_K 75
-#endif
-
-// @section leveling
-
-// Default mesh area is an area with an inset margin on the print area.
-// Below are the macros that are used to define the borders for the mesh area,
-// made available here for specialized needs, ie dual extruder setup.
-#if ENABLED(MESH_BED_LEVELING)
- #define MESH_MIN_X (X_MIN_POS + MESH_INSET)
- #define MESH_MAX_X (X_MAX_POS - (MESH_INSET))
- #define MESH_MIN_Y (Y_MIN_POS + MESH_INSET)
- #define MESH_MAX_Y (Y_MAX_POS - (MESH_INSET))
-#endif
-
-// @section extras
-
-// Arc interpretation settings:
-#define ARC_SUPPORT // Disabling this saves ~2738 bytes
-#define MM_PER_ARC_SEGMENT 1
-#define N_ARC_CORRECTION 25
-
-// Support for G5 with XYZE destination and IJPQ offsets. Requires ~2666 bytes.
-//#define BEZIER_CURVE_SUPPORT
-
-const unsigned int dropsegments = 5; //everything with less than this number of steps will be ignored as move and joined with the next movement
-
-// @section temperature
-
-// Control heater 0 and heater 1 in parallel.
-//#define HEATERS_PARALLEL
-
-//===========================================================================
-//================================= Buffers =================================
-//===========================================================================
-
-// @section hidden
-
-// The number of linear motions that can be in the plan at any give time.
-// THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2, i.g. 8,16,32 because shifts and ors are used to do the ring-buffering.
-#if ENABLED(SDSUPPORT)
- #define BLOCK_BUFFER_SIZE 16 // SD,LCD,Buttons take more memory, block buffer needs to be smaller
-#else
- #define BLOCK_BUFFER_SIZE 16 // maximize block buffer
-#endif
-
-// @section serial
-
-// The ASCII buffer for serial input
-#define MAX_CMD_SIZE 96
-#define BUFSIZE 4
-
-// Transfer Buffer Size
-// To save 386 bytes of PROGMEM (and TX_BUFFER_SIZE+3 bytes of RAM) set to 0.
-// To buffer a simple "ok" you need 4 bytes.
-// For ADVANCED_OK (M105) you need 32 bytes.
-// For debug-echo: 128 bytes for the optimal speed.
-// Other output doesn't need to be that speedy.
-// :[0,2,4,8,16,32,64,128,256]
-#define TX_BUFFER_SIZE 0
-
-// Enable an emergency-command parser to intercept certain commands as they
-// enter the serial receive buffer, so they cannot be blocked.
-// Currently handles M108, M112, M410
-// Does not work on boards using AT90USB (USBCON) processors!
-//#define EMERGENCY_PARSER
-
-// Bad Serial-connections can miss a received command by sending an 'ok'
-// Therefore some clients abort after 30 seconds in a timeout.
-// Some other clients start sending commands while receiving a 'wait'.
-// This "wait" is only sent when the buffer is empty. 1 second is a good value here.
-//#define NO_TIMEOUTS 1000 // Milliseconds
-
-// Some clients will have this feature soon. This could make the NO_TIMEOUTS unnecessary.
-//#define ADVANCED_OK
-
-// @section fwretract
-
-// Firmware based and LCD controlled retract
-// M207 and M208 can be used to define parameters for the retraction.
-// The retraction can be called by the slicer using G10 and G11
-// until then, intended retractions can be detected by moves that only extrude and the direction.
-// the moves are than replaced by the firmware controlled ones.
-
-//#define FWRETRACT //ONLY PARTIALLY TESTED
-#if ENABLED(FWRETRACT)
- #define MIN_RETRACT 0.1 //minimum extruded mm to accept a automatic gcode retraction attempt
- #define RETRACT_LENGTH 3 //default retract length (positive mm)
- #define RETRACT_LENGTH_SWAP 13 //default swap retract length (positive mm), for extruder change
- #define RETRACT_FEEDRATE 35 //default feedrate for retracting (mm/s)
- #define RETRACT_ZLIFT 0 //default retract Z-lift
- #define RETRACT_RECOVER_LENGTH 0 //default additional recover length (mm, added to retract length when recovering)
- #define RETRACT_RECOVER_LENGTH_SWAP 0 //default additional swap recover length (mm, added to retract length when recovering from extruder change)
- #define RETRACT_RECOVER_FEEDRATE 8 //default feedrate for recovering from retraction (mm/s)
-#endif
-
-// Add support for experimental filament exchange support M600; requires display
-#if ENABLED(ULTIPANEL)
- // #define FILAMENT_CHANGE_FEATURE // Enable filament exchange menu and M600 g-code (used for runout sensor too)
- #if ENABLED(FILAMENT_CHANGE_FEATURE)
- #define FILAMENT_CHANGE_X_POS 3 // X position of hotend
- #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend
- #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift)
- #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
- #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers)
- #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm
- // It is a short retract used immediately after print interrupt before move to filament exchange position
- #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
- #define FILAMENT_CHANGE_UNLOAD_LENGTH 100 // Unload filament length from hotend in mm
- // Longer length for bowden printers to unload filament from whole bowden tube,
- // shorter lenght for printers without bowden to unload filament from extruder only,
- // 0 to disable unloading for manual unloading
- #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast
- #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm
- // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
- // Short or zero length for printers without bowden where loading is not used
- #define FILAMENT_CHANGE_LOAD_FEEDRATE 10 // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
- #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is load over the hotend,
- // 0 to disable for manual extrusion
- // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
- // or until outcoming filament color is not clear for filament color change
- #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
- #endif
-#endif
-
-/******************************************************************************\
- * enable this section if you have TMC26X motor drivers.
- * you need to import the TMC26XStepper library into the Arduino IDE for this
- ******************************************************************************/
-
-// @section tmc
-
-//#define HAVE_TMCDRIVER
-#if ENABLED(HAVE_TMCDRIVER)
-
- //#define X_IS_TMC
- #define X_MAX_CURRENT 1000 //in mA
- #define X_SENSE_RESISTOR 91 //in mOhms
- #define X_MICROSTEPS 16 //number of microsteps
-
- //#define X2_IS_TMC
- #define X2_MAX_CURRENT 1000 //in mA
- #define X2_SENSE_RESISTOR 91 //in mOhms
- #define X2_MICROSTEPS 16 //number of microsteps
-
- //#define Y_IS_TMC
- #define Y_MAX_CURRENT 1000 //in mA
- #define Y_SENSE_RESISTOR 91 //in mOhms
- #define Y_MICROSTEPS 16 //number of microsteps
-
- //#define Y2_IS_TMC
- #define Y2_MAX_CURRENT 1000 //in mA
- #define Y2_SENSE_RESISTOR 91 //in mOhms
- #define Y2_MICROSTEPS 16 //number of microsteps
-
- //#define Z_IS_TMC
- #define Z_MAX_CURRENT 1000 //in mA
- #define Z_SENSE_RESISTOR 91 //in mOhms
- #define Z_MICROSTEPS 16 //number of microsteps
-
- //#define Z2_IS_TMC
- #define Z2_MAX_CURRENT 1000 //in mA
- #define Z2_SENSE_RESISTOR 91 //in mOhms
- #define Z2_MICROSTEPS 16 //number of microsteps
-
- //#define E0_IS_TMC
- #define E0_MAX_CURRENT 1000 //in mA
- #define E0_SENSE_RESISTOR 91 //in mOhms
- #define E0_MICROSTEPS 16 //number of microsteps
-
- //#define E1_IS_TMC
- #define E1_MAX_CURRENT 1000 //in mA
- #define E1_SENSE_RESISTOR 91 //in mOhms
- #define E1_MICROSTEPS 16 //number of microsteps
-
- //#define E2_IS_TMC
- #define E2_MAX_CURRENT 1000 //in mA
- #define E2_SENSE_RESISTOR 91 //in mOhms
- #define E2_MICROSTEPS 16 //number of microsteps
-
- //#define E3_IS_TMC
- #define E3_MAX_CURRENT 1000 //in mA
- #define E3_SENSE_RESISTOR 91 //in mOhms
- #define E3_MICROSTEPS 16 //number of microsteps
-
-#endif
-
-/******************************************************************************\
- * enable this section if you have L6470 motor drivers.
- * you need to import the L6470 library into the Arduino IDE for this
- ******************************************************************************/
-
-// @section l6470
-
-//#define HAVE_L6470DRIVER
-#if ENABLED(HAVE_L6470DRIVER)
-
- //#define X_IS_L6470
- #define X_MICROSTEPS 16 //number of microsteps
- #define X_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define X_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define X_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define X2_IS_L6470
- #define X2_MICROSTEPS 16 //number of microsteps
- #define X2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define X2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define X2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Y_IS_L6470
- #define Y_MICROSTEPS 16 //number of microsteps
- #define Y_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Y_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Y_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Y2_IS_L6470
- #define Y2_MICROSTEPS 16 //number of microsteps
- #define Y2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Y2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Y2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Z_IS_L6470
- #define Z_MICROSTEPS 16 //number of microsteps
- #define Z_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Z_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Z_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define Z2_IS_L6470
- #define Z2_MICROSTEPS 16 //number of microsteps
- #define Z2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define Z2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define Z2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E0_IS_L6470
- #define E0_MICROSTEPS 16 //number of microsteps
- #define E0_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E0_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E0_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E1_IS_L6470
- #define E1_MICROSTEPS 16 //number of microsteps
- #define E1_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E1_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E1_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E2_IS_L6470
- #define E2_MICROSTEPS 16 //number of microsteps
- #define E2_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E2_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E2_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
- //#define E3_IS_L6470
- #define E3_MICROSTEPS 16 //number of microsteps
- #define E3_K_VAL 50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
- #define E3_OVERCURRENT 2000 //maxc current in mA. If the current goes over this value, the driver will switch off
- #define E3_STALLCURRENT 1500 //current in mA where the driver will detect a stall
-
-#endif
-
-/**
- * TWI/I2C BUS
- *
- * This feature is an EXPERIMENTAL feature so it shall not be used on production
- * machines. Enabling this will allow you to send and receive I2C data from slave
- * devices on the bus.
- *
- * ; Example #1
- * ; This macro send the string "Marlin" to the slave device with address 0x63 (99)
- * ; It uses multiple M155 commands with one B arg
- * M155 A99 ; Target slave address
- * M155 B77 ; M
- * M155 B97 ; a
- * M155 B114 ; r
- * M155 B108 ; l
- * M155 B105 ; i
- * M155 B110 ; n
- * M155 S1 ; Send the current buffer
- *
- * ; Example #2
- * ; Request 6 bytes from slave device with address 0x63 (99)
- * M156 A99 B5
- *
- * ; Example #3
- * ; Example serial output of a M156 request
- * echo:i2c-reply: from:99 bytes:5 data:hello
- */
-
-// @section i2cbus
-
-//#define EXPERIMENTAL_I2CBUS
-
-#endif // CONFIGURATION_ADV_H
diff --git a/Marlin/example_configurations/Swift/Configuration.h b/Marlin/example_configurations/Swift/Configuration.h
deleted file mode 100644
index 88e4c17..0000000
--- a/Marlin/example_configurations/Swift/Configuration.h
+++ /dev/null
@@ -1,1363 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * Configuration.h
- *
- * Basic settings such as:
- *
- * - Type of electronics
- * - Type of temperature sensor
- * - Printer geometry
- * - Endstop configuration
- * - LCD controller
- * - Extra features
- *
- * Advanced settings can be found in Configuration_adv.h
- *
- */
-#ifndef CONFIGURATION_H
-#define CONFIGURATION_H
-
-/**
- *
- * ***********************************
- * ** ATTENTION TO ALL DEVELOPERS **
- * ***********************************
- *
- * You must increment this version number for every significant change such as,
- * but not limited to: ADD, DELETE RENAME OR REPURPOSE any directive/option.
- *
- * Note: Update also Version.h !
- */
-#define CONFIGURATION_H_VERSION 010100
-
-//===========================================================================
-//============================= Getting Started =============================
-//===========================================================================
-
-/**
- * Here are some standard links for getting your machine calibrated:
- *
- * http://reprap.org/wiki/Calibration
- * http://youtu.be/wAL9d7FgInk
- * http://calculator.josefprusa.cz
- * http://reprap.org/wiki/Triffid_Hunter%27s_Calibration_Guide
- * http://www.thingiverse.com/thing:5573
- * https://sites.google.com/site/repraplogphase/calibration-of-your-reprap
- * http://www.thingiverse.com/thing:298812
- */
-
-//===========================================================================
-//============================= DELTA Printer ===============================
-//===========================================================================
-// For a Delta printer replace the configuration files with the files in the
-// example_configurations/delta directory.
-//
-
-//===========================================================================
-//============================= SCARA Printer ===============================
-//===========================================================================
-// For a Scara printer replace the configuration files with the files in the
-// example_configurations/SCARA directory.
-//
-
-// @section info
-
-// User-specified version info of this build to display in [Pronterface, etc] terminal window during
-// startup. Implementation of an idea by Prof Braino to inform user that any changes made to this
-// build by the user have been successfully uploaded into firmware.
-#define STRING_CONFIG_H_AUTHOR "(none, default config)" // 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 WEBSITE_URL // will be shown during bootup in line 2
-
-//
-// *** VENDORS PLEASE READ *****************************************************
-//
-// Marlin now allow you to have a vendor boot image to be displayed on machine
-// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
-//
-// We suggest for you to take advantage of this new feature and keep the Marlin
-// boot image unmodified. For an example have a look at the bq Hephestos 2
-// example configuration folder.
-//
-//#define SHOW_CUSTOM_BOOTSCREEN
-// @section machine
-
-// SERIAL_PORT selects which serial port should be used for communication with the host.
-// This allows the connection of wireless adapters (for instance) to non-default port pins.
-// Serial port 0 is still used by the Arduino bootloader regardless of this setting.
-// :[0,1,2,3,4,5,6,7]
-#define SERIAL_PORT 0
-
-// This determines the communication speed of the printer
-// :[2400,9600,19200,38400,57600,115200,250000]
-#define BAUDRATE 115200
-
-// Enable the Bluetooth serial interface on AT90USB devices
-//#define BLUETOOTH
-
-// The following define selects which electronics board you have.
-// Please choose the name from boards.h that matches your setup
-#ifndef MOTHERBOARD
- #define MOTHERBOARD BOARD_SWIFT_10
-#endif
-
-
-#define UARM_SWIFT
-
-//#define DEBUG
-//#define SWIFT_TEST_MODE
-
-#define HW_VER "3.3"
-#define SW_VER_BASE "3.1.3"
-
-#ifdef SWIFT_TEST_MODE
-#define SW_VER SW_VER_BASE"_t"
-#elif defined(DEBUG)
-#define SW_VER SW_VER_BASE"_d"
-#else
-#define SW_VER SW_VER_BASE
-#endif
-
-#define DEVICE_NAME "SwiftPro"
-
-#define SEGMENTS_PER_SECOND 160
-
-
-// Optional custom name for your RepStrap or other custom machine
-// Displayed in the LCD "Ready" message
-//#define CUSTOM_MACHINE_NAME "3D Printer"
-
-// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
-// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
-//#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
-
-// This defines the number of extruders
-// :[1,2,3,4]
-#define EXTRUDERS 1
-
-// For Cyclops or any "multi-extruder" that shares a single nozzle.
-//#define SINGLENOZZLE
-
-// A dual extruder that uses a single stepper motor
-// Don't forget to set SSDE_SERVO_ANGLES and HOTEND_OFFSET_X/Y/Z
-//#define SWITCHING_EXTRUDER
-#if ENABLED(SWITCHING_EXTRUDER)
- #define SWITCHING_EXTRUDER_SERVO_NR 0
- #define SWITCHING_EXTRUDER_SERVO_ANGLES { 0, 90 } // Angles for E0, E1
- //#define HOTEND_OFFSET_Z {0.0, 0.0}
-#endif
-
-/**
- * "Mixing Extruder"
- * - Adds a new code, M165, to set the current mix factors.
- * - Extends the stepping routines to move multiple steppers in proportion to the mix.
- * - Optional support for Repetier Host M163, M164, and virtual extruder.
- * - This implementation supports only a single extruder.
- * - Enable DIRECT_MIXING_IN_G1 for Pia Taubert's reference implementation
- */
-//#define MIXING_EXTRUDER
-#if ENABLED(MIXING_EXTRUDER)
- #define MIXING_STEPPERS 2 // Number of steppers in your mixing extruder
- #define MIXING_VIRTUAL_TOOLS 16 // Use the Virtual Tool method with M163 and M164
- //#define DIRECT_MIXING_IN_G1 // Allow ABCDHI mix factors in G1 movement commands
-#endif
-
-// Offset of the extruders (uncomment if using more than one and relying on firmware to position when changing).
-// The offset has to be X=0, Y=0 for the extruder 0 hotend (default extruder).
-// For the other hotends it is their distance from the extruder 0 hotend.
-//#define HOTEND_OFFSET_X {0.0, 20.00} // (in mm) for each extruder, offset of the hotend on the X axis
-//#define HOTEND_OFFSET_Y {0.0, 5.00} // (in mm) for each extruder, offset of the hotend on the Y axis
-
-//// The following define selects which power supply you have. Please choose the one that matches your setup
-// 1 = ATX
-// 2 = X-Box 360 203Watts (the blue wire connected to PS_ON and the red wire to VCC)
-// :{1:'ATX',2:'X-Box 360'}
-#define POWER_SUPPLY 1
-
-// Define this to have the electronics keep the power supply off on startup. If you don't know what this is leave it.
-//#define PS_DEFAULT_OFF
-
-// @section temperature
-
-//===========================================================================
-//============================= Thermal Settings ============================
-//===========================================================================
-//
-//--NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table
-//
-//// Temperature sensor settings:
-// -3 is thermocouple with MAX31855 (only for sensor 0)
-// -2 is thermocouple with MAX6675 (only for sensor 0)
-// -1 is thermocouple with AD595
-// 0 is not used
-// 1 is 100k thermistor - best choice for EPCOS 100k (4.7k pullup)
-// 2 is 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)
-// 3 is Mendel-parts thermistor (4.7k pullup)
-// 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !!
-// 5 is 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup)
-// 6 is 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup)
-// 7 is 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup)
-// 71 is 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup)
-// 8 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup)
-// 9 is 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup)
-// 10 is 100k RS thermistor 198-961 (4.7k pullup)
-// 11 is 100k beta 3950 1% thermistor (4.7k pullup)
-// 12 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed)
-// 13 is 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE"
-// 20 is the PT100 circuit found in the Ultimainboard V2.x
-// 60 is 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
-// 66 is 4.7M High Temperature thermistor from Dyze Design
-// 70 is the 100K thermistor found in the bq Hephestos 2
-//
-// 1k ohm pullup tables - This is not normal, you would have to have changed out your 4.7k for 1k
-// (but gives greater accuracy and more stable PID)
-// 51 is 100k thermistor - EPCOS (1k pullup)
-// 52 is 200k thermistor - ATC Semitec 204GT-2 (1k pullup)
-// 55 is 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup)
-//
-// 1047 is Pt1000 with 4k7 pullup
-// 1010 is Pt1000 with 1k pullup (non standard)
-// 147 is Pt100 with 4k7 pullup
-// 110 is Pt100 with 1k pullup (non standard)
-// 998 and 999 are Dummy Tables. They will ALWAYS read 25°C or the temperature defined below.
-// Use it for Testing or Development purposes. NEVER for production machine.
-//#define DUMMY_THERMISTOR_998_VALUE 25
-//#define DUMMY_THERMISTOR_999_VALUE 100
-// :{ '0': "Not used",'1':"100k / 4.7k - EPCOS",'2':"200k / 4.7k - ATC Semitec 204GT-2",'3':"Mendel-parts / 4.7k",'4':"10k !! do not use for a hotend. Bad resolution at high temp. !!",'5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)",'6':"100k / 4.7k EPCOS - Not as accurate as Table 1",'7':"100k / 4.7k Honeywell 135-104LAG-J01",'8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT",'9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1",'10':"100k / 4.7k RS 198-961",'11':"100k / 4.7k beta 3950 1%",'12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)",'13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'",'20':"PT100 (Ultimainboard V2.x)",'51':"100k / 1k - EPCOS",'52':"200k / 1k - ATC Semitec 204GT-2",'55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)",'60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950",'66':"Dyze Design 4.7M High Temperature thermistor",'70':"the 100K thermistor found in the bq Hephestos 2",'71':"100k / 4.7k Honeywell 135-104LAF-J01",'147':"Pt100 / 4.7k",'1047':"Pt1000 / 4.7k",'110':"Pt100 / 1k (non-standard)",'1010':"Pt1000 / 1k (non standard)",'-3':"Thermocouple + MAX31855 (only for sensor 0)",'-2':"Thermocouple + MAX6675 (only for sensor 0)",'-1':"Thermocouple + AD595",'998':"Dummy 1",'999':"Dummy 2" }
-#define TEMP_SENSOR_0 1
-#define TEMP_SENSOR_1 0
-#define TEMP_SENSOR_2 0
-#define TEMP_SENSOR_3 0
-#define TEMP_SENSOR_BED 0
-
-// This makes temp sensor 1 a redundant sensor for sensor 0. If the temperatures difference between these sensors is to high the print will be aborted.
-//#define TEMP_SENSOR_1_AS_REDUNDANT
-#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 10
-
-// Extruder temperature must be close to target for this long before M109 returns success
-#define TEMP_RESIDENCY_TIME 2 // (seconds)
-#define TEMP_HYSTERESIS 5 // (degC) range of +/- temperatures considered "close" to the target one
-#define TEMP_WINDOW 1 // (degC) Window around target to start the residency timer x degC early.
-
-// Bed temperature must be close to target for this long before M190 returns success
-#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.
-
-// The minimal temperature defines the temperature below which the heater will not be enabled It is used
-// to check that the wiring to the thermistor is not broken.
-// Otherwise this would lead to the heater being powered on all the time.
-#define HEATER_0_MINTEMP 5
-#define HEATER_1_MINTEMP 5
-#define HEATER_2_MINTEMP 5
-#define HEATER_3_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 275
-#define HEATER_1_MAXTEMP 275
-#define HEATER_2_MAXTEMP 275
-#define HEATER_3_MAXTEMP 275
-#define BED_MAXTEMP 150
-
-//===========================================================================
-//============================= PID Settings ================================
-//===========================================================================
-// PID Tuning Guide here: http://reprap.org/wiki/PID_Tuning
-
-// Comment the following line to disable PID and enable bang-bang.
-#define PIDTEMP
-#define BANG_MAX 255 // limits current to nozzle while in bang-bang mode; 255=full current
-#define PID_MAX BANG_MAX // limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
-#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
- //#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
- // Set/get with gcode: M301 E[extruder number, 0-2]
- #define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
- // is more than PID_FUNCTIONAL_RANGE then the PID will be shut off and the heater will be set to min/max.
- #define PID_INTEGRAL_DRIVE_MAX PID_MAX //limit for the integral term
- #define K1 0.95 //smoothing factor within the PID
-
- // If you are using a pre-configured hotend then you can use one of the value sets by uncommenting it
- // Ultimaker
- #define DEFAULT_Kp 22.2
- #define DEFAULT_Ki 1.08
- #define DEFAULT_Kd 114
-
-
- // MakerGear
- //#define DEFAULT_Kp 7.0
- //#define DEFAULT_Ki 0.1
- //#define DEFAULT_Kd 12
-
- // Mendel Parts V9 on 12V
- //#define DEFAULT_Kp 63.0
- //#define DEFAULT_Ki 2.25
- //#define DEFAULT_Kd 440
-
-#endif // PIDTEMP
-
-//===========================================================================
-//============================= PID > Bed Temperature Control ===============
-//===========================================================================
-// Select PID or bang-bang with PIDTEMPBED. If bang-bang, BED_LIMIT_SWITCHING will enable hysteresis
-//
-// Uncomment this to enable PID on the bed. It uses the same frequency PWM as the extruder.
-// If your PID_dT is the default, and correct for your hardware/configuration, that means 7.689Hz,
-// which is fine for driving a square wave into a resistive load and does not significantly impact you FET heating.
-// This also works fine on a Fotek SSR-10DA Solid State Relay into a 250W heater.
-// If your configuration is significantly different than this and you don't understand the issues involved, you probably
-// shouldn't use bed PID until someone else verifies your hardware works.
-// If this is enabled, find your own PID constants below.
-//#define PIDTEMPBED
-
-//#define BED_LIMIT_SWITCHING
-
-// This sets the max power delivered to the bed, and replaces the HEATER_BED_DUTY_CYCLE_DIVIDER option.
-// all forms of bed control obey this (PID, bang-bang, bang-bang with hysteresis)
-// setting this to anything other than 255 enables a form of PWM to the bed just like HEATER_BED_DUTY_CYCLE_DIVIDER did,
-// so you shouldn't use it unless you are OK with PWM on your bed. (see the comment on enabling PIDTEMPBED)
-#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current
-
-#if ENABLED(PIDTEMPBED)
-
- //#define PID_BED_DEBUG // Sends debug data to the serial port.
-
- #define PID_BED_INTEGRAL_DRIVE_MAX MAX_BED_POWER //limit for the integral term
-
- //120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
- //from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10)
- #define DEFAULT_bedKp 10.00
- #define DEFAULT_bedKi .023
- #define DEFAULT_bedKd 305.4
-
- //120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
- //from pidautotune
- //#define DEFAULT_bedKp 97.1
- //#define DEFAULT_bedKi 1.41
- //#define DEFAULT_bedKd 1675.16
-
- // FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles.
-#endif // PIDTEMPBED
-
-// @section extruder
-
-//this prevents dangerous Extruder moves, i.e. if the temperature is under the limit
-//can be software-disabled for whatever purposes by
-#define PREVENT_DANGEROUS_EXTRUDE
-//if PREVENT_DANGEROUS_EXTRUDE is on, you can still disable (uncomment) very long bits of extrusion separately.
-#define PREVENT_LENGTHY_EXTRUDE
-
-#define EXTRUDE_MINTEMP 170
-#define EXTRUDE_MAXLENGTH (X_MAX_LENGTH+Y_MAX_LENGTH) //prevent extrusion of very large distances.
-
-//===========================================================================
-//======================== Thermal Runaway Protection =======================
-//===========================================================================
-
-/**
- * Thermal Protection protects your printer from damage and fire if a
- * thermistor falls out or temperature sensors fail in any way.
- *
- * The issue: If a thermistor falls out or a temperature sensor fails,
- * Marlin can no longer sense the actual temperature. Since a disconnected
- * thermistor reads as a low temperature, the firmware will keep the heater on.
- *
- * If you get "Thermal Runaway" or "Heating failed" errors the
- * details can be tuned in Configuration_adv.h
- */
-
-#define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders
-//#define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed
-
-//===========================================================================
-//============================= Mechanical Settings =========================
-//===========================================================================
-
-// @section machine
-
-// Uncomment one of these options to enable CoreXY, CoreXZ, or CoreYZ kinematics
-//#define COREXY
-//#define COREXZ
-//#define COREYZ
-
-// Enable this option for Toshiba steppers
-//#define CONFIG_STEPPERS_TOSHIBA
-
-//===========================================================================
-//============================== Endstop Settings ===========================
-//===========================================================================
-
-// @section homing
-
-// Specify here all the endstop connectors that are connected to any endstop or probe.
-// Almost all printers will be using one per axis. Probes will use one or more of the
-// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
-#define USE_XMIN_PLUG
-#define USE_YMIN_PLUG
-#define USE_ZMIN_PLUG
-//#define USE_XMAX_PLUG
-//#define USE_YMAX_PLUG
-//#define USE_ZMAX_PLUG
-
-// coarse Endstop Settings
-#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
-
-#if DISABLED(ENDSTOPPULLUPS)
- // fine endstop settings: Individual pullups. will be ignored if ENDSTOPPULLUPS is defined
- //#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 false // set to true to invert the logic of the endstop.
-#define Y_MIN_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
-#define Z_MIN_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
-#define X_MAX_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
-#define Y_MAX_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
-#define Z_MAX_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
-#define Z_MIN_PROBE_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
-
-//===========================================================================
-//============================= Z Probe Options =============================
-//===========================================================================
-
-//
-// Probe Type
-// Probes are sensors/switches that are activated / deactivated before/after use.
-//
-// Allen Key Probes, Servo Probes, Z-Sled Probes, FIX_MOUNTED_PROBE, etc.
-// You must activate one of these to use AUTO_BED_LEVELING_FEATURE below.
-//
-// Use M851 to set the Z probe vertical offset from the nozzle. Store with M500.
-//
-
-// A Fix-Mounted Probe either doesn't deploy or needs manual deployment.
-// For example an inductive probe, or a setup that uses the nozzle to probe.
-// An inductive probe must be deactivated to go below
-// its trigger-point if hardware endstops are active.
-//#define FIX_MOUNTED_PROBE
-
-// The BLTouch probe emulates a servo probe.
-//#define BLTOUCH
-
-// Z Servo Probe, such as an endstop switch on a rotating arm.
-//#define Z_ENDSTOP_SERVO_NR 0
-//#define Z_SERVO_ANGLES {70,0} // Z Servo Deploy and Stow angles
-
-// Enable if you have a Z probe mounted on a sled like those designed by Charles Bell.
-//#define Z_PROBE_SLED
-//#define SLED_DOCKING_OFFSET 5 // The extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.
-
-// Z Probe to nozzle (X,Y) offset, relative to (0, 0).
-// X and Y offsets must be integers.
-//
-// In the following example the X and Y offsets are both positive:
-// #define X_PROBE_OFFSET_FROM_EXTRUDER 10
-// #define Y_PROBE_OFFSET_FROM_EXTRUDER 10
-//
-// +-- BACK ---+
-// | |
-// L | (+) P | R <-- probe (20,20)
-// E | | I
-// F | (-) N (+) | G <-- nozzle (10,10)
-// T | | H
-// | (-) | T
-// | |
-// O-- FRONT --+
-// (0,0)
-#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]
-
-// X and Y axis travel speed (mm/m) between probes
-#define XY_PROBE_SPEED 8000
-// Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)
-#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
-// Speed for the "accurate" probe of each point
-#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)
-// Use double touch for probing
-//#define PROBE_DOUBLE_TOUCH
-
-//
-// Allen Key Probe is defined in the Delta example configurations.
-//
-
-// Enable Z_MIN_PROBE_ENDSTOP to use _both_ a Z Probe and a Z-min-endstop on the same machine.
-// With this option the Z_MIN_PROBE_PIN will only be used for probing, never for homing.
-//
-// *** PLEASE READ ALL INSTRUCTIONS BELOW FOR SAFETY! ***
-//
-// To continue using the Z-min-endstop for homing, be sure to disable Z_SAFE_HOMING.
-// Example: To park the head outside the bed area when homing with G28.
-//
-// To use a separate Z probe, your board must define a Z_MIN_PROBE_PIN.
-//
-// For a servo-based Z probe, you must set up servo support below, including
-// NUM_SERVOS, Z_ENDSTOP_SERVO_NR and Z_SERVO_ANGLES.
-//
-// - RAMPS 1.3/1.4 boards may be able to use the 5V, GND, and Aux4->D32 pin.
-// - Use 5V for powered (usu. inductive) sensors.
-// - Otherwise connect:
-// - normally-closed switches to GND and D32.
-// - normally-open switches to 5V and D32.
-//
-// Normally-closed switches are advised and are the default.
-//
-// The Z_MIN_PROBE_PIN sets the Arduino pin to use. (See your board's pins file.)
-// Since the RAMPS Aux4->D32 pin maps directly to the Arduino D32 pin, D32 is the
-// default pin for all RAMPS-based boards. Some other boards map differently.
-// To set or change the pin for your board, edit the appropriate pins_XXXXX.h file.
-//
-// WARNING:
-// Setting the wrong pin may have unexpected and potentially disastrous consequences.
-// Use with caution and do your homework.
-//
-//#define Z_MIN_PROBE_ENDSTOP
-
-// Enable Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN to use the Z_MIN_PIN for your Z_MIN_PROBE.
-// The Z_MIN_PIN will then be used for both Z-homing and probing.
-#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
-
-// To use a probe you must enable one of the two options above!
-
-// This option disables the use of the Z_MIN_PROBE_PIN
-// To enable the Z probe pin but disable its use, uncomment the line below. This only affects a
-// Z probe switch if you have a separate Z min endstop also and have activated Z_MIN_PROBE_ENDSTOP above.
-// If you're using the Z MIN endstop connector for your Z probe, this has no effect.
-//#define DISABLE_Z_MIN_PROBE_ENDSTOP
-
-// Enable Z Probe Repeatability test to see how accurate your probe is
-//#define Z_MIN_PROBE_REPEATABILITY_TEST
-
-//
-// Probe Raise options provide clearance for the probe to deploy, stow, and travel.
-//
-#define Z_PROBE_DEPLOY_HEIGHT 15 // Raise to make room for the probe to deploy / stow
-#define Z_PROBE_TRAVEL_HEIGHT 5 // Raise between probing points.
-
-//
-// For M851 give a range for adjusting the Z probe offset
-//
-#define Z_PROBE_OFFSET_RANGE_MIN -20
-#define Z_PROBE_OFFSET_RANGE_MAX 20
-
-// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
-// :{0:'Low',1:'High'}
-
-#define X_ENABLE_ON 1
-#define Y_ENABLE_ON 1
-#define Z_ENABLE_ON 1
-#define E_ENABLE_ON 0 // For all extruders
-
-
-
-// Disables axis stepper immediately when it's not being used.
-// WARNING: When motors turn off there is a chance of losing position accuracy!
-#define DISABLE_X false
-#define DISABLE_Y false
-#define DISABLE_Z false
-// Warn on display about possibly reduced accuracy
-//#define DISABLE_REDUCED_ACCURACY_WARNING
-
-// @section extruder
-
-#define DISABLE_E false // For all extruders
-#define DISABLE_INACTIVE_EXTRUDER true //disable only inactive extruders and keep active extruder enabled
-
-// @section machine
-
-// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way.
-
-#define INVERT_X_DIR false
-#define INVERT_Y_DIR false
-#define INVERT_Z_DIR false
-
-
-// @section extruder
-
-// For direct drive extruder v9 set to true, for geared extruder set to false.
-#define INVERT_E0_DIR false
-#define INVERT_E1_DIR false
-#define INVERT_E2_DIR false
-#define INVERT_E3_DIR false
-
-// @section homing
-
-//#define Z_HOMING_HEIGHT 4 // (in mm) Minimal z height before homing (G28) for Z clearance above the bed, clamps, ...
- // Be sure you have this distance over your Z_MAX_POS in case.
-
-// ENDSTOP SETTINGS:
-// Sets direction of endstops when homing; 1=MAX, -1=MIN
-// :[-1,1]
-#define X_HOME_DIR -1
-#define Y_HOME_DIR -1
-#define Z_HOME_DIR -1
-
-#define min_software_endstops true // If true, axis won't move to coordinates less than HOME_POS.
-#define max_software_endstops true // If true, axis won't move to coordinates greater than the defined lengths below.
-
-// @section machine
-
-// Travel limits after homing (units are in mm)
-#define X_MIN_POS -300
-#define Y_MIN_POS -300
-#define Z_MIN_POS -300
-#define X_MAX_POS 300
-#define Y_MAX_POS 300
-#define Z_MAX_POS 300
-
-//===========================================================================
-//========================= Filament Runout Sensor ==========================
-//===========================================================================
-//#define FILAMENT_RUNOUT_SENSOR // Uncomment for defining a filament runout sensor such as a mechanical or opto endstop to check the existence of filament
- // In RAMPS uses servo pin 2. Can be changed in pins file. For other boards pin definition should be made.
- // It is assumed that when logic high = filament available
- // when logic low = filament ran out
-#if ENABLED(FILAMENT_RUNOUT_SENSOR)
- const bool FIL_RUNOUT_INVERTING = false; // set to true to invert the logic of the sensor.
- #define ENDSTOPPULLUP_FIL_RUNOUT // Uncomment to use internal pullup for filament runout pins if the sensor is defined.
- #define FILAMENT_RUNOUT_SCRIPT "M600"
-#endif
-
-//===========================================================================
-//============================ Mesh Bed Leveling ============================
-//===========================================================================
-
-//#define MESH_BED_LEVELING // Enable mesh bed leveling.
-
-#if ENABLED(MESH_BED_LEVELING)
- #define MESH_INSET 10 // Mesh inset margin on print area
- #define MESH_NUM_X_POINTS 3 // Don't use more than 7 points per axis, implementation limited.
- #define MESH_NUM_Y_POINTS 3
- #define MESH_HOME_SEARCH_Z 4 // Z after Home, bed somewhere below but above 0.0.
-
- //#define MESH_G28_REST_ORIGIN // After homing all axes ('G28' or 'G28 XYZ') rest at origin [0,0,0]
-
- //#define MANUAL_BED_LEVELING // Add display menu option for bed leveling.
-
- #if ENABLED(MANUAL_BED_LEVELING)
- #define MBL_Z_STEP 0.025 // Step size while manually probing Z axis.
- #endif // MANUAL_BED_LEVELING
-
-#endif // MESH_BED_LEVELING
-
-//===========================================================================
-//============================ Bed Auto Leveling ============================
-//===========================================================================
-
-// @section bedlevel
-
-//#define AUTO_BED_LEVELING_FEATURE // Delete the comment to enable (remove // at the start of the line)
-
-// Enable this feature to get detailed logging of G28, G29, M48, etc.
-// Logging is off by default. Enable this logging feature with 'M111 S32'.
-// NOTE: Requires a huge amount of PROGMEM.
-//#define DEBUG_LEVELING_FEATURE
-
-#if ENABLED(AUTO_BED_LEVELING_FEATURE)
-
- // There are 2 different ways to specify probing locations:
- //
- // - "grid" mode
- // Probe several points in a rectangular grid.
- // You specify the rectangle and the density of sample points.
- // This mode is preferred because there are more measurements.
- //
- // - "3-point" mode
- // Probe 3 arbitrary points on the bed (that aren't collinear)
- // You specify the XY coordinates of all 3 points.
-
- // Enable this to sample the bed in a grid (least squares solution).
- // Note: this feature generates 10KB extra code size.
- #define AUTO_BED_LEVELING_GRID
-
- #if ENABLED(AUTO_BED_LEVELING_GRID)
-
- #define LEFT_PROBE_BED_POSITION 15
- #define RIGHT_PROBE_BED_POSITION 170
- #define FRONT_PROBE_BED_POSITION 20
- #define BACK_PROBE_BED_POSITION 170
-
- #define MIN_PROBE_EDGE 10 // The Z probe minimum square sides can be no smaller than this.
-
- // Set the number of grid points per dimension.
- // You probably don't need more than 3 (squared=9).
- #define AUTO_BED_LEVELING_GRID_POINTS 2
-
- #else // !AUTO_BED_LEVELING_GRID
-
- // Arbitrary points to probe.
- // A simple cross-product is used to estimate the plane of the bed.
- #define ABL_PROBE_PT_1_X 15
- #define ABL_PROBE_PT_1_Y 180
- #define ABL_PROBE_PT_2_X 15
- #define ABL_PROBE_PT_2_Y 20
- #define ABL_PROBE_PT_3_X 170
- #define ABL_PROBE_PT_3_Y 20
-
- #endif // !AUTO_BED_LEVELING_GRID
-
- //#define Z_PROBE_END_SCRIPT "G1 Z10 F12000\nG1 X15 Y330\nG1 Z0.5\nG1 Z10" // These commands will be executed in the end of G29 routine.
- // Useful to retract a deployable Z probe.
-
- // If you've enabled AUTO_BED_LEVELING_FEATURE and are using the Z Probe for Z Homing,
- // it is highly recommended you also enable Z_SAFE_HOMING below!
-
-#endif // AUTO_BED_LEVELING_FEATURE
-
-
-// @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 // Distance between the nozzle to printbed after homing
-
-// Use "Z Safe Homing" to avoid homing with a Z probe outside the bed area.
-//
-// With this feature enabled:
-//
-// - Allow Z homing only after X and Y homing AND stepper drivers still enabled.
-// - If stepper drivers time out, it will need X and Y homing again before Z homing.
-// - Move the Z probe (or nozzle) to a defined XY point before Z Homing when homing all axes (G28).
-// - Prevent Z homing when the Z probe is outside bed area.
-//#define Z_SAFE_HOMING
-
-#if ENABLED(Z_SAFE_HOMING)
- #define Z_SAFE_HOMING_X_POINT ((X_MIN_POS + X_MAX_POS) / 2) // X point for Z homing when homing all axis (G28).
- #define Z_SAFE_HOMING_Y_POINT ((Y_MIN_POS + Y_MAX_POS) / 2) // Y point for Z homing when homing all axis (G28).
-#endif
-
-// Homing speeds (mm/m)
-#define HOMING_FEEDRATE_XY (50*60)
-#define HOMING_FEEDRATE_Z (4*60)
-
-//
-// MOVEMENT SETTINGS
-// @section motion
-//
-
-// default settings
-#define DECELERATE_MULTIPLE (20.0f/36.0f)
-#define MIROC 128
-#define GEAR_RATIO 4.5
-#define DEFAULT_AXIS_STEPS_PER_UNIT { DECELERATE_MULTIPLE*MIROC*GEAR_RATIO,\
- DECELERATE_MULTIPLE*MIROC*GEAR_RATIO,\
- DECELERATE_MULTIPLE*MIROC*GEAR_RATIO, 360/3.1415926/12*16/1.8}
-
-
-
-//#define DEFAULT_AXIS_STEPS_PER_UNIT {80,80,4000,500} // default steps per unit for Ultimaker
-#define DEFAULT_MAX_FEEDRATE {500, 500, 500, 25} // (mm/sec)
-#define DEFAULT_MAX_ACCELERATION {2000,2000,2000,10000} // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for Skeinforge 40+, for older versions raise them a lot.
-
-#define DEFAULT_ACCELERATION 25 // X, Y, Z and E acceleration in mm/s^2 for printing moves
-#define DEFAULT_RETRACT_ACCELERATION 25 // E acceleration in mm/s^2 for retracts
-#define DEFAULT_TRAVEL_ACCELERATION 100 // X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
-
-// The speed change that does not require acceleration (i.e. the software might assume it can be done instantaneously)
-#define DEFAULT_XYJERK 1.0 // (mm/sec)
-#define DEFAULT_ZJERK 1.0 // (mm/sec)
-#define DEFAULT_EJERK 5.0 // (mm/sec)
-
-
-//=============================================================================
-//============================= Additional Features ===========================
-//=============================================================================
-
-// @section extras
-
-//
-// EEPROM
-//
-// The microcontroller can store settings in the EEPROM, e.g. max velocity...
-// M500 - stores parameters in EEPROM
-// M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily).
-// M502 - reverts to the default "factory settings". You still need to store them in EEPROM afterwards if you want to.
-//define this to enable EEPROM support
-//#define EEPROM_SETTINGS
-
-#if ENABLED(EEPROM_SETTINGS)
- // To disable EEPROM Serial responses and decrease program space by ~1700 byte: comment this out:
- #define EEPROM_CHITCHAT // Please keep turned on if you can.
-#endif
-
-//
-// Host Keepalive
-//
-// When enabled Marlin will send a busy status message to the host
-// every couple of seconds when it can't accept commands.
-//
-//#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.
-
-//
-// M100 Free Memory Watcher
-//
-//#define M100_FREE_MEMORY_WATCHER // uncomment to add the M100 Free Memory Watcher for debug purpose
-
-//
-// G20/G21 Inch mode support
-//
-//#define INCH_MODE_SUPPORT
-
-//
-// M149 Set temperature units support
-//
-//#define TEMPERATURE_UNITS_SUPPORT
-
-// @section temperature
-
-// Preheat Constants
-#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
-
-//
-// Nozzle Park -- EXPERIMENTAL
-//
-// When enabled allows the user to define a special XYZ position, inside the
-// machine's topology, to park the nozzle when idle or when receiving the G27
-// command.
-//
-// The "P" paramenter controls what is the action applied to the Z axis:
-// P0: (Default) If current Z-pos is lower than Z-park then the nozzle will
-// be raised to reach Z-park height.
-//
-// P1: No matter the current Z-pos, the nozzle will be raised/lowered to
-// reach Z-park height.
-//
-// P2: The nozzle height will be raised by Z-park amount but never going over
-// the machine's limit of Z_MAX_POS.
-//
-//#define NOZZLE_PARK_FEATURE
-
-#if ENABLED(NOZZLE_PARK_FEATURE)
- // Specify a park position as { X, Y, Z }
- #define NOZZLE_PARK_POINT { (X_MIN_POS + 10), (Y_MAX_POS - 10), 20 }
-#endif
-
-//
-// Clean Nozzle Feature -- EXPERIMENTAL
-//
-// When enabled allows the user to send G12 to start the nozzle cleaning
-// process, the G-Code accepts two parameters:
-// "P" for pattern selection
-// "S" for defining the number of strokes/repetitions
-//
-// Available list of patterns:
-// P0: This is the default pattern, this process requires a sponge type
-// material at a fixed bed location, the cleaning process is based on
-// "strokes" i.e. back-and-forth movements between the starting and end
-// points.
-//
-// P1: This starts a zig-zag pattern between (X0, Y0) and (X1, Y1), "T"
-// defines the number of zig-zag triangles to be done. "S" defines the
-// number of strokes aka one back-and-forth movement. As an example
-// sending "G12 P1 S1 T3" will execute:
-//
-// --
-// | (X0, Y1) | /\ /\ /\ | (X1, Y1)
-// | | / \ / \ / \ |
-// A | | / \ / \ / \ |
-// | | / \ / \ / \ |
-// | (X0, Y0) | / \/ \/ \ | (X1, Y0)
-// -- +--------------------------------+
-// |________|_________|_________|
-// T1 T2 T3
-//
-// Caveats: End point Z should use the same value as Start point Z.
-//
-// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
-// may change to add new functionality like different wipe patterns.
-//
-//#define NOZZLE_CLEAN_FEATURE
-
-#if ENABLED(NOZZLE_CLEAN_FEATURE)
- // Number of pattern repetitions
- #define NOZZLE_CLEAN_STROKES 12
-
- // Specify positions as { X, Y, Z }
- #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
- #define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
-
- // Moves the nozzle to the initial position
- #define NOZZLE_CLEAN_GOBACK
-#endif
-
-//
-// Print job timer
-//
-// Enable this option to automatically start and stop the
-// print job timer when M104/M109/M190 commands are received.
-// M104 (extruder without wait) - high temp = none, low temp = stop timer
-// M109 (extruder with wait) - high temp = start timer, low temp = stop timer
-// M190 (bed with wait) - high temp = start timer, low temp = none
-//
-// In all cases the timer can be started and stopped using
-// the following commands:
-//
-// - M75 - Start the print job timer
-// - M76 - Pause the print job timer
-// - M77 - Stop the print job timer
-#define PRINTJOB_TIMER_AUTOSTART
-
-//
-// Print Counter
-//
-// When enabled Marlin will keep track of some print statistical data such as:
-// - Total print jobs
-// - Total successful print jobs
-// - Total failed print jobs
-// - Total time printing
-//
-// This information can be viewed by the M78 command.
-//#define PRINTCOUNTER
-
-//=============================================================================
-//============================= LCD and SD support ============================
-//=============================================================================
-
-// @section lcd
-
-//
-// LCD LANGUAGE
-//
-// Here you may choose the language used by Marlin on the LCD menus, the following
-// list of languages are available:
-// en, an, bg, ca, cn, cz, de, el, el-gr, es, eu, fi, fr, gl, hr, it,
-// kana, kana_utf8, nl, pl, pt, pt_utf8, pt-br, pt-br_utf8, ru, test
-//
-// :{'en':'English','an':'Aragonese','bg':'Bulgarian','ca':'Catalan','cn':'Chinese','cz':'Czech','de':'German','el':'Greek','el-gr':'Greek (Greece)','es':'Spanish','eu':'Basque-Euskera','fi':'Finnish','fr':'French','gl':'Galician','hr':'Croatian','it':'Italian','kana':'Japanese','kana_utf8':'Japanese (UTF8)','nl':'Dutch','pl':'Polish','pt':'Portuguese','pt-br':'Portuguese (Brazilian)','pt-br_utf8':'Portuguese (Brazilian UTF8)','pt_utf8':'Portuguese (UTF8)','ru':'Russian','test':'TEST'}
-//
-#define LCD_LANGUAGE en
-
-//
-// LCD Character Set
-//
-// Note: This option is NOT applicable to Graphical Displays.
-//
-// All character-based LCD's provide ASCII plus one of these
-// language extensions:
-//
-// - JAPANESE ... the most common
-// - WESTERN ... with more accented characters
-// - CYRILLIC ... for the Russian language
-//
-// To determine the language extension installed on your controller:
-//
-// - Compile and upload with LCD_LANGUAGE set to 'test'
-// - Click the controller to view the LCD menu
-// - The LCD will display Japanese, Western, or Cyrillic text
-//
-// See https://github.com/MarlinFirmware/Marlin/wiki/LCD-Language
-//
-// :['JAPANESE','WESTERN','CYRILLIC']
-//
-#define DISPLAY_CHARSET_HD44780 JAPANESE
-
-//
-// LCD TYPE
-//
-// You may choose ULTRA_LCD if you have character based LCD with 16x2, 16x4, 20x2,
-// 20x4 char/lines or DOGLCD for the full graphics display with 128x64 pixels
-// (ST7565R family). (This option will be set automatically for certain displays.)
-//
-// IMPORTANT NOTE: The U8glib library is required for Full Graphic Display!
-// https://github.com/olikraus/U8glib_Arduino
-//
-//#define ULTRA_LCD // Character based
-//#define DOGLCD // Full graphics display
-
-//
-// SD CARD
-//
-// SD Card support is disabled by default. If your controller has an SD slot,
-// you must uncomment the following option or it won't work.
-//
-//#define SDSUPPORT
-
-//
-// SD CARD: SPI SPEED
-//
-// Uncomment ONE of the following items to use a slower SPI transfer
-// speed. This is usually required if you're getting volume init errors.
-//
-//#define SPI_SPEED SPI_HALF_SPEED
-//#define SPI_SPEED SPI_QUARTER_SPEED
-//#define SPI_SPEED SPI_EIGHTH_SPEED
-
-//
-// SD CARD: ENABLE CRC
-//
-// Use CRC checks and retries on the SD communication.
-//
-//#define SD_CHECK_AND_RETRY
-
-//
-// ENCODER SETTINGS
-//
-// This option overrides the default number of encoder pulses needed to
-// produce one step. Should be increased for high-resolution encoders.
-//
-//#define ENCODER_PULSES_PER_STEP 1
-
-//
-// Use this option to override the number of step signals required to
-// move between next/prev menu items.
-//
-//#define ENCODER_STEPS_PER_MENU_ITEM 5
-
-/**
- * Encoder Direction Options
- *
- * Test your encoder's behavior first with both options disabled.
- *
- * Reversed Value Edit and Menu Nav? Enable REVERSE_ENCODER_DIRECTION.
- * Reversed Menu Navigation only? Enable REVERSE_MENU_DIRECTION.
- * Reversed Value Editing only? Enable BOTH options.
- */
-
-//
-// This option reverses the encoder direction everywhere
-//
-// Set this option if CLOCKWISE causes values to DECREASE
-//
-//#define REVERSE_ENCODER_DIRECTION
-
-//
-// This option reverses the encoder direction for navigating LCD menus.
-//
-// If CLOCKWISE normally moves DOWN this makes it go UP.
-// If CLOCKWISE normally moves UP this makes it go DOWN.
-//
-//#define REVERSE_MENU_DIRECTION
-
-//
-// Individual Axis Homing
-//
-// Add individual axis homing items (Home X, Home Y, and Home Z) to the LCD menu.
-//
-//#define INDIVIDUAL_AXIS_HOMING_MENU
-
-//
-// SPEAKER/BUZZER
-//
-// If you have a speaker that can produce tones, enable it here.
-// By default Marlin assumes you have a buzzer with a fixed frequency.
-//
-//#define SPEAKER
-
-//
-// The duration and frequency for the UI feedback sound.
-// Set these to 0 to disable audio feedback in the LCD menus.
-//
-// Note: Test audio output with the G-Code:
-// M300 S P