From 4b1f1bc6a61054c5c5c725221006364147fbc449 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Sun, 26 Aug 2018 21:39:37 +0200 Subject: [PATCH] mmu timeout update: no need to press knob on printer to recover paused print --- Firmware/mmu.cpp | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/Firmware/mmu.cpp b/Firmware/mmu.cpp index 196455db..81e5e5ea 100644 --- a/Firmware/mmu.cpp +++ b/Firmware/mmu.cpp @@ -19,7 +19,8 @@ extern char choose_extruder_menu(); #define MMU_TODELAY 100 #define MMU_TIMEOUT 10 -#define MMU_CMD_TIMEOUT 300000ul //milliseconds (5min timeout) +#define MMU_CMD_TIMEOUT 300000ul //5min timeout for mmu commands (except P0) +#define MMU_P0_TIMEOUT 3000ul //timeout for P0 command: 3seconds #define MMU_HWRESET #define MMU_RST_PIN 76 @@ -198,7 +199,7 @@ void mmu_loop(void) if (mmu_cmd == 0) mmu_ready = true; } - else if ((mmu_last_request + MMU_CMD_TIMEOUT) < millis()) + else if ((mmu_last_request + MMU_P0_TIMEOUT) < millis()) { //resend request after timeout (30s) mmu_state = 1; } @@ -211,7 +212,7 @@ void mmu_loop(void) mmu_state = 1; } else if ((mmu_last_request + MMU_CMD_TIMEOUT) < millis()) - { //resend request after timeout (30s) + { //resend request after timeout (5 min) mmu_state = 1; } return; @@ -307,7 +308,7 @@ void manage_response(bool move_axes, bool turn_off_nozzle) } st_synchronize(); mmu_print_saved = true; - + printf_P(PSTR("MMU not responding\n")); hotend_temp_bckp = degTargetHotend(active_extruder); if (move_axes) { z_position_bckp = current_position[Z_AXIS]; @@ -329,23 +330,28 @@ void manage_response(bool move_axes, bool turn_off_nozzle) if (turn_off_nozzle) { //set nozzle target temperature to 0 setAllTargetHotends(0); - printf_P(PSTR("MMU not responding\n")); - lcd_show_fullscreen_message_and_wait_P(_i("MMU needs user attention. Please press knob to resume nozzle target temperature.")); - setTargetHotend(hotend_temp_bckp, active_extruder); - while ((degTargetHotend(active_extruder) - degHotend(active_extruder)) > 5) { - delay_keep_alive(1000); - lcd_wait_for_heater(); - } } } - lcd_display_message_fullscreen_P(_i("Check MMU. Fix the issue and then press button on MMU unit.")); + lcd_display_message_fullscreen_P(_i("MMU needs user attention. Fix the issue and then press button on MMU unit.")); delay_keep_alive(1000); } else if (mmu_print_saved) { - printf_P(PSTR("MMU start responding\n")); - lcd_clear(); - lcd_display_message_fullscreen_P(_i("MMU OK. Resuming...")); + printf_P(PSTR("MMU starts responding\n")); + if (turn_off_nozzle) + { + lcd_clear(); + setTargetHotend(hotend_temp_bckp, active_extruder); + lcd_display_message_fullscreen_P(_i("MMU OK. Resuming temperature...")); + delay_keep_alive(3000); + while ((degTargetHotend(active_extruder) - degHotend(active_extruder)) > 5) + { + delay_keep_alive(1000); + lcd_wait_for_heater(); + } + } if (move_axes) { + lcd_clear(); + lcd_display_message_fullscreen_P(_i("MMU OK. Resuming position...")); current_position[X_AXIS] = x_position_bckp; current_position[Y_AXIS] = y_position_bckp; plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 50, active_extruder); @@ -355,6 +361,8 @@ void manage_response(bool move_axes, bool turn_off_nozzle) st_synchronize(); } else { + lcd_clear(); + lcd_display_message_fullscreen_P(_i("MMU OK. Resuming...")); delay_keep_alive(1000); //delay just for showing MMU OK message for a while in case that there are no xyz movements } }