Unify M600 and M125 pause features (#6407)

* Unify M600 and M125 pause features
* Cleanup per thinkyhead's comments
* Rename filament_change_menu_response to advanced_pause_menu_response
* Include HAS_BED_PROBE in QUIET_PROBING
* Update gMax example file
* is_idle() is out of scope without the braces
* Convert FT-i3-2020 to Advance Pause names...
* Allow pause even if not printing
master
Thomas Moore 8 years ago committed by Roxy-3D
parent 73ed0c63b4
commit fb5e0ffe16

@ -652,7 +652,7 @@
#if FAN_COUNT == 0 #if FAN_COUNT == 0
#undef PROBING_FANS_OFF #undef PROBING_FANS_OFF
#endif #endif
#define QUIET_PROBING (ENABLED(PROBING_HEATERS_OFF) || ENABLED(PROBING_FANS_OFF)) #define QUIET_PROBING (HAS_BED_PROBE && (ENABLED(PROBING_HEATERS_OFF) || ENABLED(PROBING_FANS_OFF)))
/** /**
* Servos and probes * Servos and probes

@ -763,22 +763,23 @@
#endif #endif
/** /**
* Filament Change * Advanced Pause
* Experimental filament change support. * Experimental feature for filament change support and for parking the nozzle when paused.
* Adds the GCode M600 for initiating filament change. * Adds the GCode M600 for initiating filament change.
* If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
* *
* Requires an LCD display. * Requires an LCD display.
* This feature is required for the default FILAMENT_RUNOUT_SCRIPT. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
*/ */
//#define FILAMENT_CHANGE_FEATURE //#define ADVANCED_PAUSE_FEATURE
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
#define FILAMENT_CHANGE_X_POS 3 // X position of hotend #define PAUSE_PARK_X_POS 3 // X position of hotend
#define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend #define PAUSE_PARK_Y_POS 3 // Y position of hotend
#define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) #define PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm #define PAUSE_PARK_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_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast #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
@ -789,14 +790,14 @@
#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_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, #define ADVANCED_PAUSE_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_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds
#define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
#define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change
// even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME. // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
//#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume
#endif #endif

@ -48,7 +48,7 @@
#endif #endif
void idle( void idle(
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
bool no_stepper_sleep = false // pass true to keep steppers from disabling on timeout bool no_stepper_sleep = false // pass true to keep steppers from disabling on timeout
#endif #endif
); );
@ -369,8 +369,8 @@ extern float soft_endstop_min[XYZ], soft_endstop_max[XYZ];
extern int meas_delay_cm; // Delay distance extern int meas_delay_cm; // Delay distance
#endif #endif
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
extern FilamentChangeMenuResponse filament_change_menu_response; extern AdvancedPauseMenuResponse advanced_pause_menu_response;
#endif #endif
#if ENABLED(PID_EXTRUSION_SCALING) #if ENABLED(PID_EXTRUSION_SCALING)

@ -195,7 +195,7 @@
* M502 - Revert to the default "factory settings". ** Does not write them to EEPROM! ** * M502 - Revert to the default "factory settings". ** Does not write them to EEPROM! **
* M503 - Print the current settings (in memory): "M503 S<verbose>". S0 specifies compact output. * M503 - Print the current settings (in memory): "M503 S<verbose>". S0 specifies compact output.
* M540 - Enable/disable SD card abort on endstop hit: "M540 S<state>". (Requires ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED) * M540 - Enable/disable SD card abort on endstop hit: "M540 S<state>". (Requires ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED)
* M600 - Pause for filament change: "M600 X<pos> Y<pos> Z<raise> E<first_retract> L<later_retract>". (Requires FILAMENT_CHANGE_FEATURE) * M600 - Pause for filament change: "M600 X<pos> Y<pos> Z<raise> E<first_retract> L<later_retract>". (Requires ADVANCED_PAUSE_FEATURE)
* M665 - Set delta configurations: "M665 L<diagonal rod> R<delta radius> S<segments/s> A<rod A trim mm> B<rod B trim mm> C<rod C trim mm> I<tower A trim angle> J<tower B trim angle> K<tower C trim angle>" (Requires DELTA) * M665 - Set delta configurations: "M665 L<diagonal rod> R<delta radius> S<segments/s> A<rod A trim mm> B<rod B trim mm> C<rod C trim mm> I<tower A trim angle> J<tower B trim angle> K<tower C trim angle>" (Requires DELTA)
* M666 - Set delta endstop adjustment. (Requires DELTA) * M666 - Set delta endstop adjustment. (Requires DELTA)
* M605 - Set dual x-carriage movement mode: "M605 S<mode> [X<x_offset>] [R<temp_offset>]". (Requires DUAL_X_CARRIAGE) * M605 - Set dual x-carriage movement mode: "M605 S<mode> [X<x_offset>] [R<temp_offset>]". (Requires DUAL_X_CARRIAGE)
@ -627,8 +627,8 @@ float cartes[XYZ] = { 0 };
static bool filament_ran_out = false; static bool filament_ran_out = false;
#endif #endif
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
FilamentChangeMenuResponse filament_change_menu_response; AdvancedPauseMenuResponse advanced_pause_menu_response;
#endif #endif
#if ENABLED(MIXING_EXTRUDER) #if ENABLED(MIXING_EXTRUDER)
@ -5738,14 +5738,244 @@ inline void gcode_M17() {
#define RUNPLAN(RATE_MM_S) line_to_destination(RATE_MM_S) #define RUNPLAN(RATE_MM_S) line_to_destination(RATE_MM_S)
#endif #endif
#if ENABLED(PARK_HEAD_ON_PAUSE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
static float resume_position[XYZE];
static bool move_away_flag = false;
#if ENABLED(SDSUPPORT)
static bool sd_print_paused = false;
#endif
static void filament_change_beep(const int max_beep_count, const bool init=false) {
static millis_t next_buzz = 0;
static uint16_t runout_beep = 0;
if (init) next_buzz = runout_beep = 0;
const millis_t ms = millis();
if (ELAPSED(ms, next_buzz)) {
if (max_beep_count < 0 || runout_beep < max_beep_count + 5) { // Only beep as long as we're supposed to
next_buzz = ms + ((max_beep_count < 0 || runout_beep < max_beep_count) ? 2500 : 400);
BUZZ(300, 2000);
runout_beep++;
}
}
}
static bool pause_print(const float& retract, const float& z_lift, const float& x_pos, const float& y_pos,
const float& unload_length = 0 , int max_beep_count = 0, bool show_lcd = false) {
if (move_away_flag) return false; // already paused
if (!DEBUGGING(DRYRUN) && thermalManager.tooColdToExtrude(active_extruder) && unload_length > 0) {
SERIAL_ERROR_START;
SERIAL_ERRORLNPGM(MSG_TOO_COLD_FOR_M600);
return false;
}
const bool job_running = print_job_timer.isRunning();
// Indicate that the printer is paused
move_away_flag = true;
// Pause the print job and timer
#if ENABLED(SDSUPPORT)
if (card.sdprinting) {
card.pauseSDPrint();
sd_print_paused = true;
}
#endif
print_job_timer.pause();
// Show initial message and wait for synchronize steppers
if (show_lcd) {
#if ENABLED(ULTIPANEL)
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INIT);
#endif
}
stepper.synchronize();
// Save current position
COPY(resume_position, current_position);
set_destination_to_current();
// Initial retract before move to filament change position
destination[E_AXIS] += retract;
RUNPLAN(PAUSE_PARK_RETRACT_FEEDRATE);
// Lift Z axis
if (z_lift > 0) {
destination[Z_AXIS] += z_lift;
NOMORE(destination[Z_AXIS], Z_MAX_POS);
RUNPLAN(PAUSE_PARK_Z_FEEDRATE);
}
// Move XY axes to filament exchange position
destination[X_AXIS] = x_pos;
destination[Y_AXIS] = y_pos;
clamp_to_software_endstops(destination);
RUNPLAN(PAUSE_PARK_XY_FEEDRATE);
stepper.synchronize();
if (unload_length != 0) {
if (show_lcd) {
#if ENABLED(ULTIPANEL)
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_UNLOAD);
idle();
#endif
}
// Unload filament
destination[E_AXIS] += unload_length;
RUNPLAN(FILAMENT_CHANGE_UNLOAD_FEEDRATE);
stepper.synchronize();
if (show_lcd) {
#if ENABLED(ULTIPANEL)
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INSERT);
#endif
}
#if HAS_BUZZER
filament_change_beep(max_beep_count, true);
#endif
idle();
}
// Disable extruders steppers for manual filament changing
disable_e_steppers();
safe_delay(100);
// Start the heater idle timers
const millis_t nozzle_timeout = (millis_t)(PAUSE_PARK_NOZZLE_TIMEOUT) * 1000UL;
HOTEND_LOOP()
thermalManager.start_heater_idle_timer(e, nozzle_timeout);
return true;
}
static void wait_for_filament_reload(int max_beep_count = 0) {
bool nozzle_timed_out = false;
// Wait for filament insert by user and press button
KEEPALIVE_STATE(PAUSED_FOR_USER);
wait_for_user = true; // LCD click or M108 will clear this
while (wait_for_user) {
#if HAS_BUZZER
filament_change_beep(max_beep_count);
#endif
float resume_position[XYZE]; if (!nozzle_timed_out)
bool move_away_flag = false; HOTEND_LOOP()
nozzle_timed_out |= thermalManager.is_heater_idle(e);
#if ENABLED(ULTIPANEL)
if (nozzle_timed_out)
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_CLICK_TO_HEAT_NOZZLE);
#endif
idle(true);
}
KEEPALIVE_STATE(IN_HANDLER);
}
static void resume_print(const float& load_length = 0, const float& initial_extrude_length = 0, int max_beep_count = 0) {
bool nozzle_timed_out = false;
inline void move_back_on_resume() {
if (!move_away_flag) return; if (!move_away_flag) return;
move_away_flag = false;
// Re-enable the heaters if they timed out
HOTEND_LOOP() {
nozzle_timed_out |= thermalManager.is_heater_idle(e);
thermalManager.reset_heater_idle_timer(e);
}
#if ENABLED(ULTIPANEL)
// Show "wait for heating"
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_WAIT_FOR_NOZZLES_TO_HEAT);
#endif
wait_for_heatup = true;
while (wait_for_heatup) {
idle();
wait_for_heatup = false;
HOTEND_LOOP() {
if (abs(thermalManager.degHotend(e) - thermalManager.degTargetHotend(e)) > 3) {
wait_for_heatup = true;
break;
}
}
}
#if HAS_BUZZER
filament_change_beep(max_beep_count, true);
#endif
if (load_length != 0) {
#if ENABLED(ULTIPANEL)
// Show "insert filament"
if (nozzle_timed_out)
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INSERT);
#endif
KEEPALIVE_STATE(PAUSED_FOR_USER);
wait_for_user = true; // LCD click or M108 will clear this
while (wait_for_user && nozzle_timed_out) {
#if HAS_BUZZER
filament_change_beep(max_beep_count);
#endif
idle(true);
}
KEEPALIVE_STATE(IN_HANDLER);
#if ENABLED(ULTIPANEL)
// Show "load" message
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_LOAD);
#endif
// Load filament
destination[E_AXIS] += load_length;
RUNPLAN(FILAMENT_CHANGE_LOAD_FEEDRATE);
stepper.synchronize();
}
#if ENABLED(ULTIPANEL) && defined(ADVANCED_PAUSE_EXTRUDE_LENGTH) && ADVANCED_PAUSE_EXTRUDE_LENGTH > 0
float extrude_length = initial_extrude_length;
do {
if (extrude_length > 0) {
// "Wait for filament extrude"
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_EXTRUDE);
// Extrude filament to get into hotend
destination[E_AXIS] += extrude_length;
RUNPLAN(ADVANCED_PAUSE_EXTRUDE_FEEDRATE);
stepper.synchronize();
}
// Show "Extrude More" / "Resume" menu and wait for reply
KEEPALIVE_STATE(PAUSED_FOR_USER);
wait_for_user = false;
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_OPTION);
while (advanced_pause_menu_response == ADVANCED_PAUSE_RESPONSE_WAIT_FOR) idle(true);
KEEPALIVE_STATE(IN_HANDLER);
extrude_length = ADVANCED_PAUSE_EXTRUDE_LENGTH;
// Keep looping if "Extrude More" was selected
} while (advanced_pause_menu_response == ADVANCED_PAUSE_RESPONSE_EXTRUDE_MORE);
#endif
#if ENABLED(ULTIPANEL)
// "Wait for print to resume"
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_RESUME);
#endif
// Set extruder to saved position // Set extruder to saved position
destination[E_AXIS] = current_position[E_AXIS] = resume_position[E_AXIS]; destination[E_AXIS] = current_position[E_AXIS] = resume_position[E_AXIS];
@ -5753,24 +5983,38 @@ inline void gcode_M17() {
#if IS_KINEMATIC #if IS_KINEMATIC
// Move XYZ to starting position // Move XYZ to starting position
planner.buffer_line_kinematic(lastpos, FILAMENT_CHANGE_XY_FEEDRATE, active_extruder); planner.buffer_line_kinematic(lastpos, PAUSE_PARK_XY_FEEDRATE, active_extruder);
#else #else
// Move XY to starting position, then Z // Move XY to starting position, then Z
destination[X_AXIS] = resume_position[X_AXIS]; destination[X_AXIS] = resume_position[X_AXIS];
destination[Y_AXIS] = resume_position[Y_AXIS]; destination[Y_AXIS] = resume_position[Y_AXIS];
RUNPLAN(FILAMENT_CHANGE_XY_FEEDRATE); RUNPLAN(PAUSE_PARK_XY_FEEDRATE);
destination[Z_AXIS] = resume_position[Z_AXIS]; destination[Z_AXIS] = resume_position[Z_AXIS];
RUNPLAN(FILAMENT_CHANGE_Z_FEEDRATE); RUNPLAN(PAUSE_PARK_Z_FEEDRATE);
#endif #endif
stepper.synchronize(); stepper.synchronize();
#if ENABLED(FILAMENT_RUNOUT_SENSOR) #if ENABLED(FILAMENT_RUNOUT_SENSOR)
filament_ran_out = false; filament_ran_out = false;
#endif #endif
set_current_to_destination(); set_current_to_destination();
}
#endif // PARK_HEAD_ON_PAUSE #if ENABLED(ULTIPANEL)
// Show status screen
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_STATUS);
#endif
#if ENABLED(SDSUPPORT)
if (sd_print_paused) {
card.startFileprint();
sd_print_paused = false;
}
#endif
move_away_flag = false;
}
#endif // ADVANCED_PAUSE_FEATURE
#if ENABLED(SDSUPPORT) #if ENABLED(SDSUPPORT)
@ -5803,7 +6047,7 @@ inline void gcode_M17() {
*/ */
inline void gcode_M24() { inline void gcode_M24() {
#if ENABLED(PARK_HEAD_ON_PAUSE) #if ENABLED(PARK_HEAD_ON_PAUSE)
move_back_on_resume(); resume_print();
#endif #endif
card.startFileprint(); card.startFileprint();
@ -7462,89 +7706,55 @@ inline void gcode_M121() { endstops.enable_globally(false); }
* Z = override Z raise * Z = override Z raise
*/ */
inline void gcode_M125() { inline void gcode_M125() {
if (move_away_flag) return; // already paused
const bool job_running = print_job_timer.isRunning();
// there are blocks after this one, or sd printing
move_away_flag = job_running || planner.blocks_queued()
#if ENABLED(SDSUPPORT)
|| card.sdprinting
#endif
;
if (!move_away_flag) return; // nothing to pause
// M125 can be used to pause a print too
#if ENABLED(SDSUPPORT)
card.pauseSDPrint();
#endif
print_job_timer.pause();
// Save current position
COPY(resume_position, current_position);
set_destination_to_current();
// Initial retract before move to filament change position // Initial retract before move to filament change position
destination[E_AXIS] += parser.seen('L') ? parser.value_axis_units(E_AXIS) : 0 const float retract = parser.seen('L') ? parser.value_axis_units(E_AXIS) : 0
#if defined(FILAMENT_CHANGE_RETRACT_LENGTH) && FILAMENT_CHANGE_RETRACT_LENGTH > 0 #if defined(PAUSE_PARK_RETRACT_LENGTH) && PAUSE_PARK_RETRACT_LENGTH > 0
- (FILAMENT_CHANGE_RETRACT_LENGTH) - (PAUSE_PARK_RETRACT_LENGTH)
#endif #endif
; ;
RUNPLAN(FILAMENT_CHANGE_RETRACT_FEEDRATE);
// Lift Z axis // Lift Z axis
const float z_lift = parser.seen('Z') ? parser.value_linear_units() : const float z_lift = parser.seen('Z') ? parser.value_linear_units() :
#if defined(FILAMENT_CHANGE_Z_ADD) && FILAMENT_CHANGE_Z_ADD > 0 #if defined(PAUSE_PARK_Z_ADD) && PAUSE_PARK_Z_ADD > 0
FILAMENT_CHANGE_Z_ADD PAUSE_PARK_Z_ADD
#else #else
0 0
#endif #endif
; ;
if (z_lift > 0) {
destination[Z_AXIS] += z_lift;
NOMORE(destination[Z_AXIS], Z_MAX_POS);
RUNPLAN(FILAMENT_CHANGE_Z_FEEDRATE);
}
// Move XY axes to filament change position or given position // Move XY axes to filament change position or given position
destination[X_AXIS] = parser.seen('X') ? parser.value_linear_units() : 0 const float x_pos = parser.seen('X') ? parser.value_linear_units() : 0
#ifdef FILAMENT_CHANGE_X_POS #ifdef PAUSE_PARK_X_POS
+ FILAMENT_CHANGE_X_POS + PAUSE_PARK_X_POS
#endif #endif
; ;
destination[Y_AXIS] = parser.seen('Y') ? parser.value_linear_units() : 0 const float y_pos = parser.seen('Y') ? parser.value_linear_units() : 0
#ifdef FILAMENT_CHANGE_Y_POS #ifdef PAUSE_PARK_Y_POS
+ FILAMENT_CHANGE_Y_POS + PAUSE_PARK_Y_POS
#endif #endif
; ;
#if HOTENDS > 1 && DISABLED(DUAL_X_CARRIAGE) #if HOTENDS > 1 && DISABLED(DUAL_X_CARRIAGE)
if (active_extruder > 0) { if (active_extruder > 0) {
if (!parser.seen('X')) destination[X_AXIS] += hotend_offset[X_AXIS][active_extruder]; if (!parser.seen('X')) x_pos += hotend_offset[X_AXIS][active_extruder];
if (!parser.seen('Y')) destination[Y_AXIS] += hotend_offset[Y_AXIS][active_extruder]; if (!parser.seen('Y')) y_pos += hotend_offset[Y_AXIS][active_extruder];
} }
#endif #endif
clamp_to_software_endstops(destination); const bool job_running = print_job_timer.isRunning();
RUNPLAN(FILAMENT_CHANGE_XY_FEEDRATE);
set_current_to_destination();
stepper.synchronize();
disable_e_steppers();
#if DISABLED(SDSUPPORT) if (pause_print(retract, z_lift, x_pos, y_pos)) {
// Wait for lcd click or M108 #if DISABLED(SDSUPPORT)
KEEPALIVE_STATE(PAUSED_FOR_USER); // Wait for lcd click or M108
wait_for_user = true; wait_for_filament_reload();
while (wait_for_user) idle();
KEEPALIVE_STATE(IN_HANDLER);
// Return to print position and continue // Return to print position and continue
move_back_on_resume(); resume_print();
if (job_running) print_job_timer.start();
move_away_flag = false; if (job_running) print_job_timer.start();
#endif #endif
}
} }
#endif // PARK_HEAD_ON_PAUSE #endif // PARK_HEAD_ON_PAUSE
@ -8812,25 +9022,7 @@ inline void gcode_M503() {
#endif // HAS_BED_PROBE #endif // HAS_BED_PROBE
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
void filament_change_beep(const bool init=false) {
static millis_t next_buzz = 0;
static uint16_t runout_beep = 0;
if (init) next_buzz = runout_beep = 0;
const millis_t ms = millis();
if (ELAPSED(ms, next_buzz)) {
if (runout_beep <= FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS + 5) { // Only beep as long as we're supposed to
next_buzz = ms + (runout_beep <= FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS ? 2500 : 400);
BUZZ(300, 2000);
runout_beep++;
}
}
}
static bool busy_doing_M600 = false;
/** /**
* M600: Pause for filament change * M600: Pause for filament change
@ -8839,231 +9031,77 @@ inline void gcode_M503() {
* Z[distance] - Move the Z axis by this distance * Z[distance] - Move the Z axis by this distance
* X[position] - Move to this X position, with Y * X[position] - Move to this X position, with Y
* Y[position] - Move to this Y position, with X * Y[position] - Move to this Y position, with X
* L[distance] - Retract distance for removal (manual reload) * U[distance] - Retract distance for removal (negative value) (manual reload)
* L[distance] - Extrude distance for insertion (positive value) (manual reload)
* B[count] - Number of times to beep, -1 for indefinite (if equipped with a buzzer)
* *
* Default values are used for omitted arguments. * Default values are used for omitted arguments.
* *
*/ */
inline void gcode_M600() { inline void gcode_M600() {
if (!DEBUGGING(DRYRUN) && thermalManager.tooColdToExtrude(active_extruder)) {
SERIAL_ERROR_START;
SERIAL_ERRORLNPGM(MSG_TOO_COLD_FOR_M600);
return;
}
busy_doing_M600 = true; // Stepper Motors can't timeout when this is set
// Pause the print job timer
const bool job_running = print_job_timer.isRunning();
print_job_timer.pause();
// Show initial message and wait for synchronize steppers
lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_INIT);
stepper.synchronize();
// Save current position of all axes
float lastpos[XYZE];
COPY(lastpos, current_position);
set_destination_to_current();
// Initial retract before move to filament change position // Initial retract before move to filament change position
destination[E_AXIS] += parser.seen('E') ? parser.value_axis_units(E_AXIS) : 0 const float retract = parser.seen('E') ? parser.value_axis_units(E_AXIS) : 0
#if defined(FILAMENT_CHANGE_RETRACT_LENGTH) && FILAMENT_CHANGE_RETRACT_LENGTH > 0 #if defined(PAUSE_PARK_RETRACT_LENGTH) && PAUSE_PARK_RETRACT_LENGTH > 0
- (FILAMENT_CHANGE_RETRACT_LENGTH) - (PAUSE_PARK_RETRACT_LENGTH)
#endif #endif
; ;
RUNPLAN(FILAMENT_CHANGE_RETRACT_FEEDRATE);
// Lift Z axis // Lift Z axis
float z_lift = parser.seen('Z') ? parser.value_linear_units() : const float z_lift = parser.seen('Z') ? parser.value_linear_units() :
#if defined(FILAMENT_CHANGE_Z_ADD) && FILAMENT_CHANGE_Z_ADD > 0 #if defined(PAUSE_PARK_Z_ADD) && PAUSE_PARK_Z_ADD > 0
FILAMENT_CHANGE_Z_ADD PAUSE_PARK_Z_ADD
#else #else
0 0
#endif #endif
; ;
if (z_lift > 0) {
destination[Z_AXIS] += z_lift;
NOMORE(destination[Z_AXIS], Z_MAX_POS);
RUNPLAN(FILAMENT_CHANGE_Z_FEEDRATE);
}
// Move XY axes to filament exchange position // Move XY axes to filament exchange position
if (parser.seen('X')) destination[X_AXIS] = parser.value_linear_units(); const float x_pos = parser.seen('X') ? parser.value_linear_units() : 0
#ifdef FILAMENT_CHANGE_X_POS #ifdef PAUSE_PARK_X_POS
else destination[X_AXIS] = FILAMENT_CHANGE_X_POS; + PAUSE_PARK_X_POS
#endif
if (parser.seen('Y')) destination[Y_AXIS] = parser.value_linear_units();
#ifdef FILAMENT_CHANGE_Y_POS
else destination[Y_AXIS] = FILAMENT_CHANGE_Y_POS;
#endif
RUNPLAN(FILAMENT_CHANGE_XY_FEEDRATE);
stepper.synchronize();
lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_UNLOAD);
idle();
// Unload filament
destination[E_AXIS] += parser.seen('L') ? parser.value_axis_units(E_AXIS) : 0
#if FILAMENT_CHANGE_UNLOAD_LENGTH > 0
- (FILAMENT_CHANGE_UNLOAD_LENGTH)
#endif #endif
; ;
const float y_pos = parser.seen('Y') ? parser.value_linear_units() : 0
RUNPLAN(FILAMENT_CHANGE_UNLOAD_FEEDRATE); #ifdef PAUSE_PARK_Y_POS
+ PAUSE_PARK_Y_POS
// Synchronize steppers and then disable extruders steppers for manual filament changing
stepper.synchronize();
disable_e_steppers();
safe_delay(100);
const millis_t nozzle_timeout = millis() + (millis_t)(FILAMENT_CHANGE_NOZZLE_TIMEOUT) * 1000UL;
bool nozzle_timed_out = false;
// Wait for filament insert by user and press button
lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_INSERT);
#if HAS_BUZZER
filament_change_beep(true);
#endif
idle();
int16_t temps[HOTENDS];
HOTEND_LOOP() temps[e] = thermalManager.target_temperature[e]; // Save nozzle temps
KEEPALIVE_STATE(PAUSED_FOR_USER);
wait_for_user = true; // LCD click or M108 will clear this
while (wait_for_user) {
if (nozzle_timed_out)
lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_CLICK_TO_HEAT_NOZZLE);
#if HAS_BUZZER
filament_change_beep();
#endif #endif
;
if (!nozzle_timed_out && ELAPSED(millis(), nozzle_timeout)) { // Unload filament
nozzle_timed_out = true; // on nozzle timeout remember the nozzles need to be reheated const float unload_length = parser.seen('U') ? parser.value_axis_units(E_AXIS) : 0
HOTEND_LOOP() thermalManager.setTargetHotend(0, e); // Turn off all the nozzles #if defined(FILAMENT_CHANGE_UNLOAD_LENGTH) && FILAMENT_CHANGE_UNLOAD_LENGTH > 0
lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_CLICK_TO_HEAT_NOZZLE); - (FILAMENT_CHANGE_UNLOAD_LENGTH)
}
idle(true);
}
KEEPALIVE_STATE(IN_HANDLER);
if (nozzle_timed_out) // Turn nozzles back on if they were turned off
HOTEND_LOOP() thermalManager.setTargetHotend(temps[e], e);
// Show "wait for heating"
lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_WAIT_FOR_NOZZLES_TO_HEAT);
wait_for_heatup = true;
while (wait_for_heatup) {
idle();
wait_for_heatup = false;
HOTEND_LOOP() {
if (abs(thermalManager.degHotend(e) - temps[e]) > 3) {
wait_for_heatup = true;
break;
}
}
}
// Show "insert filament"
if (nozzle_timed_out)
lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_INSERT);
#if HAS_BUZZER
filament_change_beep(true);
#endif
KEEPALIVE_STATE(PAUSED_FOR_USER);
wait_for_user = true; // LCD click or M108 will clear this
while (wait_for_user && nozzle_timed_out) {
#if HAS_BUZZER
filament_change_beep();
#endif #endif
idle(true); ;
}
KEEPALIVE_STATE(IN_HANDLER);
// Show "load" message
lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_LOAD);
// Load filament // Load filament
destination[E_AXIS] += parser.seen('L') ? -parser.value_axis_units(E_AXIS) : 0 const float load_length = parser.seen('L') ? parser.value_axis_units(E_AXIS) : 0
#if FILAMENT_CHANGE_LOAD_LENGTH > 0 #ifdef FILAMENT_CHANGE_LOAD_LENGTH
+ FILAMENT_CHANGE_LOAD_LENGTH + FILAMENT_CHANGE_LOAD_LENGTH
#endif #endif
; ;
RUNPLAN(FILAMENT_CHANGE_LOAD_FEEDRATE); const int beep_count = parser.seen('B') ? parser.value_int() :
stepper.synchronize(); #ifdef FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS
FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS
#if defined(FILAMENT_CHANGE_EXTRUDE_LENGTH) && FILAMENT_CHANGE_EXTRUDE_LENGTH > 0 #else
-1
do { #endif
// "Wait for filament extrude" ;
lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_EXTRUDE);
// Extrude filament to get into hotend
destination[E_AXIS] += FILAMENT_CHANGE_EXTRUDE_LENGTH;
RUNPLAN(FILAMENT_CHANGE_EXTRUDE_FEEDRATE);
stepper.synchronize();
// Show "Extrude More" / "Resume" menu and wait for reply
KEEPALIVE_STATE(PAUSED_FOR_USER);
wait_for_user = false;
lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_OPTION);
while (filament_change_menu_response == FILAMENT_CHANGE_RESPONSE_WAIT_FOR) idle(true);
KEEPALIVE_STATE(IN_HANDLER);
// Keep looping if "Extrude More" was selected
} while (filament_change_menu_response == FILAMENT_CHANGE_RESPONSE_EXTRUDE_MORE);
#endif
// "Wait for print to resume"
lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_RESUME);
// Set extruder to saved position
destination[E_AXIS] = current_position[E_AXIS] = lastpos[E_AXIS];
planner.set_e_position_mm(current_position[E_AXIS]);
#if IS_KINEMATIC
// Move XYZ to starting position
planner.buffer_line_kinematic(lastpos, FILAMENT_CHANGE_XY_FEEDRATE, active_extruder);
#else
// Move XY to starting position, then Z
destination[X_AXIS] = lastpos[X_AXIS];
destination[Y_AXIS] = lastpos[Y_AXIS];
RUNPLAN(FILAMENT_CHANGE_XY_FEEDRATE);
destination[Z_AXIS] = lastpos[Z_AXIS];
RUNPLAN(FILAMENT_CHANGE_Z_FEEDRATE);
#endif
stepper.synchronize();
#if ENABLED(FILAMENT_RUNOUT_SENSOR) const bool job_running = print_job_timer.isRunning();
filament_ran_out = false;
#endif
// Show status screen if (pause_print(retract, z_lift, x_pos, y_pos, unload_length, beep_count, true)) {
lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_STATUS); wait_for_filament_reload(beep_count);
resume_print(load_length, ADVANCED_PAUSE_EXTRUDE_LENGTH, beep_count);
}
// Resume the print job timer if it was running // Resume the print job timer if it was running
if (job_running) print_job_timer.start(); if (job_running) print_job_timer.start();
busy_doing_M600 = false; // Allow Stepper Motors to be turned off during inactivity
} }
#endif // FILAMENT_CHANGE_FEATURE #endif // ADVANCED_PAUSE_FEATURE
#if ENABLED(DUAL_X_CARRIAGE) #if ENABLED(DUAL_X_CARRIAGE)
@ -10569,11 +10607,11 @@ void process_next_command() {
break; break;
#endif // HAS_BED_PROBE #endif // HAS_BED_PROBE
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
case 600: // M600: Pause for filament change case 600: // M600: Pause for filament change
gcode_M600(); gcode_M600();
break; break;
#endif // FILAMENT_CHANGE_FEATURE #endif // ADVANCED_PAUSE_FEATURE
#if ENABLED(DUAL_X_CARRIAGE) || ENABLED(DUAL_NOZZLE_DUPLICATION_MODE) #if ENABLED(DUAL_X_CARRIAGE) || ENABLED(DUAL_NOZZLE_DUPLICATION_MODE)
case 605: // M605: Set Dual X Carriage movement mode case 605: // M605: Set Dual X Carriage movement mode
@ -12064,13 +12102,13 @@ void manage_inactivity(bool ignore_stepper_queue/*=false*/) {
} }
// Prevent steppers timing-out in the middle of M600 // Prevent steppers timing-out in the middle of M600
#if ENABLED(FILAMENT_CHANGE_FEATURE) && ENABLED(FILAMENT_CHANGE_NO_STEPPER_TIMEOUT) #if ENABLED(ADVANCED_PAUSE_FEATURE) && ENABLED(PAUSE_PARK_NO_STEPPER_TIMEOUT)
#define M600_TEST !busy_doing_M600 #define MOVE_AWAY_TEST !move_away_flag
#else #else
#define M600_TEST true #define MOVE_AWAY_TEST true
#endif #endif
if (M600_TEST && stepper_inactive_time && ELAPSED(ms, previous_cmd_ms + stepper_inactive_time) if (MOVE_AWAY_TEST && stepper_inactive_time && ELAPSED(ms, previous_cmd_ms + stepper_inactive_time)
&& !ignore_stepper_queue && !planner.blocks_queued()) { && !ignore_stepper_queue && !planner.blocks_queued()) {
#if ENABLED(DISABLE_INACTIVE_X) #if ENABLED(DISABLE_INACTIVE_X)
disable_X(); disable_X();
@ -12216,7 +12254,7 @@ void manage_inactivity(bool ignore_stepper_queue/*=false*/) {
* Standard idle routine keeps the machine alive * Standard idle routine keeps the machine alive
*/ */
void idle( void idle(
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
bool no_stepper_sleep/*=false*/ bool no_stepper_sleep/*=false*/
#endif #endif
) { ) {
@ -12229,7 +12267,7 @@ void idle(
#endif #endif
manage_inactivity( manage_inactivity(
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
no_stepper_sleep no_stepper_sleep
#endif #endif
); );

@ -99,7 +99,31 @@
#elif defined(SERVO_DEACTIVATION_DELAY) #elif defined(SERVO_DEACTIVATION_DELAY)
#error "SERVO_DEACTIVATION_DELAY is deprecated. Use SERVO_DELAY instead." #error "SERVO_DEACTIVATION_DELAY is deprecated. Use SERVO_DELAY instead."
#elif ENABLED(FILAMENTCHANGEENABLE) #elif ENABLED(FILAMENTCHANGEENABLE)
#error "FILAMENTCHANGEENABLE is now FILAMENT_CHANGE_FEATURE. Please update your configuration." #error "FILAMENTCHANGEENABLE is now ADVANCED_PAUSE_FEATURE. Please update your configuration."
#elif ENABLED(FILAMENT_CHANGE_FEATURE)
#error "FILAMENT_CHANGE_FEATURE is now ADVANCED_PAUSE_FEATURE. Please update your configuration."
#elif ENABLED(FILAMENT_CHANGE_X_POS)
#error "FILAMENT_CHANGE_X_POS is now PAUSE_PARK_X_POS. Please update your configuration."
#elif ENABLED(FILAMENT_CHANGE_Y_POS)
#error "FILAMENT_CHANGE_Y_POS is now PAUSE_PARK_Y_POS. Please update your configuration."
#elif ENABLED(FILAMENT_CHANGE_Z_ADD)
#error "FILAMENT_CHANGE_Z_ADD is now PAUSE_PARK_Z_ADD. Please update your configuration."
#elif ENABLED(FILAMENT_CHANGE_XY_FEEDRATE)
#error "FILAMENT_CHANGE_XY_FEEDRATE is now PAUSE_PARK_XY_FEEDRATE. Please update your configuration."
#elif ENABLED(FILAMENT_CHANGE_Z_FEEDRATE)
#error "FILAMENT_CHANGE_Z_FEEDRATE is now PAUSE_PARK_Z_FEEDRATE. Please update your configuration."
#elif ENABLED(FILAMENT_CHANGE_RETRACT_FEEDRATE)
#error "FILAMENT_CHANGE_RETRACT_FEEDRATE is now PAUSE_PARK_RETRACT_FEEDRATE. Please update your configuration."
#elif ENABLED(FILAMENT_CHANGE_RETRACT_LENGTH)
#error "FILAMENT_CHANGE_RETRACT_LENGTH is now PAUSE_PARK_RETRACT_LENGTH. Please update your configuration."
#elif ENABLED(FILAMENT_CHANGE_EXTRUDE_FEEDRATE)
#error "FILAMENT_CHANGE_EXTRUDE_FEEDRATE is now ADVANCED_PAUSE_EXTRUDE_FEEDRATE. Please update your configuration."
#elif ENABLED(FILAMENT_CHANGE_EXTRUDE_LENGTH)
#error "FILAMENT_CHANGE_EXTRUDE_LENGTH is now ADVANCED_PAUSE_EXTRUDE_LENGTH. Please update your configuration."
#elif ENABLED(FILAMENT_CHANGE_NOZZLE_TIMEOUT)
#error "FILAMENT_CHANGE_NOZZLE_TIMEOUT is now PAUSE_PARK_NOZZLE_TIMEOUT. Please update your configuration."
#elif ENABLED(FILAMENT_CHANGE_NO_STEPPER_TIMEOUT)
#error "FILAMENT_CHANGE_NO_STEPPER_TIMEOUT is now PAUSE_PARK_NO_STEPPER_TIMEOUT. Please update your configuration."
#elif defined(PLA_PREHEAT_HOTEND_TEMP) #elif defined(PLA_PREHEAT_HOTEND_TEMP)
#error "PLA_PREHEAT_HOTEND_TEMP is now PREHEAT_1_TEMP_HOTEND. Please update your configuration." #error "PLA_PREHEAT_HOTEND_TEMP is now PREHEAT_1_TEMP_HOTEND. Please update your configuration."
#elif defined(PLA_PREHEAT_HPB_TEMP) #elif defined(PLA_PREHEAT_HPB_TEMP)
@ -286,19 +310,19 @@
#error "FILAMENT_RUNOUT_SENSOR requires FIL_RUNOUT_PIN." #error "FILAMENT_RUNOUT_SENSOR requires FIL_RUNOUT_PIN."
#elif DISABLED(SDSUPPORT) && DISABLED(PRINTJOB_TIMER_AUTOSTART) #elif DISABLED(SDSUPPORT) && DISABLED(PRINTJOB_TIMER_AUTOSTART)
#error "FILAMENT_RUNOUT_SENSOR requires SDSUPPORT or PRINTJOB_TIMER_AUTOSTART." #error "FILAMENT_RUNOUT_SENSOR requires SDSUPPORT or PRINTJOB_TIMER_AUTOSTART."
#elif DISABLED(FILAMENT_CHANGE_FEATURE) #elif DISABLED(ADVANCED_PAUSE_FEATURE)
static_assert(NULL == strstr(FILAMENT_RUNOUT_SCRIPT, "M600"), "FILAMENT_CHANGE_FEATURE is required to use M600 with FILAMENT_RUNOUT_SENSOR."); static_assert(NULL == strstr(FILAMENT_RUNOUT_SCRIPT, "M600"), "ADVANCED_PAUSE_FEATURE is required to use M600 with FILAMENT_RUNOUT_SENSOR.");
#endif #endif
#endif #endif
/** /**
* Filament Change with Extruder Runout Prevention * Advanced Pause
*/ */
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
#if DISABLED(ULTIPANEL) #if DISABLED(ULTIPANEL)
#error "FILAMENT_CHANGE_FEATURE currently requires an LCD controller." #error "ADVANCED_PAUSE_FEATURE currently requires an LCD controller."
#elif ENABLED(EXTRUDER_RUNOUT_PREVENT) #elif ENABLED(EXTRUDER_RUNOUT_PREVENT)
#error "EXTRUDER_RUNOUT_PREVENT is incompatible with FILAMENT_CHANGE_FEATURE." #error "EXTRUDER_RUNOUT_PREVENT is incompatible with ADVANCED_PAUSE_FEATURE."
#elif ENABLED(PARK_HEAD_ON_PAUSE) && DISABLED(SDSUPPORT) && DISABLED(ULTIPANEL) && DISABLED(EMERGENCY_PARSER) #elif ENABLED(PARK_HEAD_ON_PAUSE) && DISABLED(SDSUPPORT) && DISABLED(ULTIPANEL) && DISABLED(EMERGENCY_PARSER)
#error "PARK_HEAD_ON_PAUSE requires SDSUPPORT, EMERGENCY_PARSER, or an LCD controller." #error "PARK_HEAD_ON_PAUSE requires SDSUPPORT, EMERGENCY_PARSER, or an LCD controller."
#endif #endif
@ -545,6 +569,13 @@ static_assert(1 >= 0
#error "Probes need Z_CLEARANCE_BETWEEN_PROBES >= 0." #error "Probes need Z_CLEARANCE_BETWEEN_PROBES >= 0."
#endif #endif
/**
* Advanced Pause is required in order to turn the heaters off during probing
*/
#if (ENABLED(PROBING_HEATERS_OFF) && DISABLED(ADVANCED_PAUSE_FEATURE))
#error "PROBING_HEATERS_OFF requires ADVANCED_PAUSE_FEATURE"
#endif
#else #else
/** /**

@ -108,25 +108,25 @@ enum EndstopEnum {
}; };
#endif #endif
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
enum FilamentChangeMenuResponse { enum AdvancedPauseMenuResponse {
FILAMENT_CHANGE_RESPONSE_WAIT_FOR, ADVANCED_PAUSE_RESPONSE_WAIT_FOR,
FILAMENT_CHANGE_RESPONSE_EXTRUDE_MORE, ADVANCED_PAUSE_RESPONSE_EXTRUDE_MORE,
FILAMENT_CHANGE_RESPONSE_RESUME_PRINT ADVANCED_PAUSE_RESPONSE_RESUME_PRINT
}; };
#if ENABLED(ULTIPANEL) #if ENABLED(ULTIPANEL)
enum FilamentChangeMessage { enum AdvancedPauseMessage {
FILAMENT_CHANGE_MESSAGE_INIT, ADVANCED_PAUSE_MESSAGE_INIT,
FILAMENT_CHANGE_MESSAGE_UNLOAD, ADVANCED_PAUSE_MESSAGE_UNLOAD,
FILAMENT_CHANGE_MESSAGE_INSERT, ADVANCED_PAUSE_MESSAGE_INSERT,
FILAMENT_CHANGE_MESSAGE_LOAD, ADVANCED_PAUSE_MESSAGE_LOAD,
FILAMENT_CHANGE_MESSAGE_EXTRUDE, ADVANCED_PAUSE_MESSAGE_EXTRUDE,
FILAMENT_CHANGE_MESSAGE_OPTION, ADVANCED_PAUSE_MESSAGE_OPTION,
FILAMENT_CHANGE_MESSAGE_RESUME, ADVANCED_PAUSE_MESSAGE_RESUME,
FILAMENT_CHANGE_MESSAGE_STATUS, ADVANCED_PAUSE_MESSAGE_STATUS,
FILAMENT_CHANGE_MESSAGE_CLICK_TO_HEAT_NOZZLE, ADVANCED_PAUSE_MESSAGE_CLICK_TO_HEAT_NOZZLE,
FILAMENT_CHANGE_MESSAGE_WAIT_FOR_NOZZLES_TO_HEAT ADVANCED_PAUSE_MESSAGE_WAIT_FOR_NOZZLES_TO_HEAT
}; };
#endif #endif
#endif #endif

@ -756,22 +756,23 @@
#endif #endif
/** /**
* Filament Change * Advanced Pause
* Experimental filament change support. * Experimental feature for filament change support and for parking the nozzle when paused.
* Adds the GCode M600 for initiating filament change. * Adds the GCode M600 for initiating filament change.
* If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
* *
* Requires an LCD display. * Requires an LCD display.
* This feature is required for the default FILAMENT_RUNOUT_SCRIPT. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
*/ */
//#define FILAMENT_CHANGE_FEATURE //#define ADVANCED_PAUSE_FEATURE
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
#define FILAMENT_CHANGE_X_POS 30 // X position of hotend #define PAUSE_PARK_X_POS 30 // X position of hotend
#define FILAMENT_CHANGE_Y_POS 10 // Y position of hotend #define PAUSE_PARK_Y_POS 10 // Y position of hotend
#define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) #define PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#define FILAMENT_CHANGE_RETRACT_LENGTH 1 // Initial retract in mm #define PAUSE_PARK_RETRACT_LENGTH 1 // 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_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast #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
@ -782,14 +783,14 @@
#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_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, #define ADVANCED_PAUSE_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_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds
#define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
#define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change
// even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME. // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
//#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume
#endif #endif

@ -756,22 +756,23 @@
#endif #endif
/** /**
* Filament Change * Advanced Pause
* Experimental filament change support. * Experimental feature for filament change support and for parking the nozzle when paused.
* Adds the GCode M600 for initiating filament change. * Adds the GCode M600 for initiating filament change.
* If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
* *
* Requires an LCD display. * Requires an LCD display.
* This feature is required for the default FILAMENT_RUNOUT_SCRIPT. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
*/ */
//#define FILAMENT_CHANGE_FEATURE //#define ADVANCED_PAUSE_FEATURE
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
#define FILAMENT_CHANGE_X_POS 3 // X position of hotend #define PAUSE_PARK_X_POS 3 // X position of hotend
#define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend #define PAUSE_PARK_Y_POS 3 // Y position of hotend
#define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) #define PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm #define PAUSE_PARK_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_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast #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
@ -782,14 +783,14 @@
#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_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, #define ADVANCED_PAUSE_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_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds
#define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
#define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change
// even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME. // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
//#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume
#endif #endif

@ -763,22 +763,25 @@
#endif #endif
/** /**
* Filament Change * Advanced Pause
* Experimental filament change support. * Experimental feature for filament change support and for parking the nozzle when paused.
* Adds the GCode M600 for initiating filament change. * Adds the GCode M600 for initiating filament change.
* If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
* *
* Requires an LCD display. * Requires an LCD display.
* This feature is required for the default FILAMENT_RUNOUT_SCRIPT. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
*/ */
#define FILAMENT_CHANGE_FEATURE
#if ENABLED(FILAMENT_CHANGE_FEATURE) #define ADVANCED_PAUSE_FEATURE
#define FILAMENT_CHANGE_X_POS 3 // X position of hotend #if ENABLED(ADVANCED_PAUSE_FEATURE)
#define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend #define PAUSE_PARK_X_POS 10 // X position of hotend
#define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) #define PAUSE_PARK_Y_POS 10 // Y position of hotend
#define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) #define PAUSE_PARK_Z_ADD 10 // Z addition of hotend (lift)
#define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) #define PAUSE_PARK_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
#define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s #define PAUSE_PARK_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers)
#define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm #define PAUSE_PARK_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#define PAUSE_PARK_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_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast #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
@ -789,16 +792,16 @@
#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_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, #define ADVANCED_PAUSE_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_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds
#define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
#define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change
// even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME. // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
//#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume #define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume
#endif #endif
// @section tmc // @section tmc

@ -756,22 +756,23 @@
#endif #endif
/** /**
* Filament Change * Advanced Pause
* Experimental filament change support. * Experimental feature for filament change support and for parking the nozzle when paused.
* Adds the GCode M600 for initiating filament change. * Adds the GCode M600 for initiating filament change.
* If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
* *
* Requires an LCD display. * Requires an LCD display.
* This feature is required for the default FILAMENT_RUNOUT_SCRIPT. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
*/ */
//#define FILAMENT_CHANGE_FEATURE //#define ADVANCED_PAUSE_FEATURE
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
#define FILAMENT_CHANGE_X_POS 3 // X position of hotend #define PAUSE_PARK_X_POS 3 // X position of hotend
#define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend #define PAUSE_PARK_Y_POS 3 // Y position of hotend
#define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) #define PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm #define PAUSE_PARK_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_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast #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
@ -782,14 +783,14 @@
#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_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, #define ADVANCED_PAUSE_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_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds
#define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
#define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change
// even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME. // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
//#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume
#endif #endif

@ -740,22 +740,23 @@
#endif #endif
/** /**
* Filament Change * Advanced Pause
* Experimental filament change support. * Experimental feature for filament change support and for parking the nozzle when paused.
* Adds the GCode M600 for initiating filament change. * Adds the GCode M600 for initiating filament change.
* If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
* *
* Requires an LCD display. * Requires an LCD display.
* This feature is required for the default FILAMENT_RUNOUT_SCRIPT. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
*/ */
//#define FILAMENT_CHANGE_FEATURE //#define ADVANCED_PAUSE_FEATURE
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
#define FILAMENT_CHANGE_X_POS 3 // X position of hotend #define PAUSE_PARK_X_POS 3 // X position of hotend
#define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend #define PAUSE_PARK_Y_POS 3 // Y position of hotend
#define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) #define PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm #define PAUSE_PARK_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_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast #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
@ -766,14 +767,14 @@
#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_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, #define ADVANCED_PAUSE_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_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds
#define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
#define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change
// even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME. // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
//#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume
#endif #endif

@ -769,22 +769,23 @@
#endif #endif
/** /**
* Filament Change * Advanced Pause
* Experimental filament change support. * Experimental feature for filament change support and for parking the nozzle when paused.
* Adds the GCode M600 for initiating filament change. * Adds the GCode M600 for initiating filament change.
* If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
* *
* Requires an LCD display. * Requires an LCD display.
* This feature is required for the default FILAMENT_RUNOUT_SCRIPT. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
*/ */
//#define FILAMENT_CHANGE_FEATURE //#define ADVANCED_PAUSE_FEATURE
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
#define FILAMENT_CHANGE_X_POS (X_MAX_POS-3) // X position of hotend #define PAUSE_PARK_X_POS (X_MAX_POS-3) // X position of hotend
#define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend #define PAUSE_PARK_Y_POS 3 // Y position of hotend
#define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) #define PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm #define PAUSE_PARK_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_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast #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
@ -795,14 +796,14 @@
#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_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, #define ADVANCED_PAUSE_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_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds
#define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
#define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change
// even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME. // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
//#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume
#endif #endif

@ -756,22 +756,23 @@
#endif #endif
/** /**
* Filament Change * Advanced Pause
* Experimental filament change support. * Experimental feature for filament change support and for parking the nozzle when paused.
* Adds the GCode M600 for initiating filament change. * Adds the GCode M600 for initiating filament change.
* If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
* *
* Requires an LCD display. * Requires an LCD display.
* This feature is required for the default FILAMENT_RUNOUT_SCRIPT. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
*/ */
//#define FILAMENT_CHANGE_FEATURE //#define ADVANCED_PAUSE_FEATURE
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
#define FILAMENT_CHANGE_X_POS 100 // X position of hotend #define PAUSE_PARK_X_POS 100 // X position of hotend
#define FILAMENT_CHANGE_Y_POS 100 // Y position of hotend #define PAUSE_PARK_Y_POS 100 // Y position of hotend
#define FILAMENT_CHANGE_Z_ADD 20 // Z addition of hotend (lift) #define PAUSE_PARK_Z_ADD 20 // Z addition of hotend (lift)
#define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) #define PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#define FILAMENT_CHANGE_RETRACT_LENGTH 5 // Initial retract in mm #define PAUSE_PARK_RETRACT_LENGTH 5 // 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_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast
#define FILAMENT_CHANGE_UNLOAD_LENGTH 600 // Unload filament length from hotend in mm #define FILAMENT_CHANGE_UNLOAD_LENGTH 600 // Unload filament length from hotend in mm
@ -782,14 +783,14 @@
#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_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 100 // Extrude filament length in mm after filament is loaded over the hotend, #define ADVANCED_PAUSE_EXTRUDE_LENGTH 100 // 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_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds
#define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
#define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change
// even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME. // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
//#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume
#endif #endif

@ -756,22 +756,23 @@
#endif #endif
/** /**
* Filament Change * Advanced Pause
* Experimental filament change support. * Experimental feature for filament change support and for parking the nozzle when paused.
* Adds the GCode M600 for initiating filament change. * Adds the GCode M600 for initiating filament change.
* If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
* *
* Requires an LCD display. * Requires an LCD display.
* This feature is required for the default FILAMENT_RUNOUT_SCRIPT. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
*/ */
//#define FILAMENT_CHANGE_FEATURE //#define ADVANCED_PAUSE_FEATURE
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
#define FILAMENT_CHANGE_X_POS 3 // X position of hotend #define PAUSE_PARK_X_POS 3 // X position of hotend
#define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend #define PAUSE_PARK_Y_POS 3 // Y position of hotend
#define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) #define PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm #define PAUSE_PARK_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_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast #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
@ -782,14 +783,14 @@
#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_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, #define ADVANCED_PAUSE_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_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds
#define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
#define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change
// even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME. // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
//#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume
#endif #endif

@ -756,22 +756,23 @@
#endif #endif
/** /**
* Filament Change * Advanced Pause
* Experimental filament change support. * Experimental feature for filament change support and for parking the nozzle when paused.
* Adds the GCode M600 for initiating filament change. * Adds the GCode M600 for initiating filament change.
* If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
* *
* Requires an LCD display. * Requires an LCD display.
* This feature is required for the default FILAMENT_RUNOUT_SCRIPT. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
*/ */
//#define FILAMENT_CHANGE_FEATURE //#define ADVANCED_PAUSE_FEATURE
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
#define FILAMENT_CHANGE_X_POS 3 // X position of hotend #define PAUSE_PARK_X_POS 3 // X position of hotend
#define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend #define PAUSE_PARK_Y_POS 3 // Y position of hotend
#define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) #define PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm #define PAUSE_PARK_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_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast #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
@ -782,14 +783,14 @@
#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_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, #define ADVANCED_PAUSE_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_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds
#define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
#define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change
// even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME. // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
//#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume
#endif #endif

@ -756,22 +756,23 @@
#endif #endif
/** /**
* Filament Change * Advanced Pause
* Experimental filament change support. * Experimental feature for filament change support and for parking the nozzle when paused.
* Adds the GCode M600 for initiating filament change. * Adds the GCode M600 for initiating filament change.
* If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
* *
* Requires an LCD display. * Requires an LCD display.
* This feature is required for the default FILAMENT_RUNOUT_SCRIPT. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
*/ */
//#define FILAMENT_CHANGE_FEATURE //#define ADVANCED_PAUSE_FEATURE
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
#define FILAMENT_CHANGE_X_POS 3 // X position of hotend #define PAUSE_PARK_X_POS 3 // X position of hotend
#define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend #define PAUSE_PARK_Y_POS 3 // Y position of hotend
#define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) #define PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm #define PAUSE_PARK_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_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast #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
@ -782,14 +783,14 @@
#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_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, #define ADVANCED_PAUSE_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_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds
#define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
#define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change
// even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME. // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
//#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume
#endif #endif

@ -759,22 +759,23 @@
#endif #endif
/** /**
* Filament Change * Advanced Pause
* Experimental filament change support. * Experimental feature for filament change support and for parking the nozzle when paused.
* Adds the GCode M600 for initiating filament change. * Adds the GCode M600 for initiating filament change.
* If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
* *
* Requires an LCD display. * Requires an LCD display.
* This feature is required for the default FILAMENT_RUNOUT_SCRIPT. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
*/ */
//#define FILAMENT_CHANGE_FEATURE //#define ADVANCED_PAUSE_FEATURE
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
#define FILAMENT_CHANGE_X_POS 3 // X position of hotend #define PAUSE_PARK_X_POS 3 // X position of hotend
#define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend #define PAUSE_PARK_Y_POS 3 // Y position of hotend
#define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) #define PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm #define PAUSE_PARK_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_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast #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
@ -785,14 +786,14 @@
#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_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, #define ADVANCED_PAUSE_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_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds
#define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
#define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change
// even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME. // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
//#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume
#endif #endif

@ -756,22 +756,23 @@
#endif #endif
/** /**
* Filament Change * Advanced Pause
* Experimental filament change support. * Experimental feature for filament change support and for parking the nozzle when paused.
* Adds the GCode M600 for initiating filament change. * Adds the GCode M600 for initiating filament change.
* If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
* *
* Requires an LCD display. * Requires an LCD display.
* This feature is required for the default FILAMENT_RUNOUT_SCRIPT. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
*/ */
//#define FILAMENT_CHANGE_FEATURE //#define ADVANCED_PAUSE_FEATURE
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
#define FILAMENT_CHANGE_X_POS 3 // X position of hotend #define PAUSE_PARK_X_POS 3 // X position of hotend
#define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend #define PAUSE_PARK_Y_POS 3 // Y position of hotend
#define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) #define PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm #define PAUSE_PARK_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_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast #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
@ -782,14 +783,14 @@
#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_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, #define ADVANCED_PAUSE_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_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds
#define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
#define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change
// even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME. // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
//#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume
#endif #endif

@ -761,22 +761,23 @@
#endif #endif
/** /**
* Filament Change * Advanced Pause
* Experimental filament change support. * Experimental feature for filament change support and for parking the nozzle when paused.
* Adds the GCode M600 for initiating filament change. * Adds the GCode M600 for initiating filament change.
* If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
* *
* Requires an LCD display. * Requires an LCD display.
* This feature is required for the default FILAMENT_RUNOUT_SCRIPT. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
*/ */
//#define FILAMENT_CHANGE_FEATURE //#define ADVANCED_PAUSE_FEATURE
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
#define FILAMENT_CHANGE_X_POS 3 // X position of hotend #define PAUSE_PARK_X_POS 3 // X position of hotend
#define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend #define PAUSE_PARK_Y_POS 3 // Y position of hotend
#define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) #define PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm #define PAUSE_PARK_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_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast #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
@ -787,14 +788,14 @@
#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_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, #define ADVANCED_PAUSE_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_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds
#define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
#define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change
// even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME. // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
//#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume
#endif #endif

@ -760,22 +760,23 @@
#endif #endif
/** /**
* Filament Change * Advanced Pause
* Experimental filament change support. * Experimental feature for filament change support and for parking the nozzle when paused.
* Adds the GCode M600 for initiating filament change. * Adds the GCode M600 for initiating filament change.
* If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
* *
* Requires an LCD display. * Requires an LCD display.
* This feature is required for the default FILAMENT_RUNOUT_SCRIPT. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
*/ */
//#define FILAMENT_CHANGE_FEATURE //#define ADVANCED_PAUSE_FEATURE
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
#define FILAMENT_CHANGE_X_POS 3 // X position of hotend #define PAUSE_PARK_X_POS 3 // X position of hotend
#define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend #define PAUSE_PARK_Y_POS 3 // Y position of hotend
#define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) #define PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm #define PAUSE_PARK_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_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast #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
@ -786,14 +787,14 @@
#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_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, #define ADVANCED_PAUSE_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_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds
#define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
#define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change
// even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME. // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
//#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume
#endif #endif

@ -758,22 +758,23 @@
#endif #endif
/** /**
* Filament Change * Advanced Pause
* Experimental filament change support. * Experimental feature for filament change support and for parking the nozzle when paused.
* Adds the GCode M600 for initiating filament change. * Adds the GCode M600 for initiating filament change.
* If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
* *
* Requires an LCD display. * Requires an LCD display.
* This feature is required for the default FILAMENT_RUNOUT_SCRIPT. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
*/ */
//#define FILAMENT_CHANGE_FEATURE //#define ADVANCED_PAUSE_FEATURE
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
#define FILAMENT_CHANGE_X_POS 3 // X position of hotend #define PAUSE_PARK_X_POS 3 // X position of hotend
#define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend #define PAUSE_PARK_Y_POS 3 // Y position of hotend
#define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) #define PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm #define PAUSE_PARK_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_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast #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
@ -784,14 +785,14 @@
#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_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, #define ADVANCED_PAUSE_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_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds
#define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
#define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change
// even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME. // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
//#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume
#endif #endif

@ -758,22 +758,23 @@
#endif #endif
/** /**
* Filament Change * Advanced Pause
* Experimental filament change support. * Experimental feature for filament change support and for parking the nozzle when paused.
* Adds the GCode M600 for initiating filament change. * Adds the GCode M600 for initiating filament change.
* If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
* *
* Requires an LCD display. * Requires an LCD display.
* This feature is required for the default FILAMENT_RUNOUT_SCRIPT. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
*/ */
//#define FILAMENT_CHANGE_FEATURE //#define ADVANCED_PAUSE_FEATURE
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
#define FILAMENT_CHANGE_X_POS 3 // X position of hotend #define PAUSE_PARK_X_POS 3 // X position of hotend
#define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend #define PAUSE_PARK_Y_POS 3 // Y position of hotend
#define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) #define PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm #define PAUSE_PARK_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_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast #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
@ -784,14 +785,14 @@
#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_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, #define ADVANCED_PAUSE_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_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds
#define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
#define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change
// even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME. // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
//#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume
#endif #endif

@ -763,22 +763,23 @@
#endif #endif
/** /**
* Filament Change * Advanced Pause
* Experimental filament change support. * Experimental feature for filament change support and for parking the nozzle when paused.
* Adds the GCode M600 for initiating filament change. * Adds the GCode M600 for initiating filament change.
* If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
* *
* Requires an LCD display. * Requires an LCD display.
* This feature is required for the default FILAMENT_RUNOUT_SCRIPT. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
*/ */
//#define FILAMENT_CHANGE_FEATURE //#define ADVANCED_PAUSE_FEATURE
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
#define FILAMENT_CHANGE_X_POS 3 // X position of hotend #define PAUSE_PARK_X_POS 3 // X position of hotend
#define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend #define PAUSE_PARK_Y_POS 3 // Y position of hotend
#define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) #define PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm #define PAUSE_PARK_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_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast #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
@ -789,14 +790,14 @@
#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_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, #define ADVANCED_PAUSE_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_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds
#define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
#define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change
// even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME. // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
//#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume
#endif #endif

@ -758,22 +758,23 @@
#endif #endif
/** /**
* Filament Change * Advanced Pause
* Experimental filament change support. * Experimental feature for filament change support and for parking the nozzle when paused.
* Adds the GCode M600 for initiating filament change. * Adds the GCode M600 for initiating filament change.
* If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
* *
* Requires an LCD display. * Requires an LCD display.
* This feature is required for the default FILAMENT_RUNOUT_SCRIPT. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
*/ */
//#define FILAMENT_CHANGE_FEATURE //#define ADVANCED_PAUSE_FEATURE
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
#define FILAMENT_CHANGE_X_POS 3 // X position of hotend #define PAUSE_PARK_X_POS 3 // X position of hotend
#define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend #define PAUSE_PARK_Y_POS 3 // Y position of hotend
#define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) #define PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm #define PAUSE_PARK_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_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast #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
@ -784,14 +785,14 @@
#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_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, #define ADVANCED_PAUSE_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_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds
#define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
#define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change
// even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME. // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
//#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume
#endif #endif

@ -763,22 +763,25 @@
#endif #endif
/** /**
* Filament Change * Advanced Pause
* Experimental filament change support. * Experimental feature for filament change support and for parking the nozzle when paused.
* Adds the GCode M600 for initiating filament change. * Adds the GCode M600 for initiating filament change.
* If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
* *
* Requires an LCD display. * Requires an LCD display.
* This feature is required for the default FILAMENT_RUNOUT_SCRIPT. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
*/ */
#define FILAMENT_CHANGE_FEATURE
#if ENABLED(FILAMENT_CHANGE_FEATURE) #define ADVANCED_PAUSE_FEATURE
#define FILAMENT_CHANGE_X_POS 3 // X position of hotend #if ENABLED(ADVANCED_PAUSE_FEATURE)
#define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend #define PAUSE_PARK_X_POS 75 // X position of hotend
#define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) #define PAUSE_PARK_Y_POS 75 // Y position of hotend
#define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) #define PAUSE_PARK_Z_ADD 10 // Z addition of hotend (lift)
#define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) #define PAUSE_PARK_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
#define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s #define PAUSE_PARK_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers)
#define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm #define PAUSE_PARK_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#define PAUSE_PARK_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_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast #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
@ -789,14 +792,14 @@
#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_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, #define ADVANCED_PAUSE_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_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds
#define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
#define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change
// even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME. // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume #define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume
#endif #endif

@ -756,22 +756,23 @@
#endif #endif
/** /**
* Filament Change * Advanced Pause
* Experimental filament change support. * Experimental feature for filament change support and for parking the nozzle when paused.
* Adds the GCode M600 for initiating filament change. * Adds the GCode M600 for initiating filament change.
* If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
* *
* Requires an LCD display. * Requires an LCD display.
* This feature is required for the default FILAMENT_RUNOUT_SCRIPT. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
*/ */
//#define FILAMENT_CHANGE_FEATURE //#define ADVANCED_PAUSE_FEATURE
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
#define FILAMENT_CHANGE_X_POS 3 // X position of hotend #define PAUSE_PARK_X_POS 3 // X position of hotend
#define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend #define PAUSE_PARK_Y_POS 3 // Y position of hotend
#define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) #define PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm #define PAUSE_PARK_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_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast #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
@ -782,14 +783,14 @@
#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_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, #define ADVANCED_PAUSE_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_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds
#define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
#define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change
// even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME. // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
//#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume
#endif #endif

@ -756,22 +756,23 @@
#endif #endif
/** /**
* Filament Change * Advanced Pause
* Experimental filament change support. * Experimental feature for filament change support and for parking the nozzle when paused.
* Adds the GCode M600 for initiating filament change. * Adds the GCode M600 for initiating filament change.
* If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
* *
* Requires an LCD display. * Requires an LCD display.
* This feature is required for the default FILAMENT_RUNOUT_SCRIPT. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
*/ */
//#define FILAMENT_CHANGE_FEATURE //#define ADVANCED_PAUSE_FEATURE
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
#define FILAMENT_CHANGE_X_POS 3 // X position of hotend #define PAUSE_PARK_X_POS 3 // X position of hotend
#define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend #define PAUSE_PARK_Y_POS 3 // Y position of hotend
#define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) #define PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm #define PAUSE_PARK_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_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast #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
@ -782,14 +783,14 @@
#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_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, #define ADVANCED_PAUSE_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_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds
#define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
#define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change
// even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME. // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
//#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume
#endif #endif

@ -759,22 +759,23 @@
#endif #endif
/** /**
* Filament Change * Advanced Pause
* Experimental filament change support. * Experimental feature for filament change support and for parking the nozzle when paused.
* Adds the GCode M600 for initiating filament change. * Adds the GCode M600 for initiating filament change.
* If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
* *
* Requires an LCD display. * Requires an LCD display.
* This feature is required for the default FILAMENT_RUNOUT_SCRIPT. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
*/ */
//#define FILAMENT_CHANGE_FEATURE //#define ADVANCED_PAUSE_FEATURE
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
#define FILAMENT_CHANGE_X_POS 3 // X position of hotend #define PAUSE_PARK_X_POS 3 // X position of hotend
#define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend #define PAUSE_PARK_Y_POS 3 // Y position of hotend
#define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) #define PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_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 PAUSE_PARK_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm #define PAUSE_PARK_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_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast #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
@ -785,14 +786,14 @@
#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_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, #define ADVANCED_PAUSE_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_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds
#define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
#define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change
// even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME. // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
//#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume
#endif #endif

@ -214,8 +214,8 @@
#define MSG_DRIVE_STRENGTH _UxGT("Fuerza d'o driver") #define MSG_DRIVE_STRENGTH _UxGT("Fuerza d'o driver")
#define MSG_DAC_PERCENT _UxGT("Driver %") #define MSG_DAC_PERCENT _UxGT("Driver %")
#define MSG_DAC_EEPROM_WRITE _UxGT("Escri. DAC EEPROM") #define MSG_DAC_EEPROM_WRITE _UxGT("Escri. DAC EEPROM")
#define MSG_FILAMENT_CHANGE_HEADER _UxGT("Cambear filamento") #define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED")
#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("Opcion de cambio:") #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:")
#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extruir mas") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extruir mas")
#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Resumir imp.") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Resumir imp.")

@ -216,8 +216,8 @@
#define MSG_DAC_PERCENT _UxGT("Driver %") #define MSG_DAC_PERCENT _UxGT("Driver %")
#define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM Write") #define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM Write")
#define MSG_FILAMENT_CHANGE_HEADER _UxGT("CHANGE FILAMENT") #define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED")
#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("CHANGE OPTIONS:") #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:")
#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extrude more") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extrude more")
#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Resume print") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Resume print")

@ -218,8 +218,8 @@
#define MSG_DRIVE_STRENGTH _UxGT("Força motor") #define MSG_DRIVE_STRENGTH _UxGT("Força motor")
#define MSG_DAC_PERCENT _UxGT("Driver %") #define MSG_DAC_PERCENT _UxGT("Driver %")
#define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM Write") #define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM Write")
#define MSG_FILAMENT_CHANGE_HEADER _UxGT("CANVI DE FILAMENT") #define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED")
#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("OPCIONS CANVI:") #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:")
#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extrudeix mes") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extrudeix mes")
#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Repren impressió") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Repren impressió")
#define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("Temp minima es ") #define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("Temp minima es ")

@ -225,8 +225,8 @@
#define MSG_DAC_PERCENT _UxGT("Motor %") #define MSG_DAC_PERCENT _UxGT("Motor %")
#define MSG_DAC_EEPROM_WRITE _UxGT("Ulozit do EEPROM") #define MSG_DAC_EEPROM_WRITE _UxGT("Ulozit do EEPROM")
#define MSG_FILAMENT_CHANGE_HEADER _UxGT("VYMENA FILAMENTU") #define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED")
#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("CO DAL?") #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:")
#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Jeste vytlacit") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Jeste vytlacit")
#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Obnovit tisk") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Obnovit tisk")
#define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("Min. teplota je ") #define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("Min. teplota je ")

@ -215,8 +215,8 @@
#define MSG_DAC_PERCENT _UxGT("Driv %") #define MSG_DAC_PERCENT _UxGT("Driv %")
#define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM Skriv") #define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM Skriv")
#define MSG_FILAMENT_CHANGE_HEADER _UxGT("SKIFT FILAMENT") #define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED")
#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("Skift muligheder:") #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:")
#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extruder mere") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extruder mere")
#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Forsæt print") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Forsæt print")

@ -227,8 +227,8 @@
#define MSG_DAC_PERCENT _UxGT("Treiber %") #define MSG_DAC_PERCENT _UxGT("Treiber %")
#define MSG_DAC_EEPROM_WRITE _UxGT("Werte speichern") #define MSG_DAC_EEPROM_WRITE _UxGT("Werte speichern")
#define MSG_FILAMENT_CHANGE_HEADER _UxGT("ÄNDERE FILAMENT") #define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED")
#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("ÄNDERE OPTIONEN:") #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:")
#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extrude mehr") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extrude mehr")
#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Drucke weiter") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Drucke weiter")
#define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("Min. Temperatur ist ") #define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("Min. Temperatur ist ")

@ -499,6 +499,9 @@
#ifndef MSG_USERWAIT #ifndef MSG_USERWAIT
#define MSG_USERWAIT _UxGT("Click to resume...") #define MSG_USERWAIT _UxGT("Click to resume...")
#endif #endif
#ifndef MSG_PRINT_PAUSED
#define MSG_PRINT_PAUSED _UxGT("Print paused")
#endif
#ifndef MSG_RESUMING #ifndef MSG_RESUMING
#define MSG_RESUMING _UxGT("Resuming print") #define MSG_RESUMING _UxGT("Resuming print")
#endif #endif
@ -742,10 +745,10 @@
#define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM Write") #define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM Write")
#endif #endif
#ifndef MSG_FILAMENT_CHANGE_HEADER #ifndef MSG_FILAMENT_CHANGE_HEADER
#define MSG_FILAMENT_CHANGE_HEADER _UxGT("CHANGE FILAMENT") #define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED")
#endif #endif
#ifndef MSG_FILAMENT_CHANGE_OPTION_HEADER #ifndef MSG_FILAMENT_CHANGE_OPTION_HEADER
#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("CHANGE OPTIONS:") #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:")
#endif #endif
#ifndef MSG_FILAMENT_CHANGE_OPTION_EXTRUDE #ifndef MSG_FILAMENT_CHANGE_OPTION_EXTRUDE
#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extrude more") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extrude more")

@ -221,8 +221,8 @@
#define MSG_DAC_PERCENT _UxGT("Driver %") #define MSG_DAC_PERCENT _UxGT("Driver %")
#define MSG_DAC_EEPROM_WRITE _UxGT("Escribe DAC EEPROM") #define MSG_DAC_EEPROM_WRITE _UxGT("Escribe DAC EEPROM")
#define MSG_FILAMENT_CHANGE_HEADER _UxGT("Cambiar Filamento") #define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED")
#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("Opciones de cambio:") #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:")
#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extruir mas") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extruir mas")
#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Resumir imp.") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Resumir imp.")

@ -229,8 +229,8 @@
#define MSG_DAC_PERCENT _UxGT("Driver %") #define MSG_DAC_PERCENT _UxGT("Driver %")
#define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM sauv.") #define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM sauv.")
#define MSG_FILAMENT_CHANGE_HEADER _UxGT("CHANGER FILAMENT") #define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED")
#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("CHANGER OPTIONS:") #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:")
#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("+ extrusion") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("+ extrusion")
#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Reprendre impr.") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Reprendre impr.")
#define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("La temp. minimum est ") #define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("La temp. minimum est ")

@ -212,8 +212,8 @@
#define MSG_DAC_PERCENT _UxGT("Motor %") #define MSG_DAC_PERCENT _UxGT("Motor %")
#define MSG_DAC_EEPROM_WRITE _UxGT("Garda DAC EEPROM") #define MSG_DAC_EEPROM_WRITE _UxGT("Garda DAC EEPROM")
#define MSG_FILAMENT_CHANGE_HEADER _UxGT("TROCO FILAMENTO") #define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED")
#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("OPCIONS TROCO:") #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:")
#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extruir mais") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extruir mais")
#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Segue traballo") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Segue traballo")

@ -213,8 +213,8 @@
#define MSG_DAC_PERCENT _UxGT("Driver %") #define MSG_DAC_PERCENT _UxGT("Driver %")
#define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM Write") #define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM Write")
#define MSG_FILAMENT_CHANGE_HEADER _UxGT("CHANGE FILAMENT") #define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED")
#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("CHANGE OPTIONS:") #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:")
#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extrudiraj više") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extrudiraj više")
#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Nastavi print") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Nastavi print")

@ -238,8 +238,8 @@
#define MSG_DAC_PERCENT _UxGT("Driver %") #define MSG_DAC_PERCENT _UxGT("Driver %")
#define MSG_DAC_EEPROM_WRITE _UxGT("Scrivi DAC EEPROM") #define MSG_DAC_EEPROM_WRITE _UxGT("Scrivi DAC EEPROM")
#define MSG_FILAMENT_CHANGE_HEADER _UxGT("CAMBIA FILAMENTO") #define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED")
#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("CAMBIA OPZIONI:") #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:")
#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Estrusione") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Estrusione")
#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Riprendi stampa") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Riprendi stampa")
#if ENABLED(DOGLCD) #if ENABLED(DOGLCD)

@ -285,8 +285,8 @@
#define MSG_DAC_PERCENT "DAC\xbc\xad\xc2\xd8\xae\xb8" // "DACシュツリョク" ("Driver %") #define MSG_DAC_PERCENT "DAC\xbc\xad\xc2\xd8\xae\xb8" // "DACシュツリョク" ("Driver %")
#endif #endif
#define MSG_DAC_EEPROM_WRITE MSG_STORE_EPROM // "メモリヘカクノウ" ("DAC EEPROM Write") #define MSG_DAC_EEPROM_WRITE MSG_STORE_EPROM // "メモリヘカクノウ" ("DAC EEPROM Write")
#define MSG_FILAMENT_CHANGE_HEADER "\xcc\xa8\xd7\xd2\xdd\xc4\xba\xb3\xb6\xdd" // "フィラメントコウカン" ("CHANGE FILAMENT") #define MSG_FILAMENT_CHANGE_HEADER "PRINT PAUSED"
#define MSG_FILAMENT_CHANGE_OPTION_HEADER "\xc4\xde\xb3\xbb\xa6\xbe\xdd\xc0\xb8\xbc\xc3\xb8\xc0\xde\xbb\xb2" // "ドウサヲセンタクシテクダサイ" ("CHANGE OPTIONS:") #define MSG_FILAMENT_CHANGE_OPTION_HEADER "RESUME OPTIONS:"
#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE "\xbb\xd7\xc6\xb5\xbc\xc0\xde\xbd" // "サラニオシダス" ("Extrude more") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE "\xbb\xd7\xc6\xb5\xbc\xc0\xde\xbd" // "サラニオシダス" ("Extrude more")
#define MSG_FILAMENT_CHANGE_OPTION_RESUME "\xcc\xdf\xd8\xdd\xc4\xbb\xb2\xb6\xb2" // "プリントサイカイ" ("Resume print") #define MSG_FILAMENT_CHANGE_OPTION_RESUME "\xcc\xdf\xd8\xdd\xc4\xbb\xb2\xb6\xb2" // "プリントサイカイ" ("Resume print")

@ -212,8 +212,8 @@
#define MSG_DRIVE_STRENGTH _UxGT("モータークドウリョク") // "Drive Strength" #define MSG_DRIVE_STRENGTH _UxGT("モータークドウリョク") // "Drive Strength"
#define MSG_DAC_PERCENT _UxGT("DACシュツリョク %") // "Driver %" #define MSG_DAC_PERCENT _UxGT("DACシュツリョク %") // "Driver %"
#define MSG_DAC_EEPROM_WRITE MSG_STORE_EPROM // "DAC EEPROM Write" #define MSG_DAC_EEPROM_WRITE MSG_STORE_EPROM // "DAC EEPROM Write"
#define MSG_FILAMENT_CHANGE_HEADER _UxGT("フィラメントコウカン") // "CHANGE FILAMENT" #define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED")
#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("ドウサヲセンタクシテクダサイ") // "CHANGE OPTIONS:" #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:")
#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("サラニオシダス") // "Extrude more" #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("サラニオシダス") // "Extrude more"
#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("プリントサイカイ") // "Resume print" #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("プリントサイカイ") // "Resume print"
#define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("コウカンヲカイシシマス") // "Wait for start" #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("コウカンヲカイシシマス") // "Wait for start"

@ -224,8 +224,8 @@
#define MSG_DRIVE_STRENGTH _UxGT("Motorstroom") #define MSG_DRIVE_STRENGTH _UxGT("Motorstroom")
#define MSG_DAC_PERCENT _UxGT("Driver %") //accepted English term in Dutch #define MSG_DAC_PERCENT _UxGT("Driver %") //accepted English term in Dutch
#define MSG_DAC_EEPROM_WRITE _UxGT("DAC Opslaan") #define MSG_DAC_EEPROM_WRITE _UxGT("DAC Opslaan")
#define MSG_FILAMENT_CHANGE_HEADER _UxGT("WISSEL FILAMENT") #define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED")
#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("WISSEL OPTIES:") #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:")
#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extrudeer meer") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extrudeer meer")
#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Hervat print") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Hervat print")
#define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("Minimum Temp is ") #define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("Minimum Temp is ")

@ -433,8 +433,8 @@
#define MSG_DAC_PERCENT _UxGT("Sila %") #define MSG_DAC_PERCENT _UxGT("Sila %")
#define MSG_DAC_EEPROM_WRITE _UxGT("Zapisz DAC EEPROM") #define MSG_DAC_EEPROM_WRITE _UxGT("Zapisz DAC EEPROM")
#define MSG_FILAMENT_CHANGE_HEADER _UxGT("ZMIEN FILAMENT") #define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED")
#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("ZMIEN OPCJE:") #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:")
#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Ekstruduj wiecej") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Ekstruduj wiecej")
#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Wznow drukowanie") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Wznow drukowanie")

@ -227,8 +227,8 @@
#define MSG_DRIVE_STRENGTH _UxGT("Sürücü Gücü") // Sürücü Gücü #define MSG_DRIVE_STRENGTH _UxGT("Sürücü Gücü") // Sürücü Gücü
#define MSG_DAC_PERCENT _UxGT("Sürücü %") // Sürücü % #define MSG_DAC_PERCENT _UxGT("Sürücü %") // Sürücü %
#define MSG_DAC_EEPROM_WRITE _UxGT("DAC'ı EEPROM'a Yaz") // DAC'ı EEPROM'a Yaz #define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED")
#define MSG_FILAMENT_CHANGE_HEADER _UxGT("Filaman Değiştir") // Filaman Değiştir #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:")
#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("Seçenekler:") // Seçenekler: #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("Seçenekler:") // Seçenekler:
#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Daha Akıt") // Daha Akıt #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Daha Akıt") // Daha Akıt
#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Baskıyı sürdür") // Baskıyı sürdür #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Baskıyı sürdür") // Baskıyı sürdür

@ -203,8 +203,8 @@
#define MSG_DAC_PERCENT _UxGT("% мотору") #define MSG_DAC_PERCENT _UxGT("% мотору")
#define MSG_DAC_EEPROM_WRITE _UxGT("Запис ЦАП на ПЗП") #define MSG_DAC_EEPROM_WRITE _UxGT("Запис ЦАП на ПЗП")
#define MSG_FILAMENT_CHANGE_HEADER _UxGT("ЗАМІНА ВОЛОКНА") #define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED")
#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("НАЛАШТ. ЗАМІНИ:") #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:")
#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Екструдувати") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Екструдувати")
#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Відновити друк") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Відновити друк")

@ -199,8 +199,8 @@
#define MSG_INFO_MAX_TEMP _UxGT("最高温度") //"Max Temp" #define MSG_INFO_MAX_TEMP _UxGT("最高温度") //"Max Temp"
#define MSG_INFO_PSU _UxGT("电源供应") //"Power Supply" #define MSG_INFO_PSU _UxGT("电源供应") //"Power Supply"
#define MSG_FILAMENT_CHANGE_HEADER _UxGT("修改丝料") //"CHANGE FILAMENT" #define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED")
#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("修改选项:") //"CHANGE OPTIONS:" #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:")
#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("挤出更多") //"Extrude more" #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("挤出更多") //"Extrude more"
#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("恢复打印") //"Resume print" #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("恢复打印") //"Resume print"

@ -199,8 +199,8 @@
#define MSG_INFO_MAX_TEMP _UxGT("最高溫度") //"Max Temp" #define MSG_INFO_MAX_TEMP _UxGT("最高溫度") //"Max Temp"
#define MSG_INFO_PSU _UxGT("電源供應") //"Power Supply" #define MSG_INFO_PSU _UxGT("電源供應") //"Power Supply"
#define MSG_FILAMENT_CHANGE_HEADER _UxGT("修改絲料") //"CHANGE FILAMENT" #define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED")
#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("修改選項:") //"CHANGE OPTIONS:" #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:")
#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("擠出更多") //"Extrude more" #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("擠出更多") //"Extrude more"
#define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("恢複列印") //"Resume print" #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("恢複列印") //"Resume print"

@ -202,9 +202,14 @@ uint8_t Temperature::soft_pwm_amount[HOTENDS],
#if ENABLED(PROBING_HEATERS_OFF) #if ENABLED(PROBING_HEATERS_OFF)
bool Temperature::paused; bool Temperature::paused;
int16_t Temperature::paused_hotend_temp[HOTENDS]; #endif
#if ENABLED(ADVANCED_PAUSE_FEATURE)
millis_t Temperature::heater_idle_timeout_ms[HOTENDS] = { 0 };
bool Temperature::heater_idle_timeout_exceeded[HOTENDS] = { false };
#if HAS_TEMP_BED #if HAS_TEMP_BED
int16_t Temperature::paused_bed_temp; millis_t Temperature::bed_idle_timeout_ms = 0;
bool Temperature::bed_idle_timeout_exceeded = false;
#endif #endif
#endif #endif
@ -554,11 +559,22 @@ float Temperature::get_pid_output(int e) {
pid_error[HOTEND_INDEX] = target_temperature[HOTEND_INDEX] - current_temperature[HOTEND_INDEX]; pid_error[HOTEND_INDEX] = target_temperature[HOTEND_INDEX] - current_temperature[HOTEND_INDEX];
dTerm[HOTEND_INDEX] = K2 * PID_PARAM(Kd, HOTEND_INDEX) * (current_temperature[HOTEND_INDEX] - temp_dState[HOTEND_INDEX]) + K1 * dTerm[HOTEND_INDEX]; dTerm[HOTEND_INDEX] = K2 * PID_PARAM(Kd, HOTEND_INDEX) * (current_temperature[HOTEND_INDEX] - temp_dState[HOTEND_INDEX]) + K1 * dTerm[HOTEND_INDEX];
temp_dState[HOTEND_INDEX] = current_temperature[HOTEND_INDEX]; temp_dState[HOTEND_INDEX] = current_temperature[HOTEND_INDEX];
#if ENABLED(ADVANCED_PAUSE_FEATURE)
if (heater_idle_timeout_exceeded[HOTEND_INDEX]) {
pid_output = 0;
pid_reset[HOTEND_INDEX] = true;
}
else
#endif
if (pid_error[HOTEND_INDEX] > PID_FUNCTIONAL_RANGE) { if (pid_error[HOTEND_INDEX] > PID_FUNCTIONAL_RANGE) {
pid_output = BANG_MAX; pid_output = BANG_MAX;
pid_reset[HOTEND_INDEX] = true; pid_reset[HOTEND_INDEX] = true;
} }
else if (pid_error[HOTEND_INDEX] < -(PID_FUNCTIONAL_RANGE) || target_temperature[HOTEND_INDEX] == 0) { else if (pid_error[HOTEND_INDEX] < -(PID_FUNCTIONAL_RANGE) || target_temperature[HOTEND_INDEX] == 0
#if ENABLED(ADVANCED_PAUSE_FEATURE)
|| heater_idle_timeout_exceeded[HOTEND_INDEX]
#endif
) {
pid_output = 0; pid_output = 0;
pid_reset[HOTEND_INDEX] = true; pid_reset[HOTEND_INDEX] = true;
} }
@ -618,6 +634,11 @@ float Temperature::get_pid_output(int e) {
#endif // PID_DEBUG #endif // PID_DEBUG
#else /* PID off */ #else /* PID off */
#if ENABLED(ADVANCED_PAUSE_FEATURE)
if (heater_idle_timeout_exceeded[HOTEND_INDEX])
pid_output = 0;
else
#endif
pid_output = (current_temperature[HOTEND_INDEX] < target_temperature[HOTEND_INDEX]) ? PID_MAX : 0; pid_output = (current_temperature[HOTEND_INDEX] < target_temperature[HOTEND_INDEX]) ? PID_MAX : 0;
#endif #endif
@ -699,12 +720,17 @@ void Temperature::manage_heater() {
if (current_temperature[0] < max(HEATER_0_MINTEMP, MAX6675_TMIN + .01)) min_temp_error(0); if (current_temperature[0] < max(HEATER_0_MINTEMP, MAX6675_TMIN + .01)) min_temp_error(0);
#endif #endif
#if WATCH_HOTENDS || WATCH_THE_BED || DISABLED(PIDTEMPBED) || HAS_AUTO_FAN #if WATCH_HOTENDS || WATCH_THE_BED || DISABLED(PIDTEMPBED) || HAS_AUTO_FAN || ENABLED(ADVANCED_PAUSE_FEATURE)
millis_t ms = millis(); millis_t ms = millis();
#endif #endif
HOTEND_LOOP() { HOTEND_LOOP() {
#if ENABLED(ADVANCED_PAUSE_FEATURE)
if (!heater_idle_timeout_exceeded[e] && heater_idle_timeout_ms[e] && ELAPSED(ms, heater_idle_timeout_ms[e]))
heater_idle_timeout_exceeded[e] = true;
#endif
#if ENABLED(THERMAL_PROTECTION_HOTENDS) #if ENABLED(THERMAL_PROTECTION_HOTENDS)
// Check for thermal runaway // Check for thermal runaway
thermal_runaway_protection(&thermal_runaway_state_machine[e], &thermal_runaway_timer[e], current_temperature[e], target_temperature[e], e, THERMAL_PROTECTION_PERIOD, THERMAL_PROTECTION_HYSTERESIS); thermal_runaway_protection(&thermal_runaway_state_machine[e], &thermal_runaway_timer[e], current_temperature[e], target_temperature[e], e, THERMAL_PROTECTION_PERIOD, THERMAL_PROTECTION_HYSTERESIS);
@ -722,16 +748,6 @@ void Temperature::manage_heater() {
} }
#endif #endif
#if WATCH_THE_BED
// Make sure temperature is increasing
if (watch_bed_next_ms && ELAPSED(ms, watch_bed_next_ms)) { // Time to check the bed?
if (degBed() < watch_target_bed_temp) // Failed to increase enough?
_temp_error(-1, PSTR(MSG_T_HEATING_FAILED), PSTR(MSG_HEATING_FAILED_LCD));
else // Start again if the target is still far off
start_watching_bed();
}
#endif
#if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT) #if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT)
// Make sure measured temperatures are close together // Make sure measured temperatures are close together
if (fabs(current_temperature[0] - redundant_temperature) > MAX_REDUNDANT_TEMP_SENSOR_DIFF) if (fabs(current_temperature[0] - redundant_temperature) > MAX_REDUNDANT_TEMP_SENSOR_DIFF)
@ -761,43 +777,71 @@ void Temperature::manage_heater() {
} }
#endif // FILAMENT_WIDTH_SENSOR #endif // FILAMENT_WIDTH_SENSOR
#if WATCH_THE_BED
// Make sure temperature is increasing
if (watch_bed_next_ms && ELAPSED(ms, watch_bed_next_ms)) { // Time to check the bed?
if (degBed() < watch_target_bed_temp) // Failed to increase enough?
_temp_error(-1, PSTR(MSG_T_HEATING_FAILED), PSTR(MSG_HEATING_FAILED_LCD));
else // Start again if the target is still far off
start_watching_bed();
}
#endif // WATCH_THE_BED
#if DISABLED(PIDTEMPBED) #if DISABLED(PIDTEMPBED)
if (PENDING(ms, next_bed_check_ms)) return; if (PENDING(ms, next_bed_check_ms)) return;
next_bed_check_ms = ms + BED_CHECK_INTERVAL; next_bed_check_ms = ms + BED_CHECK_INTERVAL;
#endif #endif
#if TEMP_SENSOR_BED != 0 #if HAS_TEMP_BED
#if ENABLED(ADVANCED_PAUSE_FEATURE)
if (!bed_idle_timeout_exceeded && bed_idle_timeout_ms && ELAPSED(ms, bed_idle_timeout_ms))
bed_idle_timeout_exceeded = true;
#endif
#if HAS_THERMALLY_PROTECTED_BED #if HAS_THERMALLY_PROTECTED_BED
thermal_runaway_protection(&thermal_runaway_bed_state_machine, &thermal_runaway_bed_timer, current_temperature_bed, target_temperature_bed, -1, THERMAL_PROTECTION_BED_PERIOD, THERMAL_PROTECTION_BED_HYSTERESIS); thermal_runaway_protection(&thermal_runaway_bed_state_machine, &thermal_runaway_bed_timer, current_temperature_bed, target_temperature_bed, -1, THERMAL_PROTECTION_BED_PERIOD, THERMAL_PROTECTION_BED_HYSTERESIS);
#endif #endif
#if ENABLED(PIDTEMPBED) #if ENABLED(ADVANCED_PAUSE_FEATURE)
soft_pwm_amount_bed = WITHIN(current_temperature_bed, BED_MINTEMP, BED_MAXTEMP) ? (int)get_pid_output_bed() >> 1 : 0; if (bed_idle_timeout_exceeded)
{
#elif ENABLED(BED_LIMIT_SWITCHING)
// Check if temperature is within the correct band
if (WITHIN(current_temperature_bed, BED_MINTEMP, BED_MAXTEMP)) {
if (current_temperature_bed >= target_temperature_bed + BED_HYSTERESIS)
soft_pwm_amount_bed = 0;
else if (current_temperature_bed <= target_temperature_bed - (BED_HYSTERESIS))
soft_pwm_amount_bed = MAX_BED_POWER >> 1;
}
else {
soft_pwm_amount_bed = 0; soft_pwm_amount_bed = 0;
WRITE_HEATER_BED(LOW);
} #if DISABLED(PIDTEMPBED)
#else // !PIDTEMPBED && !BED_LIMIT_SWITCHING WRITE_HEATER_BED(LOW);
// Check if temperature is within the correct range #endif
if (WITHIN(current_temperature_bed, BED_MINTEMP, BED_MAXTEMP)) {
soft_pwm_amount_bed = current_temperature_bed < target_temperature_bed ? MAX_BED_POWER >> 1 : 0;
}
else {
soft_pwm_amount_bed = 0;
WRITE_HEATER_BED(LOW);
} }
else
#endif #endif
#endif // TEMP_SENSOR_BED != 0 {
#if ENABLED(PIDTEMPBED)
soft_pwm_amount_bed = WITHIN(current_temperature_bed, BED_MINTEMP, BED_MAXTEMP) ? (int)get_pid_output_bed() >> 1 : 0;
#elif ENABLED(BED_LIMIT_SWITCHING)
// Check if temperature is within the correct band
if (WITHIN(current_temperature_bed, BED_MINTEMP, BED_MAXTEMP)) {
if (current_temperature_bed >= target_temperature_bed + BED_HYSTERESIS)
soft_pwm_amount_bed = 0;
else if (current_temperature_bed <= target_temperature_bed - (BED_HYSTERESIS))
soft_pwm_amount_bed = MAX_BED_POWER >> 1;
}
else {
soft_pwm_amount_bed = 0;
WRITE_HEATER_BED(LOW);
}
#else // !PIDTEMPBED && !BED_LIMIT_SWITCHING
// Check if temperature is within the correct range
if (WITHIN(current_temperature_bed, BED_MINTEMP, BED_MAXTEMP)) {
soft_pwm_amount_bed = current_temperature_bed < target_temperature_bed ? MAX_BED_POWER >> 1 : 0;
}
else {
soft_pwm_amount_bed = 0;
WRITE_HEATER_BED(LOW);
}
#endif
}
#endif // HAS_TEMP_BED
} }
#define PGM_RD_W(x) (short)pgm_read_word(&x) #define PGM_RD_W(x) (short)pgm_read_word(&x)
@ -1180,10 +1224,6 @@ void Temperature::init() {
#if ENABLED(PROBING_HEATERS_OFF) #if ENABLED(PROBING_HEATERS_OFF)
paused = false; paused = false;
ZERO(paused_hotend_temp);
#if HAS_TEMP_BED
paused_bed_temp = 0;
#endif
#endif #endif
} }
@ -1246,11 +1286,29 @@ void Temperature::init() {
SERIAL_ECHOPAIR(" ; Timer:", *timer); SERIAL_ECHOPAIR(" ; Timer:", *timer);
SERIAL_ECHOPAIR(" ; Temperature:", current); SERIAL_ECHOPAIR(" ; Temperature:", current);
SERIAL_ECHOPAIR(" ; Target Temp:", target); SERIAL_ECHOPAIR(" ; Target Temp:", target);
if (heater_id >= 0)
SERIAL_ECHOPAIR(" ; Idle Timeout:", heater_idle_timeout_exceeded[heater_id]);
else
SERIAL_ECHOPAIR(" ; Idle Timeout:", bed_idle_timeout_exceeded);
SERIAL_EOL; SERIAL_EOL;
*/ */
int heater_index = heater_id >= 0 ? heater_id : HOTENDS; int heater_index = heater_id >= 0 ? heater_id : HOTENDS;
#if ENABLED(ADVANCED_PAUSE_FEATURE)
// If the heater idle timeout expires, restart
if (heater_id >= 0 && heater_idle_timeout_exceeded[heater_id]) {
*state = TRInactive;
tr_target_temperature[heater_index] = 0;
}
#if HAS_TEMP_BED
else if (heater_id < 0 && bed_idle_timeout_exceeded) {
*state = TRInactive;
tr_target_temperature[heater_index] = 0;
}
#endif
else
#endif
// If the target temperature changes, restart // If the target temperature changes, restart
if (tr_target_temperature[heater_index] != target) { if (tr_target_temperature[heater_index] != target) {
tr_target_temperature[heater_index] = target; tr_target_temperature[heater_index] = target;
@ -1290,11 +1348,7 @@ void Temperature::disable_all_heaters() {
// Unpause and reset everything // Unpause and reset everything
#if ENABLED(PROBING_HEATERS_OFF) #if ENABLED(PROBING_HEATERS_OFF)
paused = false; pause(false);
ZERO(paused_hotend_temp);
#if HAS_TEMP_BED
paused_bed_temp = 0;
#endif
#endif #endif
// If all heaters go down then for sure our print job has stopped // If all heaters go down then for sure our print job has stopped
@ -1337,19 +1391,15 @@ void Temperature::disable_all_heaters() {
if (p != paused) { if (p != paused) {
paused = p; paused = p;
if (p) { if (p) {
HOTEND_LOOP() { HOTEND_LOOP() start_heater_idle_timer(e, 0); // timeout immediately
paused_hotend_temp[e] = degTargetHotend(e);
setTargetHotend(0, e);
}
#if HAS_TEMP_BED #if HAS_TEMP_BED
paused_bed_temp = degTargetBed(); start_bed_idle_timer(0); // timeout immediately
setTargetBed(0);
#endif #endif
} }
else { else {
HOTEND_LOOP() setTargetHotend(paused_hotend_temp[e], e); HOTEND_LOOP() reset_heater_idle_timer(e);
#if HAS_TEMP_BED #if HAS_TEMP_BED
setTargetBed(paused_bed_temp); reset_bed_idle_timer();
#endif #endif
} }
} }

@ -257,10 +257,14 @@ class Temperature {
#if ENABLED(PROBING_HEATERS_OFF) #if ENABLED(PROBING_HEATERS_OFF)
static bool paused; static bool paused;
static int16_t paused_hotend_temp[HOTENDS]; #endif
#if ENABLED(ADVANCED_PAUSE_FEATURE)
static millis_t heater_idle_timeout_ms[HOTENDS];
static bool heater_idle_timeout_exceeded[HOTENDS];
#if HAS_TEMP_BED #if HAS_TEMP_BED
static int16_t paused_bed_temp; static millis_t bed_idle_timeout_ms;
static bool bed_idle_timeout_exceeded;
#endif #endif
#endif #endif
@ -458,6 +462,54 @@ class Temperature {
#if ENABLED(PROBING_HEATERS_OFF) #if ENABLED(PROBING_HEATERS_OFF)
static void pause(const bool p); static void pause(const bool p);
static bool is_paused() { return paused; }
#endif
#if ENABLED(ADVANCED_PAUSE_FEATURE)
static void start_heater_idle_timer(uint8_t e, millis_t timeout_ms) {
#if HOTENDS == 1
UNUSED(e);
#endif
heater_idle_timeout_ms[HOTEND_INDEX] = millis() + timeout_ms;
heater_idle_timeout_exceeded[HOTEND_INDEX] = false;
}
static void reset_heater_idle_timer(uint8_t e) {
#if HOTENDS == 1
UNUSED(e);
#endif
heater_idle_timeout_ms[HOTEND_INDEX] = 0;
heater_idle_timeout_exceeded[HOTEND_INDEX] = false;
#if WATCH_HOTENDS
start_watching_heater(HOTEND_INDEX);
#endif
}
static bool is_heater_idle(uint8_t e) {
#if HOTENDS == 1
UNUSED(e);
#endif
return heater_idle_timeout_exceeded[HOTEND_INDEX];
}
#if HAS_TEMP_BED
static void start_bed_idle_timer(millis_t timeout_ms) {
bed_idle_timeout_ms = millis() + timeout_ms;
bed_idle_timeout_exceeded = false;
}
static void reset_bed_idle_timer() {
bed_idle_timeout_ms = 0;
bed_idle_timeout_exceeded = false;
#if WATCH_THE_BED
start_watching_bed();
#endif
}
static bool is_bed_idle() {
return bed_idle_timeout_exceeded;
}
#endif
#endif #endif
private: private:

@ -126,16 +126,16 @@ uint16_t max_display_update_time = 0;
void lcd_info_menu(); void lcd_info_menu();
#endif // LCD_INFO_MENU #endif // LCD_INFO_MENU
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
void lcd_filament_change_toocold_menu(); void lcd_advanced_pause_toocold_menu();
void lcd_filament_change_option_menu(); void lcd_advanced_pause_option_menu();
void lcd_filament_change_init_message(); void lcd_advanced_pause_init_message();
void lcd_filament_change_unload_message(); void lcd_advanced_pause_unload_message();
void lcd_filament_change_insert_message(); void lcd_advanced_pause_insert_message();
void lcd_filament_change_load_message(); void lcd_advanced_pause_load_message();
void lcd_filament_change_heat_nozzle(); void lcd_advanced_pause_heat_nozzle();
void lcd_filament_change_extrude_message(); void lcd_advanced_pause_extrude_message();
void lcd_filament_change_resume_message(); void lcd_advanced_pause_resume_message();
#endif #endif
#if ENABLED(DAC_STEPPER_CURRENT) #if ENABLED(DAC_STEPPER_CURRENT)
@ -676,6 +676,7 @@ void kill_screen(const char* lcd_msg) {
#if ENABLED(PARK_HEAD_ON_PAUSE) #if ENABLED(PARK_HEAD_ON_PAUSE)
enqueue_and_echo_commands_P(PSTR("M125")); enqueue_and_echo_commands_P(PSTR("M125"));
#endif #endif
lcd_setstatuspgm(PSTR(MSG_PRINT_PAUSED), true);
} }
void lcd_sdcard_resume() { void lcd_sdcard_resume() {
@ -685,6 +686,7 @@ void kill_screen(const char* lcd_msg) {
card.startFileprint(); card.startFileprint();
print_job_timer.start(); print_job_timer.start();
#endif #endif
lcd_setstatuspgm(PSTR(""), true);
} }
void lcd_sdcard_stop() { void lcd_sdcard_stop() {
@ -1006,15 +1008,15 @@ void kill_screen(const char* lcd_msg) {
void watch_temp_callback_bed() { thermalManager.start_watching_bed(); } void watch_temp_callback_bed() { thermalManager.start_watching_bed(); }
#endif #endif
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
void lcd_enqueue_filament_change() { void lcd_enqueue_filament_change() {
if (!DEBUGGING(DRYRUN) && thermalManager.tooColdToExtrude(active_extruder)) { if (!DEBUGGING(DRYRUN) && thermalManager.tooColdToExtrude(active_extruder)) {
lcd_save_previous_screen(); lcd_save_previous_screen();
lcd_goto_screen(lcd_filament_change_toocold_menu); lcd_goto_screen(lcd_advanced_pause_toocold_menu);
return; return;
} }
lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_INIT); lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INIT);
enqueue_and_echo_commands_P(PSTR("M600")); enqueue_and_echo_commands_P(PSTR("M600 B0"));
} }
#endif #endif
@ -1129,7 +1131,7 @@ void kill_screen(const char* lcd_msg) {
// //
// Change filament // Change filament
// //
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
if (!thermalManager.tooColdToExtrude(active_extruder)) if (!thermalManager.tooColdToExtrude(active_extruder))
MENU_ITEM(function, MSG_FILAMENTCHANGE, lcd_enqueue_filament_change); MENU_ITEM(function, MSG_FILAMENTCHANGE, lcd_enqueue_filament_change);
#endif #endif
@ -2043,7 +2045,7 @@ void kill_screen(const char* lcd_msg) {
// //
// Change filament // Change filament
// //
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
if (!thermalManager.tooColdToExtrude(active_extruder)) if (!thermalManager.tooColdToExtrude(active_extruder))
MENU_ITEM(function, MSG_FILAMENTCHANGE, lcd_enqueue_filament_change); MENU_ITEM(function, MSG_FILAMENTCHANGE, lcd_enqueue_filament_change);
#endif #endif
@ -3183,7 +3185,7 @@ void kill_screen(const char* lcd_msg) {
* Filament Change Feature Screens * Filament Change Feature Screens
* *
*/ */
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
// Portions from STATIC_ITEM... // Portions from STATIC_ITEM...
#define HOTEND_STATUS_ITEM() do { \ #define HOTEND_STATUS_ITEM() do { \
@ -3201,7 +3203,7 @@ void kill_screen(const char* lcd_msg) {
++_thisItemNr; \ ++_thisItemNr; \
} while(0) } while(0)
void lcd_filament_change_toocold_menu() { void lcd_advanced_pause_toocold_menu() {
START_MENU(); START_MENU();
STATIC_ITEM(MSG_HEATING_FAILED_LCD, true, true); STATIC_ITEM(MSG_HEATING_FAILED_LCD, true, true);
STATIC_ITEM(MSG_FILAMENT_CHANGE_MINTEMP STRINGIFY(EXTRUDE_MINTEMP) ".", false, false); STATIC_ITEM(MSG_FILAMENT_CHANGE_MINTEMP STRINGIFY(EXTRUDE_MINTEMP) ".", false, false);
@ -3213,25 +3215,25 @@ void kill_screen(const char* lcd_msg) {
END_MENU(); END_MENU();
} }
void lcd_filament_change_resume_print() { void lcd_advanced_pause_resume_print() {
filament_change_menu_response = FILAMENT_CHANGE_RESPONSE_RESUME_PRINT; advanced_pause_menu_response = ADVANCED_PAUSE_RESPONSE_RESUME_PRINT;
} }
void lcd_filament_change_extrude_more() { void lcd_advanced_pause_extrude_more() {
filament_change_menu_response = FILAMENT_CHANGE_RESPONSE_EXTRUDE_MORE; advanced_pause_menu_response = ADVANCED_PAUSE_RESPONSE_EXTRUDE_MORE;
} }
void lcd_filament_change_option_menu() { void lcd_advanced_pause_option_menu() {
START_MENU(); START_MENU();
#if LCD_HEIGHT > 2 #if LCD_HEIGHT > 2
STATIC_ITEM(MSG_FILAMENT_CHANGE_OPTION_HEADER, true, false); STATIC_ITEM(MSG_FILAMENT_CHANGE_OPTION_HEADER, true, false);
#endif #endif
MENU_ITEM(function, MSG_FILAMENT_CHANGE_OPTION_RESUME, lcd_filament_change_resume_print); MENU_ITEM(function, MSG_FILAMENT_CHANGE_OPTION_RESUME, lcd_advanced_pause_resume_print);
MENU_ITEM(function, MSG_FILAMENT_CHANGE_OPTION_EXTRUDE, lcd_filament_change_extrude_more); MENU_ITEM(function, MSG_FILAMENT_CHANGE_OPTION_EXTRUDE, lcd_advanced_pause_extrude_more);
END_MENU(); END_MENU();
} }
void lcd_filament_change_init_message() { void lcd_advanced_pause_init_message() {
START_SCREEN(); START_SCREEN();
STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true); STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true);
STATIC_ITEM(MSG_FILAMENT_CHANGE_INIT_1); STATIC_ITEM(MSG_FILAMENT_CHANGE_INIT_1);
@ -3254,7 +3256,7 @@ void kill_screen(const char* lcd_msg) {
END_SCREEN(); END_SCREEN();
} }
void lcd_filament_change_unload_message() { void lcd_advanced_pause_unload_message() {
START_SCREEN(); START_SCREEN();
STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true); STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true);
STATIC_ITEM(MSG_FILAMENT_CHANGE_UNLOAD_1); STATIC_ITEM(MSG_FILAMENT_CHANGE_UNLOAD_1);
@ -3277,7 +3279,7 @@ void kill_screen(const char* lcd_msg) {
END_SCREEN(); END_SCREEN();
} }
void lcd_filament_change_wait_for_nozzles_to_heat() { void lcd_advanced_pause_wait_for_nozzles_to_heat() {
START_SCREEN(); START_SCREEN();
STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true); STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true);
STATIC_ITEM(MSG_FILAMENT_CHANGE_HEATING_1); STATIC_ITEM(MSG_FILAMENT_CHANGE_HEATING_1);
@ -3294,7 +3296,7 @@ void kill_screen(const char* lcd_msg) {
END_SCREEN(); END_SCREEN();
} }
void lcd_filament_change_heat_nozzle() { void lcd_advanced_pause_heat_nozzle() {
START_SCREEN(); START_SCREEN();
STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true); STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true);
STATIC_ITEM(MSG_FILAMENT_CHANGE_HEAT_1); STATIC_ITEM(MSG_FILAMENT_CHANGE_HEAT_1);
@ -3311,7 +3313,7 @@ void kill_screen(const char* lcd_msg) {
END_SCREEN(); END_SCREEN();
} }
void lcd_filament_change_insert_message() { void lcd_advanced_pause_insert_message() {
START_SCREEN(); START_SCREEN();
STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true); STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true);
STATIC_ITEM(MSG_FILAMENT_CHANGE_INSERT_1); STATIC_ITEM(MSG_FILAMENT_CHANGE_INSERT_1);
@ -3334,7 +3336,7 @@ void kill_screen(const char* lcd_msg) {
END_SCREEN(); END_SCREEN();
} }
void lcd_filament_change_load_message() { void lcd_advanced_pause_load_message() {
START_SCREEN(); START_SCREEN();
STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true); STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true);
STATIC_ITEM(MSG_FILAMENT_CHANGE_LOAD_1); STATIC_ITEM(MSG_FILAMENT_CHANGE_LOAD_1);
@ -3357,7 +3359,7 @@ void kill_screen(const char* lcd_msg) {
END_SCREEN(); END_SCREEN();
} }
void lcd_filament_change_extrude_message() { void lcd_advanced_pause_extrude_message() {
START_SCREEN(); START_SCREEN();
STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true); STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true);
STATIC_ITEM(MSG_FILAMENT_CHANGE_EXTRUDE_1); STATIC_ITEM(MSG_FILAMENT_CHANGE_EXTRUDE_1);
@ -3380,7 +3382,7 @@ void kill_screen(const char* lcd_msg) {
END_SCREEN(); END_SCREEN();
} }
void lcd_filament_change_resume_message() { void lcd_advanced_pause_resume_message() {
START_SCREEN(); START_SCREEN();
STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true); STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true);
STATIC_ITEM(MSG_FILAMENT_CHANGE_RESUME_1); STATIC_ITEM(MSG_FILAMENT_CHANGE_RESUME_1);
@ -3393,44 +3395,52 @@ void kill_screen(const char* lcd_msg) {
END_SCREEN(); END_SCREEN();
} }
void lcd_filament_change_show_message(const FilamentChangeMessage message) { void lcd_advanced_pause_show_message(const AdvancedPauseMessage message) {
switch (message) { switch (message) {
case FILAMENT_CHANGE_MESSAGE_INIT: case ADVANCED_PAUSE_MESSAGE_INIT:
defer_return_to_status = true; defer_return_to_status = true;
lcd_goto_screen(lcd_filament_change_init_message); lcd_goto_screen(lcd_advanced_pause_init_message);
break; break;
case FILAMENT_CHANGE_MESSAGE_UNLOAD: case ADVANCED_PAUSE_MESSAGE_UNLOAD:
lcd_goto_screen(lcd_filament_change_unload_message); defer_return_to_status = true;
lcd_goto_screen(lcd_advanced_pause_unload_message);
break; break;
case FILAMENT_CHANGE_MESSAGE_INSERT: case ADVANCED_PAUSE_MESSAGE_INSERT:
lcd_goto_screen(lcd_filament_change_insert_message); defer_return_to_status = true;
lcd_goto_screen(lcd_advanced_pause_insert_message);
break; break;
case FILAMENT_CHANGE_MESSAGE_LOAD: case ADVANCED_PAUSE_MESSAGE_LOAD:
lcd_goto_screen(lcd_filament_change_load_message); defer_return_to_status = true;
lcd_goto_screen(lcd_advanced_pause_load_message);
break; break;
case FILAMENT_CHANGE_MESSAGE_EXTRUDE: case ADVANCED_PAUSE_MESSAGE_EXTRUDE:
lcd_goto_screen(lcd_filament_change_extrude_message); defer_return_to_status = true;
lcd_goto_screen(lcd_advanced_pause_extrude_message);
break; break;
case FILAMENT_CHANGE_MESSAGE_CLICK_TO_HEAT_NOZZLE: case ADVANCED_PAUSE_MESSAGE_CLICK_TO_HEAT_NOZZLE:
lcd_goto_screen(lcd_filament_change_heat_nozzle); defer_return_to_status = true;
lcd_goto_screen(lcd_advanced_pause_heat_nozzle);
break; break;
case FILAMENT_CHANGE_MESSAGE_WAIT_FOR_NOZZLES_TO_HEAT: case ADVANCED_PAUSE_MESSAGE_WAIT_FOR_NOZZLES_TO_HEAT:
lcd_goto_screen(lcd_filament_change_wait_for_nozzles_to_heat); defer_return_to_status = true;
lcd_goto_screen(lcd_advanced_pause_wait_for_nozzles_to_heat);
break; break;
case FILAMENT_CHANGE_MESSAGE_OPTION: case ADVANCED_PAUSE_MESSAGE_OPTION:
filament_change_menu_response = FILAMENT_CHANGE_RESPONSE_WAIT_FOR; defer_return_to_status = true;
lcd_goto_screen(lcd_filament_change_option_menu); advanced_pause_menu_response = ADVANCED_PAUSE_RESPONSE_WAIT_FOR;
lcd_goto_screen(lcd_advanced_pause_option_menu);
break; break;
case FILAMENT_CHANGE_MESSAGE_RESUME: case ADVANCED_PAUSE_MESSAGE_RESUME:
lcd_goto_screen(lcd_filament_change_resume_message); defer_return_to_status = true;
lcd_goto_screen(lcd_advanced_pause_resume_message);
break; break;
case FILAMENT_CHANGE_MESSAGE_STATUS: case ADVANCED_PAUSE_MESSAGE_STATUS:
lcd_return_to_status(); lcd_return_to_status();
break; break;
} }
} }
#endif // FILAMENT_CHANGE_FEATURE #endif // ADVANCED_PAUSE_FEATURE
/** /**
* *

@ -83,9 +83,9 @@
void lcd_quick_feedback(); // Audible feedback for a button click - could also be visual void lcd_quick_feedback(); // Audible feedback for a button click - could also be visual
void lcd_completion_feedback(const bool good=true); void lcd_completion_feedback(const bool good=true);
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
void lcd_filament_change_show_message(const FilamentChangeMessage message); void lcd_advanced_pause_show_message(const AdvancedPauseMessage message);
#endif // FILAMENT_CHANGE_FEATURE #endif // ADVANCED_PAUSE_FEATURE
#else #else

@ -340,15 +340,26 @@ FORCE_INLINE void _draw_centered_temp(const int temp, const uint8_t x, const uin
lcd_printPGM(PSTR(LCD_STR_DEGREE " ")); lcd_printPGM(PSTR(LCD_STR_DEGREE " "));
} }
FORCE_INLINE void _draw_heater_status(const uint8_t x, const int8_t heater) { FORCE_INLINE void _draw_heater_status(const uint8_t x, const int8_t heater, const bool blink) {
#if HAS_TEMP_BED #if HAS_TEMP_BED
bool isBed = heater < 0; bool isBed = heater < 0;
#else #else
const bool isBed = false; const bool isBed = false;
#endif #endif
if (PAGE_UNDER(7)) if (PAGE_UNDER(7)) {
_draw_centered_temp((isBed ? thermalManager.degTargetBed() : thermalManager.degTargetHotend(heater)) + 0.5, x, 7); #if ENABLED(ADVANCED_PAUSE_FEATURE)
const bool is_idle = (!isBed ? thermalManager.is_heater_idle(heater) :
#if HAS_TEMP_BED
thermalManager.is_bed_idle()
#else
false
#endif
);
if (blink || !is_idle)
#endif
_draw_centered_temp((isBed ? thermalManager.degTargetBed() : thermalManager.degTargetHotend(heater)) + 0.5, x, 7); }
if (PAGE_CONTAINS(21, 28)) if (PAGE_CONTAINS(21, 28))
_draw_centered_temp((isBed ? thermalManager.degBed() : thermalManager.degHotend(heater)) + 0.5, x, 28); _draw_centered_temp((isBed ? thermalManager.degBed() : thermalManager.degHotend(heater)) + 0.5, x, 28);
@ -415,11 +426,11 @@ static void lcd_implementation_status_screen() {
if (PAGE_UNDER(28)) { if (PAGE_UNDER(28)) {
// Extruders // Extruders
HOTEND_LOOP() _draw_heater_status(5 + e * 25, e); HOTEND_LOOP() _draw_heater_status(5 + e * 25, e, blink);
// Heated bed // Heated bed
#if HOTENDS < 4 && HAS_TEMP_BED #if HOTENDS < 4 && HAS_TEMP_BED
_draw_heater_status(81, -1); _draw_heater_status(81, -1, blink);
#endif #endif
#if HAS_FAN0 #if HAS_FAN0
@ -662,7 +673,7 @@ static void lcd_implementation_status_screen() {
uint8_t row_y1, row_y2; uint8_t row_y1, row_y2;
uint8_t constexpr row_height = DOG_CHAR_HEIGHT + 2 * (TALL_FONT_CORRECTION); uint8_t constexpr row_height = DOG_CHAR_HEIGHT + 2 * (TALL_FONT_CORRECTION);
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
static void lcd_implementation_hotend_status(const uint8_t row) { static void lcd_implementation_hotend_status(const uint8_t row) {
row_y1 = row * row_height + 1; row_y1 = row * row_height + 1;
@ -679,7 +690,7 @@ static void lcd_implementation_status_screen() {
lcd_print(itostr3(thermalManager.degTargetHotend(active_extruder))); lcd_print(itostr3(thermalManager.degTargetHotend(active_extruder)));
} }
#endif // FILAMENT_CHANGE_FEATURE #endif // ADVANCED_PAUSE_FEATURE
// Set the colors for a menu item based on whether it is selected // Set the colors for a menu item based on whether it is selected
static void lcd_implementation_mark_as_selected(const uint8_t row, const bool isSelected) { static void lcd_implementation_mark_as_selected(const uint8_t row, const bool isSelected) {

@ -573,6 +573,41 @@ FORCE_INLINE void _draw_axis_label(const AxisEnum axis, const char* const pstr,
} }
} }
FORCE_INLINE void _draw_heater_status(const int8_t heater, const char prefix, const bool blink) {
const bool isBed = heater < 0;
const float t1 = (isBed ? thermalManager.degBed() : thermalManager.degHotend(heater));
const float t2 = (isBed ? thermalManager.degTargetBed() : thermalManager.degTargetHotend(heater));
if (prefix >= 0) lcd.print(prefix);
lcd.print(itostr3(t1 + 0.5));
lcd.print('/');
#if ENABLED(ADVANCED_PAUSE_FEATURE)
const bool is_idle = (!isBed ? thermalManager.is_heater_idle(heater) :
#if HAS_TEMP_BED
thermalManager.is_bed_idle()
#else
false
#endif
);
if (!blink && is_idle) {
lcd.print(' ');
if (t2 >= 10) lcd.print(' ');
if (t2 >= 100) lcd.print(' ');
}
else
#endif
lcd.print(itostr3left(t2 + 0.5));
if (prefix >= 0) {
lcd_printPGM(PSTR(LCD_STR_DEGREE " "));
if (t2 < 10) lcd.print(' ');
}
}
#if ENABLED(LCD_PROGRESS_BAR) #if ENABLED(LCD_PROGRESS_BAR)
inline void lcd_draw_progress_bar(const uint8_t percent) { inline void lcd_draw_progress_bar(const uint8_t percent) {
@ -616,17 +651,7 @@ Possible status screens:
|01234567890123456789| |01234567890123456789|
*/ */
static void lcd_implementation_status_screen() { static void lcd_implementation_status_screen() {
bool blink = lcd_blink();
#define LCD_TEMP_ONLY(T1,T2) \
lcd.print(itostr3(T1 + 0.5)); \
lcd.print('/'); \
lcd.print(itostr3left(T2 + 0.5))
#define LCD_TEMP(T1,T2,PREFIX) \
lcd.print(PREFIX); \
LCD_TEMP_ONLY(T1,T2); \
lcd_printPGM(PSTR(LCD_STR_DEGREE " ")); \
if (T2 < 10) lcd.print(' ')
// //
// Line 1 // Line 1
@ -639,7 +664,7 @@ static void lcd_implementation_status_screen() {
// //
// Hotend 0 Temperature // Hotend 0 Temperature
// //
LCD_TEMP_ONLY(thermalManager.degHotend(0), thermalManager.degTargetHotend(0)); _draw_heater_status(0, -1, blink);
// //
// Hotend 1 or Bed Temperature // Hotend 1 or Bed Temperature
@ -649,10 +674,10 @@ static void lcd_implementation_status_screen() {
lcd.setCursor(8, 0); lcd.setCursor(8, 0);
#if HOTENDS > 1 #if HOTENDS > 1
lcd.print(LCD_STR_THERMOMETER[0]); lcd.print(LCD_STR_THERMOMETER[0]);
LCD_TEMP_ONLY(thermalManager.degHotend(1), thermalManager.degTargetHotend(1)); _draw_heater_status(1, -1, blink);
#else #else
lcd.print(LCD_STR_BEDTEMP[0]); lcd.print(LCD_STR_BEDTEMP[0]);
LCD_TEMP_ONLY(thermalManager.degBed(), thermalManager.degTargetBed()); _draw_heater_status(-1, -1, blink);
#endif #endif
#endif // HOTENDS > 1 || TEMP_SENSOR_BED != 0 #endif // HOTENDS > 1 || TEMP_SENSOR_BED != 0
@ -662,7 +687,7 @@ static void lcd_implementation_status_screen() {
// //
// Hotend 0 Temperature // Hotend 0 Temperature
// //
LCD_TEMP(thermalManager.degHotend(0), thermalManager.degTargetHotend(0), LCD_STR_THERMOMETER[0]); _draw_heater_status(0, LCD_STR_THERMOMETER[0], blink);
// //
// Hotend 1 or Bed Temperature // Hotend 1 or Bed Temperature
@ -670,9 +695,9 @@ static void lcd_implementation_status_screen() {
#if HOTENDS > 1 || TEMP_SENSOR_BED != 0 #if HOTENDS > 1 || TEMP_SENSOR_BED != 0
lcd.setCursor(10, 0); lcd.setCursor(10, 0);
#if HOTENDS > 1 #if HOTENDS > 1
LCD_TEMP(thermalManager.degHotend(1), thermalManager.degTargetHotend(1), LCD_STR_THERMOMETER[0]); _draw_heater_status(1, LCD_STR_THERMOMETER[0], blink);
#else #else
LCD_TEMP(thermalManager.degBed(), thermalManager.degTargetBed(), LCD_STR_BEDTEMP[0]); _draw_heater_status(-1, LCD_STR_BEDTEMP[0], blink);
#endif #endif
#endif // HOTENDS > 1 || TEMP_SENSOR_BED != 0 #endif // HOTENDS > 1 || TEMP_SENSOR_BED != 0
@ -685,8 +710,6 @@ static void lcd_implementation_status_screen() {
#if LCD_HEIGHT > 2 #if LCD_HEIGHT > 2
bool blink = lcd_blink();
#if LCD_WIDTH < 20 #if LCD_WIDTH < 20
#if ENABLED(SDSUPPORT) #if ENABLED(SDSUPPORT)
@ -708,7 +731,7 @@ static void lcd_implementation_status_screen() {
// If we both have a 2nd extruder and a heated bed, // If we both have a 2nd extruder and a heated bed,
// show the heated bed temp on the left, // show the heated bed temp on the left,
// since the first line is filled with extruder temps // since the first line is filled with extruder temps
LCD_TEMP(thermalManager.degBed(), thermalManager.degTargetBed(), LCD_STR_BEDTEMP[0]); _draw_heater_status(-1, LCD_STR_BEDTEMP[0], blink);
#else #else
// Before homing the axis letters are blinking 'X' <-> '?'. // Before homing the axis letters are blinking 'X' <-> '?'.
@ -803,7 +826,7 @@ static void lcd_implementation_status_screen() {
#if ENABLED(ULTIPANEL) #if ENABLED(ULTIPANEL)
#if ENABLED(FILAMENT_CHANGE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
static void lcd_implementation_hotend_status(const uint8_t row) { static void lcd_implementation_hotend_status(const uint8_t row) {
if (row < LCD_HEIGHT) { if (row < LCD_HEIGHT) {
@ -815,7 +838,7 @@ static void lcd_implementation_status_screen() {
} }
} }
#endif // FILAMENT_CHANGE_FEATURE #endif // ADVANCED_PAUSE_FEATURE
static void lcd_implementation_drawmenu_static(const uint8_t row, const char* pstr, const bool center=true, const bool invert=false, const char *valstr=NULL) { static void lcd_implementation_drawmenu_static(const uint8_t row, const char* pstr, const bool center=true, const bool invert=false, const char *valstr=NULL) {
UNUSED(invert); UNUSED(invert);

Loading…
Cancel
Save