Pause/Reheat/Resume now works as expected.

This commit is contained in:
Knutwurst
2022-01-23 11:07:04 +01:00
parent c8ffbe769b
commit a2efdedde4
4 changed files with 39 additions and 18 deletions

View File

@@ -2484,7 +2484,7 @@
#define FILAMENT_CHANGE_ALERT_BEEPS 10 // Number of alert beeps to play when a response is needed. #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 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 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 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 HOME_BEFORE_FILAMENT_CHANGE // If needed, home before parking for filament change

View File

@@ -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); ui.pause_show_message(PAUSE_MESSAGE_HEAT);
SERIAL_ECHO_MSG(_PMSG(STR_FILAMENT_CHANGE_HEAT)); SERIAL_ECHO_MSG(_PMSG(STR_FILAMENT_CHANGE_HEAT));
/*
#ifdef ANYCUBIC_TOUCHSCREEN // KNUTWURST #ifdef ANYCUBIC_TOUCHSCREEN // KNUTWURST
if (AnycubicTouchscreen.ai3m_pause_state < 3) { if (AnycubicTouchscreen.ai3m_pause_state < 3) {
AnycubicTouchscreen.ai3m_pause_state += 2; AnycubicTouchscreen.ai3m_pause_state += 3;
#ifdef ANYCUBIC_TFT_DEBUG #ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOPGM(" DEBUG: NTO - AI3M Pause State set to: ", AnycubicTouchscreen.ai3m_pause_state); SERIAL_ECHOPGM(" DEBUG: NTO - AI3M Pause State set to: ", AnycubicTouchscreen.ai3m_pause_state);
SERIAL_EOL(); SERIAL_EOL();
#endif #endif
} }
#endif #endif
*/
TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, GET_TEXT(MSG_HEATER_TIMEOUT), GET_TEXT(MSG_REHEAT))); 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))); 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); IF_DISABLED(PAUSE_REHEAT_FAST_RESUME, wait_for_user = true);
nozzle_timed_out = false; nozzle_timed_out = false;
/*
#ifdef ANYCUBIC_TOUCHSCREEN #ifdef ANYCUBIC_TOUCHSCREEN
if (AnycubicTouchscreen.ai3m_pause_state > 3) { if (AnycubicTouchscreen.ai3m_pause_state > 3) {
AnycubicTouchscreen.ai3m_pause_state -= 2; AnycubicTouchscreen.ai3m_pause_state -= 3;
#ifdef ANYCUBIC_TFT_DEBUG #ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOPGM(" DEBUG: NTO - AI3M Pause State set to: ", AnycubicTouchscreen.ai3m_pause_state); SERIAL_ECHOPGM(" DEBUG: NTO - AI3M Pause State set to: ", AnycubicTouchscreen.ai3m_pause_state);
SERIAL_EOL(); SERIAL_EOL();
#endif #endif
} }
#endif #endif
*/
first_impatient_beep(max_beep_count); first_impatient_beep(max_beep_count);
} }
idle_no_sleep(); 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 // Re-enable the heaters if they timed out
bool nozzle_timed_out = false; bool nozzle_timed_out = false;
/*
#ifdef ANYCUBIC_TOUCHSCREEN // KNUTWURST #ifdef ANYCUBIC_TOUCHSCREEN // KNUTWURST
if (AnycubicTouchscreen.ai3m_pause_state > 3) { if (AnycubicTouchscreen.ai3m_pause_state > 3) {
AnycubicTouchscreen.ai3m_pause_state -= 2; AnycubicTouchscreen.ai3m_pause_state -= 3;
#ifdef ANYCUBIC_TFT_DEBUG #ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOPGM(" DEBUG: NTO - AI3M Pause State set to: ", AnycubicTouchscreen.ai3m_pause_state); SERIAL_ECHOPGM(" DEBUG: NTO - AI3M Pause State set to: ", AnycubicTouchscreen.ai3m_pause_state);
SERIAL_EOL(); SERIAL_EOL();
#endif #endif
} }
#endif #endif
*/
HOTEND_LOOP() { HOTEND_LOOP() {
nozzle_timed_out |= thermalManager.heater_idle[e].timed_out; nozzle_timed_out |= thermalManager.heater_idle[e].timed_out;
thermalManager.reset_hotend_idle_timer(e); thermalManager.reset_hotend_idle_timer(e);

View File

@@ -212,6 +212,8 @@ void AnycubicTouchscreenClass::Setup() {
HARDWARE_SERIAL_PROTOCOLPGM("J12"); // J12 Ready HARDWARE_SERIAL_PROTOCOLPGM("J12"); // J12 Ready
HARDWARE_SERIAL_ENTER(); HARDWARE_SERIAL_ENTER();
TFTstate = ANYCUBIC_TFT_STATE_IDLE;
currentTouchscreenSelection[0] = 0; currentTouchscreenSelection[0] = 0;
currentFileOrDirectory[0] = '\0'; currentFileOrDirectory[0] = '\0';
SpecialMenu = false; SpecialMenu = false;
@@ -403,6 +405,20 @@ void AnycubicTouchscreenClass::StartPrint(){
#endif #endif
break; break;
case 4: 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 // nozzle was timed out before (M600), do not enter printing state yet
TFTstate = ANYCUBIC_TFT_STATE_SDPAUSE_REQ; TFTstate = ANYCUBIC_TFT_STATE_SDPAUSE_REQ;
#ifdef ANYCUBIC_TFT_DEBUG #ifdef ANYCUBIC_TFT_DEBUG
@@ -416,7 +432,7 @@ void AnycubicTouchscreenClass::StartPrint(){
SERIAL_ECHOLNPGM("DEBUG: Nozzle timeout flag cleared"); SERIAL_ECHOLNPGM("DEBUG: Nozzle timeout flag cleared");
#endif #endif
break; break;
case 5: case 6:
// nozzle was timed out before (runout), do not enter printing state yet // nozzle was timed out before (runout), do not enter printing state yet
TFTstate = ANYCUBIC_TFT_STATE_SDPAUSE_REQ; TFTstate = ANYCUBIC_TFT_STATE_SDPAUSE_REQ;
#ifdef ANYCUBIC_TFT_DEBUG #ifdef ANYCUBIC_TFT_DEBUG
@@ -451,9 +467,9 @@ void AnycubicTouchscreenClass::PausePrint() {
SERIAL_ECHOLNPGM("DEBUG: Filament Runout Pause"); SERIAL_ECHOLNPGM("DEBUG: Filament Runout Pause");
#endif #endif
// filament runout, retract and beep // filament runout, retract and beep
queue.inject_P(PSTR("G91")); // relative mode //queue.inject_P(PSTR("G91")); // relative mode
queue.inject_P(PSTR("G1 E-3 F1800")); // retract 3mm //queue.inject_P(PSTR("G1 E-3 F1800")); // retract 3mm
queue.inject_P(PSTR("G90")); // absolute mode //queue.inject_P(PSTR("G90")); // absolute mode
buzzer.tone(200, 1567); buzzer.tone(200, 1567);
buzzer.tone(200, 1174); buzzer.tone(200, 1174);
buzzer.tone(200, 1567); buzzer.tone(200, 1567);
@@ -469,7 +485,7 @@ void AnycubicTouchscreenClass::PausePrint() {
SERIAL_ECHOPGM("DEBUG: AI3M Pause State: ", ai3m_pause_state); SERIAL_ECHOPGM("DEBUG: AI3M Pause State: ", ai3m_pause_state);
SERIAL_EOL(); SERIAL_EOL();
#endif #endif
IsParked = true; //IsParked = true;
// show filament runout prompt on screen // show filament runout prompt on screen
HARDWARE_SERIAL_PROTOCOLPGM("J23"); HARDWARE_SERIAL_PROTOCOLPGM("J23");
HARDWARE_SERIAL_ENTER(); HARDWARE_SERIAL_ENTER();
@@ -552,6 +568,7 @@ void AnycubicTouchscreenClass::ReheatNozzle() {
SERIAL_ECHOLNPGM("DEBUG: Send reheat M108"); SERIAL_ECHOLNPGM("DEBUG: Send reheat M108");
#endif #endif
// M108
wait_for_heatup = false; wait_for_heatup = false;
wait_for_user = false; wait_for_user = false;
@@ -565,13 +582,15 @@ void AnycubicTouchscreenClass::ReheatNozzle() {
#ifdef ANYCUBIC_TFT_DEBUG #ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("DEBUG: Clear flags"); SERIAL_ECHOLNPGM("DEBUG: Clear flags");
#endif #endif
if (ai3m_pause_state > 3) { if (ai3m_pause_state > 3) {
ai3m_pause_state -= 2; ai3m_pause_state -= 3;
#ifdef ANYCUBIC_TFT_DEBUG #ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOPGM("DEBUG: NTO done, AI3M Pause State: ", ai3m_pause_state); SERIAL_ECHOPGM("DEBUG: NTO done, AI3M Pause State: ", ai3m_pause_state);
SERIAL_EOL(); SERIAL_EOL();
#endif #endif
} }
// set pause state to show CONTINUE button again // set pause state to show CONTINUE button again
TFTstate = ANYCUBIC_TFT_STATE_SDPAUSE_REQ; TFTstate = ANYCUBIC_TFT_STATE_SDPAUSE_REQ;
} }
@@ -1620,8 +1639,6 @@ void AnycubicTouchscreenClass::GetCommandFromTFT() {
#ifdef SDSUPPORT #ifdef SDSUPPORT
if (card.isPrinting()) { if (card.isPrinting()) {
PausePrint(); PausePrint();
HARDWARE_SERIAL_PROTOCOLPGM("J05");//j05 pausing
HARDWARE_SERIAL_ENTER();
} }
else { else {
ai3m_pause_state = 0; ai3m_pause_state = 0;
@@ -1643,7 +1660,7 @@ void AnycubicTouchscreenClass::GetCommandFromTFT() {
StartPrint(); StartPrint();
} }
if (ai3m_pause_state > 3) { if (ai3m_pause_state > 3) {
ReheatNozzle(); ReheatNozzle(); // obsolete!
} }
#endif #endif
break; break;

View File

@@ -267,8 +267,9 @@ class AnycubicTouchscreenClass {
* 1 - regular pause * 1 - regular pause
* 2 - M600 pause * 2 - M600 pause
* 3 - filament runout pause * 3 - filament runout pause
* 4 - nozzle timeout on M600 * 4 - nozzle timeout on regular pause // OBSOLETE
* 5 - nozzle timeout on filament runout * 5 - nozzle timeout on M600 // OBSOLETE
* 6 - nozzle timeout on filament runout // OBSOLETE
*/ */
uint8_t ai3m_pause_state = 0; uint8_t ai3m_pause_state = 0;