diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 03f0cd7a..fdaae3c6 100755 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -2471,7 +2471,7 @@ // Set to 0 for manual extrusion. // Filament can be extruded repeatedly from the Filament Change menu // until extrusion is consistent, and to purge old filament. - #define ADVANCED_PAUSE_RESUME_PRIME 0 // (mm) Extra distance to prime nozzle after returning from park. + //#define ADVANCED_PAUSE_RESUME_PRIME 0 // (mm) Extra distance to prime nozzle after returning from park. //#define ADVANCED_PAUSE_FANS_PAUSE // Turn off print-cooling fans while the machine is paused. // Filament Unload does a Retract, Delay, and Purge first: @@ -2480,13 +2480,13 @@ #define FILAMENT_UNLOAD_PURGE_LENGTH 8 // (mm) An unretract is done, then this length is purged. #define FILAMENT_UNLOAD_PURGE_FEEDRATE 25 // (mm/s) feedrate to purge before unload - #define PAUSE_PARK_NOZZLE_TIMEOUT 600 // (seconds) Time limit before the nozzle is turned off for safety. + #define PAUSE_PARK_NOZZLE_TIMEOUT 30 // (seconds) Time limit before the nozzle is turned off for safety. #define FILAMENT_CHANGE_ALERT_BEEPS 10 // Number of alert beeps to play when a response is needed. #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable for XYZ steppers to stay powered on during filament change. //#define FILAMENT_CHANGE_RESUME_ON_INSERT // Automatically continue / load filament when runout sensor is triggered again. //#define PAUSE_REHEAT_FAST_RESUME // Reduce number of waits by not prompting again post-timeout before continuing. - #define PARK_HEAD_ON_PAUSE // Park the nozzle during pause and filament change. + #define PARK_HEAD_ON_PAUSE // Park the nozzle during pause and filament change. //#define HOME_BEFORE_FILAMENT_CHANGE // If needed, home before parking for filament change //#define FILAMENT_LOAD_UNLOAD_GCODES // Add M701/M702 Load/Unload G-codes, plus Load/Unload in the LCD Prepare menu. @@ -3900,7 +3900,7 @@ */ #define HOST_ACTION_COMMANDS #if ENABLED(HOST_ACTION_COMMANDS) - //#define HOST_PAUSE_M76 + #define HOST_PAUSE_M76 #define HOST_PROMPT_SUPPORT //#define HOST_START_MENU_ITEM // Add a menu item that tells the host to start #endif diff --git a/Marlin/src/feature/pause.cpp b/Marlin/src/feature/pause.cpp index 73ea5333..feaa6b7e 100644 --- a/Marlin/src/feature/pause.cpp +++ b/Marlin/src/feature/pause.cpp @@ -286,7 +286,8 @@ bool load_filament(const_float_t slow_load_length/*=0*/, const_float_t fast_load #if EITHER(HAS_LCD_MENU, DWIN_CREALITY_LCD_ENHANCED) ui.pause_show_message(PAUSE_MESSAGE_OPTION); // Also sets PAUSE_RESPONSE_WAIT_FOR #else - pause_menu_response = PAUSE_RESPONSE_WAIT_FOR; + //pause_menu_response = PAUSE_RESPONSE_WAIT_FOR; + pause_menu_response = PAUSE_RESPONSE_RESUME_PRINT; // KNUTWURST #endif while (pause_menu_response == PAUSE_RESPONSE_WAIT_FOR) idle_no_sleep(); } diff --git a/Marlin/src/lcd/anycubic_touchscreen.cpp b/Marlin/src/lcd/anycubic_touchscreen.cpp index 2535a9fa..2b957c54 100755 --- a/Marlin/src/lcd/anycubic_touchscreen.cpp +++ b/Marlin/src/lcd/anycubic_touchscreen.cpp @@ -353,17 +353,19 @@ void AnycubicTouchscreenClass::StartPrint(){ break; case 1: // regular sd pause - queue.inject_P(PSTR("M108")); // unpark nozzle #ifdef ANYCUBIC_TFT_DEBUG SERIAL_ECHOPGM("DEBUG: AI3M Pause State: ", ai3m_pause_state); SERIAL_EOL(); - SERIAL_ECHOLNPGM("DEBUG: M108 Resume from regular pause"); + SERIAL_ECHOLNPGM("DEBUG: M108/M24 Resume from regular pause"); #endif + IsParked = false; // remove parked flag - wait_for_heatup = false; - wait_for_user = false; starttime = millis(); card.startOrResumeFilePrinting(); // resume regularly + + wait_for_heatup = false; + wait_for_user = false; + TFTstate = ANYCUBIC_TFT_STATE_SDPRINT; ai3m_pause_state = 0; #ifdef ANYCUBIC_TFT_DEBUG @@ -386,12 +388,16 @@ void AnycubicTouchscreenClass::StartPrint(){ break; case 3: // paused by filament runout - queue.inject_P(PSTR("M24")); // unpark nozzle and resume #ifdef ANYCUBIC_TFT_DEBUG - SERIAL_ECHOLNPGM("DEBUG: M24 Resume from Filament Runout"); + SERIAL_ECHOLNPGM("DEBUG: M108/M24 Resume from Filament Runout"); #endif - IsParked = false; // clear flags + IsParked = false; // remove parked flag + card.startOrResumeFilePrinting(); // resume regularly + + wait_for_heatup = false; wait_for_user = false; + + TFTstate = ANYCUBIC_TFT_STATE_SDPRINT; ai3m_pause_state = 0; #ifdef ANYCUBIC_TFT_DEBUG SERIAL_ECHOLNPGM("DEBUG: Filament Pause Flag cleared"); @@ -439,8 +445,7 @@ void AnycubicTouchscreenClass::PausePrint() { SERIAL_EOL(); SERIAL_ECHOLNPGM("DEBUG: Regular Pause"); #endif - } - else { // pause caused by filament runout + } else { // pause caused by filament runout #ifdef ANYCUBIC_TFT_DEBUG SERIAL_ECHOLNPGM("DEBUG: Filament Runout Pause"); #endif @@ -478,16 +483,18 @@ void AnycubicTouchscreenClass::PausePrint() { inline void AnycubicTouchscreenClass::StopPrint() { // stop print, disable heaters - wait_for_user = false; - wait_for_heatup = false; - IsParked = false; + if (card.isFileOpen) { card.endFilePrintNow(); card.closefile(); } + + queue.clear(); + #ifdef ANYCUBIC_TFT_DEBUG SERIAL_ECHOLNPGM("DEBUG: Stopped and cleared"); #endif + print_job_timer.stop(); thermalManager.disable_all_heaters(); ai3m_pause_state = 0; @@ -502,17 +509,21 @@ inline void AnycubicTouchscreenClass::StopPrint() } void AnycubicTouchscreenClass::FilamentChangeResume() { - wait_for_user = false; //must be done twice, since we have a bug in marlin - wait_for_heatup = false; - // call M108 to break out of M600 pause - queue.inject_P(PSTR("M108")); #ifdef ANYCUBIC_TFT_DEBUG SERIAL_ECHOLNPGM("DEBUG: M108 Resume called"); #endif - wait_for_user = false; + + IsParked = false; // remove parked flag + starttime = millis(); + card.startOrResumeFilePrinting(); // resume regularly + wait_for_heatup = false; - // resume with proper progress state - card.startOrResumeFilePrinting(); + wait_for_user = false; + + TFTstate = ANYCUBIC_TFT_STATE_SDPRINT; + ai3m_pause_state = 0; + + #ifdef ANYCUBIC_TFT_DEBUG SERIAL_ECHOLNPGM("DEBUG: M108 Resume done"); #endif @@ -539,7 +550,10 @@ void AnycubicTouchscreenClass::ReheatNozzle() { #ifdef ANYCUBIC_TFT_DEBUG SERIAL_ECHOLNPGM("DEBUG: Send reheat M108"); #endif - queue.inject_P(PSTR("M108")); + + wait_for_heatup = false; + wait_for_user = false; + #ifdef ANYCUBIC_TFT_DEBUG SERIAL_ECHOLNPGM("DEBUG: Resume heating"); #endif @@ -557,10 +571,6 @@ void AnycubicTouchscreenClass::ReheatNozzle() { SERIAL_EOL(); #endif } - - wait_for_user = false; - wait_for_heatup = false; - // set pause state to show CONTINUE button again TFTstate = ANYCUBIC_TFT_STATE_SDPAUSE_REQ; }