Merge pull request #5973 from thinkyhead/rc_circle_pattern

Add circle pattern to nozzle clean
master
Scott Lahteine 7 years ago committed by GitHub
commit 33f8a8a344

@ -96,7 +96,7 @@
// //
// Marlin now allow you to have a vendor boot image to be displayed on machine // 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 // 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 // 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 // boot image unmodified. For an example have a look at the bq Hephestos 2
@ -1000,6 +1000,9 @@
// |________|_________|_________| // |________|_________|_________|
// T1 T2 T3 // 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. // Caveats: End point Z should use the same value as Start point Z.
// //
@ -1019,6 +1022,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)} #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (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 // Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK #define NOZZLE_CLEAN_GOBACK
#endif #endif

@ -3164,8 +3164,9 @@ inline void gcode_G4() {
const uint8_t pattern = code_seen('P') ? code_value_ushort() : 0, const uint8_t pattern = code_seen('P') ? code_value_ushort() : 0,
strokes = code_seen('S') ? code_value_ushort() : NOZZLE_CLEAN_STROKES, strokes = code_seen('S') ? code_value_ushort() : NOZZLE_CLEAN_STROKES,
objects = code_seen('T') ? code_value_ushort() : NOZZLE_CLEAN_TRIANGLES; 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 #endif

@ -96,7 +96,7 @@
// //
// Marlin now allow you to have a vendor boot image to be displayed on machine // 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 // 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 // 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 // boot image unmodified. For an example have a look at the bq Hephestos 2
@ -1000,6 +1000,10 @@
// |________|_________|_________| // |________|_________|_________|
// T1 T2 T3 // 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. // 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 // Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@ -1018,6 +1022,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)} #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (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 // Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK #define NOZZLE_CLEAN_GOBACK
#endif #endif

@ -96,7 +96,7 @@
// //
// Marlin now allow you to have a vendor boot image to be displayed on machine // 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 // 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 // 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 // boot image unmodified. For an example have a look at the bq Hephestos 2
@ -983,6 +983,10 @@
// |________|_________|_________| // |________|_________|_________|
// T1 T2 T3 // 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. // 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 // Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@ -1001,6 +1005,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)} #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (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 // Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK #define NOZZLE_CLEAN_GOBACK
#endif #endif

@ -96,7 +96,7 @@
// //
// Marlin now allow you to have a vendor boot image to be displayed on machine // 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 // 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 // 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 // boot image unmodified. For an example have a look at the bq Hephestos 2
@ -983,6 +983,10 @@
// |________|_________|_________| // |________|_________|_________|
// T1 T2 T3 // 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. // 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 // Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@ -1001,6 +1005,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)} #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (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 // Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK #define NOZZLE_CLEAN_GOBACK
#endif #endif

@ -96,7 +96,7 @@
// //
// Marlin now allow you to have a vendor boot image to be displayed on machine // 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 // 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 // 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 // boot image unmodified. For an example have a look at the bq Hephestos 2
@ -992,6 +992,10 @@
// |________|_________|_________| // |________|_________|_________|
// T1 T2 T3 // 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. // 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 // Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@ -1010,6 +1014,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)} #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (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 // Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK #define NOZZLE_CLEAN_GOBACK
#endif #endif

@ -96,7 +96,7 @@
// //
// Marlin now allow you to have a vendor boot image to be displayed on machine // 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 // 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 // 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 // boot image unmodified. For an example have a look at the bq Hephestos 2
@ -994,6 +994,10 @@
// |________|_________|_________| // |________|_________|_________|
// T1 T2 T3 // 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. // 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 // Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@ -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_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)} #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 // Moves the nozzle to the initial position
//#define NOZZLE_CLEAN_GOBACK //#define NOZZLE_CLEAN_GOBACK
#endif #endif

@ -112,7 +112,7 @@
// //
// Marlin now allow you to have a vendor boot image to be displayed on machine // 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 // 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 // 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 // boot image unmodified. For an example have a look at the bq Hephestos 2
@ -1029,6 +1029,10 @@
// |________|_________|_________| // |________|_________|_________|
// T1 T2 T3 // 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. // 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 // Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@ -1047,6 +1051,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)} #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (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 // Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK #define NOZZLE_CLEAN_GOBACK
#endif #endif

@ -96,7 +96,7 @@
// //
// Marlin now allow you to have a vendor boot image to be displayed on machine // 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 // 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 // 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 // boot image unmodified. For an example have a look at the bq Hephestos 2
@ -1000,6 +1000,10 @@
// |________|_________|_________| // |________|_________|_________|
// T1 T2 T3 // 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. // 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 // Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@ -1018,6 +1022,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)} #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (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 // Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK #define NOZZLE_CLEAN_GOBACK
#endif #endif

@ -96,7 +96,7 @@
// //
// Marlin now allow you to have a vendor boot image to be displayed on machine // 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 // 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 // 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 // boot image unmodified. For an example have a look at the bq Hephestos 2
@ -1000,6 +1000,10 @@
// |________|_________|_________| // |________|_________|_________|
// T1 T2 T3 // 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. // 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 // Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@ -1018,6 +1022,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)} #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (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 // Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK #define NOZZLE_CLEAN_GOBACK
#endif #endif

@ -96,7 +96,7 @@
// //
// Marlin now allow you to have a vendor boot image to be displayed on machine // 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 // 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 // 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 // boot image unmodified. For an example have a look at the bq Hephestos 2
@ -1000,6 +1000,10 @@
// |________|_________|_________| // |________|_________|_________|
// T1 T2 T3 // 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. // 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 // Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@ -1018,6 +1022,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)} #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (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 // Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK #define NOZZLE_CLEAN_GOBACK
#endif #endif

@ -96,7 +96,7 @@
// //
// Marlin now allow you to have a vendor boot image to be displayed on machine // 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 // 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 // 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 // boot image unmodified. For an example have a look at the bq Hephestos 2
@ -999,6 +999,10 @@
// |________|_________|_________| // |________|_________|_________|
// T1 T2 T3 // 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. // 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 // Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@ -1017,6 +1021,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)} #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (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 // Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK #define NOZZLE_CLEAN_GOBACK
#endif #endif

@ -128,7 +128,7 @@
// //
// Marlin now allow you to have a vendor boot image to be displayed on machine // 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 // 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 // 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 // boot image unmodified. For an example have a look at the bq Hephestos 2
@ -1015,6 +1015,10 @@
// |________|_________|_________| // |________|_________|_________|
// T1 T2 T3 // 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. // 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 // Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@ -1033,6 +1037,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)} #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (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 // Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK #define NOZZLE_CLEAN_GOBACK
#endif #endif

@ -96,7 +96,7 @@
// //
// Marlin now allow you to have a vendor boot image to be displayed on machine // 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 // 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 // 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 // boot image unmodified. For an example have a look at the bq Hephestos 2
@ -1021,6 +1021,10 @@
// |________|_________|_________| // |________|_________|_________|
// T1 T2 T3 // 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. // 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 // Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@ -1039,6 +1043,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)} #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (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 // Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK #define NOZZLE_CLEAN_GOBACK
#endif #endif

@ -96,7 +96,7 @@
// //
// Marlin now allow you to have a vendor boot image to be displayed on machine // 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 // 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 // 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 // boot image unmodified. For an example have a look at the bq Hephestos 2
@ -992,6 +992,10 @@
// |________|_________|_________| // |________|_________|_________|
// T1 T2 T3 // 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. // 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 // Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@ -1010,6 +1014,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)} #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (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 // Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK #define NOZZLE_CLEAN_GOBACK
#endif #endif

@ -96,7 +96,7 @@
// //
// Marlin now allow you to have a vendor boot image to be displayed on machine // 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 // 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 // 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 // boot image unmodified. For an example have a look at the bq Hephestos 2
@ -1000,6 +1000,10 @@
// |________|_________|_________| // |________|_________|_________|
// T1 T2 T3 // 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. // 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 // Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@ -1018,6 +1022,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)} #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (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 // Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK #define NOZZLE_CLEAN_GOBACK
#endif #endif

@ -1,53 +1,53 @@
/** /**
Marlin 3D Printer Firmware * Marlin 3D Printer Firmware
Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
Based on Sprinter and grbl. * Based on Sprinter and grbl.
Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
*
This program is free software: you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. * (at your option) any later version.
*
This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. * GNU General Public License for more details.
*
You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/ */
/** /**
Configuration.h * Configuration.h
*
Basic settings such as: * Basic settings such as:
*
- Type of electronics * - Type of electronics
- Type of temperature sensor * - Type of temperature sensor
- Printer geometry * - Printer geometry
- Endstop configuration * - Endstop configuration
- LCD controller * - LCD controller
- Extra features * - Extra features
*
Advanced settings can be found in Configuration_adv.h * Advanced settings can be found in Configuration_adv.h
*
*/ */
#ifndef CONFIGURATION_H #ifndef CONFIGURATION_H
#define CONFIGURATION_H #define CONFIGURATION_H
/** /**
*
* *********************************** * ***********************************
* ** ATTENTION TO ALL DEVELOPERS ** * ** ATTENTION TO ALL DEVELOPERS **
* *********************************** * ***********************************
*
You must increment this version number for every significant change such as, * You must increment this version number for every significant change such as,
but not limited to: ADD, DELETE RENAME OR REPURPOSE any directive/option. * but not limited to: ADD, DELETE RENAME OR REPURPOSE any directive/option.
*
Note: Update also Version.h ! * Note: Update also Version.h !
*/ */
#define CONFIGURATION_H_VERSION 010100 #define CONFIGURATION_H_VERSION 010100
@ -56,15 +56,15 @@
//=========================================================================== //===========================================================================
/** /**
Here are some standard links for getting your machine calibrated: * Here are some standard links for getting your machine calibrated:
*
http://reprap.org/wiki/Calibration * http://reprap.org/wiki/Calibration
http://youtu.be/wAL9d7FgInk * http://youtu.be/wAL9d7FgInk
http://calculator.josefprusa.cz * http://calculator.josefprusa.cz
http://reprap.org/wiki/Triffid_Hunter%27s_Calibration_Guide * http://reprap.org/wiki/Triffid_Hunter%27s_Calibration_Guide
http://www.thingiverse.com/thing:5573 * http://www.thingiverse.com/thing:5573
https://sites.google.com/site/repraplogphase/calibration-of-your-reprap * https://sites.google.com/site/repraplogphase/calibration-of-your-reprap
http://www.thingiverse.com/thing:298812 * http://www.thingiverse.com/thing:298812
*/ */
//=========================================================================== //===========================================================================
@ -106,21 +106,21 @@
// @section machine // @section machine
/** /**
Select which serial port on the board will be used for communication with the host. * 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. * 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. * Serial port 0 is always used by the Arduino bootloader regardless of this setting.
*
:[0, 1, 2, 3, 4, 5, 6, 7] * :[0, 1, 2, 3, 4, 5, 6, 7]
*/ */
#define SERIAL_PORT 0 #define SERIAL_PORT 0
/** /**
This setting determines the communication speed of the printer. * This setting determines the communication speed of the printer.
*
250000 works in most cases, but you might try a lower speed if * 250000 works in most cases, but you might try a lower speed if
you commonly experience drop-outs during host printing. * you commonly experience drop-outs during host printing.
*
:[2400, 9600, 19200, 38400, 57600, 115200, 250000] * :[2400, 9600, 19200, 38400, 57600, 115200, 250000]
*/ */
#define BAUDRATE 250000 #define BAUDRATE 250000
@ -161,12 +161,12 @@
#endif #endif
/** /**
"Mixing Extruder" * "Mixing Extruder"
- Adds a new code, M165, to set the current mix factors. * - Adds a new code, M165, to set the current mix factors.
- Extends the stepping routines to move multiple steppers in proportion to the mix. * - Extends the stepping routines to move multiple steppers in proportion to the mix.
- Optional support for Repetier Host M163, M164, and virtual extruder. * - Optional support for Repetier Host M163, M164, and virtual extruder.
- This implementation supports only a single extruder. * - This implementation supports only a single extruder.
- Enable DIRECT_MIXING_IN_G1 for Pia Taubert's reference implementation * - Enable DIRECT_MIXING_IN_G1 for Pia Taubert's reference implementation
*/ */
//#define MIXING_EXTRUDER //#define MIXING_EXTRUDER
#if ENABLED(MIXING_EXTRUDER) #if ENABLED(MIXING_EXTRUDER)
@ -182,13 +182,13 @@
//#define HOTEND_OFFSET_Y {0.0, 5.00} // (in mm) for each extruder, offset of the hotend on the Y axis //#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 * Select your power supply here. Use 0 if you haven't connected the PS_ON_PIN
*
0 = No Power Switch * 0 = No Power Switch
1 = ATX * 1 = ATX
2 = X-Box 360 203Watts (the blue wire connected to PS_ON and the red wire to VCC) * 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' } * :{ 0:'No power switch', 1:'ATX', 2:'X-Box 360' }
*/ */
#define POWER_SUPPLY 0 #define POWER_SUPPLY 0
@ -205,49 +205,49 @@
//=========================================================================== //===========================================================================
/** /**
--NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table * --NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table
*
Temperature sensors available: * Temperature sensors available:
*
-3 : thermocouple with MAX31855 (only for sensor 0) * -3 : thermocouple with MAX31855 (only for sensor 0)
-2 : thermocouple with MAX6675 (only for sensor 0) * -2 : thermocouple with MAX6675 (only for sensor 0)
-1 : thermocouple with AD595 * -1 : thermocouple with AD595
0 : not used * 0 : not used
1 : 100k thermistor - best choice for EPCOS 100k (4.7k pullup) * 1 : 100k thermistor - best choice for EPCOS 100k (4.7k pullup)
2 : 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup) * 2 : 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)
3 : Mendel-parts thermistor (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. !! * 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) * 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) * 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) * 7 : 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup)
71 : 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup) * 71 : 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup)
8 : 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) * 8 : 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup)
9 : 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup) * 9 : 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup)
10 : 100k RS thermistor 198-961 (4.7k pullup) * 10 : 100k RS thermistor 198-961 (4.7k pullup)
11 : 100k beta 3950 1% thermistor (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) * 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" * 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 * 20 : the PT100 circuit found in the Ultimainboard V2.x
60 : 100k Maker's Tool Works Kapton Bed Thermistor beta=3950 * 60 : 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
66 : 4.7M High Temperature thermistor from Dyze Design * 66 : 4.7M High Temperature thermistor from Dyze Design
70 : the 100K thermistor found in the bq Hephestos 2 * 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. * 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) * (but gives greater accuracy and more stable PID)
51 : 100k thermistor - EPCOS (1k pullup) * 51 : 100k thermistor - EPCOS (1k pullup)
52 : 200k thermistor - ATC Semitec 204GT-2 (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) * 55 : 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup)
*
1047 : Pt1000 with 4k7 pullup * 1047 : Pt1000 with 4k7 pullup
1010 : Pt1000 with 1k pullup (non standard) * 1010 : Pt1000 with 1k pullup (non standard)
147 : Pt100 with 4k7 pullup * 147 : Pt100 with 4k7 pullup
110 : Pt100 with 1k pullup (non standard) * 110 : Pt100 with 1k pullup (non standard)
*
Use these for Testing or Development purposes. NEVER for production machine. * Use these for Testing or Development purposes. NEVER for production machine.
998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below. * 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. * 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" } * :{ '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_0 1
#define TEMP_SENSOR_1 0 #define TEMP_SENSOR_1 0
@ -400,15 +400,15 @@
//=========================================================================== //===========================================================================
/** /**
Thermal Protection protects your printer from damage and fire if a * Thermal Protection protects your printer from damage and fire if a
thermistor falls out or temperature sensors fail in any way. * thermistor falls out or temperature sensors fail in any way.
*
The issue: If a thermistor falls out or a temperature sensor fails, * The issue: If a thermistor falls out or a temperature sensor fails,
Marlin can no longer sense the actual temperature. Since a disconnected * Marlin can no longer sense the actual temperature. Since a disconnected
thermistor reads as a low temperature, the firmware will keep the heater on. * thermistor reads as a low temperature, the firmware will keep the heater on.
*
If you get "Thermal Runaway" or "Heating failed" errors the * If you get "Thermal Runaway" or "Heating failed" errors the
details can be tuned in Configuration_adv.h * details can be tuned in Configuration_adv.h
*/ */
#define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders
@ -516,7 +516,7 @@
#define X_MAX_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop. #define X_MAX_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
#define Y_MAX_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop. #define 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_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. // 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. // This will remove the need to poll the interrupt pins, saving many CPU cycles.
@ -529,56 +529,57 @@
// delta speeds must be the same on xyz // delta speeds must be the same on xyz
/** /**
Default Settings * Default Settings
*
These settings can be reset by M502 * These settings can be reset by M502
*
You can set distinct factors for each E stepper, if needed. * You can set distinct factors for each E stepper, if needed.
If fewer factors are given, the last will apply to the rest. * If fewer factors are given, the last will apply to the rest.
*
Note that if EEPROM is enabled, saved values will override these. * Note that if EEPROM is enabled, saved values will override these.
*/ */
/** /**
Default Axis Steps Per Unit (steps/mm) * Default Axis Steps Per Unit (steps/mm)
Override with M92 * Override with M92
X, Y, Z, E0 [, E1[, E2[, E3]]] * 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) #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) * Default Max Feed Rate (mm/s)
Override with M203 * Override with M203
X, Y, Z, E0 [, E1[, E2[, E3]]] * X, Y, Z, E0 [, E1[, E2[, E3]]]
*/ */
#define DEFAULT_MAX_FEEDRATE { 200, 200, 200, 200 } #define DEFAULT_MAX_FEEDRATE { 200, 200, 200, 200 }
/** /**
Default Max Acceleration (change/s) change = mm/s * Default Max Acceleration (change/s) change = mm/s
(Maximum start speed for accelerated moves) * (Maximum start speed for accelerated moves)
Override with M201 * Override with M201
X, Y, Z, E0 [, E1[, E2[, E3]]] * X, Y, Z, E0 [, E1[, E2[, E3]]]
*/ */
#define DEFAULT_MAX_ACCELERATION { 4000, 4000, 4000, 4000 } #define DEFAULT_MAX_ACCELERATION { 4000, 4000, 4000, 4000 }
/** /**
Default Acceleration (change/s) change = mm/s * Default Acceleration (change/s) change = mm/s
Override with M204 * Override with M204
*
M204 P Acceleration * M204 P Acceleration
M204 R Retract Acceleration * M204 R Retract Acceleration
M204 T Travel Acceleration * M204 T Travel Acceleration
*/ */
#define DEFAULT_ACCELERATION 2500 // X, Y, Z and E acceleration for printing moves #define DEFAULT_ACCELERATION 2500 // X, Y, Z and E acceleration for printing moves
#define DEFAULT_RETRACT_ACCELERATION 3000 // E acceleration for retracts #define DEFAULT_RETRACT_ACCELERATION 3000 // E acceleration for retracts
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves #define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
/** /**
Default Jerk (mm/s) * 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 * "Jerk" specifies the minimum speed change that requires acceleration.
value set here, it may happen instantaneously. * 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_XJERK 20.0
#define DEFAULT_YJERK DEFAULT_XJERK #define DEFAULT_YJERK DEFAULT_XJERK
@ -744,18 +745,18 @@
#define Z_MIN_PROBE_REPEATABILITY_TEST #define Z_MIN_PROBE_REPEATABILITY_TEST
/** /**
Z probes require clearance when deploying, stowing, and moving between * Z probes require clearance when deploying, stowing, and moving between
probe points to avoid hitting the bed and other hardware. * probe points to avoid hitting the bed and other hardware.
Servo-mounted probes require extra space for the arm to rotate. * Servo-mounted probes require extra space for the arm to rotate.
Inductive probes need space to keep from triggering early. * Inductive probes need space to keep from triggering early.
*
Use these settings to specify the distance (mm) to raise the probe (or * 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) * 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. * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD.
Only integer values >= 1 are valid here. * Only integer values >= 1 are valid here.
*
Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. * 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. * 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_DEPLOY_PROBE 50 // Z Clearance for Deploy/Stow
#define Z_CLEARANCE_BETWEEN_PROBES 5 // Z Clearance between probe points #define Z_CLEARANCE_BETWEEN_PROBES 5 // Z Clearance between probe points
@ -826,13 +827,15 @@
#define Y_MAX_POS DELTA_PRINTABLE_RADIUS #define Y_MAX_POS DELTA_PRINTABLE_RADIUS
#define Z_MAX_POS MANUAL_Z_HOME_POS #define Z_MAX_POS MANUAL_Z_HOME_POS
//=========================================================================== /**
//========================= Filament Runout Sensor ========================== * Filament Runout Sensor
//=========================================================================== * A mechanical or opto endstop is used to check for the presence of filament.
//#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. * RAMPS-based boards use SERVO3_PIN.
// It is assumed that when logic high = filament available * For other boards you may need to define FIL_RUNOUT_PIN.
// when logic low = filament ran out * By default the firmware assumes HIGH = has filament, LOW = ran out
*/
//#define FILAMENT_RUNOUT_SENSOR
#if ENABLED(FILAMENT_RUNOUT_SENSOR) #if ENABLED(FILAMENT_RUNOUT_SENSOR)
#define FIL_RUNOUT_INVERTING false // set to true to invert the logic of the 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 ENDSTOPPULLUP_FIL_RUNOUT // Uncomment to use internal pullup for filament runout pins if the sensor is defined.
@ -852,9 +855,9 @@
#define MESH_NUM_Y_POINTS 3 #define MESH_NUM_Y_POINTS 3
#define MESH_HOME_SEARCH_Z 4 // Z after Home, bed somewhere below but above 0.0. #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) #if ENABLED(MANUAL_BED_LEVELING)
#define MBL_Z_STEP 0.025 // Step size while manually probing Z axis. #define MBL_Z_STEP 0.025 // Step size while manually probing Z axis.
@ -873,41 +876,40 @@
// @section bedlevel // @section bedlevel
/** /**
Select one form of Auto Bed Leveling below. * Select one form of Auto Bed Leveling below.
*
If you're also using the Probe for Z Homing, it's * If you're also using the Probe for Z Homing, it's
highly recommended to enable Z_SAFE_HOMING also! * highly recommended to enable Z_SAFE_HOMING also!
*
- 3POINT * - 3POINT
Probe 3 arbitrary points on the bed (that aren't collinear) * Probe 3 arbitrary points on the bed (that aren't collinear)
You specify the XY coordinates of all 3 points. * You specify the XY coordinates of all 3 points.
The result is a single tilted plane. Best for a flat bed. * The result is a single tilted plane. Best for a flat bed.
*
- LINEAR * - LINEAR
Probe several points in a grid. * Probe several points in a grid.
You specify the rectangle and the density of sample points. * You specify the rectangle and the density of sample points.
The result is a single tilted plane. Best for a flat bed. * The result is a single tilted plane. Best for a flat bed.
*
- BILINEAR * - BILINEAR
Probe several points in a grid. * Probe several points in a grid.
You specify the rectangle and the density of sample points. * You specify the rectangle and the density of sample points.
The result is a mesh, best for large or uneven beds. * 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_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_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. #define AUTO_BED_LEVELING_BILINEAR // Only AUTO_BED_LEVELING_BILINEAR is supported for DELTA bed leveling.
/** /**
Enable detailed logging of G28, G29, M48, etc. * Enable detailed logging of G28, G29, M48, etc.
Turn on with the command 'M111 S32'. * Turn on with the command 'M111 S32'.
NOTE: Requires a lot of PROGMEM! * NOTE: Requires a lot of PROGMEM!
*/ */
//#define DEBUG_LEVELING_FEATURE //#define DEBUG_LEVELING_FEATURE
#if ENABLED(AUTO_BED_LEVELING_LINEAR) || ENABLED(AUTO_BED_LEVELING_BILINEAR) #if ENABLED(AUTO_BED_LEVELING_LINEAR) || ENABLED(AUTO_BED_LEVELING_BILINEAR)
// Set the number of grid points per dimension. // 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_X 9
#define ABL_GRID_MAX_POINTS_Y ABL_GRID_MAX_POINTS_X #define ABL_GRID_MAX_POINTS_Y ABL_GRID_MAX_POINTS_X
@ -957,8 +959,8 @@
#endif #endif
/** /**
Commands to execute at the end of G29 probing. * Commands to execute at the end of G29 probing.
Useful to retract or move the Z probe out of the way. * 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" //#define Z_PROBE_END_SCRIPT "G1 Z10 F12000\nG1 X15 Y330\nG1 Z0.5\nG1 Z10"
@ -982,7 +984,7 @@
// - If stepper drivers time out, it will need X and Y homing again before Z homing. // - 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). // - 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. // - 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) #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_X_POINT ((X_MIN_POS + X_MAX_POS) / 2) // X point for Z homing when homing all axis (G28).
@ -1082,13 +1084,13 @@
// //
// Available list of patterns: // Available list of patterns:
// P0: This is the default pattern, this process requires a sponge type // P0: This is the default pattern, this process requires a sponge type
// material at a fixed bed location, the cleaning process is based on // material at a fixed bed location. S defines "strokes" i.e.
// "strokes" i.e. back-and-forth movements between the starting and end // back-and-forth movements between the starting and end points.
// points.
// //
// P1: This starts a zig-zag pattern between (X0, Y0) and (X1, Y1), "T" // 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 // 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: // sending "G12 P1 S1 T3" will execute:
// //
// -- // --
@ -1101,6 +1103,10 @@
// |________|_________|_________| // |________|_________|_________|
// T1 T2 T3 // 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. // 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 // Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@ -1109,13 +1115,23 @@
//#define NOZZLE_CLEAN_FEATURE //#define NOZZLE_CLEAN_FEATURE
#if ENABLED(NOZZLE_CLEAN_FEATURE) #if ENABLED(NOZZLE_CLEAN_FEATURE)
// Number of pattern repetitions // Default number of pattern repetitions
#define NOZZLE_CLEAN_STROKES 12 #define NOZZLE_CLEAN_STROKES 12
// Default number of triangles
#define NOZZLE_CLEAN_TRIANGLES 3
// Specify positions as { X, Y, Z } // Specify positions as { X, Y, Z }
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)} #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (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 // Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK #define NOZZLE_CLEAN_GOBACK
#endif #endif
@ -1201,7 +1217,7 @@
// IMPORTANT NOTE: The U8glib library is required for Full Graphic Display! // IMPORTANT NOTE: The U8glib library is required for Full Graphic Display!
// https://github.com/olikraus/U8glib_Arduino // https://github.com/olikraus/U8glib_Arduino
// //
#define ULTRA_LCD // Character based //#define ULTRA_LCD // Character based
//#define DOGLCD // Full graphics display //#define DOGLCD // Full graphics display
// //
@ -1244,13 +1260,13 @@
//#define ENCODER_STEPS_PER_MENU_ITEM 5 //#define ENCODER_STEPS_PER_MENU_ITEM 5
/** /**
Encoder Direction Options * Encoder Direction Options
*
Test your encoder's behavior first with both options disabled. * Test your encoder's behavior first with both options disabled.
*
Reversed Value Edit and Menu Nav? Enable REVERSE_ENCODER_DIRECTION. * Reversed Value Edit and Menu Nav? Enable REVERSE_ENCODER_DIRECTION.
Reversed Menu Navigation only? Enable REVERSE_MENU_DIRECTION. * Reversed Menu Navigation only? Enable REVERSE_MENU_DIRECTION.
Reversed Value Editing only? Enable BOTH options. * Reversed Value Editing only? Enable BOTH options.
*/ */
// //
@ -1509,8 +1525,8 @@
#endif #endif
/*********************************************************************\ /*********************************************************************\
R/C SERVO support * R/C SERVO support
Sponsored by TrinityLabs, Reworked by codexmas * Sponsored by TrinityLabs, Reworked by codexmas
**********************************************************************/ **********************************************************************/
// Number of servos // Number of servos
@ -1522,7 +1538,7 @@
// //
//#define NUM_SERVOS 3 // Servo index starts with 0 for M280 command //#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. // 300ms is a good value but you can try less delay.
// If the servo can't reach the requested position, increase it. // If the servo can't reach the requested position, increase it.
#define SERVO_DELAY 300 #define SERVO_DELAY 300
@ -1533,15 +1549,15 @@
//#define DEACTIVATE_SERVOS_AFTER_MOVE //#define DEACTIVATE_SERVOS_AFTER_MOVE
/**********************************************************************\ /**********************************************************************\
Support for a filament diameter sensor * Support for a filament diameter sensor
Also allows adjustment of diameter at print time (vs at slicing) * Also allows adjustment of diameter at print time (vs at slicing)
Single extruder only at this point (extruder 0) * Single extruder only at this point (extruder 0)
*
Motherboards * Motherboards
34 - RAMPS1.4 - uses Analog input 5 on the AUX2 connector * 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) * 81 - Printrboard - Uses Analog input 2 on the Exp1 connector (version B,C,D,E)
301 - Rambo - uses Analog input 3 * 301 - Rambo - uses Analog input 3
Note may require analog pins to be defined for different motherboards * Note may require analog pins to be defined for different motherboards
**********************************************************************/ **********************************************************************/
// Uncomment below to enable // Uncomment below to enable
//#define FILAMENT_WIDTH_SENSOR //#define FILAMENT_WIDTH_SENSOR

@ -217,13 +217,12 @@
* Multiple extruders can be assigned to the same pin in which case * 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. * the fan will turn on when any selected extruder is above the threshold.
*/ */
#define E0_AUTO_FAN_PIN -1 #define E0_AUTO_FAN_PIN -1
#define E1_AUTO_FAN_PIN -1 #define E1_AUTO_FAN_PIN -1
#define E2_AUTO_FAN_PIN -1 #define E2_AUTO_FAN_PIN -1
#define E3_AUTO_FAN_PIN -1 #define E3_AUTO_FAN_PIN -1
#define EXTRUDER_AUTO_FAN_TEMPERATURE 50 #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 a pin to turn case light on/off
//#define CASE_LIGHT_PIN 4 //#define CASE_LIGHT_PIN 4
@ -309,11 +308,11 @@
// Remember: you should set the second extruder x-offset to 0 in your slicer. // 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> // There are a few selectable movement modes for dual x-carriages using M605 S<mode>
// Mode 0: Full control. The slicer has full control over both x-carriages and can achieve optimal travel results // 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) // 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 // 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) // 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 // 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 // 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]) // once. (2nd extruder x offset and temp offset are set using: M605 S2 [Xnnn] [Rmmm])
@ -428,6 +427,9 @@
// On the Info Screen, display XY with one decimal place when possible // On the Info Screen, display XY with one decimal place when possible
//#define LCD_DECIMAL_SMALL_XY //#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) #if ENABLED(SDSUPPORT)
// Some RAMPS and other boards don't detect when an SD card is inserted. You can work // Some RAMPS and other boards don't detect when an SD card is inserted. You can work
@ -445,6 +447,42 @@
// using: // using:
//#define MENU_ADDAUTOSTART //#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 // Show a progress bar on HD44780 LCDs for SD printing
//#define LCD_PROGRESS_BAR //#define LCD_PROGRESS_BAR
@ -457,6 +495,8 @@
#define PROGRESS_MSG_EXPIRE 0 #define PROGRESS_MSG_EXPIRE 0
// Enable this to show messages for MSG_TIME then hide them // Enable this to show messages for MSG_TIME then hide them
//#define PROGRESS_MSG_ONCE //#define PROGRESS_MSG_ONCE
// Add a menu item to test the progress bar:
//#define LCD_PROGRESS_BAR_TEST
#endif #endif
// This allows hosts to request long names for files and folders with M33 // This allows hosts to request long names for files and folders with M33
@ -469,8 +509,25 @@
#endif // SDSUPPORT #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) #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. // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM.
// Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
//#define USE_BIG_EDIT_FONT //#define USE_BIG_EDIT_FONT
@ -510,36 +567,6 @@
#define BABYSTEP_MULTIPLICATOR 1 //faster movements #define BABYSTEP_MULTIPLICATOR 1 //faster movements
#endif #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 // @section extruder
// extruder advance constant (s2/mm3) // extruder advance constant (s2/mm3)
@ -561,19 +588,37 @@
* *
* Assumption: advance = k * (delta velocity) * Assumption: advance = k * (delta velocity)
* K=0 means advance disabled. * K=0 means advance disabled.
* To get a rough start value for calibration, measure your "free filament length" * See Marlin documentation for calibration instructions.
* 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 |
*/ */
//#define LIN_ADVANCE //#define LIN_ADVANCE
#if ENABLED(LIN_ADVANCE) #if ENABLED(LIN_ADVANCE)
#define LIN_ADVANCE_K 75 #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 #endif
// @section leveling // @section leveling
@ -680,33 +725,42 @@
#define RETRACT_RECOVER_FEEDRATE 8 //default feedrate for recovering from retraction (mm/s) #define RETRACT_RECOVER_FEEDRATE 8 //default feedrate for recovering from retraction (mm/s)
#endif #endif
// Add support for experimental filament exchange support M600; requires display /**
#if ENABLED(ULTIPANEL) * Filament Change
// #define FILAMENT_CHANGE_FEATURE // Enable filament exchange menu and M600 g-code (used for runout sensor too) * 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) #if ENABLED(FILAMENT_CHANGE_FEATURE)
#define FILAMENT_CHANGE_X_POS 3 // X position of hotend #define FILAMENT_CHANGE_X_POS 3 // X position of hotend
#define FILAMENT_CHANGE_Y_POS 3 // Y 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_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_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_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 #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 // 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_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 #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, // Longer length for bowden printers to unload filament from whole bowden tube,
// shorter lenght for printers without bowden to unload filament from extruder only, // shorter length for printers without bowden to unload filament from extruder only,
// 0 to disable unloading for manual unloading // 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_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 #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, // 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 // 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_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 load over the hotend, #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend,
// 0 to disable for manual extrusion // 0 to disable for manual extrusion
// Filament can be extruded repeatedly from the filament exchange menu to fill the hotend, // 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 // 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 #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L // Turn off nozzle if user doesn't change filament within this time limit in seconds
#endif #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 #endif
/******************************************************************************\ /******************************************************************************\
@ -1101,4 +1155,29 @@
*/ */
//#define EXTENDED_CAPABILITIES_REPORT //#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 #endif // CONFIGURATION_ADV_H

@ -96,7 +96,7 @@
// //
// Marlin now allow you to have a vendor boot image to be displayed on machine // 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 // 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 // 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 // boot image unmodified. For an example have a look at the bq Hephestos 2
@ -1087,6 +1087,10 @@
// |________|_________|_________| // |________|_________|_________|
// T1 T2 T3 // 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. // 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 // Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@ -1105,6 +1109,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)} #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (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 // Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK #define NOZZLE_CLEAN_GOBACK
#endif #endif

@ -96,7 +96,7 @@
// //
// Marlin now allow you to have a vendor boot image to be displayed on machine // 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 // 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 // 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 // boot image unmodified. For an example have a look at the bq Hephestos 2
@ -1090,6 +1090,10 @@
// |________|_________|_________| // |________|_________|_________|
// T1 T2 T3 // 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. // 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 // Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@ -1108,6 +1112,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)} #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (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 // Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK #define NOZZLE_CLEAN_GOBACK
#endif #endif

@ -100,7 +100,7 @@
// //
// Marlin now allow you to have a vendor boot image to be displayed on machine // 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 // 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 // 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 // boot image unmodified. For an example have a look at the bq Hephestos 2
@ -1089,6 +1089,10 @@
// |________|_________|_________| // |________|_________|_________|
// T1 T2 T3 // 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. // 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 // Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@ -1107,6 +1111,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)} #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (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 // Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK #define NOZZLE_CLEAN_GOBACK
#endif #endif

@ -89,7 +89,7 @@
// //
// Marlin now allow you to have a vendor boot image to be displayed on machine // 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 // 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 // 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 // boot image unmodified. For an example have a look at the bq Hephestos 2
@ -1093,6 +1093,10 @@
// |________|_________|_________| // |________|_________|_________|
// T1 T2 T3 // 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. // 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 // Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@ -1111,6 +1115,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)} #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (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 // Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK #define NOZZLE_CLEAN_GOBACK
#endif #endif

@ -96,7 +96,7 @@
// //
// Marlin now allow you to have a vendor boot image to be displayed on machine // 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 // 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 // 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 // boot image unmodified. For an example have a look at the bq Hephestos 2
@ -1003,6 +1003,10 @@
// |________|_________|_________| // |________|_________|_________|
// T1 T2 T3 // 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. // 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 // Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@ -1021,6 +1025,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)} #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (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 // Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK #define NOZZLE_CLEAN_GOBACK
#endif #endif

@ -96,7 +96,7 @@
// //
// Marlin now allow you to have a vendor boot image to be displayed on machine // 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 // 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 // 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 // boot image unmodified. For an example have a look at the bq Hephestos 2
@ -996,6 +996,10 @@
// |________|_________|_________| // |________|_________|_________|
// T1 T2 T3 // 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. // 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 // Attention: This is an EXPERIMENTAL feature, in the future the G-code arguments
@ -1014,6 +1018,13 @@
#define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)} #define NOZZLE_CLEAN_START_POINT { 30, 30, (Z_MIN_POS + 1)}
#define NOZZLE_CLEAN_END_POINT {100, 60, (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 // Moves the nozzle to the initial position
#define NOZZLE_CLEAN_GOBACK #define NOZZLE_CLEAN_GOBACK
#endif #endif

@ -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
}

