From 74cd6cb4fc90e4c483e7a97a313c0257790f1375 Mon Sep 17 00:00:00 2001
From: InsanityAutomation
<38436470+InsanityAutomation@users.noreply.github.com>
Date: Sun, 7 Oct 2018 18:06:14 -0400
Subject: [PATCH] Single nozzle filament change (#11994)
---
Marlin/Configuration.h | 12 +++
Marlin/src/config/default/Configuration.h | 12 +++
.../AlephObjects/TAZ4/Configuration.h | 12 +++
.../AliExpress/CL-260/Configuration.h | 12 +++
.../config/examples/Anet/A2/Configuration.h | 12 +++
.../examples/Anet/A2plus/Configuration.h | 12 +++
.../config/examples/Anet/A6/Configuration.h | 12 +++
.../config/examples/Anet/A8/Configuration.h | 12 +++
.../examples/Azteeg/X5GT/Configuration.h | 12 +++
.../BIBO/TouchX/cyclops/Configuration.h | 12 +++
.../BIBO/TouchX/default/Configuration.h | 12 +++
.../examples/BQ/Hephestos/Configuration.h | 12 +++
.../examples/BQ/Hephestos_2/Configuration.h | 12 +++
.../config/examples/BQ/WITBOX/Configuration.h | 12 +++
.../config/examples/Cartesio/Configuration.h | 12 +++
.../examples/Creality/CR-10/Configuration.h | 12 +++
.../examples/Creality/CR-10S/Configuration.h | 12 +++
.../Creality/CR-10mini/Configuration.h | 12 +++
.../examples/Creality/CR-8/Configuration.h | 12 +++
.../examples/Creality/Ender-2/Configuration.h | 12 +++
.../examples/Creality/Ender-3/Configuration.h | 12 +++
.../examples/Creality/Ender-4/Configuration.h | 12 +++
.../examples/Einstart-S/Configuration.h | 12 +++
.../src/config/examples/Felix/Configuration.h | 12 +++
.../examples/Felix/DUAL/Configuration.h | 12 +++
.../FolgerTech/i3-2020/Configuration.h | 12 +++
.../examples/Formbot/Raptor/Configuration.h | 12 +++
.../examples/Formbot/T_Rex_2+/Configuration.h | 12 +++
.../examples/Formbot/T_Rex_3/Configuration.h | 12 +++
.../examples/Geeetech/GT2560/Configuration.h | 12 +++
.../Geeetech/I3_Pro_X-GT2560/Configuration.h | 12 +++
.../Geeetech/MeCreator2/Configuration.h | 12 +++
.../Prusa i3 Pro B/bltouch/Configuration.h | 12 +++
.../Prusa i3 Pro B/noprobe/Configuration.h | 12 +++
.../Geeetech/Prusa i3 Pro C/Configuration.h | 12 +++
.../Geeetech/Prusa i3 Pro W/Configuration.h | 12 +++
.../examples/Infitary/i3-M508/Configuration.h | 12 +++
.../examples/JGAurora/A5/Configuration.h | 12 +++
.../examples/MakerParts/Configuration.h | 12 +++
.../examples/Malyan/M150/Configuration.h | 12 +++
.../examples/Malyan/M200/Configuration.h | 12 +++
.../Micromake/C1/basic/Configuration.h | 12 +++
.../Micromake/C1/enhanced/Configuration.h | 12 +++
.../config/examples/Mks/Sbase/Configuration.h | 12 +++
.../examples/RepRapPro/Huxley/Configuration.h | 12 +++
.../RepRapWorld/Megatronics/Configuration.h | 12 +++
.../config/examples/RigidBot/Configuration.h | 12 +++
.../src/config/examples/SCARA/Configuration.h | 12 +++
.../config/examples/STM32F10/Configuration.h | 12 +++
.../config/examples/STM32F4/Configuration.h | 12 +++
.../examples/Sanguinololu/Configuration.h | 12 +++
.../config/examples/TheBorg/Configuration.h | 12 +++
.../config/examples/TinyBoy2/Configuration.h | 12 +++
.../config/examples/Tronxy/X1/Configuration.h | 12 +++
.../examples/Tronxy/X3A/Configuration.h | 12 +++
.../examples/Tronxy/X5S/Configuration.h | 12 +++
.../examples/Tronxy/XY100/Configuration.h | 12 +++
.../UltiMachine/Archim2/Configuration.h | 12 +++
.../examples/Velleman/K8200/Configuration.h | 12 +++
.../examples/Velleman/K8400/Configuration.h | 12 +++
.../Velleman/K8400/Dual-head/Configuration.h | 12 +++
.../Wanhao/Duplicator 6/Configuration.h | 12 +++
.../examples/adafruit/ST7565/Configuration.h | 12 +++
.../delta/Anycubic/Kossel/Configuration.h | 12 +++
.../FLSUN/auto_calibrate/Configuration.h | 12 +++
.../delta/FLSUN/kossel/Configuration.h | 12 +++
.../delta/FLSUN/kossel_mini/Configuration.h | 12 +++
.../delta/Hatchbox_Alpha/Configuration.h | 12 +++
.../examples/delta/generic/Configuration.h | 12 +++
.../delta/kossel_mini/Configuration.h | 12 +++
.../examples/delta/kossel_pro/Configuration.h | 12 +++
.../examples/delta/kossel_xl/Configuration.h | 12 +++
.../examples/gCreate/gMax1.5+/Configuration.h | 12 +++
.../config/examples/makibox/Configuration.h | 12 +++
.../examples/stm32f103ret6/Configuration.h | 12 +++
.../examples/tvrrug/Round2/Configuration.h | 12 +++
.../src/config/examples/wt150/Configuration.h | 12 +++
Marlin/src/feature/pause.cpp | 2 +-
Marlin/src/feature/pause.h | 2 +
Marlin/src/gcode/config/M217.cpp | 63 +++++++++++
Marlin/src/gcode/gcode.cpp | 4 +
Marlin/src/gcode/gcode.h | 5 +
Marlin/src/gcode/temperature/M104_M109.cpp | 29 +++--
Marlin/src/gcode/temperature/M106_M107.cpp | 25 ++++-
Marlin/src/inc/Conditionals_post.h | 22 ++++
Marlin/src/inc/SanityCheck.h | 4 +
Marlin/src/lcd/language/language_en.h | 12 +++
Marlin/src/lcd/ultralcd.cpp | 33 ++++--
Marlin/src/module/configuration_store.cpp | 51 +++++++++
Marlin/src/module/temperature.cpp | 11 ++
Marlin/src/module/temperature.h | 5 +-
Marlin/src/module/tool_change.cpp | 100 ++++++++++++++++--
Marlin/src/module/tool_change.h | 10 ++
buildroot/share/tests/STM32F1_tests | 3 +-
94 files changed, 1267 insertions(+), 38 deletions(-)
create mode 100644 Marlin/src/gcode/config/M217.cpp
diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h
index 5bcfa97d12..5ff732ade2 100644
--- a/Marlin/Configuration.h
+++ b/Marlin/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/default/Configuration.h b/Marlin/src/config/default/Configuration.h
index 5bcfa97d12..5ff732ade2 100644
--- a/Marlin/src/config/default/Configuration.h
+++ b/Marlin/src/config/default/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration.h b/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration.h
index a1d4099e45..814495b81e 100644
--- a/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration.h
+++ b/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/AliExpress/CL-260/Configuration.h b/Marlin/src/config/examples/AliExpress/CL-260/Configuration.h
index ea3ee5956b..fbaf4bf5db 100644
--- a/Marlin/src/config/examples/AliExpress/CL-260/Configuration.h
+++ b/Marlin/src/config/examples/AliExpress/CL-260/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Anet/A2/Configuration.h b/Marlin/src/config/examples/Anet/A2/Configuration.h
index b913182ae4..469e9b6c72 100644
--- a/Marlin/src/config/examples/Anet/A2/Configuration.h
+++ b/Marlin/src/config/examples/Anet/A2/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Anet/A2plus/Configuration.h b/Marlin/src/config/examples/Anet/A2plus/Configuration.h
index f0c53291fc..3f80ea3675 100644
--- a/Marlin/src/config/examples/Anet/A2plus/Configuration.h
+++ b/Marlin/src/config/examples/Anet/A2plus/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Anet/A6/Configuration.h b/Marlin/src/config/examples/Anet/A6/Configuration.h
index 81e5eac56d..ac7c75aa62 100644
--- a/Marlin/src/config/examples/Anet/A6/Configuration.h
+++ b/Marlin/src/config/examples/Anet/A6/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Anet/A8/Configuration.h b/Marlin/src/config/examples/Anet/A8/Configuration.h
index 84d65e107d..5faaba065d 100644
--- a/Marlin/src/config/examples/Anet/A8/Configuration.h
+++ b/Marlin/src/config/examples/Anet/A8/Configuration.h
@@ -156,6 +156,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Azteeg/X5GT/Configuration.h b/Marlin/src/config/examples/Azteeg/X5GT/Configuration.h
index 947bb82d94..595b1c9362 100644
--- a/Marlin/src/config/examples/Azteeg/X5GT/Configuration.h
+++ b/Marlin/src/config/examples/Azteeg/X5GT/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/BIBO/TouchX/cyclops/Configuration.h b/Marlin/src/config/examples/BIBO/TouchX/cyclops/Configuration.h
index d0a6c5e642..6efca2a7d8 100644
--- a/Marlin/src/config/examples/BIBO/TouchX/cyclops/Configuration.h
+++ b/Marlin/src/config/examples/BIBO/TouchX/cyclops/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/BIBO/TouchX/default/Configuration.h b/Marlin/src/config/examples/BIBO/TouchX/default/Configuration.h
index 6728218d5f..485e59d65b 100644
--- a/Marlin/src/config/examples/BIBO/TouchX/default/Configuration.h
+++ b/Marlin/src/config/examples/BIBO/TouchX/default/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/BQ/Hephestos/Configuration.h b/Marlin/src/config/examples/BQ/Hephestos/Configuration.h
index 20d9ec5920..43b5002943 100644
--- a/Marlin/src/config/examples/BQ/Hephestos/Configuration.h
+++ b/Marlin/src/config/examples/BQ/Hephestos/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/BQ/Hephestos_2/Configuration.h b/Marlin/src/config/examples/BQ/Hephestos_2/Configuration.h
index 01827fce72..dee62ff2c5 100644
--- a/Marlin/src/config/examples/BQ/Hephestos_2/Configuration.h
+++ b/Marlin/src/config/examples/BQ/Hephestos_2/Configuration.h
@@ -163,6 +163,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/BQ/WITBOX/Configuration.h b/Marlin/src/config/examples/BQ/WITBOX/Configuration.h
index 659011de9d..718fb1b796 100644
--- a/Marlin/src/config/examples/BQ/WITBOX/Configuration.h
+++ b/Marlin/src/config/examples/BQ/WITBOX/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Cartesio/Configuration.h b/Marlin/src/config/examples/Cartesio/Configuration.h
index 01bf13435e..c0cb2308a0 100644
--- a/Marlin/src/config/examples/Cartesio/Configuration.h
+++ b/Marlin/src/config/examples/Cartesio/Configuration.h
@@ -156,6 +156,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Creality/CR-10/Configuration.h b/Marlin/src/config/examples/Creality/CR-10/Configuration.h
index fe7de2e8d6..699e0cda6c 100755
--- a/Marlin/src/config/examples/Creality/CR-10/Configuration.h
+++ b/Marlin/src/config/examples/Creality/CR-10/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Creality/CR-10S/Configuration.h b/Marlin/src/config/examples/Creality/CR-10S/Configuration.h
index e0bd4754c8..e25fe92273 100644
--- a/Marlin/src/config/examples/Creality/CR-10S/Configuration.h
+++ b/Marlin/src/config/examples/Creality/CR-10S/Configuration.h
@@ -159,6 +159,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Creality/CR-10mini/Configuration.h b/Marlin/src/config/examples/Creality/CR-10mini/Configuration.h
index 66b9e567b1..b00891d6b0 100644
--- a/Marlin/src/config/examples/Creality/CR-10mini/Configuration.h
+++ b/Marlin/src/config/examples/Creality/CR-10mini/Configuration.h
@@ -164,6 +164,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Creality/CR-8/Configuration.h b/Marlin/src/config/examples/Creality/CR-8/Configuration.h
index 81f66c6a01..0207753544 100644
--- a/Marlin/src/config/examples/Creality/CR-8/Configuration.h
+++ b/Marlin/src/config/examples/Creality/CR-8/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Creality/Ender-2/Configuration.h b/Marlin/src/config/examples/Creality/Ender-2/Configuration.h
index 771cb34cb2..15946881e9 100644
--- a/Marlin/src/config/examples/Creality/Ender-2/Configuration.h
+++ b/Marlin/src/config/examples/Creality/Ender-2/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Creality/Ender-3/Configuration.h b/Marlin/src/config/examples/Creality/Ender-3/Configuration.h
index 92dc8f4c0a..325446d677 100644
--- a/Marlin/src/config/examples/Creality/Ender-3/Configuration.h
+++ b/Marlin/src/config/examples/Creality/Ender-3/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Creality/Ender-4/Configuration.h b/Marlin/src/config/examples/Creality/Ender-4/Configuration.h
index dc1b17581d..2e1ca27497 100644
--- a/Marlin/src/config/examples/Creality/Ender-4/Configuration.h
+++ b/Marlin/src/config/examples/Creality/Ender-4/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Einstart-S/Configuration.h b/Marlin/src/config/examples/Einstart-S/Configuration.h
index 57637bd7bd..6f499527ca 100644
--- a/Marlin/src/config/examples/Einstart-S/Configuration.h
+++ b/Marlin/src/config/examples/Einstart-S/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Felix/Configuration.h b/Marlin/src/config/examples/Felix/Configuration.h
index a797130b9d..54b631220d 100644
--- a/Marlin/src/config/examples/Felix/Configuration.h
+++ b/Marlin/src/config/examples/Felix/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Felix/DUAL/Configuration.h b/Marlin/src/config/examples/Felix/DUAL/Configuration.h
index 1181d0516f..d90fedf120 100644
--- a/Marlin/src/config/examples/Felix/DUAL/Configuration.h
+++ b/Marlin/src/config/examples/Felix/DUAL/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/FolgerTech/i3-2020/Configuration.h b/Marlin/src/config/examples/FolgerTech/i3-2020/Configuration.h
index bd6bae8a3b..5fb3adf3f1 100644
--- a/Marlin/src/config/examples/FolgerTech/i3-2020/Configuration.h
+++ b/Marlin/src/config/examples/FolgerTech/i3-2020/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Formbot/Raptor/Configuration.h b/Marlin/src/config/examples/Formbot/Raptor/Configuration.h
index f0dd500109..922ad228bd 100644
--- a/Marlin/src/config/examples/Formbot/Raptor/Configuration.h
+++ b/Marlin/src/config/examples/Formbot/Raptor/Configuration.h
@@ -196,6 +196,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Formbot/T_Rex_2+/Configuration.h b/Marlin/src/config/examples/Formbot/T_Rex_2+/Configuration.h
index d0f5d8bf84..a1b65fe2d3 100644
--- a/Marlin/src/config/examples/Formbot/T_Rex_2+/Configuration.h
+++ b/Marlin/src/config/examples/Formbot/T_Rex_2+/Configuration.h
@@ -158,6 +158,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Formbot/T_Rex_3/Configuration.h b/Marlin/src/config/examples/Formbot/T_Rex_3/Configuration.h
index 7ee67af0bd..b0c0776fc3 100644
--- a/Marlin/src/config/examples/Formbot/T_Rex_3/Configuration.h
+++ b/Marlin/src/config/examples/Formbot/T_Rex_3/Configuration.h
@@ -159,6 +159,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Geeetech/GT2560/Configuration.h b/Marlin/src/config/examples/Geeetech/GT2560/Configuration.h
index 01dd31e0b2..ce83a71bbf 100644
--- a/Marlin/src/config/examples/Geeetech/GT2560/Configuration.h
+++ b/Marlin/src/config/examples/Geeetech/GT2560/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h b/Marlin/src/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h
index 62a5ecf1c3..409ac78ffa 100644
--- a/Marlin/src/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h
+++ b/Marlin/src/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Geeetech/MeCreator2/Configuration.h b/Marlin/src/config/examples/Geeetech/MeCreator2/Configuration.h
index 37af96e764..84dc0cf728 100644
--- a/Marlin/src/config/examples/Geeetech/MeCreator2/Configuration.h
+++ b/Marlin/src/config/examples/Geeetech/MeCreator2/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration.h b/Marlin/src/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration.h
index 6e0a691b17..6217e2e53d 100644
--- a/Marlin/src/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration.h
+++ b/Marlin/src/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration.h b/Marlin/src/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration.h
index 7d3f4b9e06..4f1e9e7e59 100644
--- a/Marlin/src/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration.h
+++ b/Marlin/src/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Geeetech/Prusa i3 Pro C/Configuration.h b/Marlin/src/config/examples/Geeetech/Prusa i3 Pro C/Configuration.h
index b0dcb677d2..69d44c9e63 100644
--- a/Marlin/src/config/examples/Geeetech/Prusa i3 Pro C/Configuration.h
+++ b/Marlin/src/config/examples/Geeetech/Prusa i3 Pro C/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Geeetech/Prusa i3 Pro W/Configuration.h b/Marlin/src/config/examples/Geeetech/Prusa i3 Pro W/Configuration.h
index 48842ba087..4d02fe1101 100644
--- a/Marlin/src/config/examples/Geeetech/Prusa i3 Pro W/Configuration.h
+++ b/Marlin/src/config/examples/Geeetech/Prusa i3 Pro W/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Infitary/i3-M508/Configuration.h b/Marlin/src/config/examples/Infitary/i3-M508/Configuration.h
index 90506121f6..4784c78db3 100644
--- a/Marlin/src/config/examples/Infitary/i3-M508/Configuration.h
+++ b/Marlin/src/config/examples/Infitary/i3-M508/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/JGAurora/A5/Configuration.h b/Marlin/src/config/examples/JGAurora/A5/Configuration.h
index fed11676d9..2e230c76cf 100644
--- a/Marlin/src/config/examples/JGAurora/A5/Configuration.h
+++ b/Marlin/src/config/examples/JGAurora/A5/Configuration.h
@@ -160,6 +160,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/MakerParts/Configuration.h b/Marlin/src/config/examples/MakerParts/Configuration.h
index a884c1dff6..506a12abf2 100644
--- a/Marlin/src/config/examples/MakerParts/Configuration.h
+++ b/Marlin/src/config/examples/MakerParts/Configuration.h
@@ -175,6 +175,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Malyan/M150/Configuration.h b/Marlin/src/config/examples/Malyan/M150/Configuration.h
index 10c375b364..83a57148d9 100644
--- a/Marlin/src/config/examples/Malyan/M150/Configuration.h
+++ b/Marlin/src/config/examples/Malyan/M150/Configuration.h
@@ -160,6 +160,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Malyan/M200/Configuration.h b/Marlin/src/config/examples/Malyan/M200/Configuration.h
index 4da1d5a3cc..9c4099ec90 100644
--- a/Marlin/src/config/examples/Malyan/M200/Configuration.h
+++ b/Marlin/src/config/examples/Malyan/M200/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Micromake/C1/basic/Configuration.h b/Marlin/src/config/examples/Micromake/C1/basic/Configuration.h
index 089e129f3e..d60955fd60 100644
--- a/Marlin/src/config/examples/Micromake/C1/basic/Configuration.h
+++ b/Marlin/src/config/examples/Micromake/C1/basic/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Micromake/C1/enhanced/Configuration.h b/Marlin/src/config/examples/Micromake/C1/enhanced/Configuration.h
index 7a56d29f6c..0d03ee3aa3 100644
--- a/Marlin/src/config/examples/Micromake/C1/enhanced/Configuration.h
+++ b/Marlin/src/config/examples/Micromake/C1/enhanced/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Mks/Sbase/Configuration.h b/Marlin/src/config/examples/Mks/Sbase/Configuration.h
index 02aab0e683..0c9b76576f 100644
--- a/Marlin/src/config/examples/Mks/Sbase/Configuration.h
+++ b/Marlin/src/config/examples/Mks/Sbase/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/RepRapPro/Huxley/Configuration.h b/Marlin/src/config/examples/RepRapPro/Huxley/Configuration.h
index af0127d6ee..47de651221 100644
--- a/Marlin/src/config/examples/RepRapPro/Huxley/Configuration.h
+++ b/Marlin/src/config/examples/RepRapPro/Huxley/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/RepRapWorld/Megatronics/Configuration.h b/Marlin/src/config/examples/RepRapWorld/Megatronics/Configuration.h
index 4f0402611d..376ad4839e 100644
--- a/Marlin/src/config/examples/RepRapWorld/Megatronics/Configuration.h
+++ b/Marlin/src/config/examples/RepRapWorld/Megatronics/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/RigidBot/Configuration.h b/Marlin/src/config/examples/RigidBot/Configuration.h
index 113a9a8293..12f768fb07 100644
--- a/Marlin/src/config/examples/RigidBot/Configuration.h
+++ b/Marlin/src/config/examples/RigidBot/Configuration.h
@@ -158,6 +158,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/SCARA/Configuration.h b/Marlin/src/config/examples/SCARA/Configuration.h
index c8ee618f77..aa10616578 100644
--- a/Marlin/src/config/examples/SCARA/Configuration.h
+++ b/Marlin/src/config/examples/SCARA/Configuration.h
@@ -186,6 +186,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/STM32F10/Configuration.h b/Marlin/src/config/examples/STM32F10/Configuration.h
index 9808e74dfa..be3da5e391 100644
--- a/Marlin/src/config/examples/STM32F10/Configuration.h
+++ b/Marlin/src/config/examples/STM32F10/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/STM32F4/Configuration.h b/Marlin/src/config/examples/STM32F4/Configuration.h
index 4da899f46c..32b7c98e83 100644
--- a/Marlin/src/config/examples/STM32F4/Configuration.h
+++ b/Marlin/src/config/examples/STM32F4/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Sanguinololu/Configuration.h b/Marlin/src/config/examples/Sanguinololu/Configuration.h
index 41e1629d2c..a28132658c 100644
--- a/Marlin/src/config/examples/Sanguinololu/Configuration.h
+++ b/Marlin/src/config/examples/Sanguinololu/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/TheBorg/Configuration.h b/Marlin/src/config/examples/TheBorg/Configuration.h
index 8e0136dc6f..38d43af9a5 100644
--- a/Marlin/src/config/examples/TheBorg/Configuration.h
+++ b/Marlin/src/config/examples/TheBorg/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/TinyBoy2/Configuration.h b/Marlin/src/config/examples/TinyBoy2/Configuration.h
index 0a4ca24555..2328e3bebb 100644
--- a/Marlin/src/config/examples/TinyBoy2/Configuration.h
+++ b/Marlin/src/config/examples/TinyBoy2/Configuration.h
@@ -177,6 +177,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Tronxy/X1/Configuration.h b/Marlin/src/config/examples/Tronxy/X1/Configuration.h
index fb91a54ad8..f0d2377263 100644
--- a/Marlin/src/config/examples/Tronxy/X1/Configuration.h
+++ b/Marlin/src/config/examples/Tronxy/X1/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Tronxy/X3A/Configuration.h b/Marlin/src/config/examples/Tronxy/X3A/Configuration.h
index 63864bc7d1..c1f609d623 100644
--- a/Marlin/src/config/examples/Tronxy/X3A/Configuration.h
+++ b/Marlin/src/config/examples/Tronxy/X3A/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Tronxy/X5S/Configuration.h b/Marlin/src/config/examples/Tronxy/X5S/Configuration.h
index 6ce684d4c4..a5f7db375e 100644
--- a/Marlin/src/config/examples/Tronxy/X5S/Configuration.h
+++ b/Marlin/src/config/examples/Tronxy/X5S/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Tronxy/XY100/Configuration.h b/Marlin/src/config/examples/Tronxy/XY100/Configuration.h
index d7ae94c451..ffc3316ec9 100644
--- a/Marlin/src/config/examples/Tronxy/XY100/Configuration.h
+++ b/Marlin/src/config/examples/Tronxy/XY100/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/UltiMachine/Archim2/Configuration.h b/Marlin/src/config/examples/UltiMachine/Archim2/Configuration.h
index c4874e6954..86f5c137cc 100644
--- a/Marlin/src/config/examples/UltiMachine/Archim2/Configuration.h
+++ b/Marlin/src/config/examples/UltiMachine/Archim2/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Velleman/K8200/Configuration.h b/Marlin/src/config/examples/Velleman/K8200/Configuration.h
index a54d5c74df..27e5202374 100644
--- a/Marlin/src/config/examples/Velleman/K8200/Configuration.h
+++ b/Marlin/src/config/examples/Velleman/K8200/Configuration.h
@@ -175,6 +175,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Velleman/K8400/Configuration.h b/Marlin/src/config/examples/Velleman/K8400/Configuration.h
index 7fad7c7f13..7866ae025a 100644
--- a/Marlin/src/config/examples/Velleman/K8400/Configuration.h
+++ b/Marlin/src/config/examples/Velleman/K8400/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Velleman/K8400/Dual-head/Configuration.h b/Marlin/src/config/examples/Velleman/K8400/Dual-head/Configuration.h
index fee73ac896..8b8faa13da 100644
--- a/Marlin/src/config/examples/Velleman/K8400/Dual-head/Configuration.h
+++ b/Marlin/src/config/examples/Velleman/K8400/Dual-head/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/Wanhao/Duplicator 6/Configuration.h b/Marlin/src/config/examples/Wanhao/Duplicator 6/Configuration.h
index 0ff39029d5..f6b7858f47 100644
--- a/Marlin/src/config/examples/Wanhao/Duplicator 6/Configuration.h
+++ b/Marlin/src/config/examples/Wanhao/Duplicator 6/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/adafruit/ST7565/Configuration.h b/Marlin/src/config/examples/adafruit/ST7565/Configuration.h
index cfb1e091be..3fdd3cf2d9 100644
--- a/Marlin/src/config/examples/adafruit/ST7565/Configuration.h
+++ b/Marlin/src/config/examples/adafruit/ST7565/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/delta/Anycubic/Kossel/Configuration.h b/Marlin/src/config/examples/delta/Anycubic/Kossel/Configuration.h
index 1063bc60ce..9639460424 100644
--- a/Marlin/src/config/examples/delta/Anycubic/Kossel/Configuration.h
+++ b/Marlin/src/config/examples/delta/Anycubic/Kossel/Configuration.h
@@ -168,6 +168,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/delta/FLSUN/auto_calibrate/Configuration.h b/Marlin/src/config/examples/delta/FLSUN/auto_calibrate/Configuration.h
index 0fc0ea47bf..bd56066cb6 100644
--- a/Marlin/src/config/examples/delta/FLSUN/auto_calibrate/Configuration.h
+++ b/Marlin/src/config/examples/delta/FLSUN/auto_calibrate/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/delta/FLSUN/kossel/Configuration.h b/Marlin/src/config/examples/delta/FLSUN/kossel/Configuration.h
index fea8748c31..1dbd9047b1 100644
--- a/Marlin/src/config/examples/delta/FLSUN/kossel/Configuration.h
+++ b/Marlin/src/config/examples/delta/FLSUN/kossel/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/delta/FLSUN/kossel_mini/Configuration.h b/Marlin/src/config/examples/delta/FLSUN/kossel_mini/Configuration.h
index 8842d3e3e5..0dbf385846 100644
--- a/Marlin/src/config/examples/delta/FLSUN/kossel_mini/Configuration.h
+++ b/Marlin/src/config/examples/delta/FLSUN/kossel_mini/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/delta/Hatchbox_Alpha/Configuration.h b/Marlin/src/config/examples/delta/Hatchbox_Alpha/Configuration.h
index d2a9666659..327ec18f2c 100644
--- a/Marlin/src/config/examples/delta/Hatchbox_Alpha/Configuration.h
+++ b/Marlin/src/config/examples/delta/Hatchbox_Alpha/Configuration.h
@@ -160,6 +160,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/delta/generic/Configuration.h b/Marlin/src/config/examples/delta/generic/Configuration.h
index 60c0b15821..edc5855fd8 100644
--- a/Marlin/src/config/examples/delta/generic/Configuration.h
+++ b/Marlin/src/config/examples/delta/generic/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/delta/kossel_mini/Configuration.h b/Marlin/src/config/examples/delta/kossel_mini/Configuration.h
index 3d84362026..99a2543809 100644
--- a/Marlin/src/config/examples/delta/kossel_mini/Configuration.h
+++ b/Marlin/src/config/examples/delta/kossel_mini/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/delta/kossel_pro/Configuration.h b/Marlin/src/config/examples/delta/kossel_pro/Configuration.h
index a4878e7f22..b85a241fe6 100644
--- a/Marlin/src/config/examples/delta/kossel_pro/Configuration.h
+++ b/Marlin/src/config/examples/delta/kossel_pro/Configuration.h
@@ -159,6 +159,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/delta/kossel_xl/Configuration.h b/Marlin/src/config/examples/delta/kossel_xl/Configuration.h
index 0cf1a98792..30c45f5db5 100644
--- a/Marlin/src/config/examples/delta/kossel_xl/Configuration.h
+++ b/Marlin/src/config/examples/delta/kossel_xl/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/gCreate/gMax1.5+/Configuration.h b/Marlin/src/config/examples/gCreate/gMax1.5+/Configuration.h
index 13ea8ccdc8..8fa2709f23 100644
--- a/Marlin/src/config/examples/gCreate/gMax1.5+/Configuration.h
+++ b/Marlin/src/config/examples/gCreate/gMax1.5+/Configuration.h
@@ -160,6 +160,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/makibox/Configuration.h b/Marlin/src/config/examples/makibox/Configuration.h
index d8c1919570..615e62e08e 100644
--- a/Marlin/src/config/examples/makibox/Configuration.h
+++ b/Marlin/src/config/examples/makibox/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/stm32f103ret6/Configuration.h b/Marlin/src/config/examples/stm32f103ret6/Configuration.h
index c9583f21e6..746e5edf9e 100644
--- a/Marlin/src/config/examples/stm32f103ret6/Configuration.h
+++ b/Marlin/src/config/examples/stm32f103ret6/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/tvrrug/Round2/Configuration.h b/Marlin/src/config/examples/tvrrug/Round2/Configuration.h
index d5a2dde9ac..7054601846 100644
--- a/Marlin/src/config/examples/tvrrug/Round2/Configuration.h
+++ b/Marlin/src/config/examples/tvrrug/Round2/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/config/examples/wt150/Configuration.h b/Marlin/src/config/examples/wt150/Configuration.h
index 43079c89c7..b1ab4d40a5 100644
--- a/Marlin/src/config/examples/wt150/Configuration.h
+++ b/Marlin/src/config/examples/wt150/Configuration.h
@@ -155,6 +155,18 @@
// For Cyclops or any "multi-extruder" that shares a single nozzle.
//#define SINGLENOZZLE
+#if ENABLED(SINGLENOZZLE)
+ // Length of filament to retract and prime on toolchange
+ //#define SINGLENOZZLE_SWAP_LENGTH 12.0
+ //#define SINGLENOZZLE_SWAP_RETRACT_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PRIME_SPEED 3600 // (mm/m)
+ //#define SINGLENOZZLE_SWAP_PARK
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #else
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+#endif
/**
* Průša MK2 Single Nozzle Multi-Material Multiplexer, and variants.
diff --git a/Marlin/src/feature/pause.cpp b/Marlin/src/feature/pause.cpp
index 0828875871..bda88ec6e3 100644
--- a/Marlin/src/feature/pause.cpp
+++ b/Marlin/src/feature/pause.cpp
@@ -112,7 +112,7 @@ static bool ensure_safe_temperature(const AdvancedPauseMode mode=ADVANCED_PAUSE_
return thermalManager.wait_for_hotend(active_extruder);
}
-static void do_pause_e_move(const float &length, const float &fr) {
+void do_pause_e_move(const float &length, const float &fr) {
current_position[E_AXIS] += length / planner.e_factor[active_extruder];
planner.buffer_line(current_position, fr, active_extruder);
planner.synchronize();
diff --git a/Marlin/src/feature/pause.h b/Marlin/src/feature/pause.h
index 5eb39a5e1a..2f607989fc 100644
--- a/Marlin/src/feature/pause.h
+++ b/Marlin/src/feature/pause.h
@@ -77,6 +77,8 @@ extern uint8_t did_pause_print;
#define DXC_PASS
#endif
+void do_pause_e_move(const float &length, const float &fr);
+
bool pause_print(const float &retract, const point_t &park_point, const float &unload_length=0, const bool show_lcd=false DXC_PARAMS);
void wait_for_filament_reload(const int8_t max_beep_count=0 DXC_PARAMS);
diff --git a/Marlin/src/gcode/config/M217.cpp b/Marlin/src/gcode/config/M217.cpp
new file mode 100644
index 0000000000..630c826d4b
--- /dev/null
+++ b/Marlin/src/gcode/config/M217.cpp
@@ -0,0 +1,63 @@
+/**
+ * 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 "../../inc/MarlinConfigPre.h"
+
+#if ENABLED(SINGLENOZZLE)
+
+#include "../gcode.h"
+#include "../../module/tool_change.h"
+
+#if NUM_SERIAL > 1
+ #include "../../gcode/queue.h"
+#endif
+
+void M217_report(const bool eeprom=false) {
+ #if NUM_SERIAL > 1
+ const int16_t port = command_queue_port[cmd_queue_index_r];
+ #endif
+ serialprintPGM_P(port, eeprom ? PSTR(" M217") : PSTR("Singlenozzle:"));
+ SERIAL_ECHOPAIR_P(port, " S", singlenozzle_swap_length);
+ SERIAL_ECHOPAIR_P(port, " P", singlenozzle_prime_speed);
+ SERIAL_ECHOLNPAIR_P(port, " R", singlenozzle_retract_speed);
+}
+
+/**
+ * M217 - Set SINGLENOZZLE toolchange parameters
+ *
+ * S[mm] Swap length
+ * P[mm/s] Prime speed
+ * R[mm/s] Retract speed
+ */
+void GcodeSuite::M217() {
+
+ bool report = true;
+
+ if (parser.seenval('S')) { report = false; const float v = parser.value_float(); singlenozzle_swap_length = constrain(v, 0, 500); }
+ if (parser.seenval('P')) { report = false; const int16_t v = parser.value_int(); singlenozzle_prime_speed = constrain(v, 10, 5400); }
+ if (parser.seenval('R')) { report = false; const int16_t v = parser.value_int(); singlenozzle_retract_speed = constrain(v, 10, 5400); }
+
+ if (report) M217_report();
+
+}
+
+#endif // SINGLENOZZLE
diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp
index 36a01c1f7f..39953a2461 100644
--- a/Marlin/src/gcode/gcode.cpp
+++ b/Marlin/src/gcode/gcode.cpp
@@ -487,6 +487,10 @@ void GcodeSuite::process_parsed_command(
case 211: M211(); break; // M211: Enable, Disable, and/or Report software endstops
+ #if ENABLED(SINGLENOZZLE)
+ case 217: M217(); break; // M217: Set filament swap parameters
+ #endif
+
#if HOTENDS > 1
case 218: M218(); break; // M218: Set a tool offset
#endif
diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h
index 106b980e7c..bf3db6550e 100644
--- a/Marlin/src/gcode/gcode.h
+++ b/Marlin/src/gcode/gcode.h
@@ -165,6 +165,7 @@
* M209 - Turn Automatic Retract Detection on/off: S<0|1> (For slicers that don't support G10/11). (Requires FWRETRACT_AUTORETRACT)
Every normal extrude-only move will be classified as retract depending on the direction.
* M211 - Enable, Disable, and/or Report software endstops: S<0|1> (Requires MIN_SOFTWARE_ENDSTOPS or MAX_SOFTWARE_ENDSTOPS)
+ * M217 - Set filament swap parameters: "M217 S P R". (Requires SINGLENOZZLE)
* M218 - Set/get a tool offset: "M218 T X Y". (Requires 2 or more extruders)
* M220 - Set Feedrate Percentage: "M220 S" (i.e., "FR" on the LCD)
* M221 - Set Flow Percentage: "M221 S"
@@ -617,6 +618,10 @@ private:
static void M211();
+ #if ENABLED(SINGLENOZZLE)
+ static void M217();
+ #endif
+
#if HOTENDS > 1
static void M218();
#endif
diff --git a/Marlin/src/gcode/temperature/M104_M109.cpp b/Marlin/src/gcode/temperature/M104_M109.cpp
index 7804b9ec75..7ce80d9ae7 100644
--- a/Marlin/src/gcode/temperature/M104_M109.cpp
+++ b/Marlin/src/gcode/temperature/M104_M109.cpp
@@ -35,6 +35,10 @@
#include "../../feature/leds/leds.h"
#endif
+#if ENABLED(SINGLENOZZLE)
+ #include "../../module/tool_change.h"
+#endif
+
/**
* M104: Set hot end temperature
*/
@@ -44,12 +48,12 @@ void GcodeSuite::M104() {
const uint8_t e = target_extruder;
- #if ENABLED(SINGLENOZZLE)
- if (e != active_extruder) return;
- #endif
-
if (parser.seenval('S')) {
const int16_t temp = parser.value_celsius();
+ #if ENABLED(SINGLENOZZLE)
+ singlenozzle_temp[e] = temp;
+ if (e != active_extruder) return;
+ #endif
thermalManager.setTargetHotend(temp, e);
#if ENABLED(DUAL_X_CARRIAGE)
@@ -85,14 +89,14 @@ void GcodeSuite::M109() {
if (get_target_extruder_from_command()) return;
if (DEBUGGING(DRYRUN)) return;
- #if ENABLED(SINGLENOZZLE)
- if (target_extruder != active_extruder) return;
- #endif
-
const bool no_wait_for_cooling = parser.seenval('S'),
set_temp = no_wait_for_cooling || parser.seenval('R');
if (set_temp) {
const int16_t temp = parser.value_celsius();
+ #if ENABLED(SINGLENOZZLE)
+ singlenozzle_temp[target_extruder] = temp;
+ if (target_extruder != active_extruder) return;
+ #endif
thermalManager.setTargetHotend(temp, target_extruder);
#if ENABLED(DUAL_X_CARRIAGE)
@@ -115,13 +119,8 @@ void GcodeSuite::M109() {
#endif
#if ENABLED(ULTRA_LCD)
- const bool heating = thermalManager.isHeatingHotend(target_extruder);
- if (heating || !no_wait_for_cooling)
- #if HOTENDS > 1
- lcd_status_printf_P(0, heating ? PSTR("E%i " MSG_HEATING) : PSTR("E%i " MSG_COOLING), target_extruder + 1);
- #else
- lcd_setstatusPGM(heating ? PSTR("E " MSG_HEATING) : PSTR("E " MSG_COOLING));
- #endif
+ if (thermalManager.isHeatingHotend(target_extruder) || !no_wait_for_cooling)
+ thermalManager.set_heating_message(target_extruder);
#endif
}
diff --git a/Marlin/src/gcode/temperature/M106_M107.cpp b/Marlin/src/gcode/temperature/M106_M107.cpp
index 8fe50940f2..12e2dc4f26 100644
--- a/Marlin/src/gcode/temperature/M106_M107.cpp
+++ b/Marlin/src/gcode/temperature/M106_M107.cpp
@@ -27,6 +27,11 @@
#include "../gcode.h"
#include "../../Marlin.h" // for fan_speed — should move those to Planner
+#if ENABLED(SINGLENOZZLE)
+ #include "../../module/motion.h"
+ #include "../../module/tool_change.h"
+#endif
+
/**
* M106: Set Fan Speed
*
@@ -42,6 +47,15 @@
*/
void GcodeSuite::M106() {
const uint8_t p = parser.byteval('P');
+ const uint16_t s = parser.ushortval('S', 255);
+
+ #if ENABLED(SINGLENOZZLE)
+ if (p != active_extruder) {
+ if (p < EXTRUDERS) singlenozzle_fan_speed[p] = MIN(s, 255U);
+ return;
+ }
+ #endif
+
if (p < FAN_COUNT) {
#if ENABLED(EXTRA_FAN_SPEED)
const int16_t t = parser.intval('T');
@@ -55,14 +69,12 @@ void GcodeSuite::M106() {
fan_speed[p] = new_fan_speed[p];
break;
default:
- new_fan_speed[p] = MIN(t, 255);
+ new_fan_speed[p] = MIN(t, 255U);
break;
}
return;
-
}
#endif // EXTRA_FAN_SPEED
- const uint16_t s = parser.ushortval('S', 255);
fan_speed[p] = MIN(s, 255U);
}
}
@@ -72,6 +84,13 @@ void GcodeSuite::M106() {
*/
void GcodeSuite::M107() {
const uint16_t p = parser.ushortval('P');
+ #if ENABLED(SINGLENOZZLE)
+ if (p != active_extruder) {
+ if (p < EXTRUDERS) singlenozzle_fan_speed[p] = 0;
+ return;
+ }
+ #endif
+
if (p < FAN_COUNT) fan_speed[p] = 0;
}
diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h
index 326a701af5..5189529850 100644
--- a/Marlin/src/inc/Conditionals_post.h
+++ b/Marlin/src/inc/Conditionals_post.h
@@ -1513,6 +1513,28 @@
// Add commands that need sub-codes to this list
#define USE_GCODE_SUBCODES ENABLED(G38_PROBE_TARGET) || ENABLED(CNC_COORDINATE_SYSTEMS) || ENABLED(POWER_LOSS_RECOVERY)
+// Single Nozzle swap on toolchange defaults
+#if ENABLED(SINGLENOZZLE)
+ #ifndef SINGLENOZZLE_SWAP_LENGTH
+ #define SINGLENOZZLE_SWAP_LENGTH 0
+ #endif
+ #ifndef SINGLENOZZLE_SWAP_RETRACT_SPEED
+ #define SINGLENOZZLE_SWAP_RETRACT_SPEED 60.0
+ #endif
+ #ifndef SINGLENOZZLE_SWAP_PRIME_SPEED
+ #define SINGLENOZZLE_SWAP_PRIME_SPEED 60.0
+ #endif
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #ifndef SINGLENOZZLE_TOOLCHANGE_POSITION
+ #define SINGLENOZZLE_TOOLCHANGE_POSITION { (X_MIN_POS + 10), (Y_MIN_POS + 10), 5 }
+ #endif
+ #else
+ #ifndef SINGLENOZZLE_TOOLCHANGE_ZRAISE
+ #define SINGLENOZZLE_TOOLCHANGE_ZRAISE 2.0
+ #endif
+ #endif
+#endif
+
// Parking Extruder
#if ENABLED(PARKING_EXTRUDER)
#ifndef PARKING_EXTRUDER_GRAB_DISTANCE
diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h
index 1c2ae52fae..6c75b028dc 100644
--- a/Marlin/src/inc/SanityCheck.h
+++ b/Marlin/src/inc/SanityCheck.h
@@ -602,6 +602,10 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE,
#error "EXTRUDERS must be 1 with HEATERS_PARALLEL."
#endif
+ #if ENABLED(SINGLENOZZLE) && !defined(SINGLENOZZLE_SWAP_LENGTH)
+ #define SINGLENOZZLE_SWAP_LENGTH 0
+ #endif
+
#elif ENABLED(MK2_MULTIPLEXER)
#error "MK2_MULTIPLEXER requires 2 or more EXTRUDERS."
#elif ENABLED(SINGLENOZZLE)
diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h
index 40e84be8a1..3091dda415 100644
--- a/Marlin/src/lcd/language/language_en.h
+++ b/Marlin/src/lcd/language/language_en.h
@@ -768,6 +768,18 @@
#ifndef MSG_AUTORETRACT
#define MSG_AUTORETRACT _UxGT("AutoRetr.")
#endif
+#ifndef MSG_FILAMENT_SWAP_LENGTH
+ #define MSG_FILAMENT_SWAP_LENGTH _UxGT("Retract Distance")
+#endif
+#ifndef MSG_SINGLENOZZLE_TOOL_CHANGE
+ #define MSG_SINGLENOZZLE_TOOL_CHANGE _UxGT("Tool Change")
+#endif
+#ifndef MSG_SINGLENOZZLE_PRIME_SPD
+ #define MSG_SINGLENOZZLE_PRIME_SPD _UxGT("Prime Speed")
+#endif
+#ifndef MSG_SINGLENOZZLE_RETRACT_SPD
+ #define MSG_SINGLENOZZLE_RETRACT_SPD _UxGT("Retract Speed")
+#endif
#ifndef MSG_FILAMENTCHANGE
#define MSG_FILAMENTCHANGE _UxGT("Change filament")
#endif
diff --git a/Marlin/src/lcd/ultralcd.cpp b/Marlin/src/lcd/ultralcd.cpp
index 6d8902a12a..9167bbe248 100644
--- a/Marlin/src/lcd/ultralcd.cpp
+++ b/Marlin/src/lcd/ultralcd.cpp
@@ -138,6 +138,7 @@ millis_t next_lcd_update_ms;
} \
typedef void _name##_void
DEFINE_LCD_IMPLEMENTATION_DRAWMENU_SETTING_EDIT_TYPE(int16_t, int3, itostr3);
+ DEFINE_LCD_IMPLEMENTATION_DRAWMENU_SETTING_EDIT_TYPE(int16_t, int4, itostr4sign);
DEFINE_LCD_IMPLEMENTATION_DRAWMENU_SETTING_EDIT_TYPE(uint8_t, int8, i8tostr3);
DEFINE_LCD_IMPLEMENTATION_DRAWMENU_SETTING_EDIT_TYPE(float, float3, ftostr3);
DEFINE_LCD_IMPLEMENTATION_DRAWMENU_SETTING_EDIT_TYPE(float, float52, ftostr52);
@@ -267,6 +268,7 @@ millis_t next_lcd_update_ms;
typedef void _name##_void
DECLARE_MENU_EDIT_TYPE(int16_t, int3);
+ DECLARE_MENU_EDIT_TYPE(int16_t, int4);
DECLARE_MENU_EDIT_TYPE(uint8_t, int8);
DECLARE_MENU_EDIT_TYPE(float, float3);
DECLARE_MENU_EDIT_TYPE(float, float52);
@@ -974,15 +976,23 @@ void lcd_quick_feedback(const bool clear_buttons) {
#endif // POWER_LOSS_RECOVERY
+ #if ENABLED(SINGLENOZZLE)
+ void singlenozzle_swap_menu() {
+ START_MENU();
+ MENU_BACK(MSG_MAIN);
+ MENU_ITEM_EDIT(float3, MSG_FILAMENT_SWAP_LENGTH, &singlenozzle_swap_length, 0, 200);
+ MENU_MULTIPLIER_ITEM_EDIT(int4, MSG_SINGLENOZZLE_RETRACT_SPD, &singlenozzle_retract_speed, 10, 5400);
+ MENU_MULTIPLIER_ITEM_EDIT(int4, MSG_SINGLENOZZLE_PRIME_SPD, &singlenozzle_prime_speed, 10, 5400);
+ END_MENU();
+ }
+ #endif
+
#if ENABLED(MENU_ITEM_CASE_LIGHT)
#include "../feature/caselight.h"
void case_light_menu() {
START_MENU();
- //
- // ^ Main
- //
MENU_BACK(MSG_MAIN);
MENU_ITEM_EDIT_CALLBACK(int8, MSG_CASE_LIGHT_BRIGHTNESS, &case_light_brightness, 0, 255, update_case_light, true);
MENU_ITEM_EDIT_CALLBACK(bool, MSG_CASE_LIGHT, (bool*)&case_light_on, update_case_light);
@@ -999,9 +1009,6 @@ void lcd_quick_feedback(const bool clear_buttons) {
*/
static void bltouch_menu() {
START_MENU();
- //
- // ^ Main
- //
MENU_BACK(MSG_MAIN);
MENU_ITEM(gcode, MSG_BLTOUCH_RESET, PSTR("M280 P" STRINGIFY(Z_PROBE_SERVO_NR) " S" STRINGIFY(BLTOUCH_RESET)));
MENU_ITEM(gcode, MSG_BLTOUCH_SELFTEST, PSTR("M280 P" STRINGIFY(Z_PROBE_SERVO_NR) " S" STRINGIFY(BLTOUCH_SELFTEST)));
@@ -1042,7 +1049,7 @@ void lcd_quick_feedback(const bool clear_buttons) {
void lcd_debug_menu() {
START_MENU();
- MENU_BACK(MSG_MAIN); // ^ Main
+ MENU_BACK(MSG_MAIN);
#if ENABLED(LCD_PROGRESS_BAR_TEST)
MENU_ITEM(submenu, MSG_PROGRESS_BAR_TEST, _progress_bar_test);
@@ -1494,10 +1501,6 @@ void lcd_quick_feedback(const bool clear_buttons) {
*/
void lcd_tune_menu() {
START_MENU();
-
- //
- // ^ Main
- //
MENU_BACK(MSG_MAIN);
//
@@ -3438,6 +3441,13 @@ void lcd_quick_feedback(const bool clear_buttons) {
#endif
}
+ //
+ // Set single nozzle filament retract and prime length
+ //
+ #if ENABLED(SINGLENOZZLE)
+ MENU_ITEM(submenu, MSG_SINGLENOZZLE_TOOL_CHANGE, singlenozzle_swap_menu);
+ #endif
+
//
// Set Case light on/off/brightness
//
@@ -5143,6 +5153,7 @@ void lcd_quick_feedback(const bool clear_buttons) {
typedef void _name##_void
DEFINE_MENU_EDIT_TYPE(int16_t, int3, itostr3, 1);
+ DEFINE_MENU_EDIT_TYPE(int16_t, int4, itostr4sign, 1);
DEFINE_MENU_EDIT_TYPE(uint8_t, int8, i8tostr3, 1);
DEFINE_MENU_EDIT_TYPE(float, float3, ftostr3, 1);
DEFINE_MENU_EDIT_TYPE(float, float52, ftostr52, 100);
diff --git a/Marlin/src/module/configuration_store.cpp b/Marlin/src/module/configuration_store.cpp
index fae14db100..993ea39644 100644
--- a/Marlin/src/module/configuration_store.cpp
+++ b/Marlin/src/module/configuration_store.cpp
@@ -98,6 +98,11 @@ typedef struct { int16_t X, Y, Z; } tmc
#include "../feature/pause.h"
#endif
+#if ENABLED(SINGLENOZZLE)
+ #include "tool_change.h"
+ void M217_report(const bool eeprom);
+#endif
+
#if ENABLED(PID_EXTRUSION_SCALING)
#define LPQ_LEN thermalManager.lpq_len
#endif
@@ -289,6 +294,15 @@ typedef struct SettingsDataStruct {
float filament_change_unload_length[EXTRUDERS], // M603 T U
filament_change_load_length[EXTRUDERS]; // M603 T L
+ //
+ // SINGLENOZZLE toolchange values
+ //
+ #if ENABLED(SINGLENOZZLE)
+ float singlenozzle_swap_length; // M217 S
+ int16_t singlenozzle_prime_speed, // M217 P
+ singlenozzle_retract_speed; // M217 R
+ #endif
+
} SettingsData;
#pragma pack(pop)
@@ -947,6 +961,17 @@ void MarlinSettings::postprocess() {
for (uint8_t q = EXTRUDERS * 2; q--;) EEPROM_WRITE(dummy);
#endif
+ //
+ // SINGLENOZZLE
+ //
+
+ #if ENABLED(SINGLENOZZLE)
+ _FIELD_TEST(singlenozzle_swap_length);
+ EEPROM_WRITE(singlenozzle_swap_length);
+ EEPROM_WRITE(singlenozzle_prime_speed);
+ EEPROM_WRITE(singlenozzle_retract_speed);
+ #endif
+
//
// Validate CRC and Data Size
//
@@ -1582,6 +1607,17 @@ void MarlinSettings::postprocess() {
for (uint8_t q = EXTRUDERS * 2; q--;) EEPROM_READ(dummy);
#endif
+ //
+ // SINGLENOZZLE toolchange values
+ //
+
+ #if ENABLED(SINGLENOZZLE)
+ _FIELD_TEST(singlenozzle_swap_length);
+ EEPROM_READ(singlenozzle_swap_length);
+ EEPROM_READ(singlenozzle_prime_speed);
+ EEPROM_READ(singlenozzle_retract_speed);
+ #endif
+
eeprom_error = size_error(eeprom_index - (EEPROM_OFFSET));
if (eeprom_error) {
#if ENABLED(EEPROM_CHITCHAT)
@@ -1840,6 +1876,12 @@ void MarlinSettings::reset(PORTARG_SOLO) {
#endif
#endif
+ #if ENABLED(SINGLENOZZLE)
+ singlenozzle_swap_length = SINGLENOZZLE_SWAP_LENGTH;
+ singlenozzle_prime_speed = SINGLENOZZLE_SWAP_PRIME_SPEED;
+ singlenozzle_retract_speed = SINGLENOZZLE_SWAP_RETRACT_SPEED;
+ #endif
+
//
// Global Leveling
//
@@ -2897,6 +2939,15 @@ void MarlinSettings::reset(PORTARG_SOLO) {
#endif // EXTRUDERS > 2
#endif // EXTRUDERS == 1
#endif // ADVANCED_PAUSE_FEATURE
+
+ #if ENABLED(SINGLENOZZLE)
+ CONFIG_ECHO_START;
+ if (!forReplay) {
+ SERIAL_ECHOLNPGM_P(port, "SINGLENOZZLE:");
+ CONFIG_ECHO_START;
+ }
+ M217_report(true);
+ #endif
}
#endif // !DISABLE_M503
diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp
index 1f49cae90c..a64db1f013 100644
--- a/Marlin/src/module/temperature.cpp
+++ b/Marlin/src/module/temperature.cpp
@@ -2416,6 +2416,17 @@ void Temperature::isr() {
#endif // AUTO_REPORT_TEMPERATURES
+ #if ENABLED(ULTRA_LCD)
+ void Temperature::set_heating_message(const uint8_t e) {
+ const bool heating = isHeatingHotend(e);
+ #if HOTENDS > 1
+ lcd_status_printf_P(0, heating ? PSTR("E%i " MSG_HEATING) : PSTR("E%i " MSG_COOLING), int(e + 1));
+ #else
+ lcd_setstatusPGM(heating ? PSTR("E " MSG_HEATING) : PSTR("E " MSG_COOLING));
+ #endif
+ }
+ #endif
+
#if HAS_TEMP_HOTEND
#ifndef MIN_COOLING_SLOPE_DEG
diff --git a/Marlin/src/module/temperature.h b/Marlin/src/module/temperature.h
index 8f451be2b8..870345a342 100644
--- a/Marlin/src/module/temperature.h
+++ b/Marlin/src/module/temperature.h
@@ -616,6 +616,10 @@ class Temperature {
#endif
#endif
+ #if ENABLED(ULTRA_LCD)
+ static void set_heating_message(const uint8_t e);
+ #endif
+
private:
#if ENABLED(FAST_PWM_FAN)
@@ -659,7 +663,6 @@ class Temperature {
#endif
#endif // THERMAL_PROTECTION
-
};
extern Temperature thermalManager;
diff --git a/Marlin/src/module/tool_change.cpp b/Marlin/src/module/tool_change.cpp
index 2b840491c8..36a89e951f 100644
--- a/Marlin/src/module/tool_change.cpp
+++ b/Marlin/src/module/tool_change.cpp
@@ -25,9 +25,24 @@
#include "probe.h"
#include "motion.h"
#include "planner.h"
+#include "temperature.h"
#include "../Marlin.h"
+#if ENABLED(SINGLENOZZLE)
+ float singlenozzle_swap_length = SINGLENOZZLE_SWAP_LENGTH;
+ int16_t singlenozzle_prime_speed = SINGLENOZZLE_SWAP_PRIME_SPEED,
+ singlenozzle_retract_speed = SINGLENOZZLE_SWAP_RETRACT_SPEED;
+ uint16_t singlenozzle_temp[EXTRUDERS];
+ #if FAN_COUNT > 0
+ uint8_t singlenozzle_fan_speed[EXTRUDERS];
+ #endif
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ #include "../libs/point_t.h"
+ const point_t singlenozzle_change_point = SINGLENOZZLE_TOOLCHANGE_POSITION;
+ #endif
+#endif
+
#if ENABLED(PARKING_EXTRUDER) && PARKING_EXTRUDER_SOLENOIDS_DELAY > 0
#include "../gcode/gcode.h" // for dwell()
#endif
@@ -625,16 +640,89 @@ void tool_change(const uint8_t tmp_extruder, const float fr_mm_s/*=0.0*/, bool n
UNUSED(no_move);
#if ENABLED(MK2_MULTIPLEXER)
- if (tmp_extruder >= E_STEPPERS)
- return invalid_extruder_error(tmp_extruder);
-
+ if (tmp_extruder >= E_STEPPERS) return invalid_extruder_error(tmp_extruder);
select_multiplexed_stepper(tmp_extruder);
#endif
#if EXTRUDERS > 1
- // Set the new active extruder
- active_extruder = tmp_extruder;
- #endif
+
+ #if ENABLED(SINGLENOZZLE)
+
+ #if ENABLED(PREVENT_COLD_EXTRUSION)
+ if (!DEBUGGING(DRYRUN) && thermalManager.targetTooColdToExtrude(active_extruder)) {
+ SERIAL_ERROR_START();
+ SERIAL_ERRORLNPGM(MSG_HOTEND_TOO_COLD);
+ return;
+ }
+ #endif
+
+ #if FAN_COUNT > 0
+ singlenozzle_fan_speed[active_extruder] = fan_speed[0];
+ fan_speed[0] = singlenozzle_fan_speed[tmp_extruder];
+ #endif
+
+ set_destination_from_current();
+
+ current_position[Z_AXIS] += (
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ singlenozzle_change_point.z
+ #else
+ SINGLENOZZLE_TOOLCHANGE_ZRAISE
+ #endif
+ );
+
+ planner.buffer_line(current_position, planner.max_feedrate_mm_s[Z_AXIS], active_extruder);
+
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ current_position[X_AXIS] = singlenozzle_change_point.x;
+ current_position[Y_AXIS] = singlenozzle_change_point.y;
+ planner.buffer_line(current_position, planner.max_feedrate_mm_s[Y_AXIS], active_extruder);
+ #endif
+
+ if (singlenozzle_swap_length) {
+ #if ENABLED(ADVANCED_PAUSE_FEATURE)
+ do_pause_e_move(-singlenozzle_swap_length, MMM_TO_MMS(singlenozzle_retract_speed));
+ #else
+ current_position[E_AXIS] -= singlenozzle_swap_length / planner.e_factor[active_extruder];
+ planner.buffer_line(current_position, MMM_TO_MMS(singlenozzle_retract_speed), active_extruder);
+ #endif
+ }
+
+ singlenozzle_temp[active_extruder] = thermalManager.target_temperature[0];
+ if (singlenozzle_temp[tmp_extruder] && singlenozzle_temp[tmp_extruder] != singlenozzle_temp[active_extruder]) {
+ thermalManager.setTargetHotend(singlenozzle_temp[tmp_extruder], 0);
+ #if ENABLED(ULTRA_LCD)
+ thermalManager.set_heating_message(0);
+ #endif
+ (void)thermalManager.wait_for_hotend(0, false); // Wait for heating or cooling
+ }
+
+ active_extruder = tmp_extruder;
+
+ if (singlenozzle_swap_length) {
+ #if ENABLED(ADVANCED_PAUSE_FEATURE)
+ do_pause_e_move(singlenozzle_swap_length, singlenozzle_prime_speed);
+ #else
+ current_position[E_AXIS] += singlenozzle_swap_length / planner.e_factor[tmp_extruder];
+ planner.buffer_line(current_position, singlenozzle_prime_speed, tmp_extruder);
+ #endif
+ }
+
+ #if ENABLED(SINGLENOZZLE_SWAP_PARK)
+ current_position[X_AXIS] = destination[X_AXIS];
+ current_position[Y_AXIS] = destination[Y_AXIS];
+ planner.buffer_line(current_position, planner.max_feedrate_mm_s[Y_AXIS], active_extruder);
+ #endif
+
+ do_blocking_move_to(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS]);
+
+ #else // !SINGLENOZZLE
+
+ active_extruder = tmp_extruder;
+
+ #endif // !SINGLENOZZLE
+
+ #endif // EXTRUDERS > 1
#endif // HOTENDS <= 1
diff --git a/Marlin/src/module/tool_change.h b/Marlin/src/module/tool_change.h
index 53da00d178..2edcf95c94 100644
--- a/Marlin/src/module/tool_change.h
+++ b/Marlin/src/module/tool_change.h
@@ -50,6 +50,16 @@
#endif // PARKING_EXTRUDER
+#if ENABLED(SINGLENOZZLE)
+ extern float singlenozzle_swap_length;
+ extern int16_t singlenozzle_prime_speed,
+ singlenozzle_retract_speed;
+ extern uint16_t singlenozzle_temp[EXTRUDERS];
+ #if FAN_COUNT > 0
+ extern uint8_t singlenozzle_fan_speed[EXTRUDERS];
+ #endif
+#endif
+
/**
* Perform a tool-change, which may result in moving the
* previous tool out of the way and the new tool into place.
diff --git a/buildroot/share/tests/STM32F1_tests b/buildroot/share/tests/STM32F1_tests
index b9b91ff66d..5a769ad437 100755
--- a/buildroot/share/tests/STM32F1_tests
+++ b/buildroot/share/tests/STM32F1_tests
@@ -5,8 +5,9 @@ set -e
restore_configs
opt_set MOTHERBOARD BOARD_STM32F1R
+opt_set EXTRUDERS 2
opt_enable EEPROM_SETTINGS EEPROM_CHITCHAT REPRAP_DISCOUNT_SMART_CONTROLLER SDSUPPORT \
- PAREN_COMMENTS GCODE_MOTION_MODES
+ PAREN_COMMENTS GCODE_MOTION_MODES SINGLENOZZLE SINGLENOZZLE_SWAP_LENGTH
exec_test $1 $2 "STM32F1R EEPROM_SETTINGS EEPROM_CHITCHAT REPRAP_DISCOUNT_SMART_CONTROLLER SDSUPPORT PAREN_COMMENTS GCODE_MOTION_MODES"
opt_enable SPINDLE_LASER_ENABLE