diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 507a8f83e..62bfb68da 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -4692,13 +4692,13 @@ if(eSoundMode!=e_SOUND_MODE_SILENT) // We don't know where we are! HOME! // Push the commands to the front of the message queue in the reverse order! // There shall be always enough space reserved for these commands. - if (lcd_commands_type != LcdCommands::StopPrint) { + // if (lcd_commands_type != LcdCommands::StopPrint) { repeatcommand_front(); // repeat G80 with all its parameters enquecommand_front_P((PSTR("G28 W0"))); - } - else { - mesh_bed_leveling_flag = false; - } + // } + // else { + // mesh_bed_leveling_flag = false; + // } break; } @@ -4728,23 +4728,23 @@ if(eSoundMode!=e_SOUND_MODE_SILENT) #ifndef PINDA_THERMISTOR if (run == false && temp_cal_active == true && calibration_status_pinda() == true && target_temperature_bed >= 50) { - if (lcd_commands_type != LcdCommands::StopPrint) { + // if (lcd_commands_type != LcdCommands::StopPrint) { temp_compensation_start(); run = true; repeatcommand_front(); // repeat G80 with all its parameters enquecommand_front_P((PSTR("G28 W0"))); - } - else { - mesh_bed_leveling_flag = false; - } + // } + // else { + // mesh_bed_leveling_flag = false; + // } break; } run = false; #endif //PINDA_THERMISTOR - if (lcd_commands_type == LcdCommands::StopPrint) { - mesh_bed_leveling_flag = false; - break; - } + // if (lcd_commands_type == LcdCommands::StopPrint) { + // mesh_bed_leveling_flag = false; + // break; + // } // Save custom message state, set a new custom message state to display: Calibrating point 9. CustomMsg custom_message_type_old = custom_message_type; unsigned int custom_message_state_old = custom_message_state; @@ -8948,6 +8948,7 @@ static void wait_for_heater(long codenum, uint8_t extruder) { residencyStart = -1; /* continue to loop until we have reached the target temp _and_ until TEMP_RESIDENCY_TIME hasn't passed since we reached it */ + cancel_heatup = false; while ((!cancel_heatup) && ((residencyStart == -1) || (residencyStart >= 0 && (((unsigned int)(_millis() - residencyStart)) < (TEMP_RESIDENCY_TIME * 1000UL))))) { #else diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index d988e5488..d8b3e817b 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -250,7 +250,9 @@ static void fil_unload_menu(); static void lcd_disable_farm_mode(); static void lcd_set_fan_check(); static void lcd_cutter_enabled(); +#ifdef SNMM static char snmm_stop_print_menu(); +#endif //SNMM #ifdef SDCARD_SORT_ALPHA static void lcd_sort_type_set(); #endif @@ -1056,7 +1058,7 @@ static void lcd_status_screen() } if (current_click - && (lcd_commands_type != LcdCommands::StopPrint) //click is aborted unless stop print finishes + // && (lcd_commands_type != LcdCommands::StopPrint) //click is aborted unless stop print finishes && ( menu_block_entering_on_serious_errors == SERIOUS_ERR_NONE ) // or a serious error blocks entering the menu ) { @@ -1466,7 +1468,7 @@ void lcd_commands() } #endif // not SNMM - +/* if (lcd_commands_type == LcdCommands::StopPrint) /// stop print { @@ -1558,6 +1560,7 @@ void lcd_commands() lcd_commands_step = 7; } } +*/ if (lcd_commands_type == LcdCommands::FarmModeConfirm) /// farm mode confirm { @@ -6051,7 +6054,7 @@ void bowden_menu() { } } -//#ifdef SNMM +#ifdef SNMM static char snmm_stop_print_menu() { //menu for choosing which filaments will be unloaded in stop print lcd_clear(); @@ -6102,6 +6105,8 @@ static char snmm_stop_print_menu() { //menu for choosing which filaments will be } +#endif //SNMM + //! @brief Select one of numbered items //! //! Create list of items with header. Header can not be selected. @@ -7320,7 +7325,6 @@ void lcd_print_stop() // Clear any saved printing state cancel_saved_printing(); - cancel_heatup = true; // Abort the planner/queue/sd planner_abort_hard(); @@ -7331,19 +7335,41 @@ void lcd_print_stop() CRITICAL_SECTION_END; +#ifdef MESH_BED_LEVELING + mbl.active = false; //also prevents undoing the mbl compensation a second time in the second planner_abort_hard() +#endif + lcd_setstatuspgm(_T(MSG_PRINT_ABORTED)); stoptime = _millis(); unsigned long t = (stoptime - starttime - pause_time) / 1000; //time in s pause_time = 0; save_statistics(total_filament_used, t); - lcd_return_to_status(); - lcd_ignore_click(true); - lcd_commands_step = 0; - lcd_commands_type = LcdCommands::StopPrint; - // Turn off the print fan - SET_OUTPUT(FAN_PIN); - WRITE(FAN_PIN, 0); - fanSpeed = 0; + + lcd_commands_step = 0; + lcd_commands_type = LcdCommands::Idle; + + lcd_cooldown(); //turns off heaters and fan; goes to status screen. + cancel_heatup = true; //unroll temperature wait loop stack. + + current_position[Z_AXIS] += 10; //lift Z. + plan_buffer_line_curposXYZE(manual_feedrate[Z_AXIS] / 60, active_extruder); + + if (axis_known_position[X_AXIS] && axis_known_position[Y_AXIS]) //if axis are homed, move to parked position. + { + current_position[X_AXIS] = X_CANCEL_POS; + current_position[Y_AXIS] = Y_CANCEL_POS; + plan_buffer_line_curposXYZE(manual_feedrate[0] / 60, active_extruder); + } + st_synchronize(); + + if (mmu_enabled) extr_unload(); //M702 C + + finishAndDisableSteppers(); //M84 + + lcd_setstatuspgm(_T(WELCOME_MSG)); + custom_message_type = CustomMsg::Status; + + planner_abort_hard(); //needs to be done since plan_buffer_line resets waiting_inside_plan_buffer_line_print_aborted to false. Also copies current to destination. } void lcd_sdcard_stop()