M600 fixes

This commit is contained in:
Thomas Moore 2017-06-12 23:09:44 -05:00 committed by Scott Lahteine
parent 311f6aff72
commit 3d24c329af
2 changed files with 67 additions and 30 deletions

View File

@ -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();
if (retract) {
// Initial retract before move to filament change position // Initial retract before move to filament change position
destination[E_AXIS] += retract; 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,6 +5952,7 @@ 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)
@ -5963,11 +5965,12 @@ inline void gcode_M17() {
#endif #endif
idle(); idle();
}
// Disable extruders steppers for manual filament changing // 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(); disable_e_steppers();
safe_delay(100); 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,15 +5992,44 @@ 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 (nozzle_timed_out) {
#if ENABLED(ULTIPANEL) #if ENABLED(ULTIPANEL)
if (nozzle_timed_out)
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);
} }
KEEPALIVE_STATE(IN_HANDLER); KEEPALIVE_STATE(IN_HANDLER);
@ -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
} }

View File

@ -1107,11 +1107,16 @@ void kill_screen(const char* lcd_msg) {
#if ENABLED(ADVANCED_PAUSE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
void lcd_enqueue_filament_change() { void lcd_enqueue_filament_change() {
if (!DEBUGGING(DRYRUN) && thermalManager.tooColdToExtrude(active_extruder)) {
#if ENABLED(PREVENT_COLD_EXTRUSION)
if (!DEBUGGING(DRYRUN) && !thermalManager.allow_cold_extrude &&
thermalManager.degTargetHotend(active_extruder) < thermalManager.extrude_min_temp) {
lcd_save_previous_screen(); lcd_save_previous_screen();
lcd_goto_screen(lcd_advanced_pause_toocold_menu); lcd_goto_screen(lcd_advanced_pause_toocold_menu);
return; return;
} }
#endif
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INIT); lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INIT);
enqueue_and_echo_commands_P(PSTR("M600 B0")); enqueue_and_echo_commands_P(PSTR("M600 B0"));
} }