|
|
@ -5866,7 +5866,7 @@ inline void gcode_M17() {
|
|
|
|
idle();
|
|
|
|
idle();
|
|
|
|
heaters_heating = false;
|
|
|
|
heaters_heating = false;
|
|
|
|
HOTEND_LOOP() {
|
|
|
|
HOTEND_LOOP() {
|
|
|
|
if (thermalManager.degTargetHotend(e) && abs(thermalManager.degHotend(e) - thermalManager.degTargetHotend(e)) > 3) {
|
|
|
|
if (thermalManager.degTargetHotend(e) && abs(thermalManager.degHotend(e) - thermalManager.degTargetHotend(e)) > TEMP_HYSTERESIS) {
|
|
|
|
heaters_heating = true;
|
|
|
|
heaters_heating = true;
|
|
|
|
#if ENABLED(ULTIPANEL)
|
|
|
|
#if ENABLED(ULTIPANEL)
|
|
|
|
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_WAIT_FOR_NOZZLES_TO_HEAT);
|
|
|
|
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_WAIT_FOR_NOZZLES_TO_HEAT);
|
|
|
@ -5882,7 +5882,7 @@ inline void gcode_M17() {
|
|
|
|
) {
|
|
|
|
) {
|
|
|
|
if (move_away_flag) return false; // already paused
|
|
|
|
if (move_away_flag) return false; // already paused
|
|
|
|
|
|
|
|
|
|
|
|
if (!DEBUGGING(DRYRUN) && unload_length != 0) {
|
|
|
|
if (!DEBUGGING(DRYRUN) && (unload_length != 0 || retract != 0)) {
|
|
|
|
#if ENABLED(PREVENT_COLD_EXTRUSION)
|
|
|
|
#if ENABLED(PREVENT_COLD_EXTRUSION)
|
|
|
|
if (!thermalManager.allow_cold_extrude &&
|
|
|
|
if (!thermalManager.allow_cold_extrude &&
|
|
|
|
thermalManager.degTargetHotend(active_extruder) < thermalManager.extrude_min_temp) {
|
|
|
|
thermalManager.degTargetHotend(active_extruder) < thermalManager.extrude_min_temp) {
|
|
|
@ -5919,10 +5919,11 @@ inline void gcode_M17() {
|
|
|
|
COPY(resume_position, current_position);
|
|
|
|
COPY(resume_position, current_position);
|
|
|
|
set_destination_to_current();
|
|
|
|
set_destination_to_current();
|
|
|
|
|
|
|
|
|
|
|
|
// Initial retract before move to filament change position
|
|
|
|
if (retract) {
|
|
|
|
destination[E_AXIS] += retract;
|
|
|
|
// Initial retract before move to filament change position
|
|
|
|
|
|
|
|
destination[E_AXIS] += retract;
|
|
|
|
RUNPLAN(PAUSE_PARK_RETRACT_FEEDRATE);
|
|
|
|
RUNPLAN(PAUSE_PARK_RETRACT_FEEDRATE);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Lift Z axis
|
|
|
|
// Lift Z axis
|
|
|
|
if (z_lift > 0) {
|
|
|
|
if (z_lift > 0) {
|
|
|
@ -5951,23 +5952,25 @@ inline void gcode_M17() {
|
|
|
|
destination[E_AXIS] += unload_length;
|
|
|
|
destination[E_AXIS] += unload_length;
|
|
|
|
RUNPLAN(FILAMENT_CHANGE_UNLOAD_FEEDRATE);
|
|
|
|
RUNPLAN(FILAMENT_CHANGE_UNLOAD_FEEDRATE);
|
|
|
|
stepper.synchronize();
|
|
|
|
stepper.synchronize();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (show_lcd) {
|
|
|
|
if (show_lcd) {
|
|
|
|
#if ENABLED(ULTIPANEL)
|
|
|
|
#if ENABLED(ULTIPANEL)
|
|
|
|
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INSERT);
|
|
|
|
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INSERT);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if HAS_BUZZER
|
|
|
|
|
|
|
|
filament_change_beep(max_beep_count, true);
|
|
|
|
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
idle();
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Disable extruders steppers for manual filament changing
|
|
|
|
#if HAS_BUZZER
|
|
|
|
disable_e_steppers();
|
|
|
|
filament_change_beep(max_beep_count, true);
|
|
|
|
safe_delay(100);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
idle();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Disable extruders steppers for manual filament changing (only on boards that have separate ENABLE_PINS)
|
|
|
|
|
|
|
|
#if E0_ENABLE_PIN != X_ENABLE_PIN && E1_ENABLE_PIN != Y_ENABLE_PIN
|
|
|
|
|
|
|
|
disable_e_steppers();
|
|
|
|
|
|
|
|
safe_delay(100);
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
// Start the heater idle timers
|
|
|
|
// Start the heater idle timers
|
|
|
|
const millis_t nozzle_timeout = (millis_t)(PAUSE_PARK_NOZZLE_TIMEOUT) * 1000UL;
|
|
|
|
const millis_t nozzle_timeout = (millis_t)(PAUSE_PARK_NOZZLE_TIMEOUT) * 1000UL;
|
|
|
@ -5989,14 +5992,43 @@ inline void gcode_M17() {
|
|
|
|
filament_change_beep(max_beep_count);
|
|
|
|
filament_change_beep(max_beep_count);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// If the nozzle has timed out, wait for the user to press the button to re-heat the nozzle, then
|
|
|
|
|
|
|
|
// re-heat the nozzle, re-show the insert screen, restart the idle timers, and start over
|
|
|
|
if (!nozzle_timed_out)
|
|
|
|
if (!nozzle_timed_out)
|
|
|
|
HOTEND_LOOP()
|
|
|
|
HOTEND_LOOP()
|
|
|
|
nozzle_timed_out |= thermalManager.is_heater_idle(e);
|
|
|
|
nozzle_timed_out |= thermalManager.is_heater_idle(e);
|
|
|
|
|
|
|
|
|
|
|
|
#if ENABLED(ULTIPANEL)
|
|
|
|
if (nozzle_timed_out) {
|
|
|
|
if (nozzle_timed_out)
|
|
|
|
#if ENABLED(ULTIPANEL)
|
|
|
|
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_CLICK_TO_HEAT_NOZZLE);
|
|
|
|
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_CLICK_TO_HEAT_NOZZLE);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Wait for LCD click or M108
|
|
|
|
|
|
|
|
while (wait_for_user) idle(true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Re-enable the heaters if they timed out
|
|
|
|
|
|
|
|
HOTEND_LOOP() thermalManager.reset_heater_idle_timer(e);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Wait for the heaters to reach the target temperatures
|
|
|
|
|
|
|
|
ensure_safe_temperature();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if ENABLED(ULTIPANEL)
|
|
|
|
|
|
|
|
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INSERT);
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 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);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
wait_for_user = true; /* Wait for user to load filament */
|
|
|
|
|
|
|
|
nozzle_timed_out = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if HAS_BUZZER
|
|
|
|
|
|
|
|
filament_change_beep(max_beep_count, true);
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
idle(true);
|
|
|
|
idle(true);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -7643,7 +7675,7 @@ inline void gcode_M18_M84() {
|
|
|
|
if (parser.seen('X')) disable_X();
|
|
|
|
if (parser.seen('X')) disable_X();
|
|
|
|
if (parser.seen('Y')) disable_Y();
|
|
|
|
if (parser.seen('Y')) disable_Y();
|
|
|
|
if (parser.seen('Z')) disable_Z();
|
|
|
|
if (parser.seen('Z')) disable_Z();
|
|
|
|
#if ((E0_ENABLE_PIN != X_ENABLE_PIN) && (E1_ENABLE_PIN != Y_ENABLE_PIN)) // Only enable on boards that have seperate ENABLE_PINS
|
|
|
|
#if E0_ENABLE_PIN != X_ENABLE_PIN && E1_ENABLE_PIN != Y_ENABLE_PIN // Only enable on boards that have seperate ENABLE_PINS
|
|
|
|
if (parser.seen('E')) disable_e_steppers();
|
|
|
|
if (parser.seen('E')) disable_e_steppers();
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
}
|
|
|
|