From a2efdedde46bb3c544c06f828ad0bbe0d4e34945 Mon Sep 17 00:00:00 2001 From: Knutwurst <36196269+knutwurst@users.noreply.github.com> Date: Sun, 23 Jan 2022 11:07:04 +0100 Subject: [PATCH] Pause/Reheat/Resume now works as expected. --- Marlin/Configuration_adv.h | 2 +- Marlin/src/feature/pause.cpp | 15 ++++++----- Marlin/src/lcd/anycubic_touchscreen.cpp | 35 ++++++++++++++++++------- Marlin/src/lcd/anycubic_touchscreen.h | 5 ++-- 4 files changed, 39 insertions(+), 18 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index fdaae3c6..97db72aa 100755 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -2484,7 +2484,7 @@ #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 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 HOME_BEFORE_FILAMENT_CHANGE // If needed, home before parking for filament change diff --git a/Marlin/src/feature/pause.cpp b/Marlin/src/feature/pause.cpp index feaa6b7e..1c22a16d 100644 --- a/Marlin/src/feature/pause.cpp +++ b/Marlin/src/feature/pause.cpp @@ -534,16 +534,17 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep ui.pause_show_message(PAUSE_MESSAGE_HEAT); SERIAL_ECHO_MSG(_PMSG(STR_FILAMENT_CHANGE_HEAT)); +/* #ifdef ANYCUBIC_TOUCHSCREEN // KNUTWURST if (AnycubicTouchscreen.ai3m_pause_state < 3) { - AnycubicTouchscreen.ai3m_pause_state += 2; + AnycubicTouchscreen.ai3m_pause_state += 3; #ifdef ANYCUBIC_TFT_DEBUG SERIAL_ECHOPGM(" DEBUG: NTO - AI3M Pause State set to: ", AnycubicTouchscreen.ai3m_pause_state); SERIAL_EOL(); #endif } #endif - +*/ TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, GET_TEXT(MSG_HEATER_TIMEOUT), GET_TEXT(MSG_REHEAT))); TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_HEATER_TIMEOUT))); @@ -577,17 +578,17 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep IF_DISABLED(PAUSE_REHEAT_FAST_RESUME, wait_for_user = true); nozzle_timed_out = false; - +/* #ifdef ANYCUBIC_TOUCHSCREEN if (AnycubicTouchscreen.ai3m_pause_state > 3) { - AnycubicTouchscreen.ai3m_pause_state -= 2; + AnycubicTouchscreen.ai3m_pause_state -= 3; #ifdef ANYCUBIC_TFT_DEBUG SERIAL_ECHOPGM(" DEBUG: NTO - AI3M Pause State set to: ", AnycubicTouchscreen.ai3m_pause_state); SERIAL_EOL(); #endif } #endif - +*/ first_impatient_beep(max_beep_count); } idle_no_sleep(); @@ -634,15 +635,17 @@ void resume_print(const_float_t slow_load_length/*=0*/, const_float_t fast_load_ // Re-enable the heaters if they timed out bool nozzle_timed_out = false; +/* #ifdef ANYCUBIC_TOUCHSCREEN // KNUTWURST if (AnycubicTouchscreen.ai3m_pause_state > 3) { - AnycubicTouchscreen.ai3m_pause_state -= 2; + AnycubicTouchscreen.ai3m_pause_state -= 3; #ifdef ANYCUBIC_TFT_DEBUG SERIAL_ECHOPGM(" DEBUG: NTO - AI3M Pause State set to: ", AnycubicTouchscreen.ai3m_pause_state); SERIAL_EOL(); #endif } #endif +*/ HOTEND_LOOP() { nozzle_timed_out |= thermalManager.heater_idle[e].timed_out; thermalManager.reset_hotend_idle_timer(e); diff --git a/Marlin/src/lcd/anycubic_touchscreen.cpp b/Marlin/src/lcd/anycubic_touchscreen.cpp index 3f1b740e..3c4855bc 100755 --- a/Marlin/src/lcd/anycubic_touchscreen.cpp +++ b/Marlin/src/lcd/anycubic_touchscreen.cpp @@ -212,6 +212,8 @@ void AnycubicTouchscreenClass::Setup() { HARDWARE_SERIAL_PROTOCOLPGM("J12"); // J12 Ready HARDWARE_SERIAL_ENTER(); + TFTstate = ANYCUBIC_TFT_STATE_IDLE; + currentTouchscreenSelection[0] = 0; currentFileOrDirectory[0] = '\0'; SpecialMenu = false; @@ -403,6 +405,20 @@ void AnycubicTouchscreenClass::StartPrint(){ #endif break; case 4: + // nozzle was timed out before, do not enter printing state yet + TFTstate = ANYCUBIC_TFT_STATE_SDPAUSE_REQ; + #ifdef ANYCUBIC_TFT_DEBUG + SERIAL_ECHOLNPGM("DEBUG: Set Pause again because of timeout"); + #endif + + // clear the timeout flag to ensure the print continues on the + // next push of CONTINUE + ai3m_pause_state = 1; + #ifdef ANYCUBIC_TFT_DEBUG + SERIAL_ECHOLNPGM("DEBUG: Nozzle timeout flag cleared"); + #endif + break; + case 5: // nozzle was timed out before (M600), do not enter printing state yet TFTstate = ANYCUBIC_TFT_STATE_SDPAUSE_REQ; #ifdef ANYCUBIC_TFT_DEBUG @@ -416,7 +432,7 @@ void AnycubicTouchscreenClass::StartPrint(){ SERIAL_ECHOLNPGM("DEBUG: Nozzle timeout flag cleared"); #endif break; - case 5: + case 6: // nozzle was timed out before (runout), do not enter printing state yet TFTstate = ANYCUBIC_TFT_STATE_SDPAUSE_REQ; #ifdef ANYCUBIC_TFT_DEBUG @@ -451,9 +467,9 @@ void AnycubicTouchscreenClass::PausePrint() { SERIAL_ECHOLNPGM("DEBUG: Filament Runout Pause"); #endif // filament runout, retract and beep - queue.inject_P(PSTR("G91")); // relative mode - queue.inject_P(PSTR("G1 E-3 F1800")); // retract 3mm - queue.inject_P(PSTR("G90")); // absolute mode + //queue.inject_P(PSTR("G91")); // relative mode + //queue.inject_P(PSTR("G1 E-3 F1800")); // retract 3mm + //queue.inject_P(PSTR("G90")); // absolute mode buzzer.tone(200, 1567); buzzer.tone(200, 1174); buzzer.tone(200, 1567); @@ -469,7 +485,7 @@ void AnycubicTouchscreenClass::PausePrint() { SERIAL_ECHOPGM("DEBUG: AI3M Pause State: ", ai3m_pause_state); SERIAL_EOL(); #endif - IsParked = true; + //IsParked = true; // show filament runout prompt on screen HARDWARE_SERIAL_PROTOCOLPGM("J23"); HARDWARE_SERIAL_ENTER(); @@ -552,6 +568,7 @@ void AnycubicTouchscreenClass::ReheatNozzle() { SERIAL_ECHOLNPGM("DEBUG: Send reheat M108"); #endif + // M108 wait_for_heatup = false; wait_for_user = false; @@ -565,13 +582,15 @@ void AnycubicTouchscreenClass::ReheatNozzle() { #ifdef ANYCUBIC_TFT_DEBUG SERIAL_ECHOLNPGM("DEBUG: Clear flags"); #endif + if (ai3m_pause_state > 3) { - ai3m_pause_state -= 2; + ai3m_pause_state -= 3; #ifdef ANYCUBIC_TFT_DEBUG SERIAL_ECHOPGM("DEBUG: NTO done, AI3M Pause State: ", ai3m_pause_state); SERIAL_EOL(); #endif } + // set pause state to show CONTINUE button again TFTstate = ANYCUBIC_TFT_STATE_SDPAUSE_REQ; } @@ -1620,8 +1639,6 @@ void AnycubicTouchscreenClass::GetCommandFromTFT() { #ifdef SDSUPPORT if (card.isPrinting()) { PausePrint(); - HARDWARE_SERIAL_PROTOCOLPGM("J05");//j05 pausing - HARDWARE_SERIAL_ENTER(); } else { ai3m_pause_state = 0; @@ -1643,7 +1660,7 @@ void AnycubicTouchscreenClass::GetCommandFromTFT() { StartPrint(); } if (ai3m_pause_state > 3) { - ReheatNozzle(); + ReheatNozzle(); // obsolete! } #endif break; diff --git a/Marlin/src/lcd/anycubic_touchscreen.h b/Marlin/src/lcd/anycubic_touchscreen.h index 536c712b..961ce981 100755 --- a/Marlin/src/lcd/anycubic_touchscreen.h +++ b/Marlin/src/lcd/anycubic_touchscreen.h @@ -267,8 +267,9 @@ class AnycubicTouchscreenClass { * 1 - regular pause * 2 - M600 pause * 3 - filament runout pause - * 4 - nozzle timeout on M600 - * 5 - nozzle timeout on filament runout + * 4 - nozzle timeout on regular pause // OBSOLETE + * 5 - nozzle timeout on M600 // OBSOLETE + * 6 - nozzle timeout on filament runout // OBSOLETE */ uint8_t ai3m_pause_state = 0;