From c2321b1cdd18710625316ad37e2bbc21ce1bfa8a Mon Sep 17 00:00:00 2001 From: fixoid Date: Fri, 12 May 2017 22:09:40 +0300 Subject: [PATCH] Separate SWITCHING_NOZZLE and SWITCHING_EXTRUDER --- Marlin/Conditionals_LCD.h | 42 +++++++++---------- Marlin/Conditionals_post.h | 2 +- Marlin/Configuration.h | 10 ++++- Marlin/Marlin_main.cpp | 32 +++++++++++--- Marlin/SanityCheck.h | 23 ++++++---- Marlin/configuration_store.cpp | 2 +- .../Cartesio/Configuration.h | 10 ++++- .../Felix/Configuration.h | 10 ++++- .../Felix/DUAL/Configuration.h | 10 ++++- .../FolgerTech-i3-2020/Configuration.h | 10 ++++- .../Hephestos/Configuration.h | 10 ++++- .../Hephestos_2/Configuration.h | 10 ++++- .../K8200/Configuration.h | 10 ++++- .../K8400/Configuration.h | 10 ++++- .../K8400/Dual-head/Configuration.h | 10 ++++- .../RepRapWorld/Megatronics/Configuration.h | 10 ++++- .../RigidBot/Configuration.h | 10 ++++- .../SCARA/Configuration.h | 10 ++++- .../TAZ4/Configuration.h | 10 ++++- .../TinyBoy2/Configuration.h | 10 ++++- .../WITBOX/Configuration.h | 10 ++++- .../adafruit/ST7565/Configuration.h | 10 ++++- .../FLSUN/auto_calibrate/Configuration.h | 10 ++++- .../delta/FLSUN/kossel_mini/Configuration.h | 10 ++++- .../delta/generic/Configuration.h | 10 ++++- .../delta/kossel_mini/Configuration.h | 10 ++++- .../delta/kossel_pro/Configuration.h | 10 ++++- .../delta/kossel_xl/Configuration.h | 10 ++++- .../gCreate_gMax1.5+/Configuration.h | 10 ++++- .../makibox/Configuration.h | 10 ++++- .../tvrrug/Round2/Configuration.h | 10 ++++- .../wt150/Configuration.h | 10 ++++- README.md | 2 +- 33 files changed, 280 insertions(+), 93 deletions(-) diff --git a/Marlin/Conditionals_LCD.h b/Marlin/Conditionals_LCD.h index 19c7f81092..3c775a1155 100644 --- a/Marlin/Conditionals_LCD.h +++ b/Marlin/Conditionals_LCD.h @@ -291,36 +291,34 @@ * TOOL_E_INDEX - Index to use when getting/setting the tool state * */ - #if ENABLED(SINGLENOZZLE) // One hotend, multi-extruder - #define HOTENDS 1 - #define E_STEPPERS EXTRUDERS - #define E_MANUAL EXTRUDERS - #define TOOL_E_INDEX current_block->active_extruder + #if ENABLED(SINGLENOZZLE) || ENABLED(MIXING_EXTRUDER) // One hotend, one thermistor, no XY offset + #define HOTENDS 1 #undef TEMP_SENSOR_1_AS_REDUNDANT #undef HOTEND_OFFSET_X #undef HOTEND_OFFSET_Y - #elif ENABLED(SWITCHING_EXTRUDER) // One E stepper, unified E axis, two hotends - #define HOTENDS EXTRUDERS - #define E_STEPPERS 1 - #define E_MANUAL 1 - #define TOOL_E_INDEX 0 - #ifndef HOTEND_OFFSET_Z + #else // Two hotends + #define HOTENDS EXTRUDERS + #if ENABLED(SWITCHING_NOZZLE) && !defined(HOTEND_OFFSET_Z) #define HOTEND_OFFSET_Z { 0 } #endif - #elif ENABLED(MIXING_EXTRUDER) // Multi-stepper, unified E axis, one hotend - #define HOTENDS 1 - #define E_STEPPERS MIXING_STEPPERS - #define E_MANUAL 1 - #define TOOL_E_INDEX 0 - #else // One stepper, E axis, and hotend per tool - #define HOTENDS EXTRUDERS - #define E_STEPPERS EXTRUDERS - #define E_MANUAL EXTRUDERS - #define TOOL_E_INDEX current_block->active_extruder + #endif + + #if ENABLED(SWITCHING_EXTRUDER) || ENABLED(MIXING_EXTRUDER) // Unified E axis + #if ENABLED(MIXING_EXTRUDER) + #define E_STEPPERS MIXING_STEPPERS + #else + #define E_STEPPERS 1 // One E stepper + #endif + #define E_MANUAL 1 + #define TOOL_E_INDEX 0 + #else + #define E_STEPPERS EXTRUDERS + #define E_MANUAL EXTRUDERS + #define TOOL_E_INDEX current_block->active_extruder #endif /** - * Distinct E Factors – Disable by commenting out DISTINCT_E_FACTORS + * DISTINCT_E_FACTORS affects how some E factors are accessed */ #if ENABLED(DISTINCT_E_FACTORS) && E_STEPPERS > 1 #define XYZE_N (XYZ + E_STEPPERS) diff --git a/Marlin/Conditionals_post.h b/Marlin/Conditionals_post.h index 5c34ac48b2..7cf32396ba 100644 --- a/Marlin/Conditionals_post.h +++ b/Marlin/Conditionals_post.h @@ -326,7 +326,7 @@ #ifndef HOTEND_OFFSET_Y #define HOTEND_OFFSET_Y { 0 } // Y offsets for each extruder #endif - #if !defined(HOTEND_OFFSET_Z) && (ENABLED(DUAL_X_CARRIAGE) || ENABLED(SWITCHING_EXTRUDER)) + #if !defined(HOTEND_OFFSET_Z) && (ENABLED(DUAL_X_CARRIAGE) || ENABLED(SWITCHING_NOZZLE)) #define HOTEND_OFFSET_Z { 0 } #endif #endif diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 10aeda5e8a..774178f3d3 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -137,12 +137,18 @@ //#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 + +// A dual-nozzle that uses a servomotor to raise/lower one of the nozzles +//#define SWITCHING_NOZZLE +#if ENABLED(SWITCHING_NOZZLE) + #define SWITCHING_NOZZLE_SERVO_NR 0 + #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 + //#define HOTEND_OFFSET_Z { 0.0, 0.0 } #endif /** diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index d59143d19a..e6ce386ef2 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -7762,7 +7762,7 @@ inline void gcode_M211() { * T * X * Y - * Z - Available with DUAL_X_CARRIAGE and SWITCHING_EXTRUDER + * Z - Available with DUAL_X_CARRIAGE and SWITCHING_NOZZLE */ inline void gcode_M218() { if (get_target_extruder_from_command(218) || target_extruder == 0) return; @@ -7770,7 +7770,7 @@ inline void gcode_M211() { if (code_seen('X')) hotend_offset[X_AXIS][target_extruder] = code_value_linear_units(); if (code_seen('Y')) hotend_offset[Y_AXIS][target_extruder] = code_value_linear_units(); - #if ENABLED(DUAL_X_CARRIAGE) || ENABLED(SWITCHING_EXTRUDER) + #if ENABLED(DUAL_X_CARRIAGE) || ENABLED(SWITCHING_NOZZLE) if (code_seen('Z')) hotend_offset[Z_AXIS][target_extruder] = code_value_linear_units(); #endif @@ -7781,7 +7781,7 @@ inline void gcode_M211() { SERIAL_ECHO(hotend_offset[X_AXIS][e]); SERIAL_CHAR(','); SERIAL_ECHO(hotend_offset[Y_AXIS][e]); - #if ENABLED(DUAL_X_CARRIAGE) || ENABLED(SWITCHING_EXTRUDER) + #if ENABLED(DUAL_X_CARRIAGE) || ENABLED(SWITCHING_NOZZLE) SERIAL_CHAR(','); SERIAL_ECHO(hotend_offset[Z_AXIS][e]); #endif @@ -9364,6 +9364,14 @@ inline void gcode_M999() { } #endif +#if ENABLED(SWITCHING_NOZZLE) + inline void move_nozzle_servo(uint8_t e) { + const int angles[2] = SWITCHING_NOZZLE_SERVO_ANGLES; + MOVE_SERVO(SWITCHING_NOZZLE_SERVO_NR, angles[e]); + safe_delay(500); + } +#endif + inline void invalid_extruder_error(const uint8_t &e) { SERIAL_ECHO_START; SERIAL_CHAR('T'); @@ -9511,7 +9519,7 @@ void tool_change(const uint8_t tmp_extruder, const float fr_mm_s/*=0.0*/, bool n // No extra case for HAS_ABL in DUAL_X_CARRIAGE. Does that mean they don't work together? #else // !DUAL_X_CARRIAGE - #if ENABLED(SWITCHING_EXTRUDER) + #if ENABLED(SWITCHING_NOZZLE) // <0 if the new nozzle is higher, >0 if lower. A bigger raise when lower. const 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); @@ -9521,7 +9529,14 @@ void tool_change(const uint8_t tmp_extruder, const float fr_mm_s/*=0.0*/, bool n planner.buffer_line_kinematic(current_position, planner.max_feedrate_mm_s[Z_AXIS], active_extruder); stepper.synchronize(); - move_extruder_servo(active_extruder); + move_nozzle_servo(active_extruder); + #endif + + #if ENABLED(SWITCHING_EXTRUDER) + #if !(ENABLED(SWITCHING_NOZZLE) && (SWITCHING_EXTRUDER_SERVO_NR == SWITCHING_NOZZLE_SERVO_NR)) + stepper.synchronize(); + move_extruder_servo(active_extruder); + #endif #endif /** @@ -9644,7 +9659,7 @@ void tool_change(const uint8_t tmp_extruder, const float fr_mm_s/*=0.0*/, bool n prepare_move_to_destination(); } - #if ENABLED(SWITCHING_EXTRUDER) + #if ENABLED(SWITCHING_NOZZLE) // Move back down, if needed. (Including when the new tool is higher.) if (z_raise != z_diff) { destination[Z_AXIS] += z_diff; @@ -9672,6 +9687,11 @@ void tool_change(const uint8_t tmp_extruder, const float fr_mm_s/*=0.0*/, bool n UNUSED(fr_mm_s); UNUSED(no_move); + #if ENABLED(SWITCHING_EXTRUDER) + stepper.synchronize(); + move_extruder_servo(active_extruder); + #endif + #endif // HOTENDS <= 1 SERIAL_ECHO_START; diff --git a/Marlin/SanityCheck.h b/Marlin/SanityCheck.h index 3aa307298a..4d3b680fb6 100644 --- a/Marlin/SanityCheck.h +++ b/Marlin/SanityCheck.h @@ -329,11 +329,16 @@ #endif /** - * Only one type of extruder allowed + * A dual nozzle x-carriage with switching servo */ -#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." +#if ENABLED(SWITCHING_NOZZLE) + #if ENABLED(SINGLENOZZLE) + #error "SWITCHING_NOZZLE and SINGLENOZZLE are incompatible." + #elif EXTRUDERS < 2 + #error "SWITCHING_NOZZLE requires exactly 2 EXTRUDERS." + #elif NUM_SERVOS < 1 + #error "SWITCHING_NOZZLE requires NUM_SERVOS >= 1." + #endif #endif /** @@ -355,12 +360,14 @@ #if ENABLED(MIXING_EXTRUDER) #if EXTRUDERS > 1 #error "MIXING_EXTRUDER currently only supports one extruder." - #endif - #if MIXING_STEPPERS < 2 + #elif MIXING_STEPPERS < 2 #error "You must set MIXING_STEPPERS >= 2 for a mixing extruder." - #endif - #if ENABLED(FILAMENT_SENSOR) + #elif ENABLED(FILAMENT_SENSOR) #error "MIXING_EXTRUDER is incompatible with FILAMENT_SENSOR. Comment out this line to use it anyway." + #elif ENABLED(SWITCHING_EXTRUDER) + #error "Please select either MIXING_EXTRUDER or SWITCHING_EXTRUDER, not both." + #elif ENABLED(SINGLENOZZLE) + #error "MIXING_EXTRUDER is incompatible with SINGLENOZZLE." #endif #endif diff --git a/Marlin/configuration_store.cpp b/Marlin/configuration_store.cpp index a4d1ed279d..5f063d8c05 100644 --- a/Marlin/configuration_store.cpp +++ b/Marlin/configuration_store.cpp @@ -1415,7 +1415,7 @@ void MarlinSettings::reset() { SERIAL_ECHOPAIR(" M218 T", (int)e); SERIAL_ECHOPAIR(" X", LINEAR_UNIT(hotend_offset[X_AXIS][e])); SERIAL_ECHOPAIR(" Y", LINEAR_UNIT(hotend_offset[Y_AXIS][e])); - #if ENABLED(DUAL_X_CARRIAGE) || ENABLED(SWITCHING_EXTRUDER) + #if ENABLED(DUAL_X_CARRIAGE) || ENABLED(SWITCHING_NOZZLE) SERIAL_ECHOPAIR(" Z", LINEAR_UNIT(hotend_offset[Z_AXIS][e])); #endif SERIAL_EOL; diff --git a/Marlin/example_configurations/Cartesio/Configuration.h b/Marlin/example_configurations/Cartesio/Configuration.h index 39f857d9c8..0717c4c712 100644 --- a/Marlin/example_configurations/Cartesio/Configuration.h +++ b/Marlin/example_configurations/Cartesio/Configuration.h @@ -138,12 +138,18 @@ //#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 + +// A dual-nozzle that uses a servomotor to raise/lower one of the nozzles +//#define SWITCHING_NOZZLE +#if ENABLED(SWITCHING_NOZZLE) + #define SWITCHING_NOZZLE_SERVO_NR 0 + #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 + //#define HOTEND_OFFSET_Z { 0.0, 0.0 } #endif /** diff --git a/Marlin/example_configurations/Felix/Configuration.h b/Marlin/example_configurations/Felix/Configuration.h index bb74b12d1d..aa49cf9804 100644 --- a/Marlin/example_configurations/Felix/Configuration.h +++ b/Marlin/example_configurations/Felix/Configuration.h @@ -137,12 +137,18 @@ //#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 + +// A dual-nozzle that uses a servomotor to raise/lower one of the nozzles +//#define SWITCHING_NOZZLE +#if ENABLED(SWITCHING_NOZZLE) + #define SWITCHING_NOZZLE_SERVO_NR 0 + #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 + //#define HOTEND_OFFSET_Z { 0.0, 0.0 } #endif /** diff --git a/Marlin/example_configurations/Felix/DUAL/Configuration.h b/Marlin/example_configurations/Felix/DUAL/Configuration.h index 14fc25e834..521374bf1d 100644 --- a/Marlin/example_configurations/Felix/DUAL/Configuration.h +++ b/Marlin/example_configurations/Felix/DUAL/Configuration.h @@ -137,12 +137,18 @@ //#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 + +// A dual-nozzle that uses a servomotor to raise/lower one of the nozzles +//#define SWITCHING_NOZZLE +#if ENABLED(SWITCHING_NOZZLE) + #define SWITCHING_NOZZLE_SERVO_NR 0 + #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 + //#define HOTEND_OFFSET_Z { 0.0, 0.0 } #endif /** diff --git a/Marlin/example_configurations/FolgerTech-i3-2020/Configuration.h b/Marlin/example_configurations/FolgerTech-i3-2020/Configuration.h index 268afb71f3..6bdc28dee6 100644 --- a/Marlin/example_configurations/FolgerTech-i3-2020/Configuration.h +++ b/Marlin/example_configurations/FolgerTech-i3-2020/Configuration.h @@ -137,12 +137,18 @@ //#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 + +// A dual-nozzle that uses a servomotor to raise/lower one of the nozzles +//#define SWITCHING_NOZZLE +#if ENABLED(SWITCHING_NOZZLE) + #define SWITCHING_NOZZLE_SERVO_NR 0 + #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 + //#define HOTEND_OFFSET_Z { 0.0, 0.0 } #endif /** diff --git a/Marlin/example_configurations/Hephestos/Configuration.h b/Marlin/example_configurations/Hephestos/Configuration.h index 8c611552a9..9db79cd5f5 100644 --- a/Marlin/example_configurations/Hephestos/Configuration.h +++ b/Marlin/example_configurations/Hephestos/Configuration.h @@ -140,12 +140,18 @@ //#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 + +// A dual-nozzle that uses a servomotor to raise/lower one of the nozzles +//#define SWITCHING_NOZZLE +#if ENABLED(SWITCHING_NOZZLE) + #define SWITCHING_NOZZLE_SERVO_NR 0 + #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 + //#define HOTEND_OFFSET_Z { 0.0, 0.0 } #endif /** diff --git a/Marlin/example_configurations/Hephestos_2/Configuration.h b/Marlin/example_configurations/Hephestos_2/Configuration.h index 35f6aea296..8fbf2f8d6a 100644 --- a/Marlin/example_configurations/Hephestos_2/Configuration.h +++ b/Marlin/example_configurations/Hephestos_2/Configuration.h @@ -137,12 +137,18 @@ //#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 + +// A dual-nozzle that uses a servomotor to raise/lower one of the nozzles +//#define SWITCHING_NOZZLE +#if ENABLED(SWITCHING_NOZZLE) + #define SWITCHING_NOZZLE_SERVO_NR 0 + #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 + //#define HOTEND_OFFSET_Z { 0.0, 0.0 } #endif /** diff --git a/Marlin/example_configurations/K8200/Configuration.h b/Marlin/example_configurations/K8200/Configuration.h index bd79a11a51..b999644c9d 100644 --- a/Marlin/example_configurations/K8200/Configuration.h +++ b/Marlin/example_configurations/K8200/Configuration.h @@ -157,12 +157,18 @@ //#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 + +// A dual-nozzle that uses a servomotor to raise/lower one of the nozzles +//#define SWITCHING_NOZZLE +#if ENABLED(SWITCHING_NOZZLE) + #define SWITCHING_NOZZLE_SERVO_NR 0 + #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 + //#define HOTEND_OFFSET_Z { 0.0, 0.0 } #endif /** diff --git a/Marlin/example_configurations/K8400/Configuration.h b/Marlin/example_configurations/K8400/Configuration.h index 027ad29bc9..e47c06ea0f 100644 --- a/Marlin/example_configurations/K8400/Configuration.h +++ b/Marlin/example_configurations/K8400/Configuration.h @@ -137,12 +137,18 @@ //#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 + +// A dual-nozzle that uses a servomotor to raise/lower one of the nozzles +//#define SWITCHING_NOZZLE +#if ENABLED(SWITCHING_NOZZLE) + #define SWITCHING_NOZZLE_SERVO_NR 0 + #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 + //#define HOTEND_OFFSET_Z { 0.0, 0.0 } #endif /** diff --git a/Marlin/example_configurations/K8400/Dual-head/Configuration.h b/Marlin/example_configurations/K8400/Dual-head/Configuration.h index 2b7a0b3e3b..4f79510640 100644 --- a/Marlin/example_configurations/K8400/Dual-head/Configuration.h +++ b/Marlin/example_configurations/K8400/Dual-head/Configuration.h @@ -137,12 +137,18 @@ //#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 + +// A dual-nozzle that uses a servomotor to raise/lower one of the nozzles +//#define SWITCHING_NOZZLE +#if ENABLED(SWITCHING_NOZZLE) + #define SWITCHING_NOZZLE_SERVO_NR 0 + #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 + //#define HOTEND_OFFSET_Z { 0.0, 0.0 } #endif /** diff --git a/Marlin/example_configurations/RepRapWorld/Megatronics/Configuration.h b/Marlin/example_configurations/RepRapWorld/Megatronics/Configuration.h index fad021c521..e9c8c35b30 100644 --- a/Marlin/example_configurations/RepRapWorld/Megatronics/Configuration.h +++ b/Marlin/example_configurations/RepRapWorld/Megatronics/Configuration.h @@ -137,12 +137,18 @@ //#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 + +// A dual-nozzle that uses a servomotor to raise/lower one of the nozzles +//#define SWITCHING_NOZZLE +#if ENABLED(SWITCHING_NOZZLE) + #define SWITCHING_NOZZLE_SERVO_NR 0 + #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 + //#define HOTEND_OFFSET_Z { 0.0, 0.0 } #endif /** diff --git a/Marlin/example_configurations/RigidBot/Configuration.h b/Marlin/example_configurations/RigidBot/Configuration.h index b00a75d8e0..ca717eebd9 100644 --- a/Marlin/example_configurations/RigidBot/Configuration.h +++ b/Marlin/example_configurations/RigidBot/Configuration.h @@ -140,12 +140,18 @@ //#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 + +// A dual-nozzle that uses a servomotor to raise/lower one of the nozzles +//#define SWITCHING_NOZZLE +#if ENABLED(SWITCHING_NOZZLE) + #define SWITCHING_NOZZLE_SERVO_NR 0 + #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 + //#define HOTEND_OFFSET_Z { 0.0, 0.0 } #endif /** diff --git a/Marlin/example_configurations/SCARA/Configuration.h b/Marlin/example_configurations/SCARA/Configuration.h index d464efd3ca..b0a96106c7 100644 --- a/Marlin/example_configurations/SCARA/Configuration.h +++ b/Marlin/example_configurations/SCARA/Configuration.h @@ -170,12 +170,18 @@ //#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 + +// A dual-nozzle that uses a servomotor to raise/lower one of the nozzles +//#define SWITCHING_NOZZLE +#if ENABLED(SWITCHING_NOZZLE) + #define SWITCHING_NOZZLE_SERVO_NR 0 + #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 + //#define HOTEND_OFFSET_Z { 0.0, 0.0 } #endif /** diff --git a/Marlin/example_configurations/TAZ4/Configuration.h b/Marlin/example_configurations/TAZ4/Configuration.h index c31994a38e..cf4b46a447 100644 --- a/Marlin/example_configurations/TAZ4/Configuration.h +++ b/Marlin/example_configurations/TAZ4/Configuration.h @@ -137,12 +137,18 @@ //#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 + +// A dual-nozzle that uses a servomotor to raise/lower one of the nozzles +//#define SWITCHING_NOZZLE +#if ENABLED(SWITCHING_NOZZLE) + #define SWITCHING_NOZZLE_SERVO_NR 0 + #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 + //#define HOTEND_OFFSET_Z { 0.0, 0.0 } #endif /** diff --git a/Marlin/example_configurations/TinyBoy2/Configuration.h b/Marlin/example_configurations/TinyBoy2/Configuration.h index 662bd133ed..d92556dcc7 100644 --- a/Marlin/example_configurations/TinyBoy2/Configuration.h +++ b/Marlin/example_configurations/TinyBoy2/Configuration.h @@ -159,12 +159,18 @@ //#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 + +// A dual-nozzle that uses a servomotor to raise/lower one of the nozzles +//#define SWITCHING_NOZZLE +#if ENABLED(SWITCHING_NOZZLE) + #define SWITCHING_NOZZLE_SERVO_NR 0 + #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 + //#define HOTEND_OFFSET_Z { 0.0, 0.0 } #endif /** diff --git a/Marlin/example_configurations/WITBOX/Configuration.h b/Marlin/example_configurations/WITBOX/Configuration.h index 25ec69ac66..073dafe000 100644 --- a/Marlin/example_configurations/WITBOX/Configuration.h +++ b/Marlin/example_configurations/WITBOX/Configuration.h @@ -140,12 +140,18 @@ //#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 + +// A dual-nozzle that uses a servomotor to raise/lower one of the nozzles +//#define SWITCHING_NOZZLE +#if ENABLED(SWITCHING_NOZZLE) + #define SWITCHING_NOZZLE_SERVO_NR 0 + #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 + //#define HOTEND_OFFSET_Z { 0.0, 0.0 } #endif /** diff --git a/Marlin/example_configurations/adafruit/ST7565/Configuration.h b/Marlin/example_configurations/adafruit/ST7565/Configuration.h index f95dfcc9c1..d9bbb2b256 100644 --- a/Marlin/example_configurations/adafruit/ST7565/Configuration.h +++ b/Marlin/example_configurations/adafruit/ST7565/Configuration.h @@ -137,12 +137,18 @@ //#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 + +// A dual-nozzle that uses a servomotor to raise/lower one of the nozzles +//#define SWITCHING_NOZZLE +#if ENABLED(SWITCHING_NOZZLE) + #define SWITCHING_NOZZLE_SERVO_NR 0 + #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 + //#define HOTEND_OFFSET_Z { 0.0, 0.0 } #endif /** diff --git a/Marlin/example_configurations/delta/FLSUN/auto_calibrate/Configuration.h b/Marlin/example_configurations/delta/FLSUN/auto_calibrate/Configuration.h index c92671783f..1e94e31b4e 100644 --- a/Marlin/example_configurations/delta/FLSUN/auto_calibrate/Configuration.h +++ b/Marlin/example_configurations/delta/FLSUN/auto_calibrate/Configuration.h @@ -137,12 +137,18 @@ //#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 + +// A dual-nozzle that uses a servomotor to raise/lower one of the nozzles +//#define SWITCHING_NOZZLE +#if ENABLED(SWITCHING_NOZZLE) + #define SWITCHING_NOZZLE_SERVO_NR 0 + #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 + //#define HOTEND_OFFSET_Z { 0.0, 0.0 } #endif /** diff --git a/Marlin/example_configurations/delta/FLSUN/kossel_mini/Configuration.h b/Marlin/example_configurations/delta/FLSUN/kossel_mini/Configuration.h index 22e338003f..8ec27db5b0 100644 --- a/Marlin/example_configurations/delta/FLSUN/kossel_mini/Configuration.h +++ b/Marlin/example_configurations/delta/FLSUN/kossel_mini/Configuration.h @@ -137,12 +137,18 @@ //#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 + +// A dual-nozzle that uses a servomotor to raise/lower one of the nozzles +//#define SWITCHING_NOZZLE +#if ENABLED(SWITCHING_NOZZLE) + #define SWITCHING_NOZZLE_SERVO_NR 0 + #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 + //#define HOTEND_OFFSET_Z { 0.0, 0.0 } #endif /** diff --git a/Marlin/example_configurations/delta/generic/Configuration.h b/Marlin/example_configurations/delta/generic/Configuration.h index 9b810fcf30..83776fa7f1 100644 --- a/Marlin/example_configurations/delta/generic/Configuration.h +++ b/Marlin/example_configurations/delta/generic/Configuration.h @@ -137,12 +137,18 @@ //#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 + +// A dual-nozzle that uses a servomotor to raise/lower one of the nozzles +//#define SWITCHING_NOZZLE +#if ENABLED(SWITCHING_NOZZLE) + #define SWITCHING_NOZZLE_SERVO_NR 0 + #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 + //#define HOTEND_OFFSET_Z { 0.0, 0.0 } #endif /** diff --git a/Marlin/example_configurations/delta/kossel_mini/Configuration.h b/Marlin/example_configurations/delta/kossel_mini/Configuration.h index 8db5f7c356..b8e7fc5ff5 100644 --- a/Marlin/example_configurations/delta/kossel_mini/Configuration.h +++ b/Marlin/example_configurations/delta/kossel_mini/Configuration.h @@ -137,12 +137,18 @@ //#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 + +// A dual-nozzle that uses a servomotor to raise/lower one of the nozzles +//#define SWITCHING_NOZZLE +#if ENABLED(SWITCHING_NOZZLE) + #define SWITCHING_NOZZLE_SERVO_NR 0 + #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 + //#define HOTEND_OFFSET_Z { 0.0, 0.0 } #endif /** diff --git a/Marlin/example_configurations/delta/kossel_pro/Configuration.h b/Marlin/example_configurations/delta/kossel_pro/Configuration.h index 2eb723ff3f..3e60201950 100644 --- a/Marlin/example_configurations/delta/kossel_pro/Configuration.h +++ b/Marlin/example_configurations/delta/kossel_pro/Configuration.h @@ -141,12 +141,18 @@ //#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 + +// A dual-nozzle that uses a servomotor to raise/lower one of the nozzles +//#define SWITCHING_NOZZLE +#if ENABLED(SWITCHING_NOZZLE) + #define SWITCHING_NOZZLE_SERVO_NR 0 + #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 + //#define HOTEND_OFFSET_Z { 0.0, 0.0 } #endif /** diff --git a/Marlin/example_configurations/delta/kossel_xl/Configuration.h b/Marlin/example_configurations/delta/kossel_xl/Configuration.h index a6d08014be..4ecc7be435 100644 --- a/Marlin/example_configurations/delta/kossel_xl/Configuration.h +++ b/Marlin/example_configurations/delta/kossel_xl/Configuration.h @@ -137,12 +137,18 @@ //#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 + +// A dual-nozzle that uses a servomotor to raise/lower one of the nozzles +//#define SWITCHING_NOZZLE +#if ENABLED(SWITCHING_NOZZLE) + #define SWITCHING_NOZZLE_SERVO_NR 0 + #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 + //#define HOTEND_OFFSET_Z { 0.0, 0.0 } #endif /** diff --git a/Marlin/example_configurations/gCreate_gMax1.5+/Configuration.h b/Marlin/example_configurations/gCreate_gMax1.5+/Configuration.h index 1e172d5f9b..6271302307 100644 --- a/Marlin/example_configurations/gCreate_gMax1.5+/Configuration.h +++ b/Marlin/example_configurations/gCreate_gMax1.5+/Configuration.h @@ -142,12 +142,18 @@ //#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 + +// A dual-nozzle that uses a servomotor to raise/lower one of the nozzles +//#define SWITCHING_NOZZLE +#if ENABLED(SWITCHING_NOZZLE) + #define SWITCHING_NOZZLE_SERVO_NR 0 + #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 + //#define HOTEND_OFFSET_Z { 0.0, 0.0 } #endif /** diff --git a/Marlin/example_configurations/makibox/Configuration.h b/Marlin/example_configurations/makibox/Configuration.h index ea04d61018..13f4aa287a 100644 --- a/Marlin/example_configurations/makibox/Configuration.h +++ b/Marlin/example_configurations/makibox/Configuration.h @@ -137,12 +137,18 @@ //#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 + +// A dual-nozzle that uses a servomotor to raise/lower one of the nozzles +//#define SWITCHING_NOZZLE +#if ENABLED(SWITCHING_NOZZLE) + #define SWITCHING_NOZZLE_SERVO_NR 0 + #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 + //#define HOTEND_OFFSET_Z { 0.0, 0.0 } #endif /** diff --git a/Marlin/example_configurations/tvrrug/Round2/Configuration.h b/Marlin/example_configurations/tvrrug/Round2/Configuration.h index ecbca415f5..9701dd114a 100644 --- a/Marlin/example_configurations/tvrrug/Round2/Configuration.h +++ b/Marlin/example_configurations/tvrrug/Round2/Configuration.h @@ -137,12 +137,18 @@ //#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 + +// A dual-nozzle that uses a servomotor to raise/lower one of the nozzles +//#define SWITCHING_NOZZLE +#if ENABLED(SWITCHING_NOZZLE) + #define SWITCHING_NOZZLE_SERVO_NR 0 + #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 + //#define HOTEND_OFFSET_Z { 0.0, 0.0 } #endif /** diff --git a/Marlin/example_configurations/wt150/Configuration.h b/Marlin/example_configurations/wt150/Configuration.h index 5d221d7018..b3b334f24e 100644 --- a/Marlin/example_configurations/wt150/Configuration.h +++ b/Marlin/example_configurations/wt150/Configuration.h @@ -137,12 +137,18 @@ //#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 + +// A dual-nozzle that uses a servomotor to raise/lower one of the nozzles +//#define SWITCHING_NOZZLE +#if ENABLED(SWITCHING_NOZZLE) + #define SWITCHING_NOZZLE_SERVO_NR 0 + #define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 + //#define HOTEND_OFFSET_Z { 0.0, 0.0 } #endif /** diff --git a/README.md b/README.md index 730a0bdd62..c253011d46 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ Download earlier versions of Marlin on the [Releases page](https://github.com/Ma - Improve thermal management, add `WATCH_BED_TEMP_PERIOD` - Better handling of toolchange, multiple tools - Add support for two X steppers `X_DUAL_STEPPER_DRIVERS` - - Add support for `SINGLENOZZLE`, `MIXING_EXTRUDER`, and `SWITCHING_EXTRUDER` + - Add support for `SINGLENOZZLE`, `MIXING_EXTRUDER`, `SWITCHING_NOZZLE`, and `SWITCHING_EXTRUDER` - Simplified probe configuration, allow usage without bed leveling - And much more… See the [1.1.0-RC7 Change Log](https://github.com/MarlinFirmware/Marlin/releases/tag/1.1.0-RC7) for the complete list of changes.