diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h
index d7d815fe9..ce773728e 100644
--- a/Marlin/Configuration.h
+++ b/Marlin/Configuration.h
@@ -96,7 +96,7 @@
//
// Marlin now allow you to have a vendor boot image to be displayed on machine
// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
+// custom boot image and then the default Marlin boot image is shown.
//
// We suggest for you to take advantage of this new feature and keep the Marlin
// boot image unmodified. For an example have a look at the bq Hephestos 2
@@ -1000,6 +1000,9 @@
// |________|_________|_________|
// T1 T2 T3
//
+// P2: This starts a circular pattern with circle with middle in
+// NOZZLE_CLEAN_CIRCLE_MIDDLE radius of R and stroke count of S.
+// Before starting the circle nozzle goes to NOZZLE_CLEAN_START_POINT.
//
// Caveats: End point Z should use the same value as Start point Z.
//
@@ -1011,7 +1014,7 @@
#if ENABLED(NOZZLE_CLEAN_FEATURE)
// Default number of pattern repetitions
#define NOZZLE_CLEAN_STROKES 12
-
+
// Default number of triangles
#define NOZZLE_CLEAN_TRIANGLES 3
@@ -1019,6 +1022,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
+ // Circular pattern radius
+ #define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5
+ // Circular pattern circle fragments number
+ #define NOZZLE_CLEAN_CIRCLE_FN 10
+ // Middle point of circle
+ #define NOZZLE_CLEAN_CIRCLE_MIDDLE NOZZLE_CLEAN_START_POINT
+
// Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK
#endif
diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp
index d30a58d4c..05baf4c05 100755
--- a/Marlin/Marlin_main.cpp
+++ b/Marlin/Marlin_main.cpp
@@ -3164,8 +3164,9 @@ inline void gcode_G4() {
const uint8_t pattern = code_seen('P') ? code_value_ushort() : 0,
strokes = code_seen('S') ? code_value_ushort() : NOZZLE_CLEAN_STROKES,
objects = code_seen('T') ? code_value_ushort() : NOZZLE_CLEAN_TRIANGLES;
+ const float radius = code_seen('R') ? code_value_float() : NOZZLE_CLEAN_CIRCLE_RADIUS;
- Nozzle::clean(pattern, strokes, objects);
+ Nozzle::clean(pattern, strokes, radius, objects);
}
#endif
diff --git a/Marlin/example_configurations/Cartesio/Configuration.h b/Marlin/example_configurations/Cartesio/Configuration.h
index f9dbc6cbb..eeec79db9 100644
--- a/Marlin/example_configurations/Cartesio/Configuration.h
+++ b/Marlin/example_configurations/Cartesio/Configuration.h
@@ -96,7 +96,7 @@
//
// Marlin now allow you to have a vendor boot image to be displayed on machine
// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
+// custom boot image and then the default Marlin boot image is shown.
//
// We suggest for you to take advantage of this new feature and keep the Marlin
// boot image unmodified. For an example have a look at the bq Hephestos 2
@@ -1000,6 +1000,10 @@
// |________|_________|_________|
// T1 T2 T3
//
+// P2: This starts a circular pattern with circle with middle in
+// NOZZLE_CLEAN_CIRCLE_MIDDLE radius of R and stroke count of S.
+// Before starting the circle nozzle goes to NOZZLE_CLEAN_START_POINT.
+//
// Caveats: End point Z should use the same value as Start point Z.
//
// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@@ -1010,7 +1014,7 @@
#if ENABLED(NOZZLE_CLEAN_FEATURE)
// Default number of pattern repetitions
#define NOZZLE_CLEAN_STROKES 12
-
+
// Default number of triangles
#define NOZZLE_CLEAN_TRIANGLES 3
@@ -1018,6 +1022,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
+ // Circular pattern radius
+ #define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5
+ // Circular pattern circle fragments number
+ #define NOZZLE_CLEAN_CIRCLE_FN 10
+ // Middle point of circle
+ #define NOZZLE_CLEAN_CIRCLE_MIDDLE NOZZLE_CLEAN_START_POINT
+
// Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK
#endif
diff --git a/Marlin/example_configurations/Felix/Configuration.h b/Marlin/example_configurations/Felix/Configuration.h
index 3c5d6a966..2e2f3ecf2 100644
--- a/Marlin/example_configurations/Felix/Configuration.h
+++ b/Marlin/example_configurations/Felix/Configuration.h
@@ -96,7 +96,7 @@
//
// Marlin now allow you to have a vendor boot image to be displayed on machine
// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
+// custom boot image and then the default Marlin boot image is shown.
//
// We suggest for you to take advantage of this new feature and keep the Marlin
// boot image unmodified. For an example have a look at the bq Hephestos 2
@@ -983,6 +983,10 @@
// |________|_________|_________|
// T1 T2 T3
//
+// P2: This starts a circular pattern with circle with middle in
+// NOZZLE_CLEAN_CIRCLE_MIDDLE radius of R and stroke count of S.
+// Before starting the circle nozzle goes to NOZZLE_CLEAN_START_POINT.
+//
// Caveats: End point Z should use the same value as Start point Z.
//
// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@@ -993,7 +997,7 @@
#if ENABLED(NOZZLE_CLEAN_FEATURE)
// Default number of pattern repetitions
#define NOZZLE_CLEAN_STROKES 12
-
+
// Default number of triangles
#define NOZZLE_CLEAN_TRIANGLES 3
@@ -1001,6 +1005,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
+ // Circular pattern radius
+ #define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5
+ // Circular pattern circle fragments number
+ #define NOZZLE_CLEAN_CIRCLE_FN 10
+ // Middle point of circle
+ #define NOZZLE_CLEAN_CIRCLE_MIDDLE NOZZLE_CLEAN_START_POINT
+
// Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK
#endif
diff --git a/Marlin/example_configurations/Felix/DUAL/Configuration.h b/Marlin/example_configurations/Felix/DUAL/Configuration.h
index 847ffa95a..9bf834d67 100644
--- a/Marlin/example_configurations/Felix/DUAL/Configuration.h
+++ b/Marlin/example_configurations/Felix/DUAL/Configuration.h
@@ -96,7 +96,7 @@
//
// Marlin now allow you to have a vendor boot image to be displayed on machine
// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
+// custom boot image and then the default Marlin boot image is shown.
//
// We suggest for you to take advantage of this new feature and keep the Marlin
// boot image unmodified. For an example have a look at the bq Hephestos 2
@@ -983,6 +983,10 @@
// |________|_________|_________|
// T1 T2 T3
//
+// P2: This starts a circular pattern with circle with middle in
+// NOZZLE_CLEAN_CIRCLE_MIDDLE radius of R and stroke count of S.
+// Before starting the circle nozzle goes to NOZZLE_CLEAN_START_POINT.
+//
// Caveats: End point Z should use the same value as Start point Z.
//
// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@@ -993,7 +997,7 @@
#if ENABLED(NOZZLE_CLEAN_FEATURE)
// Default number of pattern repetitions
#define NOZZLE_CLEAN_STROKES 12
-
+
// Default number of triangles
#define NOZZLE_CLEAN_TRIANGLES 3
@@ -1001,6 +1005,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
+ // Circular pattern radius
+ #define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5
+ // Circular pattern circle fragments number
+ #define NOZZLE_CLEAN_CIRCLE_FN 10
+ // Middle point of circle
+ #define NOZZLE_CLEAN_CIRCLE_MIDDLE NOZZLE_CLEAN_START_POINT
+
// Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK
#endif
diff --git a/Marlin/example_configurations/Hephestos/Configuration.h b/Marlin/example_configurations/Hephestos/Configuration.h
index 0e0580bf1..6dad4643b 100644
--- a/Marlin/example_configurations/Hephestos/Configuration.h
+++ b/Marlin/example_configurations/Hephestos/Configuration.h
@@ -96,7 +96,7 @@
//
// Marlin now allow you to have a vendor boot image to be displayed on machine
// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
+// custom boot image and then the default Marlin boot image is shown.
//
// We suggest for you to take advantage of this new feature and keep the Marlin
// boot image unmodified. For an example have a look at the bq Hephestos 2
@@ -992,6 +992,10 @@
// |________|_________|_________|
// T1 T2 T3
//
+// P2: This starts a circular pattern with circle with middle in
+// NOZZLE_CLEAN_CIRCLE_MIDDLE radius of R and stroke count of S.
+// Before starting the circle nozzle goes to NOZZLE_CLEAN_START_POINT.
+//
// Caveats: End point Z should use the same value as Start point Z.
//
// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@@ -1002,7 +1006,7 @@
#if ENABLED(NOZZLE_CLEAN_FEATURE)
// Default number of pattern repetitions
#define NOZZLE_CLEAN_STROKES 12
-
+
// Default number of triangles
#define NOZZLE_CLEAN_TRIANGLES 3
@@ -1010,6 +1014,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
+ // Circular pattern radius
+ #define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5
+ // Circular pattern circle fragments number
+ #define NOZZLE_CLEAN_CIRCLE_FN 10
+ // Middle point of circle
+ #define NOZZLE_CLEAN_CIRCLE_MIDDLE NOZZLE_CLEAN_START_POINT
+
// Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK
#endif
diff --git a/Marlin/example_configurations/Hephestos_2/Configuration.h b/Marlin/example_configurations/Hephestos_2/Configuration.h
index 6a3f548c4..2c3e399ff 100644
--- a/Marlin/example_configurations/Hephestos_2/Configuration.h
+++ b/Marlin/example_configurations/Hephestos_2/Configuration.h
@@ -96,7 +96,7 @@
//
// Marlin now allow you to have a vendor boot image to be displayed on machine
// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
+// custom boot image and then the default Marlin boot image is shown.
//
// We suggest for you to take advantage of this new feature and keep the Marlin
// boot image unmodified. For an example have a look at the bq Hephestos 2
@@ -994,6 +994,10 @@
// |________|_________|_________|
// T1 T2 T3
//
+// P2: This starts a circular pattern with circle with middle in
+// NOZZLE_CLEAN_CIRCLE_MIDDLE radius of R and stroke count of S.
+// Before starting the circle nozzle goes to NOZZLE_CLEAN_START_POINT.
+//
// Caveats: End point Z should use the same value as Start point Z.
//
// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@@ -1004,7 +1008,7 @@
#if ENABLED(NOZZLE_CLEAN_FEATURE)
// Default number of pattern repetitions
#define NOZZLE_CLEAN_STROKES 12
-
+
// Default number of triangles
#define NOZZLE_CLEAN_TRIANGLES 3
@@ -1012,6 +1016,13 @@
#define NOZZLE_CLEAN_START_POINT { X_MIN_POS + 10, Y_MAX_POS - 9, (Z_MIN_POS + 0.5)}
#define NOZZLE_CLEAN_END_POINT { X_MIN_POS + 90, Y_MAX_POS - 0, (Z_MIN_POS + 0.5)}
+ // Circular pattern radius
+ #define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5
+ // Circular pattern circle fragments number
+ #define NOZZLE_CLEAN_CIRCLE_FN 10
+ // Middle point of circle
+ #define NOZZLE_CLEAN_CIRCLE_MIDDLE NOZZLE_CLEAN_START_POINT
+
// Moves the nozzle to the initial position
//#define NOZZLE_CLEAN_GOBACK
#endif
diff --git a/Marlin/example_configurations/K8200/Configuration.h b/Marlin/example_configurations/K8200/Configuration.h
index 06443e3cb..df8e92ad6 100644
--- a/Marlin/example_configurations/K8200/Configuration.h
+++ b/Marlin/example_configurations/K8200/Configuration.h
@@ -112,7 +112,7 @@
//
// Marlin now allow you to have a vendor boot image to be displayed on machine
// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
+// custom boot image and then the default Marlin boot image is shown.
//
// We suggest for you to take advantage of this new feature and keep the Marlin
// boot image unmodified. For an example have a look at the bq Hephestos 2
@@ -1029,6 +1029,10 @@
// |________|_________|_________|
// T1 T2 T3
//
+// P2: This starts a circular pattern with circle with middle in
+// NOZZLE_CLEAN_CIRCLE_MIDDLE radius of R and stroke count of S.
+// Before starting the circle nozzle goes to NOZZLE_CLEAN_START_POINT.
+//
// Caveats: End point Z should use the same value as Start point Z.
//
// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@@ -1039,7 +1043,7 @@
#if ENABLED(NOZZLE_CLEAN_FEATURE)
// Default number of pattern repetitions
#define NOZZLE_CLEAN_STROKES 12
-
+
// Default number of triangles
#define NOZZLE_CLEAN_TRIANGLES 3
@@ -1047,6 +1051,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
+ // Circular pattern radius
+ #define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5
+ // Circular pattern circle fragments number
+ #define NOZZLE_CLEAN_CIRCLE_FN 10
+ // Middle point of circle
+ #define NOZZLE_CLEAN_CIRCLE_MIDDLE NOZZLE_CLEAN_START_POINT
+
// Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK
#endif
diff --git a/Marlin/example_configurations/K8400/Configuration.h b/Marlin/example_configurations/K8400/Configuration.h
index c169e0098..dbc06c08c 100644
--- a/Marlin/example_configurations/K8400/Configuration.h
+++ b/Marlin/example_configurations/K8400/Configuration.h
@@ -96,7 +96,7 @@
//
// Marlin now allow you to have a vendor boot image to be displayed on machine
// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
+// custom boot image and then the default Marlin boot image is shown.
//
// We suggest for you to take advantage of this new feature and keep the Marlin
// boot image unmodified. For an example have a look at the bq Hephestos 2
@@ -1000,6 +1000,10 @@
// |________|_________|_________|
// T1 T2 T3
//
+// P2: This starts a circular pattern with circle with middle in
+// NOZZLE_CLEAN_CIRCLE_MIDDLE radius of R and stroke count of S.
+// Before starting the circle nozzle goes to NOZZLE_CLEAN_START_POINT.
+//
// Caveats: End point Z should use the same value as Start point Z.
//
// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@@ -1010,7 +1014,7 @@
#if ENABLED(NOZZLE_CLEAN_FEATURE)
// Default number of pattern repetitions
#define NOZZLE_CLEAN_STROKES 12
-
+
// Default number of triangles
#define NOZZLE_CLEAN_TRIANGLES 3
@@ -1018,6 +1022,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
+ // Circular pattern radius
+ #define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5
+ // Circular pattern circle fragments number
+ #define NOZZLE_CLEAN_CIRCLE_FN 10
+ // Middle point of circle
+ #define NOZZLE_CLEAN_CIRCLE_MIDDLE NOZZLE_CLEAN_START_POINT
+
// Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK
#endif
diff --git a/Marlin/example_configurations/K8400/Dual-head/Configuration.h b/Marlin/example_configurations/K8400/Dual-head/Configuration.h
index aa11b8816..fc4f6b7ae 100644
--- a/Marlin/example_configurations/K8400/Dual-head/Configuration.h
+++ b/Marlin/example_configurations/K8400/Dual-head/Configuration.h
@@ -96,7 +96,7 @@
//
// Marlin now allow you to have a vendor boot image to be displayed on machine
// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
+// custom boot image and then the default Marlin boot image is shown.
//
// We suggest for you to take advantage of this new feature and keep the Marlin
// boot image unmodified. For an example have a look at the bq Hephestos 2
@@ -1000,6 +1000,10 @@
// |________|_________|_________|
// T1 T2 T3
//
+// P2: This starts a circular pattern with circle with middle in
+// NOZZLE_CLEAN_CIRCLE_MIDDLE radius of R and stroke count of S.
+// Before starting the circle nozzle goes to NOZZLE_CLEAN_START_POINT.
+//
// Caveats: End point Z should use the same value as Start point Z.
//
// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@@ -1010,7 +1014,7 @@
#if ENABLED(NOZZLE_CLEAN_FEATURE)
// Default number of pattern repetitions
#define NOZZLE_CLEAN_STROKES 12
-
+
// Default number of triangles
#define NOZZLE_CLEAN_TRIANGLES 3
@@ -1018,6 +1022,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
+ // Circular pattern radius
+ #define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5
+ // Circular pattern circle fragments number
+ #define NOZZLE_CLEAN_CIRCLE_FN 10
+ // Middle point of circle
+ #define NOZZLE_CLEAN_CIRCLE_MIDDLE NOZZLE_CLEAN_START_POINT
+
// Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK
#endif
diff --git a/Marlin/example_configurations/RepRapWorld/Megatronics/Configuration.h b/Marlin/example_configurations/RepRapWorld/Megatronics/Configuration.h
index bf23af2ae..5088a96c5 100644
--- a/Marlin/example_configurations/RepRapWorld/Megatronics/Configuration.h
+++ b/Marlin/example_configurations/RepRapWorld/Megatronics/Configuration.h
@@ -96,7 +96,7 @@
//
// Marlin now allow you to have a vendor boot image to be displayed on machine
// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
+// custom boot image and then the default Marlin boot image is shown.
//
// We suggest for you to take advantage of this new feature and keep the Marlin
// boot image unmodified. For an example have a look at the bq Hephestos 2
@@ -1000,6 +1000,10 @@
// |________|_________|_________|
// T1 T2 T3
//
+// P2: This starts a circular pattern with circle with middle in
+// NOZZLE_CLEAN_CIRCLE_MIDDLE radius of R and stroke count of S.
+// Before starting the circle nozzle goes to NOZZLE_CLEAN_START_POINT.
+//
// Caveats: End point Z should use the same value as Start point Z.
//
// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@@ -1010,7 +1014,7 @@
#if ENABLED(NOZZLE_CLEAN_FEATURE)
// Default number of pattern repetitions
#define NOZZLE_CLEAN_STROKES 12
-
+
// Default number of triangles
#define NOZZLE_CLEAN_TRIANGLES 3
@@ -1018,6 +1022,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
+ // Circular pattern radius
+ #define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5
+ // Circular pattern circle fragments number
+ #define NOZZLE_CLEAN_CIRCLE_FN 10
+ // Middle point of circle
+ #define NOZZLE_CLEAN_CIRCLE_MIDDLE NOZZLE_CLEAN_START_POINT
+
// Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK
#endif
diff --git a/Marlin/example_configurations/RigidBot/Configuration.h b/Marlin/example_configurations/RigidBot/Configuration.h
index 617fe392b..1242383b6 100644
--- a/Marlin/example_configurations/RigidBot/Configuration.h
+++ b/Marlin/example_configurations/RigidBot/Configuration.h
@@ -96,7 +96,7 @@
//
// Marlin now allow you to have a vendor boot image to be displayed on machine
// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
+// custom boot image and then the default Marlin boot image is shown.
//
// We suggest for you to take advantage of this new feature and keep the Marlin
// boot image unmodified. For an example have a look at the bq Hephestos 2
@@ -999,6 +999,10 @@
// |________|_________|_________|
// T1 T2 T3
//
+// P2: This starts a circular pattern with circle with middle in
+// NOZZLE_CLEAN_CIRCLE_MIDDLE radius of R and stroke count of S.
+// Before starting the circle nozzle goes to NOZZLE_CLEAN_START_POINT.
+//
// Caveats: End point Z should use the same value as Start point Z.
//
// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@@ -1009,7 +1013,7 @@
#if ENABLED(NOZZLE_CLEAN_FEATURE)
// Default number of pattern repetitions
#define NOZZLE_CLEAN_STROKES 12
-
+
// Default number of triangles
#define NOZZLE_CLEAN_TRIANGLES 3
@@ -1017,6 +1021,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
+ // Circular pattern radius
+ #define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5
+ // Circular pattern circle fragments number
+ #define NOZZLE_CLEAN_CIRCLE_FN 10
+ // Middle point of circle
+ #define NOZZLE_CLEAN_CIRCLE_MIDDLE NOZZLE_CLEAN_START_POINT
+
// Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK
#endif
diff --git a/Marlin/example_configurations/SCARA/Configuration.h b/Marlin/example_configurations/SCARA/Configuration.h
index fb8c3330c..7811a2c3a 100644
--- a/Marlin/example_configurations/SCARA/Configuration.h
+++ b/Marlin/example_configurations/SCARA/Configuration.h
@@ -128,7 +128,7 @@
//
// Marlin now allow you to have a vendor boot image to be displayed on machine
// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
+// custom boot image and then the default Marlin boot image is shown.
//
// We suggest for you to take advantage of this new feature and keep the Marlin
// boot image unmodified. For an example have a look at the bq Hephestos 2
@@ -1015,6 +1015,10 @@
// |________|_________|_________|
// T1 T2 T3
//
+// P2: This starts a circular pattern with circle with middle in
+// NOZZLE_CLEAN_CIRCLE_MIDDLE radius of R and stroke count of S.
+// Before starting the circle nozzle goes to NOZZLE_CLEAN_START_POINT.
+//
// Caveats: End point Z should use the same value as Start point Z.
//
// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@@ -1025,7 +1029,7 @@
#if ENABLED(NOZZLE_CLEAN_FEATURE)
// Default number of pattern repetitions
#define NOZZLE_CLEAN_STROKES 12
-
+
// Default number of triangles
#define NOZZLE_CLEAN_TRIANGLES 3
@@ -1033,6 +1037,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
+ // Circular pattern radius
+ #define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5
+ // Circular pattern circle fragments number
+ #define NOZZLE_CLEAN_CIRCLE_FN 10
+ // Middle point of circle
+ #define NOZZLE_CLEAN_CIRCLE_MIDDLE NOZZLE_CLEAN_START_POINT
+
// Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK
#endif
diff --git a/Marlin/example_configurations/TAZ4/Configuration.h b/Marlin/example_configurations/TAZ4/Configuration.h
index 36a0e8ebd..23a734b1c 100644
--- a/Marlin/example_configurations/TAZ4/Configuration.h
+++ b/Marlin/example_configurations/TAZ4/Configuration.h
@@ -96,7 +96,7 @@
//
// Marlin now allow you to have a vendor boot image to be displayed on machine
// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
+// custom boot image and then the default Marlin boot image is shown.
//
// We suggest for you to take advantage of this new feature and keep the Marlin
// boot image unmodified. For an example have a look at the bq Hephestos 2
@@ -1021,6 +1021,10 @@
// |________|_________|_________|
// T1 T2 T3
//
+// P2: This starts a circular pattern with circle with middle in
+// NOZZLE_CLEAN_CIRCLE_MIDDLE radius of R and stroke count of S.
+// Before starting the circle nozzle goes to NOZZLE_CLEAN_START_POINT.
+//
// Caveats: End point Z should use the same value as Start point Z.
//
// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@@ -1031,7 +1035,7 @@
#if ENABLED(NOZZLE_CLEAN_FEATURE)
// Default number of pattern repetitions
#define NOZZLE_CLEAN_STROKES 12
-
+
// Default number of triangles
#define NOZZLE_CLEAN_TRIANGLES 3
@@ -1039,6 +1043,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
+ // Circular pattern radius
+ #define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5
+ // Circular pattern circle fragments number
+ #define NOZZLE_CLEAN_CIRCLE_FN 10
+ // Middle point of circle
+ #define NOZZLE_CLEAN_CIRCLE_MIDDLE NOZZLE_CLEAN_START_POINT
+
// Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK
#endif
diff --git a/Marlin/example_configurations/WITBOX/Configuration.h b/Marlin/example_configurations/WITBOX/Configuration.h
index bdacef218..463289365 100644
--- a/Marlin/example_configurations/WITBOX/Configuration.h
+++ b/Marlin/example_configurations/WITBOX/Configuration.h
@@ -96,7 +96,7 @@
//
// Marlin now allow you to have a vendor boot image to be displayed on machine
// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
+// custom boot image and then the default Marlin boot image is shown.
//
// We suggest for you to take advantage of this new feature and keep the Marlin
// boot image unmodified. For an example have a look at the bq Hephestos 2
@@ -992,6 +992,10 @@
// |________|_________|_________|
// T1 T2 T3
//
+// P2: This starts a circular pattern with circle with middle in
+// NOZZLE_CLEAN_CIRCLE_MIDDLE radius of R and stroke count of S.
+// Before starting the circle nozzle goes to NOZZLE_CLEAN_START_POINT.
+//
// Caveats: End point Z should use the same value as Start point Z.
//
// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@@ -1002,7 +1006,7 @@
#if ENABLED(NOZZLE_CLEAN_FEATURE)
// Default number of pattern repetitions
#define NOZZLE_CLEAN_STROKES 12
-
+
// Default number of triangles
#define NOZZLE_CLEAN_TRIANGLES 3
@@ -1010,6 +1014,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
+ // Circular pattern radius
+ #define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5
+ // Circular pattern circle fragments number
+ #define NOZZLE_CLEAN_CIRCLE_FN 10
+ // Middle point of circle
+ #define NOZZLE_CLEAN_CIRCLE_MIDDLE NOZZLE_CLEAN_START_POINT
+
// Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK
#endif
diff --git a/Marlin/example_configurations/adafruit/ST7565/Configuration.h b/Marlin/example_configurations/adafruit/ST7565/Configuration.h
index 6827cfc81..6d3625871 100644
--- a/Marlin/example_configurations/adafruit/ST7565/Configuration.h
+++ b/Marlin/example_configurations/adafruit/ST7565/Configuration.h
@@ -96,7 +96,7 @@
//
// Marlin now allow you to have a vendor boot image to be displayed on machine
// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
+// custom boot image and then the default Marlin boot image is shown.
//
// We suggest for you to take advantage of this new feature and keep the Marlin
// boot image unmodified. For an example have a look at the bq Hephestos 2
@@ -1000,6 +1000,10 @@
// |________|_________|_________|
// T1 T2 T3
//
+// P2: This starts a circular pattern with circle with middle in
+// NOZZLE_CLEAN_CIRCLE_MIDDLE radius of R and stroke count of S.
+// Before starting the circle nozzle goes to NOZZLE_CLEAN_START_POINT.
+//
// Caveats: End point Z should use the same value as Start point Z.
//
// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@@ -1010,7 +1014,7 @@
#if ENABLED(NOZZLE_CLEAN_FEATURE)
// Default number of pattern repetitions
#define NOZZLE_CLEAN_STROKES 12
-
+
// Default number of triangles
#define NOZZLE_CLEAN_TRIANGLES 3
@@ -1018,6 +1022,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
+ // Circular pattern radius
+ #define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5
+ // Circular pattern circle fragments number
+ #define NOZZLE_CLEAN_CIRCLE_FN 10
+ // Middle point of circle
+ #define NOZZLE_CLEAN_CIRCLE_MIDDLE NOZZLE_CLEAN_START_POINT
+
// Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK
#endif
diff --git a/Marlin/example_configurations/delta/flsun_kossel_mini/Configuration.h b/Marlin/example_configurations/delta/flsun_kossel_mini/Configuration.h
index 4b0e327b3..e6e36ea10 100644
--- a/Marlin/example_configurations/delta/flsun_kossel_mini/Configuration.h
+++ b/Marlin/example_configurations/delta/flsun_kossel_mini/Configuration.h
@@ -1,54 +1,54 @@
/**
- 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 .
-
-*/
+ * Marlin 3D Printer Firmware
+ * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
/**
- Configuration.h
-
- Basic settings such as:
-
- - Type of electronics
- - Type of temperature sensor
- - Printer geometry
- - Endstop configuration
- - LCD controller
- - Extra features
-
- Advanced settings can be found in Configuration_adv.h
-
-*/
+ * Configuration.h
+ *
+ * Basic settings such as:
+ *
+ * - Type of electronics
+ * - Type of temperature sensor
+ * - Printer geometry
+ * - Endstop configuration
+ * - LCD controller
+ * - Extra features
+ *
+ * Advanced settings can be found in Configuration_adv.h
+ *
+ */
#ifndef CONFIGURATION_H
#define CONFIGURATION_H
/**
-
+ *
* ***********************************
* ** ATTENTION TO ALL DEVELOPERS **
* ***********************************
-
- You must increment this version number for every significant change such as,
- but not limited to: ADD, DELETE RENAME OR REPURPOSE any directive/option.
-
- Note: Update also Version.h !
-*/
+ *
+ * You must increment this version number for every significant change such as,
+ * but not limited to: ADD, DELETE RENAME OR REPURPOSE any directive/option.
+ *
+ * Note: Update also Version.h !
+ */
#define CONFIGURATION_H_VERSION 010100
//===========================================================================
@@ -56,16 +56,16 @@
//===========================================================================
/**
- Here are some standard links for getting your machine calibrated:
-
- http://reprap.org/wiki/Calibration
- http://youtu.be/wAL9d7FgInk
- http://calculator.josefprusa.cz
- http://reprap.org/wiki/Triffid_Hunter%27s_Calibration_Guide
- http://www.thingiverse.com/thing:5573
- https://sites.google.com/site/repraplogphase/calibration-of-your-reprap
- http://www.thingiverse.com/thing:298812
-*/
+ * Here are some standard links for getting your machine calibrated:
+ *
+ * http://reprap.org/wiki/Calibration
+ * http://youtu.be/wAL9d7FgInk
+ * http://calculator.josefprusa.cz
+ * http://reprap.org/wiki/Triffid_Hunter%27s_Calibration_Guide
+ * http://www.thingiverse.com/thing:5573
+ * https://sites.google.com/site/repraplogphase/calibration-of-your-reprap
+ * http://www.thingiverse.com/thing:298812
+ */
//===========================================================================
//============================= DELTA Printer ===============================
@@ -106,22 +106,22 @@
// @section machine
/**
- Select which serial port on the board will be used for communication with the host.
- This allows the connection of wireless adapters (for instance) to non-default port pins.
- Serial port 0 is always used by the Arduino bootloader regardless of this setting.
-
- :[0, 1, 2, 3, 4, 5, 6, 7]
-*/
+ * Select which serial port on the board will be used for communication with the host.
+ * This allows the connection of wireless adapters (for instance) to non-default port pins.
+ * Serial port 0 is always used by the Arduino bootloader regardless of this setting.
+ *
+ * :[0, 1, 2, 3, 4, 5, 6, 7]
+ */
#define SERIAL_PORT 0
/**
- This setting determines the communication speed of the printer.
-
- 250000 works in most cases, but you might try a lower speed if
- you commonly experience drop-outs during host printing.
-
- :[2400, 9600, 19200, 38400, 57600, 115200, 250000]
-*/
+ * This setting determines the communication speed of the printer.
+ *
+ * 250000 works in most cases, but you might try a lower speed if
+ * you commonly experience drop-outs during host printing.
+ *
+ * :[2400, 9600, 19200, 38400, 57600, 115200, 250000]
+ */
#define BAUDRATE 250000
// Enable the Bluetooth serial interface on AT90USB devices
@@ -130,7 +130,7 @@
// The following define selects which electronics board you have.
// Please choose the name from boards.h that matches your setup
#ifndef MOTHERBOARD
-#define MOTHERBOARD BOARD_RAMPS_13_EFB
+ #define MOTHERBOARD BOARD_RAMPS_13_EFB
#endif
// Optional custom name for your RepStrap or other custom machine
@@ -155,24 +155,24 @@
// Don't forget to set SSDE_SERVO_ANGLES and HOTEND_OFFSET_X/Y/Z
//#define SWITCHING_EXTRUDER
#if ENABLED(SWITCHING_EXTRUDER)
-#define SWITCHING_EXTRUDER_SERVO_NR 0
-#define SWITCHING_EXTRUDER_SERVO_ANGLES { 0, 90 } // Angles for E0, E1
-//#define HOTEND_OFFSET_Z {0.0, 0.0}
+ #define SWITCHING_EXTRUDER_SERVO_NR 0
+ #define SWITCHING_EXTRUDER_SERVO_ANGLES { 0, 90 } // Angles for E0, E1
+ //#define HOTEND_OFFSET_Z {0.0, 0.0}
#endif
/**
- "Mixing Extruder"
- - Adds a new code, M165, to set the current mix factors.
- - Extends the stepping routines to move multiple steppers in proportion to the mix.
- - Optional support for Repetier Host M163, M164, and virtual extruder.
- - This implementation supports only a single extruder.
- - Enable DIRECT_MIXING_IN_G1 for Pia Taubert's reference implementation
-*/
+ * "Mixing Extruder"
+ * - Adds a new code, M165, to set the current mix factors.
+ * - Extends the stepping routines to move multiple steppers in proportion to the mix.
+ * - Optional support for Repetier Host M163, M164, and virtual extruder.
+ * - This implementation supports only a single extruder.
+ * - Enable DIRECT_MIXING_IN_G1 for Pia Taubert's reference implementation
+ */
//#define MIXING_EXTRUDER
#if ENABLED(MIXING_EXTRUDER)
-#define MIXING_STEPPERS 2 // Number of steppers in your mixing extruder
-#define MIXING_VIRTUAL_TOOLS 16 // Use the Virtual Tool method with M163 and M164
-//#define DIRECT_MIXING_IN_G1 // Allow ABCDHI mix factors in G1 movement commands
+ #define MIXING_STEPPERS 2 // Number of steppers in your mixing extruder
+ #define MIXING_VIRTUAL_TOOLS 16 // Use the Virtual Tool method with M163 and M164
+ //#define DIRECT_MIXING_IN_G1 // Allow ABCDHI mix factors in G1 movement commands
#endif
// Offset of the extruders (uncomment if using more than one and relying on firmware to position when changing).
@@ -182,20 +182,20 @@
//#define HOTEND_OFFSET_Y {0.0, 5.00} // (in mm) for each extruder, offset of the hotend on the Y axis
/**
- Select your power supply here. Use 0 if you haven't connected the PS_ON_PIN
-
- 0 = No Power Switch
- 1 = ATX
- 2 = X-Box 360 203Watts (the blue wire connected to PS_ON and the red wire to VCC)
-
- :{ 0:'No power switch', 1:'ATX', 2:'X-Box 360' }
-*/
+ * Select your power supply here. Use 0 if you haven't connected the PS_ON_PIN
+ *
+ * 0 = No Power Switch
+ * 1 = ATX
+ * 2 = X-Box 360 203Watts (the blue wire connected to PS_ON and the red wire to VCC)
+ *
+ * :{ 0:'No power switch', 1:'ATX', 2:'X-Box 360' }
+ */
#define POWER_SUPPLY 0
#if POWER_SUPPLY > 0
-// Enable this option to leave the PSU off at startup.
-// Power to steppers and heaters will need to be turned on with M80.
-//#define PS_DEFAULT_OFF
+ // Enable this option to leave the PSU off at startup.
+ // Power to steppers and heaters will need to be turned on with M80.
+ //#define PS_DEFAULT_OFF
#endif
// @section temperature
@@ -205,50 +205,50 @@
//===========================================================================
/**
- --NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table
-
- Temperature sensors available:
-
- -3 : thermocouple with MAX31855 (only for sensor 0)
- -2 : thermocouple with MAX6675 (only for sensor 0)
- -1 : thermocouple with AD595
- 0 : not used
- 1 : 100k thermistor - best choice for EPCOS 100k (4.7k pullup)
- 2 : 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)
- 3 : Mendel-parts thermistor (4.7k pullup)
- 4 : 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !!
- 5 : 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup)
- 6 : 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup)
- 7 : 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup)
- 71 : 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup)
- 8 : 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup)
- 9 : 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup)
- 10 : 100k RS thermistor 198-961 (4.7k pullup)
- 11 : 100k beta 3950 1% thermistor (4.7k pullup)
- 12 : 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed)
- 13 : 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE"
- 20 : the PT100 circuit found in the Ultimainboard V2.x
- 60 : 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
- 66 : 4.7M High Temperature thermistor from Dyze Design
- 70 : the 100K thermistor found in the bq Hephestos 2
-
- 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
- (but gives greater accuracy and more stable PID)
- 51 : 100k thermistor - EPCOS (1k pullup)
- 52 : 200k thermistor - ATC Semitec 204GT-2 (1k pullup)
- 55 : 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup)
-
- 1047 : Pt1000 with 4k7 pullup
- 1010 : Pt1000 with 1k pullup (non standard)
- 147 : Pt100 with 4k7 pullup
- 110 : Pt100 with 1k pullup (non standard)
-
- Use these for Testing or Development purposes. NEVER for production machine.
- 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
- 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
-
- :{ '0': "Not used", '1':"100k / 4.7k - EPCOS", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '20':"PT100 (Ultimainboard V2.x)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '66':"Dyze Design 4.7M High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595",'998':"Dummy 1", '999':"Dummy 2" }
-*/
+ * --NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table
+ *
+ * Temperature sensors available:
+ *
+ * -3 : thermocouple with MAX31855 (only for sensor 0)
+ * -2 : thermocouple with MAX6675 (only for sensor 0)
+ * -1 : thermocouple with AD595
+ * 0 : not used
+ * 1 : 100k thermistor - best choice for EPCOS 100k (4.7k pullup)
+ * 2 : 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)
+ * 3 : Mendel-parts thermistor (4.7k pullup)
+ * 4 : 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !!
+ * 5 : 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup)
+ * 6 : 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup)
+ * 7 : 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup)
+ * 71 : 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup)
+ * 8 : 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup)
+ * 9 : 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup)
+ * 10 : 100k RS thermistor 198-961 (4.7k pullup)
+ * 11 : 100k beta 3950 1% thermistor (4.7k pullup)
+ * 12 : 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed)
+ * 13 : 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE"
+ * 20 : the PT100 circuit found in the Ultimainboard V2.x
+ * 60 : 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
+ * 66 : 4.7M High Temperature thermistor from Dyze Design
+ * 70 : the 100K thermistor found in the bq Hephestos 2
+ *
+ * 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
+ * (but gives greater accuracy and more stable PID)
+ * 51 : 100k thermistor - EPCOS (1k pullup)
+ * 52 : 200k thermistor - ATC Semitec 204GT-2 (1k pullup)
+ * 55 : 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup)
+ *
+ * 1047 : Pt1000 with 4k7 pullup
+ * 1010 : Pt1000 with 1k pullup (non standard)
+ * 147 : Pt100 with 4k7 pullup
+ * 110 : Pt100 with 1k pullup (non standard)
+ *
+ * Use these for Testing or Development purposes. NEVER for production machine.
+ * 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
+ * 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
+ *
+ * :{ '0': "Not used", '1':"100k / 4.7k - EPCOS", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '20':"PT100 (Ultimainboard V2.x)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '66':"Dyze Design 4.7M High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595",'998':"Dummy 1", '999':"Dummy 2" }
+ */
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
#define TEMP_SENSOR_2 0
@@ -302,36 +302,36 @@
#define BANG_MAX 255 // limits current to nozzle while in bang-bang mode; 255=full current
#define PID_MAX BANG_MAX // limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#if ENABLED(PIDTEMP)
-#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
-//#define PID_DEBUG // Sends debug data to the serial port.
-//#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
-//#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
-//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
-// Set/get with gcode: M301 E[extruder number, 0-2]
-#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
-// is more than PID_FUNCTIONAL_RANGE then the PID will be shut off and the heater will be set to min/max.
-#define K1 0.95 //smoothing factor within the PID
+ #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
+ // Set/get with gcode: M301 E[extruder number, 0-2]
+ #define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
+ // is more than PID_FUNCTIONAL_RANGE then the PID will be shut off and the heater will be set to min/max.
+ #define K1 0.95 //smoothing factor within the PID
-// If you are using a pre-configured hotend then you can use one of the value sets by uncommenting it
-// Ultimaker
-//#define DEFAULT_Kp 22.2
-//#define DEFAULT_Ki 1.08
-//#define DEFAULT_Kd 114
+ // If you are using a pre-configured hotend then you can use one of the value sets by uncommenting it
+ // Ultimaker
+ //#define DEFAULT_Kp 22.2
+ //#define DEFAULT_Ki 1.08
+ //#define DEFAULT_Kd 114
-// MakerGear
-//#define DEFAULT_Kp 7.0
-//#define DEFAULT_Ki 0.1
-//#define DEFAULT_Kd 12
+ // MakerGear
+ //#define DEFAULT_Kp 7.0
+ //#define DEFAULT_Ki 0.1
+ //#define DEFAULT_Kd 12
-// Mendel Parts V9 on 12V
-//#define DEFAULT_Kp 63.0
-//#define DEFAULT_Ki 2.25
-//#define DEFAULT_Kd 440
+ // Mendel Parts V9 on 12V
+ //#define DEFAULT_Kp 63.0
+ //#define DEFAULT_Ki 2.25
+ //#define DEFAULT_Kd 440
-//E3D with 30MM fan
-#define DEFAULT_Kp 24.77
-#define DEFAULT_Ki 1.84
-#define DEFAULT_Kd 83.61
+ //E3D with 30MM fan
+ #define DEFAULT_Kp 24.77
+ #define DEFAULT_Ki 1.84
+ #define DEFAULT_Kd 83.61
#endif // PIDTEMP
@@ -359,26 +359,26 @@
#if ENABLED(PIDTEMPBED)
-//#define PID_BED_DEBUG // Sends debug data to the serial port.
+ //#define PID_BED_DEBUG // Sends debug data to the serial port.
-//120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
-//from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10)
-//#define DEFAULT_bedKp 10.00
-//#define DEFAULT_bedKi .023
-//#define DEFAULT_bedKd 305.4
+ //120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
+ //from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10)
+ //#define DEFAULT_bedKp 10.00
+ //#define DEFAULT_bedKi .023
+ //#define DEFAULT_bedKd 305.4
-//120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
-//from pidautotune
-//#define DEFAULT_bedKp 97.1
-//#define DEFAULT_bedKi 1.41
-//#define DEFAULT_bedKd 1675.16
+ //120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
+ //from pidautotune
+ //#define DEFAULT_bedKp 97.1
+ //#define DEFAULT_bedKi 1.41
+ //#define DEFAULT_bedKd 1675.16
-//D-force
-#define DEFAULT_bedKp 22.97
-#define DEFAULT_bedKi 3.76
-#define DEFAULT_bedKd 29.2
+ //D-force
+ #define DEFAULT_bedKp 22.97
+ #define DEFAULT_bedKi 3.76
+ #define DEFAULT_bedKd 29.2
-// FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles.
+ // FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles.
#endif // PIDTEMPBED
// @section extruder
@@ -400,16 +400,16 @@
//===========================================================================
/**
- Thermal Protection protects your printer from damage and fire if a
- thermistor falls out or temperature sensors fail in any way.
-
- The issue: If a thermistor falls out or a temperature sensor fails,
- Marlin can no longer sense the actual temperature. Since a disconnected
- thermistor reads as a low temperature, the firmware will keep the heater on.
-
- If you get "Thermal Runaway" or "Heating failed" errors the
- details can be tuned in Configuration_adv.h
-*/
+ * Thermal Protection protects your printer from damage and fire if a
+ * thermistor falls out or temperature sensors fail in any way.
+ *
+ * The issue: If a thermistor falls out or a temperature sensor fails,
+ * Marlin can no longer sense the actual temperature. Since a disconnected
+ * thermistor reads as a low temperature, the firmware will keep the heater on.
+ *
+ * If you get "Thermal Runaway" or "Heating failed" errors the
+ * details can be tuned in Configuration_adv.h
+ */
#define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders
#define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed
@@ -437,42 +437,42 @@
#if ENABLED(DELTA)
-// Make delta curves from many straight lines (linear interpolation).
-// This is a trade-off between visible corners (not enough segments)
-// and processor overload (too many expensive sqrt calls).
-#define DELTA_SEGMENTS_PER_SECOND 160
+ // Make delta curves from many straight lines (linear interpolation).
+ // This is a trade-off between visible corners (not enough segments)
+ // and processor overload (too many expensive sqrt calls).
+ #define DELTA_SEGMENTS_PER_SECOND 160
-// NOTE NB all values for DELTA_* values MUST be floating point, so always have a decimal point in them
+ // NOTE NB all values for DELTA_* values MUST be floating point, so always have a decimal point in them
-// Center-to-center distance of the holes in the diagonal push rods.
-#define DELTA_DIAGONAL_ROD 218.0 // mm
+ // Center-to-center distance of the holes in the diagonal push rods.
+ #define DELTA_DIAGONAL_ROD 218.0 // mm
-// Horizontal offset from middle of printer to smooth rod center.
-#define DELTA_SMOOTH_ROD_OFFSET 150.0 // mm
+ // Horizontal offset from middle of printer to smooth rod center.
+ #define DELTA_SMOOTH_ROD_OFFSET 150.0 // mm
-// Horizontal offset of the universal joints on the end effector.
-#define DELTA_EFFECTOR_OFFSET 24.0 // mm
+ // Horizontal offset of the universal joints on the end effector.
+ #define DELTA_EFFECTOR_OFFSET 24.0 // mm
-// Horizontal offset of the universal joints on the carriages.
-#define DELTA_CARRIAGE_OFFSET 22.0 // mm
+ // Horizontal offset of the universal joints on the carriages.
+ #define DELTA_CARRIAGE_OFFSET 22.0 // mm
-// Horizontal distance bridged by diagonal push rods when effector is centered.
-#define DELTA_RADIUS (DELTA_SMOOTH_ROD_OFFSET-(DELTA_EFFECTOR_OFFSET)-(DELTA_CARRIAGE_OFFSET))
+ // Horizontal distance bridged by diagonal push rods when effector is centered.
+ #define DELTA_RADIUS (DELTA_SMOOTH_ROD_OFFSET-(DELTA_EFFECTOR_OFFSET)-(DELTA_CARRIAGE_OFFSET))
-// Print surface diameter/2 minus unreachable space (avoid collisions with vertical towers).
-#define DELTA_PRINTABLE_RADIUS 85.0
+ // Print surface diameter/2 minus unreachable space (avoid collisions with vertical towers).
+ #define DELTA_PRINTABLE_RADIUS 85.0
-// Delta calibration menu
-// uncomment to add three points calibration menu option.
-// See http://minow.blogspot.com/index.html#4918805519571907051
-// If needed, adjust the X, Y, Z calibration coordinates
-// in ultralcd.cpp@lcd_delta_calibrate_menu()
-//#define DELTA_CALIBRATION_MENU
+ // Delta calibration menu
+ // uncomment to add three points calibration menu option.
+ // See http://minow.blogspot.com/index.html#4918805519571907051
+ // If needed, adjust the X, Y, Z calibration coordinates
+ // in ultralcd.cpp@lcd_delta_calibrate_menu()
+ //#define DELTA_CALIBRATION_MENU
-// After homing move down to a height where XY movement is unconstrained
-//#define DELTA_HOME_TO_SAFE_ZONE
+ // After homing move down to a height where XY movement is unconstrained
+ //#define DELTA_HOME_TO_SAFE_ZONE
-//#define DELTA_ENDSTOP_ADJ { 0, 0, 0 }
+ //#define DELTA_ENDSTOP_ADJ { 0, 0, 0 }
#endif
@@ -499,14 +499,14 @@
#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
#if DISABLED(ENDSTOPPULLUPS)
-// fine endstop settings: Individual pullups. will be ignored if ENDSTOPPULLUPS is defined
-//#define ENDSTOPPULLUP_XMAX
-//#define ENDSTOPPULLUP_YMAX
-//#define ENDSTOPPULLUP_ZMAX
-//#define ENDSTOPPULLUP_XMIN
-//#define ENDSTOPPULLUP_YMIN
-//#define ENDSTOPPULLUP_ZMIN
-//#define ENDSTOPPULLUP_ZMIN_PROBE
+ // fine endstop settings: Individual pullups. will be ignored if ENDSTOPPULLUPS is defined
+ //#define ENDSTOPPULLUP_XMAX
+ //#define ENDSTOPPULLUP_YMAX
+ //#define ENDSTOPPULLUP_ZMAX
+ //#define ENDSTOPPULLUP_XMIN
+ //#define ENDSTOPPULLUP_YMIN
+ //#define ENDSTOPPULLUP_ZMIN
+ //#define ENDSTOPPULLUP_ZMIN_PROBE
#endif
// Mechanical endstop with COM to ground and NC to Signal uses "false" here (most common setup).
@@ -516,7 +516,7 @@
#define X_MAX_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
#define Y_MAX_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
#define Z_MAX_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
-#define Z_MIN_PROBE_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
+#define Z_MIN_PROBE_ENDSTOP_INVERTING false // set to true to invert the logic of the probe.
// Enable this feature if all enabled endstop pins are interrupt-capable.
// This will remove the need to poll the interrupt pins, saving many CPU cycles.
@@ -529,57 +529,58 @@
// delta speeds must be the same on xyz
/**
- Default Settings
-
- These settings can be reset by M502
-
- You can set distinct factors for each E stepper, if needed.
- If fewer factors are given, the last will apply to the rest.
-
- Note that if EEPROM is enabled, saved values will override these.
-*/
+ * Default Settings
+ *
+ * These settings can be reset by M502
+ *
+ * You can set distinct factors for each E stepper, if needed.
+ * If fewer factors are given, the last will apply to the rest.
+ *
+ * Note that if EEPROM is enabled, saved values will override these.
+ */
/**
- Default Axis Steps Per Unit (steps/mm)
- Override with M92
- X, Y, Z, E0 [, E1[, E2[, E3]]]
-*/
+ * Default Axis Steps Per Unit (steps/mm)
+ * Override with M92
+ * X, Y, Z, E0 [, E1[, E2[, E3]]]
+ */
#define DEFAULT_AXIS_STEPS_PER_UNIT { 100, 100, 100, 90 } // default steps per unit for Kossel (GT2, 20 tooth)
/**
- Default Max Feed Rate (mm/s)
- Override with M203
- X, Y, Z, E0 [, E1[, E2[, E3]]]
-*/
+ * Default Max Feed Rate (mm/s)
+ * Override with M203
+ * X, Y, Z, E0 [, E1[, E2[, E3]]]
+ */
#define DEFAULT_MAX_FEEDRATE { 200, 200, 200, 200 }
/**
- Default Max Acceleration (change/s) change = mm/s
- (Maximum start speed for accelerated moves)
- Override with M201
- X, Y, Z, E0 [, E1[, E2[, E3]]]
-*/
+ * Default Max Acceleration (change/s) change = mm/s
+ * (Maximum start speed for accelerated moves)
+ * Override with M201
+ * X, Y, Z, E0 [, E1[, E2[, E3]]]
+ */
#define DEFAULT_MAX_ACCELERATION { 4000, 4000, 4000, 4000 }
/**
- Default Acceleration (change/s) change = mm/s
- Override with M204
-
- M204 P Acceleration
- M204 R Retract Acceleration
- M204 T Travel Acceleration
-*/
+ * Default Acceleration (change/s) change = mm/s
+ * Override with M204
+ *
+ * M204 P Acceleration
+ * M204 R Retract Acceleration
+ * M204 T Travel Acceleration
+ */
#define DEFAULT_ACCELERATION 2500 // X, Y, Z and E acceleration for printing moves
#define DEFAULT_RETRACT_ACCELERATION 3000 // E acceleration for retracts
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/**
- Default Jerk (mm/s)
-
- "Jerk" specifies the minimum speed change that requires acceleration.
- When changing speed and direction, if the difference is less than the
- value set here, it may happen instantaneously.
-*/
+ * Default Jerk (mm/s)
+ * Override with M205 X Y Z E
+ *
+ * "Jerk" specifies the minimum speed change that requires acceleration.
+ * When changing speed and direction, if the difference is less than the
+ * value set here, it may happen instantaneously.
+ */
#define DEFAULT_XJERK 20.0
#define DEFAULT_YJERK DEFAULT_XJERK
#define DEFAULT_ZJERK DEFAULT_YJERK // Must be same as XY for delta
@@ -654,46 +655,46 @@
//#define Z_PROBE_ALLEN_KEY
#if ENABLED(Z_PROBE_ALLEN_KEY)
-// 2 or 3 sets of coordinates for deploying and retracting the spring loaded touch probe on G29,
-// if servo actuated touch probe is not defined. Uncomment as appropriate for your printer/probe.
+ // 2 or 3 sets of coordinates for deploying and retracting the spring loaded touch probe on G29,
+ // if servo actuated touch probe is not defined. Uncomment as appropriate for your printer/probe.
-// Kossel Mini
-#define Z_PROBE_ALLEN_KEY_DEPLOY_1_X 30.0
-#define Z_PROBE_ALLEN_KEY_DEPLOY_1_Y DELTA_PRINTABLE_RADIUS
-#define Z_PROBE_ALLEN_KEY_DEPLOY_1_Z 100.0
-#define Z_PROBE_ALLEN_KEY_DEPLOY_1_FEEDRATE XY_PROBE_SPEED
+ // Kossel Mini
+ #define Z_PROBE_ALLEN_KEY_DEPLOY_1_X 30.0
+ #define Z_PROBE_ALLEN_KEY_DEPLOY_1_Y DELTA_PRINTABLE_RADIUS
+ #define Z_PROBE_ALLEN_KEY_DEPLOY_1_Z 100.0
+ #define Z_PROBE_ALLEN_KEY_DEPLOY_1_FEEDRATE XY_PROBE_SPEED
-#define Z_PROBE_ALLEN_KEY_DEPLOY_2_X 0.0
-#define Z_PROBE_ALLEN_KEY_DEPLOY_2_Y DELTA_PRINTABLE_RADIUS
-#define Z_PROBE_ALLEN_KEY_DEPLOY_2_Z 100.0
-#define Z_PROBE_ALLEN_KEY_DEPLOY_2_FEEDRATE (XY_PROBE_SPEED/10)
+ #define Z_PROBE_ALLEN_KEY_DEPLOY_2_X 0.0
+ #define Z_PROBE_ALLEN_KEY_DEPLOY_2_Y DELTA_PRINTABLE_RADIUS
+ #define Z_PROBE_ALLEN_KEY_DEPLOY_2_Z 100.0
+ #define Z_PROBE_ALLEN_KEY_DEPLOY_2_FEEDRATE (XY_PROBE_SPEED/10)
-#define Z_PROBE_ALLEN_KEY_DEPLOY_3_X Z_PROBE_ALLEN_KEY_DEPLOY_2_X * 0.75
-#define Z_PROBE_ALLEN_KEY_DEPLOY_3_Y Z_PROBE_ALLEN_KEY_DEPLOY_2_Y * 0.75
-#define Z_PROBE_ALLEN_KEY_DEPLOY_3_Z Z_PROBE_ALLEN_KEY_DEPLOY_2_Z
-#define Z_PROBE_ALLEN_KEY_DEPLOY_3_FEEDRATE XY_PROBE_SPEED
+ #define Z_PROBE_ALLEN_KEY_DEPLOY_3_X Z_PROBE_ALLEN_KEY_DEPLOY_2_X * 0.75
+ #define Z_PROBE_ALLEN_KEY_DEPLOY_3_Y Z_PROBE_ALLEN_KEY_DEPLOY_2_Y * 0.75
+ #define Z_PROBE_ALLEN_KEY_DEPLOY_3_Z Z_PROBE_ALLEN_KEY_DEPLOY_2_Z
+ #define Z_PROBE_ALLEN_KEY_DEPLOY_3_FEEDRATE XY_PROBE_SPEED
-#define Z_PROBE_ALLEN_KEY_STOW_DEPTH 20
-// Move the probe into position
-#define Z_PROBE_ALLEN_KEY_STOW_1_X -64.0
-#define Z_PROBE_ALLEN_KEY_STOW_1_Y 56.0
-#define Z_PROBE_ALLEN_KEY_STOW_1_Z 23.0
-#define Z_PROBE_ALLEN_KEY_STOW_1_FEEDRATE XY_PROBE_SPEED
-// Move the nozzle down further to push the probe into retracted position.
-#define Z_PROBE_ALLEN_KEY_STOW_2_X Z_PROBE_ALLEN_KEY_STOW_1_X
-#define Z_PROBE_ALLEN_KEY_STOW_2_Y Z_PROBE_ALLEN_KEY_STOW_1_Y
-#define Z_PROBE_ALLEN_KEY_STOW_2_Z (Z_PROBE_ALLEN_KEY_STOW_1_Z-Z_PROBE_ALLEN_KEY_STOW_DEPTH)
-#define Z_PROBE_ALLEN_KEY_STOW_2_FEEDRATE (XY_PROBE_SPEED/10)
-// Raise things back up slightly so we don't bump into anything
-#define Z_PROBE_ALLEN_KEY_STOW_3_X Z_PROBE_ALLEN_KEY_STOW_2_X
-#define Z_PROBE_ALLEN_KEY_STOW_3_Y Z_PROBE_ALLEN_KEY_STOW_2_Y
-#define Z_PROBE_ALLEN_KEY_STOW_3_Z (Z_PROBE_ALLEN_KEY_STOW_1_Z+Z_PROBE_ALLEN_KEY_STOW_DEPTH)
-#define Z_PROBE_ALLEN_KEY_STOW_3_FEEDRATE (XY_PROBE_SPEED/2)
+ #define Z_PROBE_ALLEN_KEY_STOW_DEPTH 20
+ // Move the probe into position
+ #define Z_PROBE_ALLEN_KEY_STOW_1_X -64.0
+ #define Z_PROBE_ALLEN_KEY_STOW_1_Y 56.0
+ #define Z_PROBE_ALLEN_KEY_STOW_1_Z 23.0
+ #define Z_PROBE_ALLEN_KEY_STOW_1_FEEDRATE XY_PROBE_SPEED
+ // Move the nozzle down further to push the probe into retracted position.
+ #define Z_PROBE_ALLEN_KEY_STOW_2_X Z_PROBE_ALLEN_KEY_STOW_1_X
+ #define Z_PROBE_ALLEN_KEY_STOW_2_Y Z_PROBE_ALLEN_KEY_STOW_1_Y
+ #define Z_PROBE_ALLEN_KEY_STOW_2_Z (Z_PROBE_ALLEN_KEY_STOW_1_Z-Z_PROBE_ALLEN_KEY_STOW_DEPTH)
+ #define Z_PROBE_ALLEN_KEY_STOW_2_FEEDRATE (XY_PROBE_SPEED/10)
+ // Raise things back up slightly so we don't bump into anything
+ #define Z_PROBE_ALLEN_KEY_STOW_3_X Z_PROBE_ALLEN_KEY_STOW_2_X
+ #define Z_PROBE_ALLEN_KEY_STOW_3_Y Z_PROBE_ALLEN_KEY_STOW_2_Y
+ #define Z_PROBE_ALLEN_KEY_STOW_3_Z (Z_PROBE_ALLEN_KEY_STOW_1_Z+Z_PROBE_ALLEN_KEY_STOW_DEPTH)
+ #define Z_PROBE_ALLEN_KEY_STOW_3_FEEDRATE (XY_PROBE_SPEED/2)
-#define Z_PROBE_ALLEN_KEY_STOW_4_X 0.0
-#define Z_PROBE_ALLEN_KEY_STOW_4_Y 0.0
-#define Z_PROBE_ALLEN_KEY_STOW_4_Z Z_PROBE_ALLEN_KEY_STOW_3_Z
-#define Z_PROBE_ALLEN_KEY_STOW_4_FEEDRATE XY_PROBE_SPEED
+ #define Z_PROBE_ALLEN_KEY_STOW_4_X 0.0
+ #define Z_PROBE_ALLEN_KEY_STOW_4_Y 0.0
+ #define Z_PROBE_ALLEN_KEY_STOW_4_Z Z_PROBE_ALLEN_KEY_STOW_3_Z
+ #define Z_PROBE_ALLEN_KEY_STOW_4_FEEDRATE XY_PROBE_SPEED
#endif // Z_PROBE_ALLEN_KEY
@@ -744,19 +745,19 @@
#define Z_MIN_PROBE_REPEATABILITY_TEST
/**
- Z probes require clearance when deploying, stowing, and moving between
- probe points to avoid hitting the bed and other hardware.
- Servo-mounted probes require extra space for the arm to rotate.
- Inductive probes need space to keep from triggering early.
-
- Use these settings to specify the distance (mm) to raise the probe (or
- lower the bed). The values set here apply over and above any (negative)
- probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD.
- Only integer values >= 1 are valid here.
-
- Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle.
- But: `M851 Z+1` with a CLEARANCE of 2 => 2mm from bed to nozzle.
-*/
+ * Z probes require clearance when deploying, stowing, and moving between
+ * probe points to avoid hitting the bed and other hardware.
+ * Servo-mounted probes require extra space for the arm to rotate.
+ * Inductive probes need space to keep from triggering early.
+ *
+ * Use these settings to specify the distance (mm) to raise the probe (or
+ * lower the bed). The values set here apply over and above any (negative)
+ * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD.
+ * Only integer values >= 1 are valid here.
+ *
+ * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle.
+ * But: `M851 Z+1` with a CLEARANCE of 2 => 2mm from bed to nozzle.
+ */
#define Z_CLEARANCE_DEPLOY_PROBE 50 // Z Clearance for Deploy/Stow
#define Z_CLEARANCE_BETWEEN_PROBES 5 // Z Clearance between probe points
@@ -803,8 +804,8 @@
// @section homing
-#define Z_HOMING_HEIGHT 15 // (in mm) Minimal z height before homing (G28) for Z clearance above the bed, clamps, ...
-// Be sure you have this distance over your Z_MAX_POS in case.
+#define Z_HOMING_HEIGHT 15 // (in mm) Minimal z height before homing (G28) for Z clearance above the bed, clamps, ...
+ // Be sure you have this distance over your Z_MAX_POS in case.
// ENDSTOP SETTINGS:
// Sets direction of endstops when homing; 1=MAX, -1=MIN
@@ -826,17 +827,19 @@
#define Y_MAX_POS DELTA_PRINTABLE_RADIUS
#define Z_MAX_POS MANUAL_Z_HOME_POS
-//===========================================================================
-//========================= Filament Runout Sensor ==========================
-//===========================================================================
-//#define FILAMENT_RUNOUT_SENSOR // Uncomment for defining a filament runout sensor such as a mechanical or opto endstop to check the existence of filament
-// RAMPS-based boards use SERVO3_PIN. For other boards you may need to define FIL_RUNOUT_PIN.
-// It is assumed that when logic high = filament available
-// when logic low = filament ran out
+/**
+ * Filament Runout Sensor
+ * A mechanical or opto endstop is used to check for the presence of filament.
+ *
+ * RAMPS-based boards use SERVO3_PIN.
+ * For other boards you may need to define FIL_RUNOUT_PIN.
+ * By default the firmware assumes HIGH = has filament, LOW = ran out
+ */
+//#define FILAMENT_RUNOUT_SENSOR
#if ENABLED(FILAMENT_RUNOUT_SENSOR)
-#define FIL_RUNOUT_INVERTING false // set to true to invert the logic of the sensor.
-#define ENDSTOPPULLUP_FIL_RUNOUT // Uncomment to use internal pullup for filament runout pins if the sensor is defined.
-#define FILAMENT_RUNOUT_SCRIPT "M600"
+ #define FIL_RUNOUT_INVERTING false // set to true to invert the logic of the sensor.
+ #define ENDSTOPPULLUP_FIL_RUNOUT // Uncomment to use internal pullup for filament runout pins if the sensor is defined.
+ #define FILAMENT_RUNOUT_SCRIPT "M600"
#endif
//===========================================================================
@@ -847,23 +850,23 @@
//#define MESH_BED_LEVELING // Enable mesh bed leveling.
#if ENABLED(MESH_BED_LEVELING)
-#define MESH_INSET 10 // Mesh inset margin on print area
-#define MESH_NUM_X_POINTS 3 // Don't use more than 7 points per axis, implementation limited.
-#define MESH_NUM_Y_POINTS 3
-#define MESH_HOME_SEARCH_Z 4 // Z after Home, bed somewhere below but above 0.0.
+ #define MESH_INSET 10 // Mesh inset margin on print area
+ #define MESH_NUM_X_POINTS 3 // Don't use more than 7 points per axis, implementation limited.
+ #define MESH_NUM_Y_POINTS 3
+ #define MESH_HOME_SEARCH_Z 4 // Z after Home, bed somewhere below but above 0.0.
-#define MESH_G28_REST_ORIGIN // After homing all axes ('G28' or 'G28 XYZ') rest at origin [0,0,0]
+ //#define MESH_G28_REST_ORIGIN // After homing all axes ('G28' or 'G28 XYZ') rest at origin [0,0,0]
-#define MANUAL_BED_LEVELING // Add display menu option for bed leveling.
+ //#define MANUAL_BED_LEVELING // Add display menu option for bed leveling.
-#if ENABLED(MANUAL_BED_LEVELING)
-#define MBL_Z_STEP 0.025 // Step size while manually probing Z axis.
-#endif // MANUAL_BED_LEVELING
+ #if ENABLED(MANUAL_BED_LEVELING)
+ #define MBL_Z_STEP 0.025 // Step size while manually probing Z axis.
+ #endif // MANUAL_BED_LEVELING
-// Gradually reduce leveling correction until a set height is reached,
-// at which point movement will be level to the machine's XY plane.
-// The height can be set with M420 Z
-#define ENABLE_LEVELING_FADE_HEIGHT
+ // Gradually reduce leveling correction until a set height is reached,
+ // at which point movement will be level to the machine's XY plane.
+ // The height can be set with M420 Z
+ #define ENABLE_LEVELING_FADE_HEIGHT
#endif // MESH_BED_LEVELING
@@ -873,93 +876,92 @@
// @section bedlevel
/**
- Select one form of Auto Bed Leveling below.
-
- If you're also using the Probe for Z Homing, it's
- highly recommended to enable Z_SAFE_HOMING also!
-
- - 3POINT
- Probe 3 arbitrary points on the bed (that aren't collinear)
- You specify the XY coordinates of all 3 points.
- The result is a single tilted plane. Best for a flat bed.
-
- - LINEAR
- Probe several points in a grid.
- You specify the rectangle and the density of sample points.
- The result is a single tilted plane. Best for a flat bed.
-
- - BILINEAR
- Probe several points in a grid.
- You specify the rectangle and the density of sample points.
- The result is a mesh, best for large or uneven beds.
-*/
+ * Select one form of Auto Bed Leveling below.
+ *
+ * If you're also using the Probe for Z Homing, it's
+ * highly recommended to enable Z_SAFE_HOMING also!
+ *
+ * - 3POINT
+ * Probe 3 arbitrary points on the bed (that aren't collinear)
+ * You specify the XY coordinates of all 3 points.
+ * The result is a single tilted plane. Best for a flat bed.
+ *
+ * - LINEAR
+ * Probe several points in a grid.
+ * You specify the rectangle and the density of sample points.
+ * The result is a single tilted plane. Best for a flat bed.
+ *
+ * - BILINEAR
+ * Probe several points in a grid.
+ * You specify the rectangle and the density of sample points.
+ * The result is a mesh, best for large or uneven beds.
+ */
//#define AUTO_BED_LEVELING_3POINT // Only AUTO_BED_LEVELING_BILINEAR is supported for DELTA bed leveling.
//#define AUTO_BED_LEVELING_LINEAR // Only AUTO_BED_LEVELING_BILINEAR is supported for DELTA bed leveling.
#define AUTO_BED_LEVELING_BILINEAR // Only AUTO_BED_LEVELING_BILINEAR is supported for DELTA bed leveling.
/**
- Enable detailed logging of G28, G29, M48, etc.
- Turn on with the command 'M111 S32'.
- NOTE: Requires a lot of PROGMEM!
-*/
+ * Enable detailed logging of G28, G29, M48, etc.
+ * Turn on with the command 'M111 S32'.
+ * NOTE: Requires a lot of PROGMEM!
+ */
//#define DEBUG_LEVELING_FEATURE
#if ENABLED(AUTO_BED_LEVELING_LINEAR) || ENABLED(AUTO_BED_LEVELING_BILINEAR)
// Set the number of grid points per dimension.
- // Works best with 5 or more points in each dimension.
#define ABL_GRID_MAX_POINTS_X 9
#define ABL_GRID_MAX_POINTS_Y ABL_GRID_MAX_POINTS_X
-// Set the boundaries for probing (where the probe can reach).
-#define DELTA_PROBEABLE_RADIUS (DELTA_PRINTABLE_RADIUS - 15)
-#define LEFT_PROBE_BED_POSITION -(DELTA_PROBEABLE_RADIUS)
-#define RIGHT_PROBE_BED_POSITION DELTA_PROBEABLE_RADIUS
-#define FRONT_PROBE_BED_POSITION -(DELTA_PROBEABLE_RADIUS)
-#define BACK_PROBE_BED_POSITION DELTA_PROBEABLE_RADIUS
+ // Set the boundaries for probing (where the probe can reach).
+ #define DELTA_PROBEABLE_RADIUS (DELTA_PRINTABLE_RADIUS - 15)
+ #define LEFT_PROBE_BED_POSITION -(DELTA_PROBEABLE_RADIUS)
+ #define RIGHT_PROBE_BED_POSITION DELTA_PROBEABLE_RADIUS
+ #define FRONT_PROBE_BED_POSITION -(DELTA_PROBEABLE_RADIUS)
+ #define BACK_PROBE_BED_POSITION DELTA_PROBEABLE_RADIUS
-// The Z probe minimum outer margin (to validate G29 parameters).
-#define MIN_PROBE_EDGE 10
+ // The Z probe minimum outer margin (to validate G29 parameters).
+ #define MIN_PROBE_EDGE 10
-// Probe along the Y axis, advancing X after each column
-//#define PROBE_Y_FIRST
+ // Probe along the Y axis, advancing X after each column
+ //#define PROBE_Y_FIRST
-#if ENABLED(AUTO_BED_LEVELING_BILINEAR)
+ #if ENABLED(AUTO_BED_LEVELING_BILINEAR)
-// Gradually reduce leveling correction until a set height is reached,
-// at which point movement will be level to the machine's XY plane.
-// The height can be set with M420 Z
-#define ENABLE_LEVELING_FADE_HEIGHT
+ // Gradually reduce leveling correction until a set height is reached,
+ // at which point movement will be level to the machine's XY plane.
+ // The height can be set with M420 Z
+ #define ENABLE_LEVELING_FADE_HEIGHT
-//
-// Experimental Subdivision of the grid by Catmull-Rom method.
-// Synthesizes intermediate points to produce a more detailed mesh.
-//
-//#define ABL_BILINEAR_SUBDIVISION
-#if ENABLED(ABL_BILINEAR_SUBDIVISION)
-// Number of subdivisions between probe points
-#define BILINEAR_SUBDIVISIONS 3
-#endif
+ //
+ // Experimental Subdivision of the grid by Catmull-Rom method.
+ // Synthesizes intermediate points to produce a more detailed mesh.
+ //
+ //#define ABL_BILINEAR_SUBDIVISION
+ #if ENABLED(ABL_BILINEAR_SUBDIVISION)
+ // Number of subdivisions between probe points
+ #define BILINEAR_SUBDIVISIONS 3
+ #endif
-#endif
+ #endif
#elif ENABLED(AUTO_BED_LEVELING_3POINT)
-// 3 arbitrary points to probe.
-// A simple cross-product is used to estimate the plane of the bed.
-#define ABL_PROBE_PT_1_X 15
-#define ABL_PROBE_PT_1_Y 180
-#define ABL_PROBE_PT_2_X 15
-#define ABL_PROBE_PT_2_Y 20
-#define ABL_PROBE_PT_3_X 170
-#define ABL_PROBE_PT_3_Y 20
+ // 3 arbitrary points to probe.
+ // A simple cross-product is used to estimate the plane of the bed.
+ #define ABL_PROBE_PT_1_X 15
+ #define ABL_PROBE_PT_1_Y 180
+ #define ABL_PROBE_PT_2_X 15
+ #define ABL_PROBE_PT_2_Y 20
+ #define ABL_PROBE_PT_3_X 170
+ #define ABL_PROBE_PT_3_Y 20
#endif
/**
- Commands to execute at the end of G29 probing.
- Useful to retract or move the Z probe out of the way.
-*/
+ * Commands to execute at the end of G29 probing.
+ * Useful to retract or move the Z probe out of the way.
+ */
//#define Z_PROBE_END_SCRIPT "G1 Z10 F12000\nG1 X15 Y330\nG1 Z0.5\nG1 Z10"
@@ -982,11 +984,11 @@
// - If stepper drivers time out, it will need X and Y homing again before Z homing.
// - Move the Z probe (or nozzle) to a defined XY point before Z Homing when homing all axes (G28).
// - Prevent Z homing when the Z probe is outside bed area.
-//#define Z_SAFE_HOMING // To continue using the Z-min-endstop for homing, be sure to disable Z_SAFE_HOMING.
+//#define Z_SAFE_HOMING
#if ENABLED(Z_SAFE_HOMING)
-#define Z_SAFE_HOMING_X_POINT ((X_MIN_POS + X_MAX_POS) / 2) // X point for Z homing when homing all axis (G28).
-#define Z_SAFE_HOMING_Y_POINT ((Y_MIN_POS + Y_MAX_POS) / 2) // Y point for Z homing when homing all axis (G28).
+ #define Z_SAFE_HOMING_X_POINT ((X_MIN_POS + X_MAX_POS) / 2) // X point for Z homing when homing all axis (G28).
+ #define Z_SAFE_HOMING_Y_POINT ((Y_MIN_POS + Y_MAX_POS) / 2) // Y point for Z homing when homing all axis (G28).
#endif
// Delta only homes to Z
@@ -1009,8 +1011,8 @@
#define EEPROM_SETTINGS
#if ENABLED(EEPROM_SETTINGS)
-// To disable EEPROM Serial responses and decrease program space by ~1700 byte: comment this out:
-#define EEPROM_CHITCHAT // Please keep turned on if you can.
+ // To disable EEPROM Serial responses and decrease program space by ~1700 byte: comment this out:
+ #define EEPROM_CHITCHAT // Please keep turned on if you can.
#endif
//
@@ -1042,11 +1044,11 @@
// Preheat Constants
#define PREHEAT_1_TEMP_HOTEND 180
#define PREHEAT_1_TEMP_BED 70
-#define PREHEAT_1_FAN_SPEED 0 // Value from 0 to 255
+#define PREHEAT_1_FAN_SPEED 0 // Value from 0 to 255
#define PREHEAT_2_TEMP_HOTEND 240
#define PREHEAT_2_TEMP_BED 100
-#define PREHEAT_2_FAN_SPEED 0 // Value from 0 to 255
+#define PREHEAT_2_FAN_SPEED 0 // Value from 0 to 255
//
// Nozzle Park -- EXPERIMENTAL
@@ -1068,8 +1070,8 @@
//#define NOZZLE_PARK_FEATURE
#if ENABLED(NOZZLE_PARK_FEATURE)
-// Specify a park position as { X, Y, Z }
-#define NOZZLE_PARK_POINT { (X_MIN_POS + 10), (Y_MAX_POS - 10), 20 }
+ // Specify a park position as { X, Y, Z }
+ #define NOZZLE_PARK_POINT { (X_MIN_POS + 10), (Y_MAX_POS - 10), 20 }
#endif
//
@@ -1082,13 +1084,13 @@
//
// Available list of patterns:
// P0: This is the default pattern, this process requires a sponge type
-// material at a fixed bed location, the cleaning process is based on
-// "strokes" i.e. back-and-forth movements between the starting and end
-// points.
+// material at a fixed bed location. S defines "strokes" i.e.
+// back-and-forth movements between the starting and end points.
//
// P1: This starts a zig-zag pattern between (X0, Y0) and (X1, Y1), "T"
// defines the number of zig-zag triangles to be done. "S" defines the
-// number of strokes aka one back-and-forth movement. As an example
+// number of strokes aka one back-and-forth movement. Zig-zags will
+// be performed in whichever dimension is smallest. As an example,
// sending "G12 P1 S1 T3" will execute:
//
// --
@@ -1101,6 +1103,10 @@
// |________|_________|_________|
// T1 T2 T3
//
+// P2: This starts a circular pattern with circle with middle in
+// NOZZLE_CLEAN_CIRCLE_MIDDLE radius of R and stroke count of S.
+// Before starting the circle nozzle goes to NOZZLE_CLEAN_START_POINT.
+//
// Caveats: End point Z should use the same value as Start point Z.
//
// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@@ -1109,15 +1115,25 @@
//#define NOZZLE_CLEAN_FEATURE
#if ENABLED(NOZZLE_CLEAN_FEATURE)
-// Number of pattern repetitions
-#define NOZZLE_CLEAN_STROKES 12
+ // Default number of pattern repetitions
+ #define NOZZLE_CLEAN_STROKES 12
-// Specify positions as { X, Y, Z }
-#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
-#define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
+ // Default number of triangles
+ #define NOZZLE_CLEAN_TRIANGLES 3
-// Moves the nozzle to the initial position
-#define NOZZLE_CLEAN_GOBACK
+ // Specify positions as { X, Y, Z }
+ #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
+ #define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
+
+ // Circular pattern radius
+ #define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5
+ // Circular pattern circle fragments number
+ #define NOZZLE_CLEAN_CIRCLE_FN 10
+ // Middle point of circle
+ #define NOZZLE_CLEAN_CIRCLE_MIDDLE NOZZLE_CLEAN_START_POINT
+
+ // Moves the nozzle to the initial position
+ #define NOZZLE_CLEAN_GOBACK
#endif
//
@@ -1201,7 +1217,7 @@
// IMPORTANT NOTE: The U8glib library is required for Full Graphic Display!
// https://github.com/olikraus/U8glib_Arduino
//
-#define ULTRA_LCD // Character based
+//#define ULTRA_LCD // Character based
//#define DOGLCD // Full graphics display
//
@@ -1244,14 +1260,14 @@
//#define ENCODER_STEPS_PER_MENU_ITEM 5
/**
- Encoder Direction Options
-
- Test your encoder's behavior first with both options disabled.
-
- Reversed Value Edit and Menu Nav? Enable REVERSE_ENCODER_DIRECTION.
- Reversed Menu Navigation only? Enable REVERSE_MENU_DIRECTION.
- Reversed Value Editing only? Enable BOTH options.
-*/
+ * Encoder Direction Options
+ *
+ * Test your encoder's behavior first with both options disabled.
+ *
+ * Reversed Value Edit and Menu Nav? Enable REVERSE_ENCODER_DIRECTION.
+ * Reversed Menu Navigation only? Enable REVERSE_MENU_DIRECTION.
+ * Reversed Value Editing only? Enable BOTH options.
+ */
//
// This option reverses the encoder direction everywhere
@@ -1450,8 +1466,8 @@
//
//#define SAV_3DGLCD
#if ENABLED(SAV_3DGLCD)
-//#define U8GLIB_SSD1306
-#define U8GLIB_SH1106
+ //#define U8GLIB_SSD1306
+ #define U8GLIB_SH1106
#endif
//
@@ -1503,14 +1519,14 @@
// Support for an RGB LED using 3 separate pins with optional PWM
//#define RGB_LED
#if ENABLED(RGB_LED)
-#define RGB_LED_R_PIN 34
-#define RGB_LED_G_PIN 43
-#define RGB_LED_B_PIN 35
+ #define RGB_LED_R_PIN 34
+ #define RGB_LED_G_PIN 43
+ #define RGB_LED_B_PIN 35
#endif
/*********************************************************************\
- R/C SERVO support
- Sponsored by TrinityLabs, Reworked by codexmas
+* R/C SERVO support
+* Sponsored by TrinityLabs, Reworked by codexmas
**********************************************************************/
// Number of servos
@@ -1522,7 +1538,7 @@
//
//#define NUM_SERVOS 3 // Servo index starts with 0 for M280 command
-// Delay (in microseconds) before the next move will start, to give the servo time to reach its target angle.
+// Delay (in milliseconds) before the next move will start, to give the servo time to reach its target angle.
// 300ms is a good value but you can try less delay.
// If the servo can't reach the requested position, increase it.
#define SERVO_DELAY 300
@@ -1533,15 +1549,15 @@
//#define DEACTIVATE_SERVOS_AFTER_MOVE
/**********************************************************************\
- Support for a filament diameter sensor
- Also allows adjustment of diameter at print time (vs at slicing)
- Single extruder only at this point (extruder 0)
-
- Motherboards
- 34 - RAMPS1.4 - uses Analog input 5 on the AUX2 connector
- 81 - Printrboard - Uses Analog input 2 on the Exp1 connector (version B,C,D,E)
- 301 - Rambo - uses Analog input 3
- Note may require analog pins to be defined for different motherboards
+ * Support for a filament diameter sensor
+ * Also allows adjustment of diameter at print time (vs at slicing)
+ * Single extruder only at this point (extruder 0)
+ *
+ * Motherboards
+ * 34 - RAMPS1.4 - uses Analog input 5 on the AUX2 connector
+ * 81 - Printrboard - Uses Analog input 2 on the Exp1 connector (version B,C,D,E)
+ * 301 - Rambo - uses Analog input 3
+ * Note may require analog pins to be defined for different motherboards
**********************************************************************/
// Uncomment below to enable
//#define FILAMENT_WIDTH_SENSOR
@@ -1549,17 +1565,17 @@
#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75 //Enter the diameter (in mm) of the filament generally used (3.0 mm or 1.75 mm) - this is then used in the slicer software. Used for sensor reading validation
#if ENABLED(FILAMENT_WIDTH_SENSOR)
-#define FILAMENT_SENSOR_EXTRUDER_NUM 0 //The number of the extruder that has the filament sensor (0,1,2)
-#define MEASUREMENT_DELAY_CM 14 //measurement delay in cm. This is the distance from filament sensor to middle of barrel
+ #define FILAMENT_SENSOR_EXTRUDER_NUM 0 //The number of the extruder that has the filament sensor (0,1,2)
+ #define MEASUREMENT_DELAY_CM 14 //measurement delay in cm. This is the distance from filament sensor to middle of barrel
-#define MEASURED_UPPER_LIMIT 3.30 //upper limit factor used for sensor reading validation in mm
-#define MEASURED_LOWER_LIMIT 1.90 //lower limit factor for sensor reading validation in mm
-#define MAX_MEASUREMENT_DELAY 20 //delay buffer size in bytes (1 byte = 1cm)- limits maximum measurement delay allowable (must be larger than MEASUREMENT_DELAY_CM and lower number saves RAM)
+ #define MEASURED_UPPER_LIMIT 3.30 //upper limit factor used for sensor reading validation in mm
+ #define MEASURED_LOWER_LIMIT 1.90 //lower limit factor for sensor reading validation in mm
+ #define MAX_MEASUREMENT_DELAY 20 //delay buffer size in bytes (1 byte = 1cm)- limits maximum measurement delay allowable (must be larger than MEASUREMENT_DELAY_CM and lower number saves RAM)
-#define DEFAULT_MEASURED_FILAMENT_DIA DEFAULT_NOMINAL_FILAMENT_DIA //set measured to nominal initially
+ #define DEFAULT_MEASURED_FILAMENT_DIA DEFAULT_NOMINAL_FILAMENT_DIA //set measured to nominal initially
-//When using an LCD, uncomment the line below to display the Filament sensor data on the last line instead of status. Status will appear for 5 sec.
-//#define FILAMENT_LCD_DISPLAY
+ //When using an LCD, uncomment the line below to display the Filament sensor data on the last line instead of status. Status will appear for 5 sec.
+ //#define FILAMENT_LCD_DISPLAY
#endif
#endif // CONFIGURATION_H
diff --git a/Marlin/example_configurations/delta/flsun_kossel_mini/Configuration_adv.h b/Marlin/example_configurations/delta/flsun_kossel_mini/Configuration_adv.h
index 9251c7967..386513f99 100644
--- a/Marlin/example_configurations/delta/flsun_kossel_mini/Configuration_adv.h
+++ b/Marlin/example_configurations/delta/flsun_kossel_mini/Configuration_adv.h
@@ -217,13 +217,12 @@
* Multiple extruders can be assigned to the same pin in which case
* the fan will turn on when any selected extruder is above the threshold.
*/
-
#define E0_AUTO_FAN_PIN -1
#define E1_AUTO_FAN_PIN -1
#define E2_AUTO_FAN_PIN -1
#define E3_AUTO_FAN_PIN -1
#define EXTRUDER_AUTO_FAN_TEMPERATURE 50
-#define EXTRUDER_AUTO_FAN_SPEED 255 // 255 == full speed
+#define EXTRUDER_AUTO_FAN_SPEED 255 // == full speed
// Define a pin to turn case light on/off
//#define CASE_LIGHT_PIN 4
@@ -309,13 +308,13 @@
// Remember: you should set the second extruder x-offset to 0 in your slicer.
// There are a few selectable movement modes for dual x-carriages using M605 S
- // Mode 0: Full control. The slicer has full control over both x-carriages and can achieve optimal travel results
- // as long as it supports dual x-carriages. (M605 S0)
- // Mode 1: Auto-park mode. The firmware will automatically park and unpark the x-carriages on tool changes so
- // that additional slicer support is not required. (M605 S1)
- // Mode 2: Duplication mode. The firmware will transparently make the second x-carriage and extruder copy all
- // actions of the first x-carriage. This allows the printer to print 2 arbitrary items at
- // once. (2nd extruder x offset and temp offset are set using: M605 S2 [Xnnn] [Rmmm])
+ // Mode 0 (DXC_FULL_CONTROL_MODE): Full control. The slicer has full control over both x-carriages and can achieve optimal travel results
+ // as long as it supports dual x-carriages. (M605 S0)
+ // Mode 1 (DXC_AUTO_PARK_MODE) : Auto-park mode. The firmware will automatically park and unpark the x-carriages on tool changes so
+ // that additional slicer support is not required. (M605 S1)
+ // Mode 2 (DXC_DUPLICATION_MODE) : Duplication mode. The firmware will transparently make the second x-carriage and extruder copy all
+ // actions of the first x-carriage. This allows the printer to print 2 arbitrary items at
+ // once. (2nd extruder x offset and temp offset are set using: M605 S2 [Xnnn] [Rmmm])
// This is the default power-up mode which can be later using M605.
#define DEFAULT_DUAL_X_CARRIAGE_MODE DXC_FULL_CONTROL_MODE
@@ -428,6 +427,9 @@
// On the Info Screen, display XY with one decimal place when possible
//#define LCD_DECIMAL_SMALL_XY
+// The timeout (in ms) to return to the status screen from sub-menus
+//#define LCD_TIMEOUT_TO_STATUS 15000
+
#if ENABLED(SDSUPPORT)
// Some RAMPS and other boards don't detect when an SD card is inserted. You can work
@@ -445,6 +447,42 @@
// using:
//#define MENU_ADDAUTOSTART
+ /**
+ * Sort SD file listings in alphabetical order.
+ *
+ * With this option enabled, items on SD cards will be sorted
+ * by name for easier navigation.
+ *
+ * By default...
+ *
+ * - Use the slowest -but safest- method for sorting.
+ * - Folders are sorted to the top.
+ * - The sort key is statically allocated.
+ * - No added G-code (M34) support.
+ * - 40 item sorting limit. (Items after the first 40 are unsorted.)
+ *
+ * SD sorting uses static allocation (as set by SDSORT_LIMIT), allowing the
+ * compiler to calculate the worst-case usage and throw an error if the SRAM
+ * limit is exceeded.
+ *
+ * - SDSORT_USES_RAM provides faster sorting via a static directory buffer.
+ * - SDSORT_USES_STACK does the same, but uses a local stack-based buffer.
+ * - SDSORT_CACHE_NAMES will retain the sorted file listing in RAM. (Expensive!)
+ * - SDSORT_DYNAMIC_RAM only uses RAM when the SD menu is visible. (Use with caution!)
+ */
+ //#define SDCARD_SORT_ALPHA
+
+ // SD Card Sorting options
+ #if ENABLED(SDCARD_SORT_ALPHA)
+ #define SDSORT_LIMIT 40 // Maximum number of sorted items (10-256).
+ #define FOLDER_SORTING -1 // -1=above 0=none 1=below
+ #define SDSORT_GCODE false // Allow turning sorting on/off with LCD and M34 g-code.
+ #define SDSORT_USES_RAM false // Pre-allocate a static array for faster pre-sorting.
+ #define SDSORT_USES_STACK false // Prefer the stack for pre-sorting to give back some SRAM. (Negated by next 2 options.)
+ #define SDSORT_CACHE_NAMES false // Keep sorted items in RAM longer for speedy performance. Most expensive option.
+ #define SDSORT_DYNAMIC_RAM false // Use dynamic allocation (within SD menus). Least expensive option. Set SDSORT_LIMIT before use!
+ #endif
+
// Show a progress bar on HD44780 LCDs for SD printing
//#define LCD_PROGRESS_BAR
@@ -457,6 +495,8 @@
#define PROGRESS_MSG_EXPIRE 0
// Enable this to show messages for MSG_TIME then hide them
//#define PROGRESS_MSG_ONCE
+ // Add a menu item to test the progress bar:
+ //#define LCD_PROGRESS_BAR_TEST
#endif
// This allows hosts to request long names for files and folders with M33
@@ -469,8 +509,25 @@
#endif // SDSUPPORT
-// Some additional options are available for graphical displays:
+/**
+ * Additional options for Graphical Displays
+ *
+ * Use the optimizations here to improve printing performance,
+ * which can be adversely affected by graphical display drawing,
+ * especially when doing several short moves, and when printing
+ * on DELTA and SCARA machines.
+ *
+ * Some of these options may result in the display lagging behind
+ * controller events, as there is a trade-off between reliable
+ * printing performance versus fast display updates.
+ */
#if ENABLED(DOGLCD)
+ // Enable to save many cycles by drawing a hollow frame on the Info Screen
+ #define XYZ_HOLLOW_FRAME
+
+ // Enable to save many cycles by drawing a hollow frame on Menu Screens
+ #define MENU_HOLLOW_FRAME
+
// A bigger font is available for edit items. Costs 3120 bytes of PROGMEM.
// Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
//#define USE_BIG_EDIT_FONT
@@ -510,36 +567,6 @@
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
#endif
-//
-// Ensure Smooth Moves
-//
-// Enable this option to prevent the machine from stuttering when printing multiple short segments.
-// This feature uses two strategies to eliminate stuttering:
-//
-// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
-// completely drained. When this happens pauses are introduced between short segments, and print moves
-// will become jerky until a longer segment provides enough time for the buffer to be filled again.
-// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
-// by pausing the LCD until there's enough time to safely update.
-//
-// NOTE: This will cause the Info Screen to lag and controller buttons may become unresponsive.
-// Enable ALWAYS_ALLOW_MENU to keep the controller responsive.
-//
-// 2. No block is allowed to take less time than MIN_BLOCK_TIME. That's the time it takes in the main
-// loop to add a new block to the buffer, check temperatures, etc., including all blocked time due to
-// interrupts (without LCD update). By enforcing a minimum time-per-move, the buffer is prevented from
-// draining.
-//
-#define ENSURE_SMOOTH_MOVES
-#if ENABLED(ENSURE_SMOOTH_MOVES)
- //#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
- // WARNING: Menu navigation during short moves may cause stuttering!
- #define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
- // Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
- // You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
- #define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
-#endif
-
// @section extruder
// extruder advance constant (s2/mm3)
@@ -561,19 +588,37 @@
*
* Assumption: advance = k * (delta velocity)
* K=0 means advance disabled.
- * To get a rough start value for calibration, measure your "free filament length"
- * between the hobbed bolt and the nozzle (in cm). Use the formula below that fits
- * your setup, where L is the "free filament length":
- *
- * Filament diameter | 1.75mm | 3.0mm |
- * ----------------------------|-----------|------------|
- * Stiff filament (PLA) | K=47*L/10 | K=139*L/10 |
- * Softer filament (ABS, nGen) | K=88*L/10 | K=260*L/10 |
+ * See Marlin documentation for calibration instructions.
*/
//#define LIN_ADVANCE
#if ENABLED(LIN_ADVANCE)
#define LIN_ADVANCE_K 75
+
+ /**
+ * Some Slicers produce Gcode with randomly jumping extrusion widths occasionally.
+ * For example within a 0.4mm perimeter it may produce a single segment of 0.05mm width.
+ * While this is harmless for normal printing (the fluid nature of the filament will
+ * close this very, very tiny gap), it throws off the LIN_ADVANCE pressure adaption.
+ *
+ * For this case LIN_ADVANCE_E_D_RATIO can be used to set the extrusion:distance ratio
+ * to a fixed value. Note that using a fixed ratio will lead to wrong nozzle pressures
+ * if the slicer is using variable widths or layer heights within one print!
+ *
+ * This option sets the default E:D ratio at startup. Use `M905` to override this value.
+ *
+ * Example: `M905 W0.4 H0.2 D1.75`, where:
+ * - W is the extrusion width in mm
+ * - H is the layer height in mm
+ * - D is the filament diameter in mm
+ *
+ * Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
+ *
+ * Slic3r (including Prusa Slic3r) produces Gcode compatible with the automatic mode.
+ * Cura (as of this writing) may produce Gcode incompatible with the automatic mode.
+ */
+ #define LIN_ADVANCE_E_D_RATIO 0 // The calculated ratio (or 0) according to the formula W * H / ((D / 2) ^ 2 * PI)
+ // Example: 0.4 * 0.2 / ((1.75 / 2) ^ 2 * PI) = 0.033260135
#endif
// @section leveling
@@ -680,33 +725,42 @@
#define RETRACT_RECOVER_FEEDRATE 8 //default feedrate for recovering from retraction (mm/s)
#endif
-// Add support for experimental filament exchange support M600; requires display
-#if ENABLED(ULTIPANEL)
- // #define FILAMENT_CHANGE_FEATURE // Enable filament exchange menu and M600 g-code (used for runout sensor too)
- #if ENABLED(FILAMENT_CHANGE_FEATURE)
- #define FILAMENT_CHANGE_X_POS 3 // X position of hotend
- #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend
- #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift)
- #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
- #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers)
- #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm
- // It is a short retract used immediately after print interrupt before move to filament exchange position
- #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
- #define FILAMENT_CHANGE_UNLOAD_LENGTH 100 // Unload filament length from hotend in mm
- // Longer length for bowden printers to unload filament from whole bowden tube,
- // shorter lenght for printers without bowden to unload filament from extruder only,
- // 0 to disable unloading for manual unloading
- #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast
- #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm
- // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
- // Short or zero length for printers without bowden where loading is not used
- #define FILAMENT_CHANGE_LOAD_FEEDRATE 10 // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
- #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is load over the hotend,
- // 0 to disable for manual extrusion
- // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
- // or until outcoming filament color is not clear for filament color change
- #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
- #endif
+/**
+ * Filament Change
+ * Experimental filament change support.
+ * Adds the GCode M600 for initiating filament change.
+ *
+ * Requires an LCD display.
+ * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
+ */
+//#define FILAMENT_CHANGE_FEATURE
+#if ENABLED(FILAMENT_CHANGE_FEATURE)
+ #define FILAMENT_CHANGE_X_POS 3 // X position of hotend
+ #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend
+ #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift)
+ #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
+ #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers)
+ #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
+ #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm
+ // It is a short retract used immediately after print interrupt before move to filament exchange position
+ #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast
+ #define FILAMENT_CHANGE_UNLOAD_LENGTH 100 // Unload filament length from hotend in mm
+ // Longer length for bowden printers to unload filament from whole bowden tube,
+ // shorter length for printers without bowden to unload filament from extruder only,
+ // 0 to disable unloading for manual unloading
+ #define FILAMENT_CHANGE_LOAD_FEEDRATE 6 // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
+ #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm
+ // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
+ // Short or zero length for printers without bowden where loading is not used
+ #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
+ #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend,
+ // 0 to disable for manual extrusion
+ // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
+ // or until outcoming filament color is not clear for filament color change
+ #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L // Turn off nozzle if user doesn't change filament within this time limit in seconds
+ #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5L // Number of alert beeps before printer goes quiet
+ #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change
+ // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
#endif
/******************************************************************************\
@@ -1101,4 +1155,29 @@
*/
//#define EXTENDED_CAPABILITIES_REPORT
+/**
+ * Double-click the Encoder button on the Status Screen for Z Babystepping.
+ */
+//#define DOUBLECLICK_FOR_Z_BABYSTEPPING
+#define DOUBLECLICK_MAX_INTERVAL 1250 // Maximum interval between clicks, in milliseconds.
+ // Note: You may need to add extra time to mitigate controller latency.
+
+/**
+ * Volumetric extrusion default state
+ * Activate to make volumetric extrusion the default method,
+ * with DEFAULT_NOMINAL_FILAMENT_DIA as the default diameter.
+ *
+ * M200 D0 to disable, M200 Dn to set a new diameter.
+ */
+//#define VOLUMETRIC_DEFAULT_ON
+
+/**
+ * Enable this option for a leaner build of Marlin that removes all
+ * workspace offsets, simplifying coordinate transformations, leveling, etc.
+ *
+ * - M206 and M428 are disabled.
+ * - G92 will revert to its behavior from Marlin 1.0.
+ */
+//#define NO_WORKSPACE_OFFSETS
+
#endif // CONFIGURATION_ADV_H
diff --git a/Marlin/example_configurations/delta/generic/Configuration.h b/Marlin/example_configurations/delta/generic/Configuration.h
index 97108ebf6..98b17324c 100644
--- a/Marlin/example_configurations/delta/generic/Configuration.h
+++ b/Marlin/example_configurations/delta/generic/Configuration.h
@@ -96,7 +96,7 @@
//
// Marlin now allow you to have a vendor boot image to be displayed on machine
// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
+// custom boot image and then the default Marlin boot image is shown.
//
// We suggest for you to take advantage of this new feature and keep the Marlin
// boot image unmodified. For an example have a look at the bq Hephestos 2
@@ -1087,6 +1087,10 @@
// |________|_________|_________|
// T1 T2 T3
//
+// P2: This starts a circular pattern with circle with middle in
+// NOZZLE_CLEAN_CIRCLE_MIDDLE radius of R and stroke count of S.
+// Before starting the circle nozzle goes to NOZZLE_CLEAN_START_POINT.
+//
// Caveats: End point Z should use the same value as Start point Z.
//
// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@@ -1097,7 +1101,7 @@
#if ENABLED(NOZZLE_CLEAN_FEATURE)
// Default number of pattern repetitions
#define NOZZLE_CLEAN_STROKES 12
-
+
// Default number of triangles
#define NOZZLE_CLEAN_TRIANGLES 3
@@ -1105,6 +1109,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
+ // Circular pattern radius
+ #define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5
+ // Circular pattern circle fragments number
+ #define NOZZLE_CLEAN_CIRCLE_FN 10
+ // Middle point of circle
+ #define NOZZLE_CLEAN_CIRCLE_MIDDLE NOZZLE_CLEAN_START_POINT
+
// Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK
#endif
diff --git a/Marlin/example_configurations/delta/kossel_mini/Configuration.h b/Marlin/example_configurations/delta/kossel_mini/Configuration.h
index 39a8dcfb9..bce910de7 100644
--- a/Marlin/example_configurations/delta/kossel_mini/Configuration.h
+++ b/Marlin/example_configurations/delta/kossel_mini/Configuration.h
@@ -96,7 +96,7 @@
//
// Marlin now allow you to have a vendor boot image to be displayed on machine
// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
+// custom boot image and then the default Marlin boot image is shown.
//
// We suggest for you to take advantage of this new feature and keep the Marlin
// boot image unmodified. For an example have a look at the bq Hephestos 2
@@ -1090,6 +1090,10 @@
// |________|_________|_________|
// T1 T2 T3
//
+// P2: This starts a circular pattern with circle with middle in
+// NOZZLE_CLEAN_CIRCLE_MIDDLE radius of R and stroke count of S.
+// Before starting the circle nozzle goes to NOZZLE_CLEAN_START_POINT.
+//
// Caveats: End point Z should use the same value as Start point Z.
//
// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@@ -1100,7 +1104,7 @@
#if ENABLED(NOZZLE_CLEAN_FEATURE)
// Default number of pattern repetitions
#define NOZZLE_CLEAN_STROKES 12
-
+
// Default number of triangles
#define NOZZLE_CLEAN_TRIANGLES 3
@@ -1108,6 +1112,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
+ // Circular pattern radius
+ #define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5
+ // Circular pattern circle fragments number
+ #define NOZZLE_CLEAN_CIRCLE_FN 10
+ // Middle point of circle
+ #define NOZZLE_CLEAN_CIRCLE_MIDDLE NOZZLE_CLEAN_START_POINT
+
// Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK
#endif
diff --git a/Marlin/example_configurations/delta/kossel_pro/Configuration.h b/Marlin/example_configurations/delta/kossel_pro/Configuration.h
index 2bf9aa34a..437b9bcfe 100644
--- a/Marlin/example_configurations/delta/kossel_pro/Configuration.h
+++ b/Marlin/example_configurations/delta/kossel_pro/Configuration.h
@@ -100,7 +100,7 @@
//
// Marlin now allow you to have a vendor boot image to be displayed on machine
// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
+// custom boot image and then the default Marlin boot image is shown.
//
// We suggest for you to take advantage of this new feature and keep the Marlin
// boot image unmodified. For an example have a look at the bq Hephestos 2
@@ -1089,6 +1089,10 @@
// |________|_________|_________|
// T1 T2 T3
//
+// P2: This starts a circular pattern with circle with middle in
+// NOZZLE_CLEAN_CIRCLE_MIDDLE radius of R and stroke count of S.
+// Before starting the circle nozzle goes to NOZZLE_CLEAN_START_POINT.
+//
// Caveats: End point Z should use the same value as Start point Z.
//
// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@@ -1099,7 +1103,7 @@
#if ENABLED(NOZZLE_CLEAN_FEATURE)
// Default number of pattern repetitions
#define NOZZLE_CLEAN_STROKES 12
-
+
// Default number of triangles
#define NOZZLE_CLEAN_TRIANGLES 3
@@ -1107,6 +1111,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
+ // Circular pattern radius
+ #define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5
+ // Circular pattern circle fragments number
+ #define NOZZLE_CLEAN_CIRCLE_FN 10
+ // Middle point of circle
+ #define NOZZLE_CLEAN_CIRCLE_MIDDLE NOZZLE_CLEAN_START_POINT
+
// Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK
#endif
diff --git a/Marlin/example_configurations/delta/kossel_xl/Configuration.h b/Marlin/example_configurations/delta/kossel_xl/Configuration.h
index 6fd3a1aae..c8a28c42d 100644
--- a/Marlin/example_configurations/delta/kossel_xl/Configuration.h
+++ b/Marlin/example_configurations/delta/kossel_xl/Configuration.h
@@ -89,7 +89,7 @@
//
// Marlin now allow you to have a vendor boot image to be displayed on machine
// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
+// custom boot image and then the default Marlin boot image is shown.
//
// We suggest for you to take advantage of this new feature and keep the Marlin
// boot image unmodified. For an example have a look at the bq Hephestos 2
@@ -1093,6 +1093,10 @@
// |________|_________|_________|
// T1 T2 T3
//
+// P2: This starts a circular pattern with circle with middle in
+// NOZZLE_CLEAN_CIRCLE_MIDDLE radius of R and stroke count of S.
+// Before starting the circle nozzle goes to NOZZLE_CLEAN_START_POINT.
+//
// Caveats: End point Z should use the same value as Start point Z.
//
// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@@ -1103,7 +1107,7 @@
#if ENABLED(NOZZLE_CLEAN_FEATURE)
// Default number of pattern repetitions
#define NOZZLE_CLEAN_STROKES 12
-
+
// Default number of triangles
#define NOZZLE_CLEAN_TRIANGLES 3
@@ -1111,6 +1115,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
+ // Circular pattern radius
+ #define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5
+ // Circular pattern circle fragments number
+ #define NOZZLE_CLEAN_CIRCLE_FN 10
+ // Middle point of circle
+ #define NOZZLE_CLEAN_CIRCLE_MIDDLE NOZZLE_CLEAN_START_POINT
+
// Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK
#endif
diff --git a/Marlin/example_configurations/makibox/Configuration.h b/Marlin/example_configurations/makibox/Configuration.h
index 9503c1122..bc95a78c4 100644
--- a/Marlin/example_configurations/makibox/Configuration.h
+++ b/Marlin/example_configurations/makibox/Configuration.h
@@ -96,7 +96,7 @@
//
// Marlin now allow you to have a vendor boot image to be displayed on machine
// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
+// custom boot image and then the default Marlin boot image is shown.
//
// We suggest for you to take advantage of this new feature and keep the Marlin
// boot image unmodified. For an example have a look at the bq Hephestos 2
@@ -1003,6 +1003,10 @@
// |________|_________|_________|
// T1 T2 T3
//
+// P2: This starts a circular pattern with circle with middle in
+// NOZZLE_CLEAN_CIRCLE_MIDDLE radius of R and stroke count of S.
+// Before starting the circle nozzle goes to NOZZLE_CLEAN_START_POINT.
+//
// Caveats: End point Z should use the same value as Start point Z.
//
// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@@ -1013,7 +1017,7 @@
#if ENABLED(NOZZLE_CLEAN_FEATURE)
// Default number of pattern repetitions
#define NOZZLE_CLEAN_STROKES 12
-
+
// Default number of triangles
#define NOZZLE_CLEAN_TRIANGLES 3
@@ -1021,6 +1025,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
+ // Circular pattern radius
+ #define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5
+ // Circular pattern circle fragments number
+ #define NOZZLE_CLEAN_CIRCLE_FN 10
+ // Middle point of circle
+ #define NOZZLE_CLEAN_CIRCLE_MIDDLE NOZZLE_CLEAN_START_POINT
+
// Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK
#endif
diff --git a/Marlin/example_configurations/tvrrug/Round2/Configuration.h b/Marlin/example_configurations/tvrrug/Round2/Configuration.h
index f2607066c..e5c43a832 100644
--- a/Marlin/example_configurations/tvrrug/Round2/Configuration.h
+++ b/Marlin/example_configurations/tvrrug/Round2/Configuration.h
@@ -96,7 +96,7 @@
//
// Marlin now allow you to have a vendor boot image to be displayed on machine
// start. When SHOW_CUSTOM_BOOTSCREEN is defined Marlin will first show your
-// custom boot image and them the default Marlin boot image is shown.
+// custom boot image and then the default Marlin boot image is shown.
//
// We suggest for you to take advantage of this new feature and keep the Marlin
// boot image unmodified. For an example have a look at the bq Hephestos 2
@@ -996,6 +996,10 @@
// |________|_________|_________|
// T1 T2 T3
//
+// P2: This starts a circular pattern with circle with middle in
+// NOZZLE_CLEAN_CIRCLE_MIDDLE radius of R and stroke count of S.
+// Before starting the circle nozzle goes to NOZZLE_CLEAN_START_POINT.
+//
// Caveats: End point Z should use the same value as Start point Z.
//
// Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@@ -1006,7 +1010,7 @@
#if ENABLED(NOZZLE_CLEAN_FEATURE)
// Default number of pattern repetitions
#define NOZZLE_CLEAN_STROKES 12
-
+
// Default number of triangles
#define NOZZLE_CLEAN_TRIANGLES 3
@@ -1014,6 +1018,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (Z_MIN_POS + 1)}
+ // Circular pattern radius
+ #define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5
+ // Circular pattern circle fragments number
+ #define NOZZLE_CLEAN_CIRCLE_FN 10
+ // Middle point of circle
+ #define NOZZLE_CLEAN_CIRCLE_MIDDLE NOZZLE_CLEAN_START_POINT
+
// Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK
#endif
diff --git a/Marlin/nozzle.cpp b/Marlin/nozzle.cpp
new file mode 100644
index 000000000..92f697df1
--- /dev/null
+++ b/Marlin/nozzle.cpp
@@ -0,0 +1,236 @@
+#include "nozzle.h"
+
+#include "Marlin.h"
+#include "point_t.h"
+
+/**
+ * @brief Stroke clean pattern
+ * @details Wipes the nozzle back and forth in a linear movement
+ *
+ * @param start point_t defining the starting point
+ * @param end point_t defining the ending point
+ * @param strokes number of strokes to execute
+ */
+void Nozzle::stroke(
+ __attribute__((unused)) point_t const &start,
+ __attribute__((unused)) point_t const &end,
+ __attribute__((unused)) uint8_t const &strokes
+) {
+ #if ENABLED(NOZZLE_CLEAN_FEATURE)
+
+ #if ENABLED(NOZZLE_CLEAN_GOBACK)
+ // Store the current coords
+ point_t const initial = {
+ current_position[X_AXIS],
+ current_position[Y_AXIS],
+ current_position[Z_AXIS],
+ current_position[E_AXIS]
+ };
+ #endif // NOZZLE_CLEAN_GOBACK
+
+ // Move to the starting point
+ do_blocking_move_to_xy(start.x, start.y);
+ do_blocking_move_to_z(start.z);
+
+ // Start the stroke pattern
+ for (uint8_t i = 0; i < (strokes >>1); i++) {
+ do_blocking_move_to_xy(end.x, end.y);
+ do_blocking_move_to_xy(start.x, start.y);
+ }
+
+ #if ENABLED(NOZZLE_CLEAN_GOBACK)
+ // Move the nozzle to the initial point
+ do_blocking_move_to(initial.x, initial.y, initial.z);
+ #endif // NOZZLE_CLEAN_GOBACK
+
+ #endif // NOZZLE_CLEAN_FEATURE
+}
+
+/**
+ * @brief Zig-zag clean pattern
+ * @details Apply a zig-zag cleanning pattern
+ *
+ * @param start point_t defining the starting point
+ * @param end point_t defining the ending point
+ * @param strokes number of strokes to execute
+ * @param objects number of objects to create
+ */
+void Nozzle::zigzag(
+ __attribute__((unused)) point_t const &start,
+ __attribute__((unused)) point_t const &end,
+ __attribute__((unused)) uint8_t const &strokes,
+ __attribute__((unused)) uint8_t const &objects
+) {
+ #if ENABLED(NOZZLE_CLEAN_FEATURE)
+ const float A = nozzle_clean_horizontal ? nozzle_clean_height : nozzle_clean_length, // [twice the] Amplitude
+ P = (nozzle_clean_horizontal ? nozzle_clean_length : nozzle_clean_height) / (objects << 1); // Period
+
+ // Don't allow impossible triangles
+ if (A <= 0.0f || P <= 0.0f ) return;
+
+ #if ENABLED(NOZZLE_CLEAN_GOBACK)
+ // Store the current coords
+ point_t const initial = {
+ current_position[X_AXIS],
+ current_position[Y_AXIS],
+ current_position[Z_AXIS],
+ current_position[E_AXIS]
+ };
+ #endif // NOZZLE_CLEAN_GOBACK
+
+ for (uint8_t j = 0; j < strokes; j++) {
+ for (uint8_t i = 0; i < (objects << 1); i++) {
+ float const x = start.x + ( nozzle_clean_horizontal ? i * P : (A/P) * (P - fabs(fmod((i*P), (2*P)) - P)) );
+ float const y = start.y + (!nozzle_clean_horizontal ? i * P : (A/P) * (P - fabs(fmod((i*P), (2*P)) - P)) );
+
+ do_blocking_move_to_xy(x, y);
+ if (i == 0) do_blocking_move_to_z(start.z);
+ }
+
+ for (int i = (objects << 1); i > -1; i--) {
+ float const x = start.x + ( nozzle_clean_horizontal ? i * P : (A/P) * (P - fabs(fmod((i*P), (2*P)) - P)) );
+ float const y = start.y + (!nozzle_clean_horizontal ? i * P : (A/P) * (P - fabs(fmod((i*P), (2*P)) - P)) );
+
+ do_blocking_move_to_xy(x, y);
+ }
+ }
+
+ #if ENABLED(NOZZLE_CLEAN_GOBACK)
+ // Move the nozzle to the initial point
+ do_blocking_move_to_z(initial.z);
+ do_blocking_move_to_xy(initial.x, initial.y);
+ #endif // NOZZLE_CLEAN_GOBACK
+
+ #endif // NOZZLE_CLEAN_FEATURE
+}
+
+
+/**
+ * @brief Circular clean pattern
+ * @details Apply a circular cleaning pattern
+ *
+ * @param start point_t defining the middle of circle
+ * @param strokes number of strokes to execute
+ * @param radius radius of circle
+ */
+void Nozzle::circle(
+ __attribute__((unused)) point_t const &start,
+ __attribute__((unused)) point_t const &middle,
+ __attribute__((unused)) uint8_t const &strokes,
+ __attribute__((unused)) float const &radius
+) {
+ #if ENABLED(NOZZLE_CLEAN_FEATURE)
+ if (strokes == 0) return;
+
+ #if ENABLED(NOZZLE_CLEAN_GOBACK)
+ // Store the current coords
+ point_t const initial = {
+ current_position[X_AXIS],
+ current_position[Y_AXIS],
+ current_position[Z_AXIS],
+ current_position[E_AXIS]
+ };
+ #endif // NOZZLE_CLEAN_GOBACK
+
+ if (start.z <= current_position[Z_AXIS]) {
+ // Order of movement is pretty darn important here
+ do_blocking_move_to_xy(start.x, start.y);
+ do_blocking_move_to_z(start.z);
+ } else {
+ do_blocking_move_to_z(start.z);
+ do_blocking_move_to_xy(start.x, start.y);
+ }
+
+ float x, y;
+ for (uint8_t s = 0; s < strokes; s++) {
+ for (uint8_t i = 0; i < NOZZLE_CLEAN_CIRCLE_FN; i++) {
+ x = middle.x + sin((M_2_PI / NOZZLE_CLEAN_CIRCLE_FN) * i) * radius;
+ y = middle.y + cos((M_2_PI / NOZZLE_CLEAN_CIRCLE_FN) * i) * radius;
+
+ do_blocking_move_to_xy(x, y);
+ }
+ }
+
+ // Let's be safe
+ do_blocking_move_to_xy(start.x, start.y);
+
+ #if ENABLED(NOZZLE_CLEAN_GOBACK)
+ // Move the nozzle to the initial point
+ if (start.z <= initial.z) {
+ // As above order is important
+ do_blocking_move_to_z(initial.z);
+ do_blocking_move_to_xy(initial.x, initial.y);
+ } else {
+ do_blocking_move_to_xy(initial.x, initial.y);
+ do_blocking_move_to_z(initial.z);
+ }
+ #endif // NOZZLE_CLEAN_GOBACK
+
+ #endif // NOZZLE_CLEAN_FEATURE
+}
+
+/**
+ * @brief Clean the nozzle
+ * @details Starts the selected clean procedure pattern
+ *
+ * @param pattern one of the available patterns
+ * @param argument depends on the cleaning pattern
+ */
+void Nozzle::clean(
+ __attribute__((unused)) uint8_t const &pattern,
+ __attribute__((unused)) uint8_t const &strokes,
+ __attribute__((unused)) float const &radius,
+ __attribute__((unused)) uint8_t const &objects
+) {
+ #if ENABLED(NOZZLE_CLEAN_FEATURE)
+ #if ENABLED(DELTA)
+ if (current_position[Z_AXIS] > delta_clip_start_height)
+ do_blocking_move_to_z(delta_clip_start_height);
+ #endif
+ switch (pattern) {
+ case 1:
+ Nozzle::zigzag(
+ NOZZLE_CLEAN_START_POINT,
+ NOZZLE_CLEAN_END_POINT, strokes, objects);
+ break;
+
+ case 2:
+ Nozzle::circle(
+ NOZZLE_CLEAN_START_POINT,
+ NOZZLE_CLEAN_CIRCLE_MIDDLE, strokes, radius);
+ break;
+
+ default:
+ Nozzle::stroke(
+ NOZZLE_CLEAN_START_POINT,
+ NOZZLE_CLEAN_END_POINT, strokes);
+ }
+ #endif // NOZZLE_CLEAN_FEATURE
+}
+
+void Nozzle::park(
+ __attribute__((unused)) uint8_t const &z_action
+) {
+ #if ENABLED(NOZZLE_PARK_FEATURE)
+ float const z = current_position[Z_AXIS];
+ point_t const park = NOZZLE_PARK_POINT;
+
+ switch(z_action) {
+ case 1: // force Z-park height
+ do_blocking_move_to_z(park.z);
+ break;
+
+ case 2: // Raise by Z-park height
+ do_blocking_move_to_z(
+ (z + park.z > Z_MAX_POS) ? Z_MAX_POS : z + park.z);
+ break;
+
+ default: // Raise to Z-park height if lower
+ if (current_position[Z_AXIS] < park.z)
+ do_blocking_move_to_z(park.z);
+ }
+
+ do_blocking_move_to_xy(park.x, park.y);
+
+ #endif // NOZZLE_PARK_FEATURE
+}
diff --git a/Marlin/nozzle.h b/Marlin/nozzle.h
index 14423adfb..f98bc40db 100644
--- a/Marlin/nozzle.h
+++ b/Marlin/nozzle.h
@@ -53,40 +53,11 @@ class Nozzle {
__attribute__((unused)) point_t const &start,
__attribute__((unused)) point_t const &end,
__attribute__((unused)) uint8_t const &strokes
- ) __attribute__((optimize ("Os"))) {
- #if ENABLED(NOZZLE_CLEAN_FEATURE)
-
- #if ENABLED(NOZZLE_CLEAN_GOBACK)
- // Store the current coords
- point_t const initial = {
- current_position[X_AXIS],
- current_position[Y_AXIS],
- current_position[Z_AXIS],
- current_position[E_AXIS]
- };
- #endif // NOZZLE_CLEAN_GOBACK
-
- // Move to the starting point
- do_blocking_move_to_xy(start.x, start.y);
- do_blocking_move_to_z(start.z);
-
- // Start the stroke pattern
- for (uint8_t i = 0; i < (strokes >>1); i++) {
- do_blocking_move_to_xy(end.x, end.y);
- do_blocking_move_to_xy(start.x, start.y);
- }
-
- #if ENABLED(NOZZLE_CLEAN_GOBACK)
- // Move the nozzle to the initial point
- do_blocking_move_to(initial.x, initial.y, initial.z);
- #endif // NOZZLE_CLEAN_GOBACK
-
- #endif // NOZZLE_CLEAN_FEATURE
- }
+ ) __attribute__((optimize ("Os")));
/**
* @brief Zig-zag clean pattern
- * @details Apply a zig-zag cleanning pattern
+ * @details Apply a zig-zag cleaning pattern
*
* @param start point_t defining the starting point
* @param end point_t defining the ending point
@@ -98,49 +69,22 @@ class Nozzle {
__attribute__((unused)) point_t const &end,
__attribute__((unused)) uint8_t const &strokes,
__attribute__((unused)) uint8_t const &objects
- ) __attribute__((optimize ("Os"))) {
- #if ENABLED(NOZZLE_CLEAN_FEATURE)
- float A = nozzle_clean_horizontal ? nozzle_clean_height : nozzle_clean_length; // [twice the] Amplitude
- float P = ( nozzle_clean_horizontal ? nozzle_clean_length : nozzle_clean_height ) / (objects << 1); // Period
+ ) __attribute__((optimize ("Os")));
- // Don't allow impossible triangles
- if (A <= 0.0f || P <= 0.0f ) return;
-
- #if ENABLED(NOZZLE_CLEAN_GOBACK)
- // Store the current coords
- point_t const initial = {
- current_position[X_AXIS],
- current_position[Y_AXIS],
- current_position[Z_AXIS],
- current_position[E_AXIS]
- };
- #endif // NOZZLE_CLEAN_GOBACK
-
- for (uint8_t j = 0; j < strokes; j++) {
- for (uint8_t i = 0; i < (objects << 1); i++) {
- float const x = start.x + ( nozzle_clean_horizontal ? i * P : (A/P) * (P - fabs(fmod((i*P), (2*P)) - P)) );
- float const y = start.y + (!nozzle_clean_horizontal ? i * P : (A/P) * (P - fabs(fmod((i*P), (2*P)) - P)) );
-
- do_blocking_move_to_xy(x, y);
- if (i == 0) do_blocking_move_to_z(start.z);
- }
-
- for (int i = (objects << 1); i > -1; i--) {
- float const x = start.x + ( nozzle_clean_horizontal ? i * P : (A/P) * (P - fabs(fmod((i*P), (2*P)) - P)) );
- float const y = start.y + (!nozzle_clean_horizontal ? i * P : (A/P) * (P - fabs(fmod((i*P), (2*P)) - P)) );
-
- do_blocking_move_to_xy(x, y);
- }
- }
-
- #if ENABLED(NOZZLE_CLEAN_GOBACK)
- // Move the nozzle to the initial point
- do_blocking_move_to_z(initial.z);
- do_blocking_move_to_xy(initial.x, initial.y);
- #endif // NOZZLE_CLEAN_GOBACK
-
- #endif // NOZZLE_CLEAN_FEATURE
- }
+ /**
+ * @brief Circular clean pattern
+ * @details Apply a circular cleaning pattern
+ *
+ * @param start point_t defining the middle of circle
+ * @param strokes number of strokes to execute
+ * @param radius radius of circle
+ */
+ static void circle(
+ __attribute__((unused)) point_t const &start,
+ __attribute__((unused)) point_t const &middle,
+ __attribute__((unused)) uint8_t const &strokes,
+ __attribute__((unused)) float const &radius
+ ) __attribute__((optimize ("Os")));
public:
/**
@@ -153,54 +97,13 @@ class Nozzle {
static void clean(
__attribute__((unused)) uint8_t const &pattern,
__attribute__((unused)) uint8_t const &strokes,
+ __attribute__((unused)) float const &radius,
__attribute__((unused)) uint8_t const &objects = 0
- ) __attribute__((optimize ("Os"))) {
- #if ENABLED(NOZZLE_CLEAN_FEATURE)
- #if ENABLED(DELTA)
- if (current_position[Z_AXIS] > delta_clip_start_height)
- do_blocking_move_to_z(delta_clip_start_height);
- #endif
- switch (pattern) {
- case 1:
- Nozzle::zigzag(
- NOZZLE_CLEAN_START_POINT,
- NOZZLE_CLEAN_END_POINT, strokes, objects);
- break;
-
- default:
- Nozzle::stroke(
- NOZZLE_CLEAN_START_POINT,
- NOZZLE_CLEAN_END_POINT, strokes);
- }
- #endif // NOZZLE_CLEAN_FEATURE
- }
+ ) __attribute__((optimize ("Os")));
static void park(
__attribute__((unused)) uint8_t const &z_action
- ) __attribute__((optimize ("Os"))) {
- #if ENABLED(NOZZLE_PARK_FEATURE)
- float const z = current_position[Z_AXIS];
- point_t const park = NOZZLE_PARK_POINT;
-
- switch(z_action) {
- case 1: // force Z-park height
- do_blocking_move_to_z(park.z);
- break;
-
- case 2: // Raise by Z-park height
- do_blocking_move_to_z(
- (z + park.z > Z_MAX_POS) ? Z_MAX_POS : z + park.z);
- break;
-
- default: // Raise to Z-park height if lower
- if (current_position[Z_AXIS] < park.z)
- do_blocking_move_to_z(park.z);
- }
-
- do_blocking_move_to_xy(park.x, park.y);
-
- #endif // NOZZLE_PARK_FEATURE
- }
+ ) __attribute__((optimize ("Os")));
};
#endif