diff --git a/Marlin/Conditionals_post.h b/Marlin/Conditionals_post.h index 9fcd944ac..b0c281f1f 100644 --- a/Marlin/Conditionals_post.h +++ b/Marlin/Conditionals_post.h @@ -652,7 +652,7 @@ #if FAN_COUNT == 0 #undef PROBING_FANS_OFF #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 diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 515e66493..36291de0d 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -763,22 +763,23 @@ #endif /** - * Filament Change - * Experimental filament change support. + * Advanced Pause + * Experimental feature for filament change support and for parking the nozzle when paused. * 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. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT. */ -//#define FILAMENT_CHANGE_FEATURE -#if ENABLED(FILAMENT_CHANGE_FEATURE) - #define FILAMENT_CHANGE_X_POS 3 // X position of hotend - #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend - #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) - #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) - #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) - #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s - #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm +//#define ADVANCED_PAUSE_FEATURE +#if ENABLED(ADVANCED_PAUSE_FEATURE) + #define PAUSE_PARK_X_POS 3 // X position of hotend + #define PAUSE_PARK_Y_POS 3 // Y position of hotend + #define PAUSE_PARK_Z_ADD 10 // Z addition of hotend (lift) + #define PAUSE_PARK_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) + #define PAUSE_PARK_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) + #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 #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 @@ -789,14 +790,14 @@ #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend, // Short or zero length for printers without bowden where loading is not used - #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate - #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, + #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate + #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, // 0 to disable for manual extrusion // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend, // or until outcoming filament color is not clear for filament color change - #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 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_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. //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume #endif diff --git a/Marlin/Marlin.h b/Marlin/Marlin.h index aecd89b32..dcc9d0443 100644 --- a/Marlin/Marlin.h +++ b/Marlin/Marlin.h @@ -48,7 +48,7 @@ #endif 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 #endif ); @@ -369,8 +369,8 @@ extern float soft_endstop_min[XYZ], soft_endstop_max[XYZ]; extern int meas_delay_cm; // Delay distance #endif -#if ENABLED(FILAMENT_CHANGE_FEATURE) - extern FilamentChangeMenuResponse filament_change_menu_response; +#if ENABLED(ADVANCED_PAUSE_FEATURE) + extern AdvancedPauseMenuResponse advanced_pause_menu_response; #endif #if ENABLED(PID_EXTRUSION_SCALING) diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index 1806188a8..75edc0e6f 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -195,7 +195,7 @@ * M502 - Revert to the default "factory settings". ** Does not write them to EEPROM! ** * M503 - Print the current settings (in memory): "M503 S". S0 specifies compact output. * M540 - Enable/disable SD card abort on endstop hit: "M540 S". (Requires ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED) - * M600 - Pause for filament change: "M600 X Y Z E L". (Requires FILAMENT_CHANGE_FEATURE) + * M600 - Pause for filament change: "M600 X Y Z E L". (Requires ADVANCED_PAUSE_FEATURE) * M665 - Set delta configurations: "M665 L R S A B C I J K" (Requires DELTA) * M666 - Set delta endstop adjustment. (Requires DELTA) * M605 - Set dual x-carriage movement mode: "M605 S [X] [R]". (Requires DUAL_X_CARRIAGE) @@ -627,8 +627,8 @@ float cartes[XYZ] = { 0 }; static bool filament_ran_out = false; #endif -#if ENABLED(FILAMENT_CHANGE_FEATURE) - FilamentChangeMenuResponse filament_change_menu_response; +#if ENABLED(ADVANCED_PAUSE_FEATURE) + AdvancedPauseMenuResponse advanced_pause_menu_response; #endif #if ENABLED(MIXING_EXTRUDER) @@ -5738,14 +5738,244 @@ inline void gcode_M17() { #define RUNPLAN(RATE_MM_S) line_to_destination(RATE_MM_S) #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]; - bool move_away_flag = false; + if (!nozzle_timed_out) + 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; - 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 destination[E_AXIS] = current_position[E_AXIS] = resume_position[E_AXIS]; @@ -5753,24 +5983,38 @@ inline void gcode_M17() { #if IS_KINEMATIC // 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 // Move XY to starting position, then Z destination[X_AXIS] = resume_position[X_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]; - RUNPLAN(FILAMENT_CHANGE_Z_FEEDRATE); + RUNPLAN(PAUSE_PARK_Z_FEEDRATE); #endif stepper.synchronize(); #if ENABLED(FILAMENT_RUNOUT_SENSOR) filament_ran_out = false; #endif + 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) @@ -5803,7 +6047,7 @@ inline void gcode_M17() { */ inline void gcode_M24() { #if ENABLED(PARK_HEAD_ON_PAUSE) - move_back_on_resume(); + resume_print(); #endif card.startFileprint(); @@ -7462,89 +7706,55 @@ inline void gcode_M121() { endstops.enable_globally(false); } * Z = override Z raise */ 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 - destination[E_AXIS] += parser.seen('L') ? parser.value_axis_units(E_AXIS) : 0 - #if defined(FILAMENT_CHANGE_RETRACT_LENGTH) && FILAMENT_CHANGE_RETRACT_LENGTH > 0 - - (FILAMENT_CHANGE_RETRACT_LENGTH) + const float retract = parser.seen('L') ? parser.value_axis_units(E_AXIS) : 0 + #if defined(PAUSE_PARK_RETRACT_LENGTH) && PAUSE_PARK_RETRACT_LENGTH > 0 + - (PAUSE_PARK_RETRACT_LENGTH) #endif ; - RUNPLAN(FILAMENT_CHANGE_RETRACT_FEEDRATE); // Lift Z axis const float z_lift = parser.seen('Z') ? parser.value_linear_units() : - #if defined(FILAMENT_CHANGE_Z_ADD) && FILAMENT_CHANGE_Z_ADD > 0 - FILAMENT_CHANGE_Z_ADD + #if defined(PAUSE_PARK_Z_ADD) && PAUSE_PARK_Z_ADD > 0 + PAUSE_PARK_Z_ADD #else 0 #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 - destination[X_AXIS] = parser.seen('X') ? parser.value_linear_units() : 0 - #ifdef FILAMENT_CHANGE_X_POS - + FILAMENT_CHANGE_X_POS + const float x_pos = parser.seen('X') ? parser.value_linear_units() : 0 + #ifdef PAUSE_PARK_X_POS + + PAUSE_PARK_X_POS #endif ; - destination[Y_AXIS] = parser.seen('Y') ? parser.value_linear_units() : 0 - #ifdef FILAMENT_CHANGE_Y_POS - + FILAMENT_CHANGE_Y_POS + const float y_pos = parser.seen('Y') ? parser.value_linear_units() : 0 + #ifdef PAUSE_PARK_Y_POS + + PAUSE_PARK_Y_POS #endif ; #if HOTENDS > 1 && DISABLED(DUAL_X_CARRIAGE) if (active_extruder > 0) { - if (!parser.seen('X')) destination[X_AXIS] += hotend_offset[X_AXIS][active_extruder]; - if (!parser.seen('Y')) destination[Y_AXIS] += hotend_offset[Y_AXIS][active_extruder]; + if (!parser.seen('X')) x_pos += hotend_offset[X_AXIS][active_extruder]; + if (!parser.seen('Y')) y_pos += hotend_offset[Y_AXIS][active_extruder]; } #endif - clamp_to_software_endstops(destination); - RUNPLAN(FILAMENT_CHANGE_XY_FEEDRATE); - set_current_to_destination(); - stepper.synchronize(); - disable_e_steppers(); + const bool job_running = print_job_timer.isRunning(); - #if DISABLED(SDSUPPORT) - // Wait for lcd click or M108 - KEEPALIVE_STATE(PAUSED_FOR_USER); - wait_for_user = true; - while (wait_for_user) idle(); - KEEPALIVE_STATE(IN_HANDLER); + if (pause_print(retract, z_lift, x_pos, y_pos)) { + #if DISABLED(SDSUPPORT) + // Wait for lcd click or M108 + wait_for_filament_reload(); - // Return to print position and continue - move_back_on_resume(); - if (job_running) print_job_timer.start(); - move_away_flag = false; - #endif + // Return to print position and continue + resume_print(); + + if (job_running) print_job_timer.start(); + #endif + } } #endif // PARK_HEAD_ON_PAUSE @@ -8812,25 +9022,7 @@ inline void gcode_M503() { #endif // HAS_BED_PROBE -#if ENABLED(FILAMENT_CHANGE_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; +#if ENABLED(ADVANCED_PAUSE_FEATURE) /** * M600: Pause for filament change @@ -8839,231 +9031,77 @@ inline void gcode_M503() { * Z[distance] - Move the Z axis by this distance * X[position] - Move to this X position, with Y * 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. * */ 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 - destination[E_AXIS] += parser.seen('E') ? parser.value_axis_units(E_AXIS) : 0 - #if defined(FILAMENT_CHANGE_RETRACT_LENGTH) && FILAMENT_CHANGE_RETRACT_LENGTH > 0 - - (FILAMENT_CHANGE_RETRACT_LENGTH) + const float retract = parser.seen('E') ? parser.value_axis_units(E_AXIS) : 0 + #if defined(PAUSE_PARK_RETRACT_LENGTH) && PAUSE_PARK_RETRACT_LENGTH > 0 + - (PAUSE_PARK_RETRACT_LENGTH) #endif ; - RUNPLAN(FILAMENT_CHANGE_RETRACT_FEEDRATE); - // Lift Z axis - float z_lift = parser.seen('Z') ? parser.value_linear_units() : - #if defined(FILAMENT_CHANGE_Z_ADD) && FILAMENT_CHANGE_Z_ADD > 0 - FILAMENT_CHANGE_Z_ADD + const float z_lift = parser.seen('Z') ? parser.value_linear_units() : + #if defined(PAUSE_PARK_Z_ADD) && PAUSE_PARK_Z_ADD > 0 + PAUSE_PARK_Z_ADD #else 0 #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 - if (parser.seen('X')) destination[X_AXIS] = parser.value_linear_units(); - #ifdef FILAMENT_CHANGE_X_POS - else destination[X_AXIS] = FILAMENT_CHANGE_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) + const float x_pos = parser.seen('X') ? parser.value_linear_units() : 0 + #ifdef PAUSE_PARK_X_POS + + PAUSE_PARK_X_POS #endif ; - - RUNPLAN(FILAMENT_CHANGE_UNLOAD_FEEDRATE); - - // 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(); + const float y_pos = parser.seen('Y') ? parser.value_linear_units() : 0 + #ifdef PAUSE_PARK_Y_POS + + PAUSE_PARK_Y_POS #endif + ; - if (!nozzle_timed_out && ELAPSED(millis(), nozzle_timeout)) { - nozzle_timed_out = true; // on nozzle timeout remember the nozzles need to be reheated - HOTEND_LOOP() thermalManager.setTargetHotend(0, e); // Turn off all the nozzles - lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_CLICK_TO_HEAT_NOZZLE); - } - 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(); + // Unload filament + const float unload_length = parser.seen('U') ? parser.value_axis_units(E_AXIS) : 0 + #if defined(FILAMENT_CHANGE_UNLOAD_LENGTH) && FILAMENT_CHANGE_UNLOAD_LENGTH > 0 + - (FILAMENT_CHANGE_UNLOAD_LENGTH) #endif - idle(true); - } - KEEPALIVE_STATE(IN_HANDLER); - - // Show "load" message - lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_LOAD); + ; // Load filament - destination[E_AXIS] += parser.seen('L') ? -parser.value_axis_units(E_AXIS) : 0 - #if FILAMENT_CHANGE_LOAD_LENGTH > 0 + const float load_length = parser.seen('L') ? parser.value_axis_units(E_AXIS) : 0 + #ifdef FILAMENT_CHANGE_LOAD_LENGTH + FILAMENT_CHANGE_LOAD_LENGTH #endif ; - RUNPLAN(FILAMENT_CHANGE_LOAD_FEEDRATE); - stepper.synchronize(); - - #if defined(FILAMENT_CHANGE_EXTRUDE_LENGTH) && FILAMENT_CHANGE_EXTRUDE_LENGTH > 0 - - do { - // "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(); + const int beep_count = parser.seen('B') ? parser.value_int() : + #ifdef FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS + FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS + #else + -1 + #endif + ; - #if ENABLED(FILAMENT_RUNOUT_SENSOR) - filament_ran_out = false; - #endif + const bool job_running = print_job_timer.isRunning(); - // Show status screen - lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_STATUS); + if (pause_print(retract, z_lift, x_pos, y_pos, unload_length, beep_count, true)) { + 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 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) @@ -10569,11 +10607,11 @@ void process_next_command() { break; #endif // HAS_BED_PROBE - #if ENABLED(FILAMENT_CHANGE_FEATURE) + #if ENABLED(ADVANCED_PAUSE_FEATURE) case 600: // M600: Pause for filament change gcode_M600(); break; - #endif // FILAMENT_CHANGE_FEATURE + #endif // ADVANCED_PAUSE_FEATURE #if ENABLED(DUAL_X_CARRIAGE) || ENABLED(DUAL_NOZZLE_DUPLICATION_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 - #if ENABLED(FILAMENT_CHANGE_FEATURE) && ENABLED(FILAMENT_CHANGE_NO_STEPPER_TIMEOUT) - #define M600_TEST !busy_doing_M600 + #if ENABLED(ADVANCED_PAUSE_FEATURE) && ENABLED(PAUSE_PARK_NO_STEPPER_TIMEOUT) + #define MOVE_AWAY_TEST !move_away_flag #else - #define M600_TEST true + #define MOVE_AWAY_TEST true #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()) { #if ENABLED(DISABLE_INACTIVE_X) disable_X(); @@ -12216,7 +12254,7 @@ void manage_inactivity(bool ignore_stepper_queue/*=false*/) { * Standard idle routine keeps the machine alive */ void idle( - #if ENABLED(FILAMENT_CHANGE_FEATURE) + #if ENABLED(ADVANCED_PAUSE_FEATURE) bool no_stepper_sleep/*=false*/ #endif ) { @@ -12229,7 +12267,7 @@ void idle( #endif manage_inactivity( - #if ENABLED(FILAMENT_CHANGE_FEATURE) + #if ENABLED(ADVANCED_PAUSE_FEATURE) no_stepper_sleep #endif ); diff --git a/Marlin/SanityCheck.h b/Marlin/SanityCheck.h index 952200d14..f6c7245a2 100644 --- a/Marlin/SanityCheck.h +++ b/Marlin/SanityCheck.h @@ -99,7 +99,31 @@ #elif defined(SERVO_DEACTIVATION_DELAY) #error "SERVO_DEACTIVATION_DELAY is deprecated. Use SERVO_DELAY instead." #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) #error "PLA_PREHEAT_HOTEND_TEMP is now PREHEAT_1_TEMP_HOTEND. Please update your configuration." #elif defined(PLA_PREHEAT_HPB_TEMP) @@ -286,19 +310,19 @@ #error "FILAMENT_RUNOUT_SENSOR requires FIL_RUNOUT_PIN." #elif DISABLED(SDSUPPORT) && DISABLED(PRINTJOB_TIMER_AUTOSTART) #error "FILAMENT_RUNOUT_SENSOR requires SDSUPPORT or PRINTJOB_TIMER_AUTOSTART." - #elif DISABLED(FILAMENT_CHANGE_FEATURE) - static_assert(NULL == strstr(FILAMENT_RUNOUT_SCRIPT, "M600"), "FILAMENT_CHANGE_FEATURE is required to use M600 with FILAMENT_RUNOUT_SENSOR."); + #elif DISABLED(ADVANCED_PAUSE_FEATURE) + static_assert(NULL == strstr(FILAMENT_RUNOUT_SCRIPT, "M600"), "ADVANCED_PAUSE_FEATURE is required to use M600 with FILAMENT_RUNOUT_SENSOR."); #endif #endif /** - * Filament Change with Extruder Runout Prevention + * Advanced Pause */ -#if ENABLED(FILAMENT_CHANGE_FEATURE) +#if ENABLED(ADVANCED_PAUSE_FEATURE) #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) - #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) #error "PARK_HEAD_ON_PAUSE requires SDSUPPORT, EMERGENCY_PARSER, or an LCD controller." #endif @@ -545,6 +569,13 @@ static_assert(1 >= 0 #error "Probes need Z_CLEARANCE_BETWEEN_PROBES >= 0." #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 /** diff --git a/Marlin/enum.h b/Marlin/enum.h index 642e331b4..999164187 100644 --- a/Marlin/enum.h +++ b/Marlin/enum.h @@ -108,25 +108,25 @@ enum EndstopEnum { }; #endif -#if ENABLED(FILAMENT_CHANGE_FEATURE) - enum FilamentChangeMenuResponse { - FILAMENT_CHANGE_RESPONSE_WAIT_FOR, - FILAMENT_CHANGE_RESPONSE_EXTRUDE_MORE, - FILAMENT_CHANGE_RESPONSE_RESUME_PRINT +#if ENABLED(ADVANCED_PAUSE_FEATURE) + enum AdvancedPauseMenuResponse { + ADVANCED_PAUSE_RESPONSE_WAIT_FOR, + ADVANCED_PAUSE_RESPONSE_EXTRUDE_MORE, + ADVANCED_PAUSE_RESPONSE_RESUME_PRINT }; #if ENABLED(ULTIPANEL) - enum FilamentChangeMessage { - FILAMENT_CHANGE_MESSAGE_INIT, - FILAMENT_CHANGE_MESSAGE_UNLOAD, - FILAMENT_CHANGE_MESSAGE_INSERT, - FILAMENT_CHANGE_MESSAGE_LOAD, - FILAMENT_CHANGE_MESSAGE_EXTRUDE, - FILAMENT_CHANGE_MESSAGE_OPTION, - FILAMENT_CHANGE_MESSAGE_RESUME, - FILAMENT_CHANGE_MESSAGE_STATUS, - FILAMENT_CHANGE_MESSAGE_CLICK_TO_HEAT_NOZZLE, - FILAMENT_CHANGE_MESSAGE_WAIT_FOR_NOZZLES_TO_HEAT + enum AdvancedPauseMessage { + ADVANCED_PAUSE_MESSAGE_INIT, + ADVANCED_PAUSE_MESSAGE_UNLOAD, + ADVANCED_PAUSE_MESSAGE_INSERT, + ADVANCED_PAUSE_MESSAGE_LOAD, + ADVANCED_PAUSE_MESSAGE_EXTRUDE, + ADVANCED_PAUSE_MESSAGE_OPTION, + ADVANCED_PAUSE_MESSAGE_RESUME, + ADVANCED_PAUSE_MESSAGE_STATUS, + ADVANCED_PAUSE_MESSAGE_CLICK_TO_HEAT_NOZZLE, + ADVANCED_PAUSE_MESSAGE_WAIT_FOR_NOZZLES_TO_HEAT }; #endif #endif diff --git a/Marlin/example_configurations/Cartesio/Configuration_adv.h b/Marlin/example_configurations/Cartesio/Configuration_adv.h index 9e942e7cd..5a1184c93 100644 --- a/Marlin/example_configurations/Cartesio/Configuration_adv.h +++ b/Marlin/example_configurations/Cartesio/Configuration_adv.h @@ -756,22 +756,23 @@ #endif /** - * Filament Change - * Experimental filament change support. + * Advanced Pause + * Experimental feature for filament change support and for parking the nozzle when paused. * 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. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT. */ -//#define FILAMENT_CHANGE_FEATURE -#if ENABLED(FILAMENT_CHANGE_FEATURE) - #define FILAMENT_CHANGE_X_POS 30 // X position of hotend - #define FILAMENT_CHANGE_Y_POS 10 // Y position of hotend - #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) - #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) - #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) - #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s - #define FILAMENT_CHANGE_RETRACT_LENGTH 1 // Initial retract in mm +//#define ADVANCED_PAUSE_FEATURE +#if ENABLED(ADVANCED_PAUSE_FEATURE) + #define PAUSE_PARK_X_POS 30 // X position of hotend + #define PAUSE_PARK_Y_POS 10 // Y position of hotend + #define PAUSE_PARK_Z_ADD 10 // Z addition of hotend (lift) + #define PAUSE_PARK_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) + #define PAUSE_PARK_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) + #define PAUSE_PARK_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s + #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 #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 @@ -782,14 +783,14 @@ #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend, // Short or zero length for printers without bowden where loading is not used - #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate - #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, + #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate + #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, // 0 to disable for manual extrusion // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend, // or until outcoming filament color is not clear for filament color change - #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 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_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. //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume #endif diff --git a/Marlin/example_configurations/Felix/Configuration_adv.h b/Marlin/example_configurations/Felix/Configuration_adv.h index f3329be78..a0daae4e6 100644 --- a/Marlin/example_configurations/Felix/Configuration_adv.h +++ b/Marlin/example_configurations/Felix/Configuration_adv.h @@ -756,22 +756,23 @@ #endif /** - * Filament Change - * Experimental filament change support. + * Advanced Pause + * Experimental feature for filament change support and for parking the nozzle when paused. * 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. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT. */ -//#define FILAMENT_CHANGE_FEATURE -#if ENABLED(FILAMENT_CHANGE_FEATURE) - #define FILAMENT_CHANGE_X_POS 3 // X position of hotend - #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend - #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) - #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) - #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) - #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s - #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm +//#define ADVANCED_PAUSE_FEATURE +#if ENABLED(ADVANCED_PAUSE_FEATURE) + #define PAUSE_PARK_X_POS 3 // X position of hotend + #define PAUSE_PARK_Y_POS 3 // Y position of hotend + #define PAUSE_PARK_Z_ADD 10 // Z addition of hotend (lift) + #define PAUSE_PARK_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) + #define PAUSE_PARK_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) + #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 #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 @@ -782,14 +783,14 @@ #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend, // Short or zero length for printers without bowden where loading is not used - #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate - #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, + #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate + #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, // 0 to disable for manual extrusion // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend, // or until outcoming filament color is not clear for filament color change - #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 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_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. //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume #endif diff --git a/Marlin/example_configurations/FolgerTech-i3-2020/Configuration_adv.h b/Marlin/example_configurations/FolgerTech-i3-2020/Configuration_adv.h index e2cd30cc2..14488300c 100644 --- a/Marlin/example_configurations/FolgerTech-i3-2020/Configuration_adv.h +++ b/Marlin/example_configurations/FolgerTech-i3-2020/Configuration_adv.h @@ -763,22 +763,25 @@ #endif /** - * Filament Change - * Experimental filament change support. + * Advanced Pause + * Experimental feature for filament change support and for parking the nozzle when paused. * 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. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT. */ -#define FILAMENT_CHANGE_FEATURE -#if ENABLED(FILAMENT_CHANGE_FEATURE) - #define FILAMENT_CHANGE_X_POS 3 // X position of hotend - #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend - #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) - #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) - #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) - #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s - #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm + +#define ADVANCED_PAUSE_FEATURE +#if ENABLED(ADVANCED_PAUSE_FEATURE) + #define PAUSE_PARK_X_POS 10 // X position of hotend + #define PAUSE_PARK_Y_POS 10 // Y position of hotend + #define PAUSE_PARK_Z_ADD 10 // Z addition of hotend (lift) + #define PAUSE_PARK_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) + #define PAUSE_PARK_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) + #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 #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 @@ -789,16 +792,16 @@ #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend, // Short or zero length for printers without bowden where loading is not used - #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate - #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, + #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate + #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, // 0 to disable for manual extrusion // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend, // or until outcoming filament color is not clear for filament color change - #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 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_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. - //#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 // @section tmc diff --git a/Marlin/example_configurations/Hephestos/Configuration_adv.h b/Marlin/example_configurations/Hephestos/Configuration_adv.h index 4504ea3c9..e165a7fc3 100644 --- a/Marlin/example_configurations/Hephestos/Configuration_adv.h +++ b/Marlin/example_configurations/Hephestos/Configuration_adv.h @@ -756,22 +756,23 @@ #endif /** - * Filament Change - * Experimental filament change support. + * Advanced Pause + * Experimental feature for filament change support and for parking the nozzle when paused. * 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. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT. */ -//#define FILAMENT_CHANGE_FEATURE -#if ENABLED(FILAMENT_CHANGE_FEATURE) - #define FILAMENT_CHANGE_X_POS 3 // X position of hotend - #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend - #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) - #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) - #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) - #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s - #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm +//#define ADVANCED_PAUSE_FEATURE +#if ENABLED(ADVANCED_PAUSE_FEATURE) + #define PAUSE_PARK_X_POS 3 // X position of hotend + #define PAUSE_PARK_Y_POS 3 // Y position of hotend + #define PAUSE_PARK_Z_ADD 10 // Z addition of hotend (lift) + #define PAUSE_PARK_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) + #define PAUSE_PARK_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) + #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 #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 @@ -782,14 +783,14 @@ #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend, // Short or zero length for printers without bowden where loading is not used - #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate - #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, + #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate + #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, // 0 to disable for manual extrusion // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend, // or until outcoming filament color is not clear for filament color change - #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 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_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. //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume #endif diff --git a/Marlin/example_configurations/Hephestos_2/Configuration_adv.h b/Marlin/example_configurations/Hephestos_2/Configuration_adv.h index c8629af1a..7fe59aa6d 100644 --- a/Marlin/example_configurations/Hephestos_2/Configuration_adv.h +++ b/Marlin/example_configurations/Hephestos_2/Configuration_adv.h @@ -740,22 +740,23 @@ #endif /** - * Filament Change - * Experimental filament change support. + * Advanced Pause + * Experimental feature for filament change support and for parking the nozzle when paused. * 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. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT. */ -//#define FILAMENT_CHANGE_FEATURE -#if ENABLED(FILAMENT_CHANGE_FEATURE) - #define FILAMENT_CHANGE_X_POS 3 // X position of hotend - #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend - #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) - #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) - #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) - #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s - #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm +//#define ADVANCED_PAUSE_FEATURE +#if ENABLED(ADVANCED_PAUSE_FEATURE) + #define PAUSE_PARK_X_POS 3 // X position of hotend + #define PAUSE_PARK_Y_POS 3 // Y position of hotend + #define PAUSE_PARK_Z_ADD 10 // Z addition of hotend (lift) + #define PAUSE_PARK_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) + #define PAUSE_PARK_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) + #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 #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 @@ -766,14 +767,14 @@ #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend, // Short or zero length for printers without bowden where loading is not used - #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate - #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, + #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate + #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, // 0 to disable for manual extrusion // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend, // or until outcoming filament color is not clear for filament color change - #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 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_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. //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume #endif diff --git a/Marlin/example_configurations/K8200/Configuration_adv.h b/Marlin/example_configurations/K8200/Configuration_adv.h index 821ea345d..2311850eb 100644 --- a/Marlin/example_configurations/K8200/Configuration_adv.h +++ b/Marlin/example_configurations/K8200/Configuration_adv.h @@ -769,22 +769,23 @@ #endif /** - * Filament Change - * Experimental filament change support. + * Advanced Pause + * Experimental feature for filament change support and for parking the nozzle when paused. * 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. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT. */ -//#define FILAMENT_CHANGE_FEATURE -#if ENABLED(FILAMENT_CHANGE_FEATURE) - #define FILAMENT_CHANGE_X_POS (X_MAX_POS-3) // X position of hotend - #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend - #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) - #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) - #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) - #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s - #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm +//#define ADVANCED_PAUSE_FEATURE +#if ENABLED(ADVANCED_PAUSE_FEATURE) + #define PAUSE_PARK_X_POS (X_MAX_POS-3) // X position of hotend + #define PAUSE_PARK_Y_POS 3 // Y position of hotend + #define PAUSE_PARK_Z_ADD 10 // Z addition of hotend (lift) + #define PAUSE_PARK_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) + #define PAUSE_PARK_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) + #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 #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 @@ -795,14 +796,14 @@ #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend, // Short or zero length for printers without bowden where loading is not used - #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate - #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, + #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate + #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, // 0 to disable for manual extrusion // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend, // or until outcoming filament color is not clear for filament color change - #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 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_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. //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume #endif diff --git a/Marlin/example_configurations/K8400/Configuration_adv.h b/Marlin/example_configurations/K8400/Configuration_adv.h index f85b55e99..538c121d8 100644 --- a/Marlin/example_configurations/K8400/Configuration_adv.h +++ b/Marlin/example_configurations/K8400/Configuration_adv.h @@ -756,22 +756,23 @@ #endif /** - * Filament Change - * Experimental filament change support. + * Advanced Pause + * Experimental feature for filament change support and for parking the nozzle when paused. * 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. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT. */ -//#define FILAMENT_CHANGE_FEATURE -#if ENABLED(FILAMENT_CHANGE_FEATURE) - #define FILAMENT_CHANGE_X_POS 100 // X position of hotend - #define FILAMENT_CHANGE_Y_POS 100 // Y position of hotend - #define FILAMENT_CHANGE_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 FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) - #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s - #define FILAMENT_CHANGE_RETRACT_LENGTH 5 // Initial retract in mm +//#define ADVANCED_PAUSE_FEATURE +#if ENABLED(ADVANCED_PAUSE_FEATURE) + #define PAUSE_PARK_X_POS 100 // X position of hotend + #define PAUSE_PARK_Y_POS 100 // Y position of hotend + #define PAUSE_PARK_Z_ADD 20 // Z addition of hotend (lift) + #define PAUSE_PARK_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) + #define PAUSE_PARK_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) + #define PAUSE_PARK_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s + #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 #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 @@ -782,14 +783,14 @@ #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend, // Short or zero length for printers without bowden where loading is not used - #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate - #define FILAMENT_CHANGE_EXTRUDE_LENGTH 100 // Extrude filament length in mm after filament is loaded over the hotend, + #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate + #define ADVANCED_PAUSE_EXTRUDE_LENGTH 100 // Extrude filament length in mm after filament is loaded over the hotend, // 0 to disable for manual extrusion // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend, // or until outcoming filament color is not clear for filament color change - #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 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_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. //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume #endif diff --git a/Marlin/example_configurations/RigidBot/Configuration_adv.h b/Marlin/example_configurations/RigidBot/Configuration_adv.h index 8b278778c..0df6dfc18 100644 --- a/Marlin/example_configurations/RigidBot/Configuration_adv.h +++ b/Marlin/example_configurations/RigidBot/Configuration_adv.h @@ -756,22 +756,23 @@ #endif /** - * Filament Change - * Experimental filament change support. + * Advanced Pause + * Experimental feature for filament change support and for parking the nozzle when paused. * 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. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT. */ -//#define FILAMENT_CHANGE_FEATURE -#if ENABLED(FILAMENT_CHANGE_FEATURE) - #define FILAMENT_CHANGE_X_POS 3 // X position of hotend - #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend - #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) - #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) - #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) - #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s - #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm +//#define ADVANCED_PAUSE_FEATURE +#if ENABLED(ADVANCED_PAUSE_FEATURE) + #define PAUSE_PARK_X_POS 3 // X position of hotend + #define PAUSE_PARK_Y_POS 3 // Y position of hotend + #define PAUSE_PARK_Z_ADD 10 // Z addition of hotend (lift) + #define PAUSE_PARK_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) + #define PAUSE_PARK_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) + #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 #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 @@ -782,14 +783,14 @@ #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend, // Short or zero length for printers without bowden where loading is not used - #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate - #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, + #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate + #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, // 0 to disable for manual extrusion // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend, // or until outcoming filament color is not clear for filament color change - #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 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_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. //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume #endif diff --git a/Marlin/example_configurations/SCARA/Configuration_adv.h b/Marlin/example_configurations/SCARA/Configuration_adv.h index e3e327588..60b47073c 100644 --- a/Marlin/example_configurations/SCARA/Configuration_adv.h +++ b/Marlin/example_configurations/SCARA/Configuration_adv.h @@ -756,22 +756,23 @@ #endif /** - * Filament Change - * Experimental filament change support. + * Advanced Pause + * Experimental feature for filament change support and for parking the nozzle when paused. * 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. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT. */ -//#define FILAMENT_CHANGE_FEATURE -#if ENABLED(FILAMENT_CHANGE_FEATURE) - #define FILAMENT_CHANGE_X_POS 3 // X position of hotend - #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend - #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) - #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) - #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) - #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s - #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm +//#define ADVANCED_PAUSE_FEATURE +#if ENABLED(ADVANCED_PAUSE_FEATURE) + #define PAUSE_PARK_X_POS 3 // X position of hotend + #define PAUSE_PARK_Y_POS 3 // Y position of hotend + #define PAUSE_PARK_Z_ADD 10 // Z addition of hotend (lift) + #define PAUSE_PARK_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) + #define PAUSE_PARK_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) + #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 #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 @@ -782,14 +783,14 @@ #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend, // Short or zero length for printers without bowden where loading is not used - #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate - #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, + #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate + #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, // 0 to disable for manual extrusion // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend, // or until outcoming filament color is not clear for filament color change - #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 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_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. //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume #endif diff --git a/Marlin/example_configurations/TAZ4/Configuration_adv.h b/Marlin/example_configurations/TAZ4/Configuration_adv.h index 86d5353df..7bc66c6d4 100644 --- a/Marlin/example_configurations/TAZ4/Configuration_adv.h +++ b/Marlin/example_configurations/TAZ4/Configuration_adv.h @@ -756,22 +756,23 @@ #endif /** - * Filament Change - * Experimental filament change support. + * Advanced Pause + * Experimental feature for filament change support and for parking the nozzle when paused. * 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. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT. */ -//#define FILAMENT_CHANGE_FEATURE -#if ENABLED(FILAMENT_CHANGE_FEATURE) - #define FILAMENT_CHANGE_X_POS 3 // X position of hotend - #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend - #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) - #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) - #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) - #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s - #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm +//#define ADVANCED_PAUSE_FEATURE +#if ENABLED(ADVANCED_PAUSE_FEATURE) + #define PAUSE_PARK_X_POS 3 // X position of hotend + #define PAUSE_PARK_Y_POS 3 // Y position of hotend + #define PAUSE_PARK_Z_ADD 10 // Z addition of hotend (lift) + #define PAUSE_PARK_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) + #define PAUSE_PARK_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) + #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 #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 @@ -782,14 +783,14 @@ #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend, // Short or zero length for printers without bowden where loading is not used - #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate - #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, + #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate + #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, // 0 to disable for manual extrusion // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend, // or until outcoming filament color is not clear for filament color change - #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 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_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. //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume #endif diff --git a/Marlin/example_configurations/TinyBoy2/Configuration_adv.h b/Marlin/example_configurations/TinyBoy2/Configuration_adv.h index 82c1f030d..36623187d 100644 --- a/Marlin/example_configurations/TinyBoy2/Configuration_adv.h +++ b/Marlin/example_configurations/TinyBoy2/Configuration_adv.h @@ -759,22 +759,23 @@ #endif /** - * Filament Change - * Experimental filament change support. + * Advanced Pause + * Experimental feature for filament change support and for parking the nozzle when paused. * 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. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT. */ -//#define FILAMENT_CHANGE_FEATURE -#if ENABLED(FILAMENT_CHANGE_FEATURE) - #define FILAMENT_CHANGE_X_POS 3 // X position of hotend - #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend - #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) - #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) - #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) - #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s - #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm +//#define ADVANCED_PAUSE_FEATURE +#if ENABLED(ADVANCED_PAUSE_FEATURE) + #define PAUSE_PARK_X_POS 3 // X position of hotend + #define PAUSE_PARK_Y_POS 3 // Y position of hotend + #define PAUSE_PARK_Z_ADD 10 // Z addition of hotend (lift) + #define PAUSE_PARK_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) + #define PAUSE_PARK_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) + #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 #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 @@ -785,14 +786,14 @@ #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend, // Short or zero length for printers without bowden where loading is not used - #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate - #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, + #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate + #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, // 0 to disable for manual extrusion // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend, // or until outcoming filament color is not clear for filament color change - #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 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_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. //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume #endif diff --git a/Marlin/example_configurations/WITBOX/Configuration_adv.h b/Marlin/example_configurations/WITBOX/Configuration_adv.h index 4504ea3c9..e165a7fc3 100644 --- a/Marlin/example_configurations/WITBOX/Configuration_adv.h +++ b/Marlin/example_configurations/WITBOX/Configuration_adv.h @@ -756,22 +756,23 @@ #endif /** - * Filament Change - * Experimental filament change support. + * Advanced Pause + * Experimental feature for filament change support and for parking the nozzle when paused. * 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. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT. */ -//#define FILAMENT_CHANGE_FEATURE -#if ENABLED(FILAMENT_CHANGE_FEATURE) - #define FILAMENT_CHANGE_X_POS 3 // X position of hotend - #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend - #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) - #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) - #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) - #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s - #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm +//#define ADVANCED_PAUSE_FEATURE +#if ENABLED(ADVANCED_PAUSE_FEATURE) + #define PAUSE_PARK_X_POS 3 // X position of hotend + #define PAUSE_PARK_Y_POS 3 // Y position of hotend + #define PAUSE_PARK_Z_ADD 10 // Z addition of hotend (lift) + #define PAUSE_PARK_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) + #define PAUSE_PARK_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) + #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 #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 @@ -782,14 +783,14 @@ #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend, // Short or zero length for printers without bowden where loading is not used - #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate - #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, + #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate + #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, // 0 to disable for manual extrusion // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend, // or until outcoming filament color is not clear for filament color change - #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 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_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. //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume #endif diff --git a/Marlin/example_configurations/delta/FLSUN/auto_calibrate/Configuration_adv.h b/Marlin/example_configurations/delta/FLSUN/auto_calibrate/Configuration_adv.h index 5e5f5ca73..62eaf358b 100644 --- a/Marlin/example_configurations/delta/FLSUN/auto_calibrate/Configuration_adv.h +++ b/Marlin/example_configurations/delta/FLSUN/auto_calibrate/Configuration_adv.h @@ -761,22 +761,23 @@ #endif /** - * Filament Change - * Experimental filament change support. + * Advanced Pause + * Experimental feature for filament change support and for parking the nozzle when paused. * 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. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT. */ -//#define FILAMENT_CHANGE_FEATURE -#if ENABLED(FILAMENT_CHANGE_FEATURE) - #define FILAMENT_CHANGE_X_POS 3 // X position of hotend - #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend - #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) - #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) - #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) - #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s - #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm +//#define ADVANCED_PAUSE_FEATURE +#if ENABLED(ADVANCED_PAUSE_FEATURE) + #define PAUSE_PARK_X_POS 3 // X position of hotend + #define PAUSE_PARK_Y_POS 3 // Y position of hotend + #define PAUSE_PARK_Z_ADD 10 // Z addition of hotend (lift) + #define PAUSE_PARK_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) + #define PAUSE_PARK_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) + #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 #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 @@ -787,14 +788,14 @@ #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend, // Short or zero length for printers without bowden where loading is not used - #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate - #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, + #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate + #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, // 0 to disable for manual extrusion // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend, // or until outcoming filament color is not clear for filament color change - #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 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_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. //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume #endif diff --git a/Marlin/example_configurations/delta/FLSUN/kossel_mini/Configuration_adv.h b/Marlin/example_configurations/delta/FLSUN/kossel_mini/Configuration_adv.h index fa5a1de66..6ad9e985f 100644 --- a/Marlin/example_configurations/delta/FLSUN/kossel_mini/Configuration_adv.h +++ b/Marlin/example_configurations/delta/FLSUN/kossel_mini/Configuration_adv.h @@ -760,22 +760,23 @@ #endif /** - * Filament Change - * Experimental filament change support. + * Advanced Pause + * Experimental feature for filament change support and for parking the nozzle when paused. * 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. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT. */ -//#define FILAMENT_CHANGE_FEATURE -#if ENABLED(FILAMENT_CHANGE_FEATURE) - #define FILAMENT_CHANGE_X_POS 3 // X position of hotend - #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend - #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) - #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) - #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) - #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s - #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm +//#define ADVANCED_PAUSE_FEATURE +#if ENABLED(ADVANCED_PAUSE_FEATURE) + #define PAUSE_PARK_X_POS 3 // X position of hotend + #define PAUSE_PARK_Y_POS 3 // Y position of hotend + #define PAUSE_PARK_Z_ADD 10 // Z addition of hotend (lift) + #define PAUSE_PARK_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) + #define PAUSE_PARK_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) + #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 #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 @@ -786,14 +787,14 @@ #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend, // Short or zero length for printers without bowden where loading is not used - #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate - #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, + #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate + #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, // 0 to disable for manual extrusion // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend, // or until outcoming filament color is not clear for filament color change - #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 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_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. //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume #endif diff --git a/Marlin/example_configurations/delta/generic/Configuration_adv.h b/Marlin/example_configurations/delta/generic/Configuration_adv.h index e0d7e538d..2664b31be 100644 --- a/Marlin/example_configurations/delta/generic/Configuration_adv.h +++ b/Marlin/example_configurations/delta/generic/Configuration_adv.h @@ -758,22 +758,23 @@ #endif /** - * Filament Change - * Experimental filament change support. + * Advanced Pause + * Experimental feature for filament change support and for parking the nozzle when paused. * 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. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT. */ -//#define FILAMENT_CHANGE_FEATURE -#if ENABLED(FILAMENT_CHANGE_FEATURE) - #define FILAMENT_CHANGE_X_POS 3 // X position of hotend - #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend - #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) - #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) - #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) - #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s - #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm +//#define ADVANCED_PAUSE_FEATURE +#if ENABLED(ADVANCED_PAUSE_FEATURE) + #define PAUSE_PARK_X_POS 3 // X position of hotend + #define PAUSE_PARK_Y_POS 3 // Y position of hotend + #define PAUSE_PARK_Z_ADD 10 // Z addition of hotend (lift) + #define PAUSE_PARK_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) + #define PAUSE_PARK_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) + #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 #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 @@ -784,14 +785,14 @@ #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend, // Short or zero length for printers without bowden where loading is not used - #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate - #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, + #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate + #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, // 0 to disable for manual extrusion // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend, // or until outcoming filament color is not clear for filament color change - #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 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_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. //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume #endif diff --git a/Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h b/Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h index e0d7e538d..2664b31be 100644 --- a/Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h +++ b/Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h @@ -758,22 +758,23 @@ #endif /** - * Filament Change - * Experimental filament change support. + * Advanced Pause + * Experimental feature for filament change support and for parking the nozzle when paused. * 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. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT. */ -//#define FILAMENT_CHANGE_FEATURE -#if ENABLED(FILAMENT_CHANGE_FEATURE) - #define FILAMENT_CHANGE_X_POS 3 // X position of hotend - #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend - #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) - #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) - #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) - #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s - #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm +//#define ADVANCED_PAUSE_FEATURE +#if ENABLED(ADVANCED_PAUSE_FEATURE) + #define PAUSE_PARK_X_POS 3 // X position of hotend + #define PAUSE_PARK_Y_POS 3 // Y position of hotend + #define PAUSE_PARK_Z_ADD 10 // Z addition of hotend (lift) + #define PAUSE_PARK_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) + #define PAUSE_PARK_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) + #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 #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 @@ -784,14 +785,14 @@ #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend, // Short or zero length for printers without bowden where loading is not used - #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate - #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, + #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate + #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, // 0 to disable for manual extrusion // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend, // or until outcoming filament color is not clear for filament color change - #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 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_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. //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume #endif diff --git a/Marlin/example_configurations/delta/kossel_pro/Configuration_adv.h b/Marlin/example_configurations/delta/kossel_pro/Configuration_adv.h index d7e7c7ebc..e7142cf16 100644 --- a/Marlin/example_configurations/delta/kossel_pro/Configuration_adv.h +++ b/Marlin/example_configurations/delta/kossel_pro/Configuration_adv.h @@ -763,22 +763,23 @@ #endif /** - * Filament Change - * Experimental filament change support. + * Advanced Pause + * Experimental feature for filament change support and for parking the nozzle when paused. * 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. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT. */ -//#define FILAMENT_CHANGE_FEATURE -#if ENABLED(FILAMENT_CHANGE_FEATURE) - #define FILAMENT_CHANGE_X_POS 3 // X position of hotend - #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend - #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) - #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) - #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) - #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s - #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm +//#define ADVANCED_PAUSE_FEATURE +#if ENABLED(ADVANCED_PAUSE_FEATURE) + #define PAUSE_PARK_X_POS 3 // X position of hotend + #define PAUSE_PARK_Y_POS 3 // Y position of hotend + #define PAUSE_PARK_Z_ADD 10 // Z addition of hotend (lift) + #define PAUSE_PARK_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) + #define PAUSE_PARK_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) + #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 #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 @@ -789,14 +790,14 @@ #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend, // Short or zero length for printers without bowden where loading is not used - #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate - #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, + #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate + #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, // 0 to disable for manual extrusion // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend, // or until outcoming filament color is not clear for filament color change - #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 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_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. //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume #endif diff --git a/Marlin/example_configurations/delta/kossel_xl/Configuration_adv.h b/Marlin/example_configurations/delta/kossel_xl/Configuration_adv.h index 33515e271..e1fe86a0e 100644 --- a/Marlin/example_configurations/delta/kossel_xl/Configuration_adv.h +++ b/Marlin/example_configurations/delta/kossel_xl/Configuration_adv.h @@ -758,22 +758,23 @@ #endif /** - * Filament Change - * Experimental filament change support. + * Advanced Pause + * Experimental feature for filament change support and for parking the nozzle when paused. * 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. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT. */ -//#define FILAMENT_CHANGE_FEATURE -#if ENABLED(FILAMENT_CHANGE_FEATURE) - #define FILAMENT_CHANGE_X_POS 3 // X position of hotend - #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend - #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) - #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) - #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) - #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s - #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm +//#define ADVANCED_PAUSE_FEATURE +#if ENABLED(ADVANCED_PAUSE_FEATURE) + #define PAUSE_PARK_X_POS 3 // X position of hotend + #define PAUSE_PARK_Y_POS 3 // Y position of hotend + #define PAUSE_PARK_Z_ADD 10 // Z addition of hotend (lift) + #define PAUSE_PARK_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) + #define PAUSE_PARK_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) + #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 #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 @@ -784,14 +785,14 @@ #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend, // Short or zero length for printers without bowden where loading is not used - #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate - #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, + #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate + #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, // 0 to disable for manual extrusion // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend, // or until outcoming filament color is not clear for filament color change - #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 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_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. //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume #endif diff --git a/Marlin/example_configurations/gCreate_gMax1.5+/Configuration_adv.h b/Marlin/example_configurations/gCreate_gMax1.5+/Configuration_adv.h index 65fb22c3c..59b43ccb6 100644 --- a/Marlin/example_configurations/gCreate_gMax1.5+/Configuration_adv.h +++ b/Marlin/example_configurations/gCreate_gMax1.5+/Configuration_adv.h @@ -763,22 +763,25 @@ #endif /** - * Filament Change - * Experimental filament change support. + * Advanced Pause + * Experimental feature for filament change support and for parking the nozzle when paused. * 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. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT. */ -#define FILAMENT_CHANGE_FEATURE -#if ENABLED(FILAMENT_CHANGE_FEATURE) - #define FILAMENT_CHANGE_X_POS 3 // X position of hotend - #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend - #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) - #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) - #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) - #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s - #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm + +#define ADVANCED_PAUSE_FEATURE +#if ENABLED(ADVANCED_PAUSE_FEATURE) + #define PAUSE_PARK_X_POS 75 // X position of hotend + #define PAUSE_PARK_Y_POS 75 // Y position of hotend + #define PAUSE_PARK_Z_ADD 10 // Z addition of hotend (lift) + #define PAUSE_PARK_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) + #define PAUSE_PARK_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) + #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 #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 @@ -789,14 +792,14 @@ #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend, // Short or zero length for printers without bowden where loading is not used - #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate - #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, + #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate + #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, // 0 to disable for manual extrusion // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend, // or until outcoming filament color is not clear for filament color change - #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 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_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. #define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume #endif diff --git a/Marlin/example_configurations/makibox/Configuration_adv.h b/Marlin/example_configurations/makibox/Configuration_adv.h index 49e41368d..5483576d9 100644 --- a/Marlin/example_configurations/makibox/Configuration_adv.h +++ b/Marlin/example_configurations/makibox/Configuration_adv.h @@ -756,22 +756,23 @@ #endif /** - * Filament Change - * Experimental filament change support. + * Advanced Pause + * Experimental feature for filament change support and for parking the nozzle when paused. * 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. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT. */ -//#define FILAMENT_CHANGE_FEATURE -#if ENABLED(FILAMENT_CHANGE_FEATURE) - #define FILAMENT_CHANGE_X_POS 3 // X position of hotend - #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend - #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) - #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) - #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) - #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s - #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm +//#define ADVANCED_PAUSE_FEATURE +#if ENABLED(ADVANCED_PAUSE_FEATURE) + #define PAUSE_PARK_X_POS 3 // X position of hotend + #define PAUSE_PARK_Y_POS 3 // Y position of hotend + #define PAUSE_PARK_Z_ADD 10 // Z addition of hotend (lift) + #define PAUSE_PARK_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) + #define PAUSE_PARK_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) + #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 #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 @@ -782,14 +783,14 @@ #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend, // Short or zero length for printers without bowden where loading is not used - #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate - #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, + #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate + #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, // 0 to disable for manual extrusion // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend, // or until outcoming filament color is not clear for filament color change - #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 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_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. //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume #endif diff --git a/Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h b/Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h index a5441c127..8dcc348ab 100644 --- a/Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h +++ b/Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h @@ -756,22 +756,23 @@ #endif /** - * Filament Change - * Experimental filament change support. + * Advanced Pause + * Experimental feature for filament change support and for parking the nozzle when paused. * 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. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT. */ -//#define FILAMENT_CHANGE_FEATURE -#if ENABLED(FILAMENT_CHANGE_FEATURE) - #define FILAMENT_CHANGE_X_POS 3 // X position of hotend - #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend - #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) - #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) - #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) - #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s - #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm +//#define ADVANCED_PAUSE_FEATURE +#if ENABLED(ADVANCED_PAUSE_FEATURE) + #define PAUSE_PARK_X_POS 3 // X position of hotend + #define PAUSE_PARK_Y_POS 3 // Y position of hotend + #define PAUSE_PARK_Z_ADD 10 // Z addition of hotend (lift) + #define PAUSE_PARK_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) + #define PAUSE_PARK_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) + #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 #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 @@ -782,14 +783,14 @@ #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend, // Short or zero length for printers without bowden where loading is not used - #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate - #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, + #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate + #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, // 0 to disable for manual extrusion // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend, // or until outcoming filament color is not clear for filament color change - #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 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_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. //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume #endif diff --git a/Marlin/example_configurations/wt150/Configuration_adv.h b/Marlin/example_configurations/wt150/Configuration_adv.h index ab2b4cb73..700c5227f 100644 --- a/Marlin/example_configurations/wt150/Configuration_adv.h +++ b/Marlin/example_configurations/wt150/Configuration_adv.h @@ -759,22 +759,23 @@ #endif /** - * Filament Change - * Experimental filament change support. + * Advanced Pause + * Experimental feature for filament change support and for parking the nozzle when paused. * 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. * This feature is required for the default FILAMENT_RUNOUT_SCRIPT. */ -//#define FILAMENT_CHANGE_FEATURE -#if ENABLED(FILAMENT_CHANGE_FEATURE) - #define FILAMENT_CHANGE_X_POS 3 // X position of hotend - #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend - #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift) - #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) - #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) - #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s - #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm +//#define ADVANCED_PAUSE_FEATURE +#if ENABLED(ADVANCED_PAUSE_FEATURE) + #define PAUSE_PARK_X_POS 3 // X position of hotend + #define PAUSE_PARK_Y_POS 3 // Y position of hotend + #define PAUSE_PARK_Z_ADD 10 // Z addition of hotend (lift) + #define PAUSE_PARK_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis) + #define PAUSE_PARK_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers) + #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 #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 @@ -785,14 +786,14 @@ #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend, // Short or zero length for printers without bowden where loading is not used - #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate - #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, + #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate + #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, // 0 to disable for manual extrusion // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend, // or until outcoming filament color is not clear for filament color change - #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 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_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. //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume #endif diff --git a/Marlin/language_an.h b/Marlin/language_an.h index d4983591d..f8cecfbc3 100644 --- a/Marlin/language_an.h +++ b/Marlin/language_an.h @@ -214,8 +214,8 @@ #define MSG_DRIVE_STRENGTH _UxGT("Fuerza d'o driver") #define MSG_DAC_PERCENT _UxGT("Driver %") #define MSG_DAC_EEPROM_WRITE _UxGT("Escri. DAC EEPROM") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("Cambear filamento") -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("Opcion de cambio:") +#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") +#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extruir mas") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Resumir imp.") diff --git a/Marlin/language_bg.h b/Marlin/language_bg.h index fedb8ca7c..6b58a96e5 100644 --- a/Marlin/language_bg.h +++ b/Marlin/language_bg.h @@ -216,8 +216,8 @@ #define MSG_DAC_PERCENT _UxGT("Driver %") #define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM Write") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("CHANGE FILAMENT") -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("CHANGE OPTIONS:") +#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") +#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extrude more") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Resume print") diff --git a/Marlin/language_ca.h b/Marlin/language_ca.h index 8502e1cac..7ed1de93f 100644 --- a/Marlin/language_ca.h +++ b/Marlin/language_ca.h @@ -218,8 +218,8 @@ #define MSG_DRIVE_STRENGTH _UxGT("Força motor") #define MSG_DAC_PERCENT _UxGT("Driver %") #define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM Write") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("CANVI DE FILAMENT") -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("OPCIONS CANVI:") +#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") +#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extrudeix mes") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Repren impressió") #define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("Temp minima es ") diff --git a/Marlin/language_cz.h b/Marlin/language_cz.h index 57eb9e5d5..2372f68fb 100644 --- a/Marlin/language_cz.h +++ b/Marlin/language_cz.h @@ -225,8 +225,8 @@ #define MSG_DAC_PERCENT _UxGT("Motor %") #define MSG_DAC_EEPROM_WRITE _UxGT("Ulozit do EEPROM") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("VYMENA FILAMENTU") -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("CO DAL?") +#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") +#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Jeste vytlacit") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Obnovit tisk") #define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("Min. teplota je ") diff --git a/Marlin/language_da.h b/Marlin/language_da.h index 9b8c45ecd..69d196529 100644 --- a/Marlin/language_da.h +++ b/Marlin/language_da.h @@ -215,8 +215,8 @@ #define MSG_DAC_PERCENT _UxGT("Driv %") #define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM Skriv") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("SKIFT FILAMENT") -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("Skift muligheder:") +#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") +#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extruder mere") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Forsæt print") diff --git a/Marlin/language_de.h b/Marlin/language_de.h index a72d60ab2..59b337027 100644 --- a/Marlin/language_de.h +++ b/Marlin/language_de.h @@ -227,8 +227,8 @@ #define MSG_DAC_PERCENT _UxGT("Treiber %") #define MSG_DAC_EEPROM_WRITE _UxGT("Werte speichern") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("ÄNDERE FILAMENT") -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("ÄNDERE OPTIONEN:") +#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") +#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extrude mehr") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Drucke weiter") #define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("Min. Temperatur ist ") diff --git a/Marlin/language_en.h b/Marlin/language_en.h index ba8cb807d..d274ab84e 100644 --- a/Marlin/language_en.h +++ b/Marlin/language_en.h @@ -499,6 +499,9 @@ #ifndef MSG_USERWAIT #define MSG_USERWAIT _UxGT("Click to resume...") #endif +#ifndef MSG_PRINT_PAUSED + #define MSG_PRINT_PAUSED _UxGT("Print paused") +#endif #ifndef MSG_RESUMING #define MSG_RESUMING _UxGT("Resuming print") #endif @@ -742,10 +745,10 @@ #define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM Write") #endif #ifndef MSG_FILAMENT_CHANGE_HEADER - #define MSG_FILAMENT_CHANGE_HEADER _UxGT("CHANGE FILAMENT") + #define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") #endif #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 #ifndef MSG_FILAMENT_CHANGE_OPTION_EXTRUDE #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extrude more") diff --git a/Marlin/language_es.h b/Marlin/language_es.h index 21bd330a8..003caf8c3 100644 --- a/Marlin/language_es.h +++ b/Marlin/language_es.h @@ -221,8 +221,8 @@ #define MSG_DAC_PERCENT _UxGT("Driver %") #define MSG_DAC_EEPROM_WRITE _UxGT("Escribe DAC EEPROM") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("Cambiar Filamento") -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("Opciones de cambio:") +#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") +#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extruir mas") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Resumir imp.") diff --git a/Marlin/language_fr.h b/Marlin/language_fr.h index 61097ea84..c541dc9e3 100644 --- a/Marlin/language_fr.h +++ b/Marlin/language_fr.h @@ -229,8 +229,8 @@ #define MSG_DAC_PERCENT _UxGT("Driver %") #define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM sauv.") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("CHANGER FILAMENT") -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("CHANGER OPTIONS:") +#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") +#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("+ extrusion") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Reprendre impr.") #define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("La temp. minimum est ") diff --git a/Marlin/language_gl.h b/Marlin/language_gl.h index a3dcac180..67ad89ffb 100644 --- a/Marlin/language_gl.h +++ b/Marlin/language_gl.h @@ -212,8 +212,8 @@ #define MSG_DAC_PERCENT _UxGT("Motor %") #define MSG_DAC_EEPROM_WRITE _UxGT("Garda DAC EEPROM") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("TROCO FILAMENTO") -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("OPCIONS TROCO:") +#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") +#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extruir mais") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Segue traballo") diff --git a/Marlin/language_hr.h b/Marlin/language_hr.h index 0d5bae21b..7ec0b0dbb 100644 --- a/Marlin/language_hr.h +++ b/Marlin/language_hr.h @@ -213,8 +213,8 @@ #define MSG_DAC_PERCENT _UxGT("Driver %") #define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM Write") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("CHANGE FILAMENT") -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("CHANGE OPTIONS:") +#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") +#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extrudiraj više") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Nastavi print") diff --git a/Marlin/language_it.h b/Marlin/language_it.h index f3e8d353d..b1c5b6623 100644 --- a/Marlin/language_it.h +++ b/Marlin/language_it.h @@ -238,8 +238,8 @@ #define MSG_DAC_PERCENT _UxGT("Driver %") #define MSG_DAC_EEPROM_WRITE _UxGT("Scrivi DAC EEPROM") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("CAMBIA FILAMENTO") -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("CAMBIA OPZIONI:") +#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") +#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Estrusione") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Riprendi stampa") #if ENABLED(DOGLCD) diff --git a/Marlin/language_kana.h b/Marlin/language_kana.h index da2e18a8a..40f60491a 100644 --- a/Marlin/language_kana.h +++ b/Marlin/language_kana.h @@ -285,8 +285,8 @@ #define MSG_DAC_PERCENT "DAC\xbc\xad\xc2\xd8\xae\xb8" // "DACシュツリョク" ("Driver %") #endif #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_OPTION_HEADER "\xc4\xde\xb3\xbb\xa6\xbe\xdd\xc0\xb8\xbc\xc3\xb8\xc0\xde\xbb\xb2" // "ドウサヲセンタクシテクダサイ" ("CHANGE OPTIONS:") +#define MSG_FILAMENT_CHANGE_HEADER "PRINT PAUSED" +#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_RESUME "\xcc\xdf\xd8\xdd\xc4\xbb\xb2\xb6\xb2" // "プリントサイカイ" ("Resume print") diff --git a/Marlin/language_kana_utf8.h b/Marlin/language_kana_utf8.h index 01b393df7..470f51185 100644 --- a/Marlin/language_kana_utf8.h +++ b/Marlin/language_kana_utf8.h @@ -212,8 +212,8 @@ #define MSG_DRIVE_STRENGTH _UxGT("モータークドウリョク") // "Drive Strength" #define MSG_DAC_PERCENT _UxGT("DACシュツリョク %") // "Driver %" #define MSG_DAC_EEPROM_WRITE MSG_STORE_EPROM // "DAC EEPROM Write" -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("フィラメントコウカン") // "CHANGE FILAMENT" -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("ドウサヲセンタクシテクダサイ") // "CHANGE OPTIONS:" +#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") +#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("サラニオシダス") // "Extrude more" #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("プリントサイカイ") // "Resume print" #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("コウカンヲカイシシマス") // "Wait for start" diff --git a/Marlin/language_nl.h b/Marlin/language_nl.h index 74dda87c0..7693b511c 100644 --- a/Marlin/language_nl.h +++ b/Marlin/language_nl.h @@ -224,8 +224,8 @@ #define MSG_DRIVE_STRENGTH _UxGT("Motorstroom") #define MSG_DAC_PERCENT _UxGT("Driver %") //accepted English term in Dutch #define MSG_DAC_EEPROM_WRITE _UxGT("DAC Opslaan") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("WISSEL FILAMENT") -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("WISSEL OPTIES:") +#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") +#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extrudeer meer") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Hervat print") #define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("Minimum Temp is ") diff --git a/Marlin/language_pl.h b/Marlin/language_pl.h index dc3290e79..280cd5b2b 100644 --- a/Marlin/language_pl.h +++ b/Marlin/language_pl.h @@ -433,8 +433,8 @@ #define MSG_DAC_PERCENT _UxGT("Sila %") #define MSG_DAC_EEPROM_WRITE _UxGT("Zapisz DAC EEPROM") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("ZMIEN FILAMENT") -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("ZMIEN OPCJE:") +#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") +#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Ekstruduj wiecej") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Wznow drukowanie") diff --git a/Marlin/language_tr.h b/Marlin/language_tr.h index 3dd7af19d..e6b0af98b 100644 --- a/Marlin/language_tr.h +++ b/Marlin/language_tr.h @@ -227,8 +227,8 @@ #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_EEPROM_WRITE _UxGT("DAC'ı EEPROM'a Yaz") // DAC'ı EEPROM'a Yaz -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("Filaman Değiştir") // Filaman Değiştir +#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") +#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_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 diff --git a/Marlin/language_uk.h b/Marlin/language_uk.h index 774ef2308..ffc302a64 100644 --- a/Marlin/language_uk.h +++ b/Marlin/language_uk.h @@ -203,8 +203,8 @@ #define MSG_DAC_PERCENT _UxGT("% мотору") #define MSG_DAC_EEPROM_WRITE _UxGT("Запис ЦАП на ПЗП") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("ЗАМІНА ВОЛОКНА") -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("НАЛАШТ. ЗАМІНИ:") +#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") +#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Екструдувати") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Відновити друк") diff --git a/Marlin/language_zh_CN.h b/Marlin/language_zh_CN.h index ed9e5c984..58d845a35 100644 --- a/Marlin/language_zh_CN.h +++ b/Marlin/language_zh_CN.h @@ -199,8 +199,8 @@ #define MSG_INFO_MAX_TEMP _UxGT("最高温度") //"Max Temp" #define MSG_INFO_PSU _UxGT("电源供应") //"Power Supply" -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("修改丝料") //"CHANGE FILAMENT" -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("修改选项:") //"CHANGE OPTIONS:" +#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") +#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("挤出更多") //"Extrude more" #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("恢复打印") //"Resume print" diff --git a/Marlin/language_zh_TW.h b/Marlin/language_zh_TW.h index 90aaa8200..89924732b 100644 --- a/Marlin/language_zh_TW.h +++ b/Marlin/language_zh_TW.h @@ -199,8 +199,8 @@ #define MSG_INFO_MAX_TEMP _UxGT("最高溫度") //"Max Temp" #define MSG_INFO_PSU _UxGT("電源供應") //"Power Supply" -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("修改絲料") //"CHANGE FILAMENT" -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("修改選項:") //"CHANGE OPTIONS:" +#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") +#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("擠出更多") //"Extrude more" #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("恢複列印") //"Resume print" diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp index f94d98b96..3cac779d3 100644 --- a/Marlin/temperature.cpp +++ b/Marlin/temperature.cpp @@ -202,9 +202,14 @@ uint8_t Temperature::soft_pwm_amount[HOTENDS], #if ENABLED(PROBING_HEATERS_OFF) 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 - int16_t Temperature::paused_bed_temp; + millis_t Temperature::bed_idle_timeout_ms = 0; + bool Temperature::bed_idle_timeout_exceeded = false; #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]; 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]; + #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) { pid_output = BANG_MAX; 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_reset[HOTEND_INDEX] = true; } @@ -618,6 +634,11 @@ float Temperature::get_pid_output(int e) { #endif // PID_DEBUG #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; #endif @@ -699,12 +720,17 @@ void Temperature::manage_heater() { if (current_temperature[0] < max(HEATER_0_MINTEMP, MAX6675_TMIN + .01)) min_temp_error(0); #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(); #endif 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) // 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); @@ -722,16 +748,6 @@ void Temperature::manage_heater() { } #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) // Make sure measured temperatures are close together if (fabs(current_temperature[0] - redundant_temperature) > MAX_REDUNDANT_TEMP_SENSOR_DIFF) @@ -761,43 +777,71 @@ void Temperature::manage_heater() { } #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 (PENDING(ms, next_bed_check_ms)) return; next_bed_check_ms = ms + BED_CHECK_INTERVAL; #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 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 - #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 { + #if ENABLED(ADVANCED_PAUSE_FEATURE) + if (bed_idle_timeout_exceeded) + { 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); + + #if DISABLED(PIDTEMPBED) + WRITE_HEATER_BED(LOW); + #endif } + else #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) @@ -1180,10 +1224,6 @@ void Temperature::init() { #if ENABLED(PROBING_HEATERS_OFF) paused = false; - ZERO(paused_hotend_temp); - #if HAS_TEMP_BED - paused_bed_temp = 0; - #endif #endif } @@ -1246,11 +1286,29 @@ void Temperature::init() { SERIAL_ECHOPAIR(" ; Timer:", *timer); SERIAL_ECHOPAIR(" ; Temperature:", current); 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; */ 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 (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 #if ENABLED(PROBING_HEATERS_OFF) - paused = false; - ZERO(paused_hotend_temp); - #if HAS_TEMP_BED - paused_bed_temp = 0; - #endif + pause(false); #endif // 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) { paused = p; if (p) { - HOTEND_LOOP() { - paused_hotend_temp[e] = degTargetHotend(e); - setTargetHotend(0, e); - } + HOTEND_LOOP() start_heater_idle_timer(e, 0); // timeout immediately #if HAS_TEMP_BED - paused_bed_temp = degTargetBed(); - setTargetBed(0); + start_bed_idle_timer(0); // timeout immediately #endif } else { - HOTEND_LOOP() setTargetHotend(paused_hotend_temp[e], e); + HOTEND_LOOP() reset_heater_idle_timer(e); #if HAS_TEMP_BED - setTargetBed(paused_bed_temp); + reset_bed_idle_timer(); #endif } } diff --git a/Marlin/temperature.h b/Marlin/temperature.h index 9b85bbde1..0e911a70c 100644 --- a/Marlin/temperature.h +++ b/Marlin/temperature.h @@ -257,10 +257,14 @@ class Temperature { #if ENABLED(PROBING_HEATERS_OFF) 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 - static int16_t paused_bed_temp; + static millis_t bed_idle_timeout_ms; + static bool bed_idle_timeout_exceeded; #endif #endif @@ -458,6 +462,54 @@ class Temperature { #if ENABLED(PROBING_HEATERS_OFF) 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 private: diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp index 54da69fc5..32d47419d 100755 --- a/Marlin/ultralcd.cpp +++ b/Marlin/ultralcd.cpp @@ -126,16 +126,16 @@ uint16_t max_display_update_time = 0; void lcd_info_menu(); #endif // LCD_INFO_MENU - #if ENABLED(FILAMENT_CHANGE_FEATURE) - void lcd_filament_change_toocold_menu(); - void lcd_filament_change_option_menu(); - void lcd_filament_change_init_message(); - void lcd_filament_change_unload_message(); - void lcd_filament_change_insert_message(); - void lcd_filament_change_load_message(); - void lcd_filament_change_heat_nozzle(); - void lcd_filament_change_extrude_message(); - void lcd_filament_change_resume_message(); + #if ENABLED(ADVANCED_PAUSE_FEATURE) + void lcd_advanced_pause_toocold_menu(); + void lcd_advanced_pause_option_menu(); + void lcd_advanced_pause_init_message(); + void lcd_advanced_pause_unload_message(); + void lcd_advanced_pause_insert_message(); + void lcd_advanced_pause_load_message(); + void lcd_advanced_pause_heat_nozzle(); + void lcd_advanced_pause_extrude_message(); + void lcd_advanced_pause_resume_message(); #endif #if ENABLED(DAC_STEPPER_CURRENT) @@ -676,6 +676,7 @@ void kill_screen(const char* lcd_msg) { #if ENABLED(PARK_HEAD_ON_PAUSE) enqueue_and_echo_commands_P(PSTR("M125")); #endif + lcd_setstatuspgm(PSTR(MSG_PRINT_PAUSED), true); } void lcd_sdcard_resume() { @@ -685,6 +686,7 @@ void kill_screen(const char* lcd_msg) { card.startFileprint(); print_job_timer.start(); #endif + lcd_setstatuspgm(PSTR(""), true); } void lcd_sdcard_stop() { @@ -1006,15 +1008,15 @@ void kill_screen(const char* lcd_msg) { void watch_temp_callback_bed() { thermalManager.start_watching_bed(); } #endif - #if ENABLED(FILAMENT_CHANGE_FEATURE) + #if ENABLED(ADVANCED_PAUSE_FEATURE) void lcd_enqueue_filament_change() { if (!DEBUGGING(DRYRUN) && thermalManager.tooColdToExtrude(active_extruder)) { lcd_save_previous_screen(); - lcd_goto_screen(lcd_filament_change_toocold_menu); + lcd_goto_screen(lcd_advanced_pause_toocold_menu); return; } - lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_INIT); - enqueue_and_echo_commands_P(PSTR("M600")); + lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INIT); + enqueue_and_echo_commands_P(PSTR("M600 B0")); } #endif @@ -1129,7 +1131,7 @@ void kill_screen(const char* lcd_msg) { // // Change filament // - #if ENABLED(FILAMENT_CHANGE_FEATURE) + #if ENABLED(ADVANCED_PAUSE_FEATURE) if (!thermalManager.tooColdToExtrude(active_extruder)) MENU_ITEM(function, MSG_FILAMENTCHANGE, lcd_enqueue_filament_change); #endif @@ -2043,7 +2045,7 @@ void kill_screen(const char* lcd_msg) { // // Change filament // - #if ENABLED(FILAMENT_CHANGE_FEATURE) + #if ENABLED(ADVANCED_PAUSE_FEATURE) if (!thermalManager.tooColdToExtrude(active_extruder)) MENU_ITEM(function, MSG_FILAMENTCHANGE, lcd_enqueue_filament_change); #endif @@ -3183,7 +3185,7 @@ void kill_screen(const char* lcd_msg) { * Filament Change Feature Screens * */ - #if ENABLED(FILAMENT_CHANGE_FEATURE) + #if ENABLED(ADVANCED_PAUSE_FEATURE) // Portions from STATIC_ITEM... #define HOTEND_STATUS_ITEM() do { \ @@ -3201,7 +3203,7 @@ void kill_screen(const char* lcd_msg) { ++_thisItemNr; \ } while(0) - void lcd_filament_change_toocold_menu() { + void lcd_advanced_pause_toocold_menu() { START_MENU(); STATIC_ITEM(MSG_HEATING_FAILED_LCD, true, true); STATIC_ITEM(MSG_FILAMENT_CHANGE_MINTEMP STRINGIFY(EXTRUDE_MINTEMP) ".", false, false); @@ -3213,25 +3215,25 @@ void kill_screen(const char* lcd_msg) { END_MENU(); } - void lcd_filament_change_resume_print() { - filament_change_menu_response = FILAMENT_CHANGE_RESPONSE_RESUME_PRINT; + void lcd_advanced_pause_resume_print() { + advanced_pause_menu_response = ADVANCED_PAUSE_RESPONSE_RESUME_PRINT; } - void lcd_filament_change_extrude_more() { - filament_change_menu_response = FILAMENT_CHANGE_RESPONSE_EXTRUDE_MORE; + void lcd_advanced_pause_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(); #if LCD_HEIGHT > 2 STATIC_ITEM(MSG_FILAMENT_CHANGE_OPTION_HEADER, true, false); #endif - MENU_ITEM(function, MSG_FILAMENT_CHANGE_OPTION_RESUME, lcd_filament_change_resume_print); - MENU_ITEM(function, MSG_FILAMENT_CHANGE_OPTION_EXTRUDE, lcd_filament_change_extrude_more); + MENU_ITEM(function, MSG_FILAMENT_CHANGE_OPTION_RESUME, lcd_advanced_pause_resume_print); + MENU_ITEM(function, MSG_FILAMENT_CHANGE_OPTION_EXTRUDE, lcd_advanced_pause_extrude_more); END_MENU(); } - void lcd_filament_change_init_message() { + void lcd_advanced_pause_init_message() { START_SCREEN(); STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true); STATIC_ITEM(MSG_FILAMENT_CHANGE_INIT_1); @@ -3254,7 +3256,7 @@ void kill_screen(const char* lcd_msg) { END_SCREEN(); } - void lcd_filament_change_unload_message() { + void lcd_advanced_pause_unload_message() { START_SCREEN(); STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true); STATIC_ITEM(MSG_FILAMENT_CHANGE_UNLOAD_1); @@ -3277,7 +3279,7 @@ void kill_screen(const char* lcd_msg) { END_SCREEN(); } - void lcd_filament_change_wait_for_nozzles_to_heat() { + void lcd_advanced_pause_wait_for_nozzles_to_heat() { START_SCREEN(); STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true); STATIC_ITEM(MSG_FILAMENT_CHANGE_HEATING_1); @@ -3294,7 +3296,7 @@ void kill_screen(const char* lcd_msg) { END_SCREEN(); } - void lcd_filament_change_heat_nozzle() { + void lcd_advanced_pause_heat_nozzle() { START_SCREEN(); STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true); STATIC_ITEM(MSG_FILAMENT_CHANGE_HEAT_1); @@ -3311,7 +3313,7 @@ void kill_screen(const char* lcd_msg) { END_SCREEN(); } - void lcd_filament_change_insert_message() { + void lcd_advanced_pause_insert_message() { START_SCREEN(); STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true); STATIC_ITEM(MSG_FILAMENT_CHANGE_INSERT_1); @@ -3334,7 +3336,7 @@ void kill_screen(const char* lcd_msg) { END_SCREEN(); } - void lcd_filament_change_load_message() { + void lcd_advanced_pause_load_message() { START_SCREEN(); STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true); STATIC_ITEM(MSG_FILAMENT_CHANGE_LOAD_1); @@ -3357,7 +3359,7 @@ void kill_screen(const char* lcd_msg) { END_SCREEN(); } - void lcd_filament_change_extrude_message() { + void lcd_advanced_pause_extrude_message() { START_SCREEN(); STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true); STATIC_ITEM(MSG_FILAMENT_CHANGE_EXTRUDE_1); @@ -3380,7 +3382,7 @@ void kill_screen(const char* lcd_msg) { END_SCREEN(); } - void lcd_filament_change_resume_message() { + void lcd_advanced_pause_resume_message() { START_SCREEN(); STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true); STATIC_ITEM(MSG_FILAMENT_CHANGE_RESUME_1); @@ -3393,44 +3395,52 @@ void kill_screen(const char* lcd_msg) { END_SCREEN(); } - void lcd_filament_change_show_message(const FilamentChangeMessage message) { + void lcd_advanced_pause_show_message(const AdvancedPauseMessage message) { switch (message) { - case FILAMENT_CHANGE_MESSAGE_INIT: + case ADVANCED_PAUSE_MESSAGE_INIT: defer_return_to_status = true; - lcd_goto_screen(lcd_filament_change_init_message); + lcd_goto_screen(lcd_advanced_pause_init_message); break; - case FILAMENT_CHANGE_MESSAGE_UNLOAD: - lcd_goto_screen(lcd_filament_change_unload_message); + case ADVANCED_PAUSE_MESSAGE_UNLOAD: + defer_return_to_status = true; + lcd_goto_screen(lcd_advanced_pause_unload_message); break; - case FILAMENT_CHANGE_MESSAGE_INSERT: - lcd_goto_screen(lcd_filament_change_insert_message); + case ADVANCED_PAUSE_MESSAGE_INSERT: + defer_return_to_status = true; + lcd_goto_screen(lcd_advanced_pause_insert_message); break; - case FILAMENT_CHANGE_MESSAGE_LOAD: - lcd_goto_screen(lcd_filament_change_load_message); + case ADVANCED_PAUSE_MESSAGE_LOAD: + defer_return_to_status = true; + lcd_goto_screen(lcd_advanced_pause_load_message); break; - case FILAMENT_CHANGE_MESSAGE_EXTRUDE: - lcd_goto_screen(lcd_filament_change_extrude_message); + case ADVANCED_PAUSE_MESSAGE_EXTRUDE: + defer_return_to_status = true; + lcd_goto_screen(lcd_advanced_pause_extrude_message); break; - case FILAMENT_CHANGE_MESSAGE_CLICK_TO_HEAT_NOZZLE: - lcd_goto_screen(lcd_filament_change_heat_nozzle); + case ADVANCED_PAUSE_MESSAGE_CLICK_TO_HEAT_NOZZLE: + defer_return_to_status = true; + lcd_goto_screen(lcd_advanced_pause_heat_nozzle); break; - case FILAMENT_CHANGE_MESSAGE_WAIT_FOR_NOZZLES_TO_HEAT: - lcd_goto_screen(lcd_filament_change_wait_for_nozzles_to_heat); + case ADVANCED_PAUSE_MESSAGE_WAIT_FOR_NOZZLES_TO_HEAT: + defer_return_to_status = true; + lcd_goto_screen(lcd_advanced_pause_wait_for_nozzles_to_heat); break; - case FILAMENT_CHANGE_MESSAGE_OPTION: - filament_change_menu_response = FILAMENT_CHANGE_RESPONSE_WAIT_FOR; - lcd_goto_screen(lcd_filament_change_option_menu); + case ADVANCED_PAUSE_MESSAGE_OPTION: + defer_return_to_status = true; + advanced_pause_menu_response = ADVANCED_PAUSE_RESPONSE_WAIT_FOR; + lcd_goto_screen(lcd_advanced_pause_option_menu); break; - case FILAMENT_CHANGE_MESSAGE_RESUME: - lcd_goto_screen(lcd_filament_change_resume_message); + case ADVANCED_PAUSE_MESSAGE_RESUME: + defer_return_to_status = true; + lcd_goto_screen(lcd_advanced_pause_resume_message); break; - case FILAMENT_CHANGE_MESSAGE_STATUS: + case ADVANCED_PAUSE_MESSAGE_STATUS: lcd_return_to_status(); break; } } - #endif // FILAMENT_CHANGE_FEATURE + #endif // ADVANCED_PAUSE_FEATURE /** * diff --git a/Marlin/ultralcd.h b/Marlin/ultralcd.h index 1bce5a096..c6a11ee0b 100644 --- a/Marlin/ultralcd.h +++ b/Marlin/ultralcd.h @@ -83,9 +83,9 @@ void lcd_quick_feedback(); // Audible feedback for a button click - could also be visual void lcd_completion_feedback(const bool good=true); - #if ENABLED(FILAMENT_CHANGE_FEATURE) - void lcd_filament_change_show_message(const FilamentChangeMessage message); - #endif // FILAMENT_CHANGE_FEATURE + #if ENABLED(ADVANCED_PAUSE_FEATURE) + void lcd_advanced_pause_show_message(const AdvancedPauseMessage message); + #endif // ADVANCED_PAUSE_FEATURE #else diff --git a/Marlin/ultralcd_impl_DOGM.h b/Marlin/ultralcd_impl_DOGM.h index b4ee92c5f..c0049a4c7 100644 --- a/Marlin/ultralcd_impl_DOGM.h +++ b/Marlin/ultralcd_impl_DOGM.h @@ -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 " ")); } -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 bool isBed = heater < 0; #else const bool isBed = false; #endif - if (PAGE_UNDER(7)) - _draw_centered_temp((isBed ? thermalManager.degTargetBed() : thermalManager.degTargetHotend(heater)) + 0.5, x, 7); + if (PAGE_UNDER(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)) _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)) { // Extruders - HOTEND_LOOP() _draw_heater_status(5 + e * 25, e); + HOTEND_LOOP() _draw_heater_status(5 + e * 25, e, blink); // Heated bed #if HOTENDS < 4 && HAS_TEMP_BED - _draw_heater_status(81, -1); + _draw_heater_status(81, -1, blink); #endif #if HAS_FAN0 @@ -662,7 +673,7 @@ static void lcd_implementation_status_screen() { uint8_t row_y1, row_y2; 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) { row_y1 = row * row_height + 1; @@ -679,7 +690,7 @@ static void lcd_implementation_status_screen() { 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 static void lcd_implementation_mark_as_selected(const uint8_t row, const bool isSelected) { diff --git a/Marlin/ultralcd_impl_HD44780.h b/Marlin/ultralcd_impl_HD44780.h index cbad9698e..1f7683387 100644 --- a/Marlin/ultralcd_impl_HD44780.h +++ b/Marlin/ultralcd_impl_HD44780.h @@ -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) inline void lcd_draw_progress_bar(const uint8_t percent) { @@ -616,17 +651,7 @@ Possible status screens: |01234567890123456789| */ static void lcd_implementation_status_screen() { - - #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(' ') + bool blink = lcd_blink(); // // Line 1 @@ -639,7 +664,7 @@ static void lcd_implementation_status_screen() { // // Hotend 0 Temperature // - LCD_TEMP_ONLY(thermalManager.degHotend(0), thermalManager.degTargetHotend(0)); + _draw_heater_status(0, -1, blink); // // Hotend 1 or Bed Temperature @@ -649,10 +674,10 @@ static void lcd_implementation_status_screen() { lcd.setCursor(8, 0); #if HOTENDS > 1 lcd.print(LCD_STR_THERMOMETER[0]); - LCD_TEMP_ONLY(thermalManager.degHotend(1), thermalManager.degTargetHotend(1)); + _draw_heater_status(1, -1, blink); #else lcd.print(LCD_STR_BEDTEMP[0]); - LCD_TEMP_ONLY(thermalManager.degBed(), thermalManager.degTargetBed()); + _draw_heater_status(-1, -1, blink); #endif #endif // HOTENDS > 1 || TEMP_SENSOR_BED != 0 @@ -662,7 +687,7 @@ static void lcd_implementation_status_screen() { // // 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 @@ -670,9 +695,9 @@ static void lcd_implementation_status_screen() { #if HOTENDS > 1 || TEMP_SENSOR_BED != 0 lcd.setCursor(10, 0); #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 - LCD_TEMP(thermalManager.degBed(), thermalManager.degTargetBed(), LCD_STR_BEDTEMP[0]); + _draw_heater_status(-1, LCD_STR_BEDTEMP[0], blink); #endif #endif // HOTENDS > 1 || TEMP_SENSOR_BED != 0 @@ -685,8 +710,6 @@ static void lcd_implementation_status_screen() { #if LCD_HEIGHT > 2 - bool blink = lcd_blink(); - #if LCD_WIDTH < 20 #if ENABLED(SDSUPPORT) @@ -708,7 +731,7 @@ static void lcd_implementation_status_screen() { // If we both have a 2nd extruder and a heated bed, // show the heated bed temp on the left, // 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 // Before homing the axis letters are blinking 'X' <-> '?'. @@ -803,7 +826,7 @@ static void lcd_implementation_status_screen() { #if ENABLED(ULTIPANEL) - #if ENABLED(FILAMENT_CHANGE_FEATURE) + #if ENABLED(ADVANCED_PAUSE_FEATURE) static void lcd_implementation_hotend_status(const uint8_t row) { 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) { UNUSED(invert);