@ -53,40 +53,11 @@ class Nozzle {
__attribute__((unused)) point_t const &start, __attribute__((unused)) point_t const &start,
__attribute__((unused)) point_t const &end, __attribute__((unused)) point_t const &end,
__attribute__((unused)) uint8_t const &strokes __attribute__((unused)) uint8_t const &strokes
) __attribute__((optimize ("Os"))) { ) __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
}
/** /**
* @brief Zig-zag clean pattern * @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 start point_t defining the starting point
* @param end point_t defining the ending point * @param end point_t defining the ending point
@ -98,49 +69,22 @@ class Nozzle {
__attribute__((unused)) point_t const &end, __attribute__((unused)) point_t const &end,
__attribute__((unused)) uint8_t const &strokes, __attribute__((unused)) uint8_t const &strokes,
__attribute__((unused)) uint8_t const &objects __attribute__((unused)) uint8_t const &objects
) __attribute__((optimize ("Os"))) { ) __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
// 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: public:
/** /**
@ -153,54 +97,13 @@ class Nozzle {
static void clean( static void clean(
__attribute__((unused)) uint8_t const &pattern, __attribute__((unused)) uint8_t const &pattern,
__attribute__((unused)) uint8_t const &strokes, __attribute__((unused)) uint8_t const &strokes,
__attribute__((unused)) float const &radius,
__attribute__((unused)) uint8_t const &objects = 0 __attribute__((unused)) uint8_t const &objects = 0
) __attribute__((optimize ("Os"))) { ) __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
}
static void park( static void park(
__attribute__((unused)) uint8_t const &z_action __attribute__((unused)) uint8_t const &z_action
) __attribute__((optimize ("Os"))) { ) __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
}
}; };
#endif #endif

Loading…
Cancel
Save