From 81193e93382197cdf99030e8095e8a22ffa6d0e9 Mon Sep 17 00:00:00 2001 From: Thomas Moore Date: Tue, 26 Dec 2017 22:51:55 -0600 Subject: [PATCH] Add M701 / M702 filament load / unload --- .travis.yml | 2 +- Marlin/Configuration_adv.h | 53 +-- Marlin/Marlin.h | 3 + Marlin/Marlin_main.cpp | 626 ++++++++++++++++++++++----------- Marlin/SanityCheck.h | 16 +- Marlin/buzzer.h | 2 +- Marlin/configuration_store.cpp | 95 ++++- Marlin/enum.h | 8 +- Marlin/language.h | 10 +- Marlin/language_an.h | 5 - Marlin/language_ca.h | 7 - Marlin/language_cz.h | 8 - Marlin/language_cz_utf8.h | 8 - Marlin/language_da.h | 6 - Marlin/language_de.h | 8 +- Marlin/language_el.h | 7 +- Marlin/language_en.h | 44 ++- Marlin/language_es.h | 6 +- Marlin/language_eu.h | 4 +- Marlin/language_fr.h | 7 - Marlin/language_fr_utf8.h | 7 - Marlin/language_gl.h | 7 - Marlin/language_hr.h | 6 - Marlin/language_it.h | 8 +- Marlin/language_kana.h | 8 +- Marlin/language_kana_utf8.h | 7 +- Marlin/language_nl.h | 9 - Marlin/language_pl-DOGM.h | 6 +- Marlin/language_pl-HD44780.h | 9 +- Marlin/language_ru.h | 5 +- Marlin/language_sk_utf8.h | 8 +- Marlin/language_tr.h | 7 - Marlin/language_uk.h | 7 - Marlin/language_zh_CN.h | 7 - Marlin/language_zh_TW.h | 7 - Marlin/nozzle.h | 2 +- Marlin/temperature.h | 54 +-- Marlin/ultralcd.cpp | 528 ++++++++++++++++++--------- Marlin/ultralcd.h | 4 +- Marlin/ultralcd_impl_DOGM.h | 10 +- Marlin/ultralcd_impl_HD44780.h | 7 +- 41 files changed, 1030 insertions(+), 608 deletions(-) diff --git a/.travis.yml b/.travis.yml index 710bd364a..162f82126 100644 --- a/.travis.yml +++ b/.travis.yml @@ -146,7 +146,7 @@ script: - opt_enable ULTIMAKERCONTROLLER SDSUPPORT - opt_enable PRINTCOUNTER NOZZLE_PARK_FEATURE NOZZLE_CLEAN_FEATURE PCA9632 USE_XMAX_PLUG - opt_enable_adv BEZIER_CURVE_SUPPORT EXPERIMENTAL_I2CBUS - - opt_enable_adv ADVANCED_PAUSE_FEATURE PARK_HEAD_ON_PAUSE LCD_INFO_MENU M114_DETAIL + - opt_enable_adv ADVANCED_PAUSE_FEATURE FILAMENT_LOAD_UNLOAD_GCODES PARK_HEAD_ON_PAUSE LCD_INFO_MENU M114_DETAIL - opt_set_adv PWM_MOTOR_CURRENT {1300,1300,1250} - opt_set_adv I2C_SLAVE_ADDRESS 63 - build_marlin diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index bcae08a0a..33e88f477 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -878,29 +878,38 @@ */ //#define ADVANCED_PAUSE_FEATURE #if ENABLED(ADVANCED_PAUSE_FEATURE) - #define PAUSE_PARK_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s - #define PAUSE_PARK_RETRACT_LENGTH 2 // Initial retract in mm - // It is a short retract used immediately after print interrupt before move to filament exchange position - #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10 // Unload filament feedrate in mm/s - filament unloading can be fast - #define FILAMENT_CHANGE_UNLOAD_LENGTH 100 // Unload filament length from hotend in mm - // Longer length for bowden printers to unload filament from whole bowden tube, - // shorter length for printers without bowden to unload filament from extruder only, - // 0 to disable unloading for manual unloading - #define FILAMENT_CHANGE_LOAD_FEEDRATE 6 // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast - #define FILAMENT_CHANGE_LOAD_LENGTH 0 // Load filament length over hotend in mm - // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend, - // Short or zero length for printers without bowden where loading is not used - #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate - #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is loaded over the hotend, - // 0 to disable for manual extrusion - // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend, - // or until outcoming filament color is not clear for filament color change - #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // Turn off nozzle if user doesn't change filament within this time limit in seconds - #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet - #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable to have stepper motors hold position during filament change - // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME. - //#define PARK_HEAD_ON_PAUSE // Go to filament change position on pause, return to print position on resume + #define PAUSE_PARK_RETRACT_FEEDRATE 60 // (mm/s) Initial retract feedrate. + #define PAUSE_PARK_RETRACT_LENGTH 2 // (mm) Initial retract. + // This short retract is done immediately, before parking the nozzle. + #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10 // (mm/s) Unload filament feedrate. This can be pretty fast. + #define FILAMENT_CHANGE_UNLOAD_LENGTH 100 // (mm) The length of filament for a complete unload. + // For Bowden, the full length of the tube and nozzle. + // For direct drive, the full length of the nozzle. + // Set to 0 for manual unloading. + #define FILAMENT_CHANGE_LOAD_FEEDRATE 6 // (mm/s) Load filament feedrate. This can be pretty fast. + #define FILAMENT_CHANGE_LOAD_LENGTH 0 // (mm) Load length of filament, from extruder gear to nozzle. + // For Bowden, the full length of the tube and nozzle. + // For direct drive, the full length of the nozzle. + #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3 // (mm/s) Extrude feedrate (after loading). Should be slower than load feedrate. + #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50 // (mm) Length to extrude after loading. + // 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. + + // Filament Unload does a Retract, Delay, and Purge first: + #define FILAMENT_UNLOAD_RETRACT_LENGTH 13 // (mm) Unload initial retract length. + #define FILAMENT_UNLOAD_DELAY 5000 // (ms) Delay for the filament to cool after retract. + #define FILAMENT_UNLOAD_PURGE_LENGTH 8 // (mm) An unretract is done, then this length is purged. + + #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // (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 PARK_HEAD_ON_PAUSE // Park the nozzle during pause and filament change. //#define HOME_BEFORE_FILAMENT_CHANGE // Ensure homing has been completed prior to parking for filament change + + //#define FILAMENT_LOAD_UNLOAD_GCODES // Add M701/M702 Load/Unload G-codes, plus Load/Unload in the LCD Prepare menu. + //#define FILAMENT_UNLOAD_ALL_EXTRUDERS // Allow M702 to unload all extruders above a minimum target temp (as set by M302) #endif // @section tmc diff --git a/Marlin/Marlin.h b/Marlin/Marlin.h index 2c68b8cbf..12bcf78dd 100644 --- a/Marlin/Marlin.h +++ b/Marlin/Marlin.h @@ -175,6 +175,7 @@ void manage_inactivity(bool ignore_stepper_queue = false); #define _AXIS(AXIS) AXIS ##_AXIS void enable_all_steppers(); +void disable_e_stepper(const uint8_t e); void disable_e_steppers(); void disable_all_steppers(); @@ -430,6 +431,8 @@ void report_current_position(); #if ENABLED(ADVANCED_PAUSE_FEATURE) extern AdvancedPauseMenuResponse advanced_pause_menu_response; + extern float filament_change_unload_length[EXTRUDERS], + filament_change_load_length[EXTRUDERS]; #endif #if ENABLED(PID_EXTRUSION_SCALING) diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index 7994062d6..c3266927d 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -202,9 +202,12 @@ * M503 - Print the current settings (in memory): "M503 S". S0 specifies compact output. * M540 - Enable/disable SD card abort on endstop hit: "M540 S". (Requires ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED) * M600 - Pause for filament change: "M600 X Y Z E L". (Requires ADVANCED_PAUSE_FEATURE) + * M603 - Configure filament change: "M603 T U L". (Requires ADVANCED_PAUSE_FEATURE) * M665 - Set delta configurations: "M665 L R S A B C I J K" (Requires DELTA) * M666 - Set delta endstop adjustment. (Requires DELTA) * M605 - Set dual x-carriage movement mode: "M605 S [X] [R]". (Requires DUAL_X_CARRIAGE) + * M701 - Load filament (requires FILAMENT_LOAD_UNLOAD_GCODES) + * M702 - Unload filament (requires FILAMENT_LOAD_UNLOAD_GCODES) * M851 - Set Z probe's Z offset in current units. (Negative = below the nozzle.) * M852 - Set skew factors: "M852 [I] [J] [K]". (Requires SKEW_CORRECTION_GCODE, and SKEW_CORRECTION_FOR_Z for IJ) * M860 - Report the position of position encoder modules. @@ -651,6 +654,8 @@ float cartes[XYZ] = { 0 }; #if ENABLED(ADVANCED_PAUSE_FEATURE) AdvancedPauseMenuResponse advanced_pause_menu_response; + float filament_change_unload_length[EXTRUDERS], + filament_change_load_length[EXTRUDERS]; #endif #if ENABLED(MIXING_EXTRUDER) @@ -1528,7 +1533,7 @@ inline void buffer_line_to_current_position() { * Move the planner to the position stored in the destination array, which is * used by G0/G1/G2/G3/G5 and many other functions to set a destination. */ -inline void buffer_line_to_destination(const float fr_mm_s) { +inline void buffer_line_to_destination(const float &fr_mm_s=feedrate_mm_s) { planner.buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], fr_mm_s, active_extruder); } @@ -6425,77 +6430,206 @@ inline void gcode_M17() { #if ENABLED(ADVANCED_PAUSE_FEATURE) + void do_pause_e_move(const float &length, const float &fr) { + set_destination_from_current(); + destination[E_AXIS] += length / planner.e_factor[active_extruder]; + buffer_line_to_destination(fr); + stepper.synchronize(); + set_current_from_destination(); + } + static float resume_position[XYZE]; static int8_t did_pause_print = 0; - static void filament_change_beep(const int8_t max_beep_count, const bool init=false) { - static millis_t next_buzz = 0; - static int8_t runout_beep = 0; + #if HAS_BUZZER + static void filament_change_beep(const int8_t max_beep_count, const bool init=false) { + static millis_t next_buzz = 0; + static int8_t runout_beep = 0; - if (init) next_buzz = runout_beep = 0; + if (init) next_buzz = runout_beep = 0; - const millis_t ms = millis(); - if (ELAPSED(ms, next_buzz)) { - if (max_beep_count < 0 || runout_beep < max_beep_count + 5) { // Only beep as long as we're supposed to - next_buzz = ms + ((max_beep_count < 0 || runout_beep < max_beep_count) ? 2500 : 400); - BUZZ(300, 2000); - runout_beep++; - } - } - } - - static void ensure_safe_temperature() { - bool heaters_heating = true; - - wait_for_heatup = true; // M108 will clear this - while (wait_for_heatup && heaters_heating) { - idle(); - heaters_heating = false; - HOTEND_LOOP() { - if (thermalManager.degTargetHotend(e) && abs(thermalManager.degHotend(e) - thermalManager.degTargetHotend(e)) > TEMP_HYSTERESIS) { - heaters_heating = true; - #if ENABLED(ULTIPANEL) - lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_WAIT_FOR_NOZZLES_TO_HEAT); - #endif - break; + const millis_t ms = millis(); + if (ELAPSED(ms, next_buzz)) { + if (max_beep_count < 0 || runout_beep < max_beep_count + 5) { // Only beep as long as we're supposed to + next_buzz = ms + ((max_beep_count < 0 || runout_beep < max_beep_count) ? 1000 : 500); + BUZZ(50, 880 - (runout_beep & 1) * 220); + runout_beep++; } } } - } - - #if IS_KINEMATIC - #define RUNPLAN(RATE_MM_S) planner.buffer_line_kinematic(destination, RATE_MM_S, active_extruder) - #else - #define RUNPLAN(RATE_MM_S) buffer_line_to_destination(RATE_MM_S) #endif - void do_pause_e_move(const float &length, const float fr) { - current_position[E_AXIS] += length / planner.e_factor[active_extruder]; - set_destination_from_current(); - RUNPLAN(fr); - stepper.synchronize(); + static bool ensure_safe_temperature(const AdvancedPauseMode mode=ADVANCED_PAUSE_MODE_PAUSE_PRINT) { + + #if ENABLED(PREVENT_COLD_EXTRUSION) + if (!DEBUGGING(DRYRUN) && thermalManager.targetTooColdToExtrude(active_extruder)) { + SERIAL_ERROR_START(); + SERIAL_ERRORLNPGM(MSG_HOTEND_TOO_COLD); + return false; + } + #endif + + #if ENABLED(ULTIPANEL) + lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_WAIT_FOR_NOZZLES_TO_HEAT, mode); + #else + UNUSED(mode); + #endif + + wait_for_heatup = true; // M108 will clear this + while (wait_for_heatup && thermalManager.wait_for_heating(active_extruder)) idle(); + const bool status = wait_for_heatup; + wait_for_heatup = false; + + return status; } - static bool pause_print(const float &retract, const point_t &park_point, const float &unload_length = 0, - const int8_t max_beep_count = 0, const bool show_lcd = false + static bool load_filament(const float &load_length=0, const float &extrude_length=0, const int8_t max_beep_count=0, + const bool show_lcd=false, const bool pause_for_user=false, + const AdvancedPauseMode mode=ADVANCED_PAUSE_MODE_PAUSE_PRINT ) { + #if DISABLED(ULTIPANEL) + UNUSED(show_lcd); + #endif + + if (!ensure_safe_temperature(mode)) { + #if ENABLED(ULTIPANEL) + if (show_lcd) // Show status screen + lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_STATUS); + #endif + + return false; + } + + if (pause_for_user) { + #if ENABLED(ULTIPANEL) + if (show_lcd) // Show "insert filament" + lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INSERT, mode); + #endif + SERIAL_ECHO_START(); + SERIAL_ECHOLNPGM(MSG_FILAMENT_CHANGE_INSERT); + + #if HAS_BUZZER + filament_change_beep(max_beep_count, true); + #else + UNUSED(max_beep_count); + #endif + + KEEPALIVE_STATE(PAUSED_FOR_USER); + wait_for_user = true; // LCD click or M108 will clear this + while (wait_for_user) { + #if HAS_BUZZER + filament_change_beep(max_beep_count); + #endif + idle(true); + } + KEEPALIVE_STATE(IN_HANDLER); + } + + #if ENABLED(ULTIPANEL) + if (show_lcd) // Show "load" message + lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_LOAD, mode); + #endif + + // Load filament + do_pause_e_move(load_length, FILAMENT_CHANGE_LOAD_FEEDRATE); + + do { + if (extrude_length > 0) { + // "Wait for filament purge" + #if ENABLED(ULTIPANEL) + if (show_lcd) + lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_PURGE, mode); + #endif + + // Extrude filament to get into hotend + do_pause_e_move(extrude_length, ADVANCED_PAUSE_EXTRUDE_FEEDRATE); + } + + // Show "Extrude More" / "Resume" menu and wait for reply + #if ENABLED(ULTIPANEL) + if (show_lcd) { + KEEPALIVE_STATE(PAUSED_FOR_USER); + wait_for_user = false; + lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_OPTION, mode); + while (advanced_pause_menu_response == ADVANCED_PAUSE_RESPONSE_WAIT_FOR) idle(true); + KEEPALIVE_STATE(IN_HANDLER); + } + #endif + + // Keep looping if "Extrude More" was selected + } while ( + #if ENABLED(ULTIPANEL) + show_lcd && advanced_pause_menu_response == ADVANCED_PAUSE_RESPONSE_EXTRUDE_MORE + #else + 0 + #endif + ); + + return true; + } + + static bool unload_filament(const float &unload_length, const bool show_lcd=false, + const AdvancedPauseMode mode=ADVANCED_PAUSE_MODE_PAUSE_PRINT + ) { + if (!ensure_safe_temperature(mode)) { + #if ENABLED(ULTIPANEL) + if (show_lcd) // Show status screen + lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_STATUS); + #endif + + return false; + } + + #if DISABLED(ULTIPANEL) + UNUSED(show_lcd); + #else + if (show_lcd) + lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_UNLOAD, mode); + #endif + + // Retract filament + do_pause_e_move(-FILAMENT_UNLOAD_RETRACT_LENGTH, PAUSE_PARK_RETRACT_FEEDRATE); + + // Wait for filament to cool + safe_delay(FILAMENT_UNLOAD_DELAY); + + // Quickly purge + do_pause_e_move(FILAMENT_UNLOAD_RETRACT_LENGTH + FILAMENT_UNLOAD_PURGE_LENGTH, planner.max_feedrate_mm_s[E_AXIS]); + + // Unload filament + do_pause_e_move(unload_length, FILAMENT_CHANGE_UNLOAD_FEEDRATE); + + // Disable extruders steppers for manual filament changing (only on boards that have separate ENABLE_PINS) + #if E0_ENABLE_PIN != X_ENABLE_PIN && E1_ENABLE_PIN != Y_ENABLE_PIN + disable_e_stepper(active_extruder); + safe_delay(100); + #endif + + return true; + } + + static bool pause_print(const float &retract, const point_t &park_point, const float &unload_length=0, const bool show_lcd=false) { if (did_pause_print) return false; // already paused #ifdef ACTION_ON_PAUSE SERIAL_ECHOLNPGM("//action:" ACTION_ON_PAUSE); #endif - if (!DEBUGGING(DRYRUN) && unload_length != 0) { - #if ENABLED(PREVENT_COLD_EXTRUSION) - if (!thermalManager.allow_cold_extrude && - thermalManager.degTargetHotend(active_extruder) < thermalManager.extrude_min_temp) { - SERIAL_ERROR_START(); - SERIAL_ERRORLNPGM(MSG_TOO_COLD_FOR_M600); - return false; - } + #if ENABLED(ULTIPANEL) + if (show_lcd) // Show initial message + lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INIT); + #endif + + if (!DEBUGGING(DRYRUN) && unload_length && thermalManager.targetTooColdToExtrude(active_extruder)) { + SERIAL_ERROR_START(); + SERIAL_ERRORLNPGM(MSG_HOTEND_TOO_COLD); + + #if ENABLED(ULTIPANEL) + if (show_lcd) // Show status screen + lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_STATUS); #endif - ensure_safe_temperature(); // wait for extruder to heat up before unloading + return false; // unable to reach safe temperature } // Indicate that the printer is paused @@ -6510,15 +6644,10 @@ inline void gcode_M17() { #endif print_job_timer.pause(); - // Show initial message and wait for synchronize steppers - if (show_lcd) { - #if ENABLED(ULTIPANEL) - lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INIT); - #endif - } + // Wait for synchronize steppers + stepper.synchronize(); // Save current position - stepper.synchronize(); COPY(resume_position, current_position); // Initial retract before move to filament change position @@ -6528,48 +6657,32 @@ inline void gcode_M17() { // Park the nozzle by moving up by z_lift and then moving to (x_pos, y_pos) Nozzle::park(2, park_point); - if (unload_length != 0) { - if (show_lcd) { - #if ENABLED(ULTIPANEL) - lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_UNLOAD); - idle(); - #endif - } + // Unload the filament + if (unload_length) + unload_filament(unload_length, show_lcd); - // Unload filament - do_pause_e_move(unload_length, FILAMENT_CHANGE_UNLOAD_FEEDRATE); - } + return true; + } - if (show_lcd) { - #if ENABLED(ULTIPANEL) - lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INSERT); - #endif - } + static void wait_for_filament_reload(const int8_t max_beep_count=0) { + bool nozzle_timed_out = false; + + #if ENABLED(ULTIPANEL) + lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INSERT); + #endif + SERIAL_ECHO_START(); + SERIAL_ERRORLNPGM(MSG_FILAMENT_CHANGE_INSERT); #if HAS_BUZZER filament_change_beep(max_beep_count, true); #endif - idle(); - - // Disable extruders steppers for manual filament changing (only on boards that have separate ENABLE_PINS) - #if E0_ENABLE_PIN != X_ENABLE_PIN && E1_ENABLE_PIN != Y_ENABLE_PIN - disable_e_steppers(); - safe_delay(100); - #endif - // Start the heater idle timers const millis_t nozzle_timeout = (millis_t)(PAUSE_PARK_NOZZLE_TIMEOUT) * 1000UL; HOTEND_LOOP() thermalManager.start_heater_idle_timer(e, nozzle_timeout); - return true; - } - - static void wait_for_filament_reload(const int8_t max_beep_count = 0) { - bool nozzle_timed_out = false; - // Wait for filament insert by user and press button KEEPALIVE_STATE(PAUSED_FOR_USER); wait_for_user = true; // LCD click or M108 will clear this @@ -6588,6 +6701,14 @@ inline void gcode_M17() { #if ENABLED(ULTIPANEL) lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_CLICK_TO_HEAT_NOZZLE); #endif + SERIAL_ECHO_START(); + #if ENABLED(ULTIPANEL) && ENABLED(EMERGENCY_PARSER) + SERIAL_ERRORLNPGM(MSG_FILAMENT_CHANGE_HEAT); + #elif ENABLED(EMERGENCY_PARSER) + SERIAL_ERRORLNPGM(MSG_FILAMENT_CHANGE_HEAT_M108); + #else + SERIAL_ERRORLNPGM(MSG_FILAMENT_CHANGE_HEAT_LCD); + #endif // Wait for LCD click or M108 while (wait_for_user) idle(true); @@ -6601,6 +6722,14 @@ inline void gcode_M17() { #if ENABLED(ULTIPANEL) lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INSERT); #endif + SERIAL_ECHO_START(); + #if ENABLED(ULTIPANEL) && ENABLED(EMERGENCY_PARSER) + SERIAL_ERRORLNPGM(MSG_FILAMENT_CHANGE_INSERT); + #elif ENABLED(EMERGENCY_PARSER) + SERIAL_ERRORLNPGM(MSG_FILAMENT_CHANGE_INSERT_M108); + #else + SERIAL_ERRORLNPGM(MSG_FILAMENT_CHANGE_INSERT_LCD); + #endif // Start the heater idle timers const millis_t nozzle_timeout = (millis_t)(PAUSE_PARK_NOZZLE_TIMEOUT) * 1000UL; @@ -6621,7 +6750,7 @@ inline void gcode_M17() { KEEPALIVE_STATE(IN_HANDLER); } - static void resume_print(const float &load_length = 0, const float &initial_extrude_length = 0, const int8_t max_beep_count = 0) { + static void resume_print(const float &load_length=0, const float &extrude_length=ADVANCED_PAUSE_EXTRUDE_LENGTH, const int8_t max_beep_count=0) { bool nozzle_timed_out = false; if (!did_pause_print) return; @@ -6632,69 +6761,11 @@ inline void gcode_M17() { thermalManager.reset_heater_idle_timer(e); } - if (nozzle_timed_out) ensure_safe_temperature(); - - #if HAS_BUZZER - filament_change_beep(max_beep_count, true); - #endif - - set_destination_from_current(); - - if (load_length != 0) { - #if ENABLED(ULTIPANEL) - // Show "insert filament" - if (nozzle_timed_out) - lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INSERT); - #endif - - KEEPALIVE_STATE(PAUSED_FOR_USER); - wait_for_user = true; // LCD click or M108 will clear this - while (wait_for_user && nozzle_timed_out) { - #if HAS_BUZZER - filament_change_beep(max_beep_count); - #endif - idle(true); - } - KEEPALIVE_STATE(IN_HANDLER); - - #if ENABLED(ULTIPANEL) - // Show "load" message - lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_LOAD); - #endif - - // Load filament - do_pause_e_move(load_length, FILAMENT_CHANGE_LOAD_FEEDRATE); + if (nozzle_timed_out || !thermalManager.tooColdToExtrude(active_extruder)) { + // Load the new filament + load_filament(load_length, extrude_length, max_beep_count, true, nozzle_timed_out); } - #if ENABLED(ULTIPANEL) && ADVANCED_PAUSE_EXTRUDE_LENGTH > 0 - - if (!thermalManager.tooColdToExtrude(active_extruder)) { - float extrude_length = initial_extrude_length; - - do { - if (extrude_length > 0) { - // "Wait for filament extrude" - lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_EXTRUDE); - - // Extrude filament to get into hotend - do_pause_e_move(extrude_length, ADVANCED_PAUSE_EXTRUDE_FEEDRATE); - } - - // Show "Extrude More" / "Resume" menu and wait for reply - KEEPALIVE_STATE(PAUSED_FOR_USER); - wait_for_user = false; - lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_OPTION); - while (advanced_pause_menu_response == ADVANCED_PAUSE_RESPONSE_WAIT_FOR) idle(true); - KEEPALIVE_STATE(IN_HANDLER); - - extrude_length = ADVANCED_PAUSE_EXTRUDE_LENGTH; - - // Keep looping if "Extrude More" was selected - } while (advanced_pause_menu_response == ADVANCED_PAUSE_RESPONSE_EXTRUDE_MORE); - } - - #endif - #if ENABLED(ULTIPANEL) // "Wait for print to resume" lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_RESUME); @@ -6730,6 +6801,7 @@ inline void gcode_M17() { } #endif } + #endif // ADVANCED_PAUSE_FEATURE #if ENABLED(SDSUPPORT) @@ -8250,7 +8322,7 @@ inline void gcode_M18_M84() { if (parser.seen('X')) disable_X(); if (parser.seen('Y')) disable_Y(); if (parser.seen('Z')) disable_Z(); - #if E0_ENABLE_PIN != X_ENABLE_PIN && E1_ENABLE_PIN != Y_ENABLE_PIN // Only enable on boards that have separate ENABLE_PINS + #if E0_ENABLE_PIN != X_ENABLE_PIN && E1_ENABLE_PIN != Y_ENABLE_PIN // Only disable on boards that have separate ENABLE_PINS if (parser.seen('E')) disable_e_steppers(); #endif } @@ -9999,21 +10071,27 @@ inline void gcode_M502() { /** * M600: Pause for filament change * - * E[distance] - Retract the filament this far (negative value) + * E[distance] - Retract the filament this far * Z[distance] - Move the Z axis by this distance * X[position] - Move to this X position, with Y * Y[position] - Move to this Y position, with X - * U[distance] - Retract distance for removal (negative value) (manual reload) - * L[distance] - Extrude distance for insertion (positive value) (manual reload) + * U[distance] - Retract distance for removal (manual reload) + * L[distance] - Extrude distance for insertion (manual reload) * B[count] - Number of times to beep, -1 for indefinite (if equipped with a buzzer) * T[toolhead] - Select extruder for filament change * * Default values are used for omitted arguments. - * */ inline void gcode_M600() { point_t park_point = NOZZLE_PARK_POINT; + if (get_target_extruder_from_command(600)) return; + + // Show initial message + #if ENABLED(ULTIPANEL) + lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INIT, ADVANCED_PAUSE_MODE_PAUSE_PRINT, target_extruder); + #endif + #if ENABLED(HOME_BEFORE_FILAMENT_CHANGE) // Don't allow filament change without homing first if (axis_unhomed_error()) home_all_axes(); @@ -10021,22 +10099,17 @@ inline void gcode_M502() { #if EXTRUDERS > 1 // Change toolhead if specified - uint8_t active_extruder_before_filament_change = -1; - if (parser.seen('T')) { - const uint8_t extruder = parser.value_byte(); - if (active_extruder != extruder) { - active_extruder_before_filament_change = active_extruder; - tool_change(extruder, 0, true); - } - } + uint8_t active_extruder_before_filament_change = active_extruder; + if (active_extruder != target_extruder) + tool_change(target_extruder, 0, true); #endif // Initial retract before move to filament change position - const float retract = parser.seen('E') ? parser.value_axis_units(E_AXIS) : 0 + const float retract = -FABS(parser.seen('E') ? parser.value_axis_units(E_AXIS) : 0 #ifdef PAUSE_PARK_RETRACT_LENGTH - - (PAUSE_PARK_RETRACT_LENGTH) + + (PAUSE_PARK_RETRACT_LENGTH) #endif - ; + ); // Lift Z axis if (parser.seenval('Z')) @@ -10055,22 +10128,16 @@ inline void gcode_M502() { #endif // Unload filament - const float unload_length = parser.seen('U') ? parser.value_axis_units(E_AXIS) : 0 - #if defined(FILAMENT_CHANGE_UNLOAD_LENGTH) && FILAMENT_CHANGE_UNLOAD_LENGTH > 0 - - (FILAMENT_CHANGE_UNLOAD_LENGTH) - #endif - ; + const float unload_length = -FABS(parser.seen('U') ? parser.value_axis_units(E_AXIS) : + filament_change_unload_length[active_extruder]); // Load filament - const float load_length = parser.seen('L') ? parser.value_axis_units(E_AXIS) : 0 - #ifdef FILAMENT_CHANGE_LOAD_LENGTH - + FILAMENT_CHANGE_LOAD_LENGTH - #endif - ; + const float load_length = FABS(parser.seen('L') ? parser.value_axis_units(E_AXIS) : + filament_change_load_length[active_extruder]); const int beep_count = parser.intval('B', - #ifdef FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS - FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS + #ifdef FILAMENT_CHANGE_ALERT_BEEPS + FILAMENT_CHANGE_ALERT_BEEPS #else -1 #endif @@ -10078,14 +10145,14 @@ inline void gcode_M502() { const bool job_running = print_job_timer.isRunning(); - if (pause_print(retract, park_point, unload_length, beep_count, true)) { + if (pause_print(retract, park_point, unload_length, true)) { wait_for_filament_reload(beep_count); resume_print(load_length, ADVANCED_PAUSE_EXTRUDE_LENGTH, beep_count); } #if EXTRUDERS > 1 // Restore toolhead if it was changed - if (active_extruder_before_filament_change >= 0) + if (active_extruder_before_filament_change != active_extruder) tool_change(active_extruder_before_filament_change, 0, true); #endif @@ -10093,6 +10160,35 @@ inline void gcode_M502() { if (job_running) print_job_timer.start(); } + /** + * M603: Configure filament change + * + * T[toolhead] - Select extruder to configure, active extruder if not specified + * U[distance] - Retract distance for removal, for the specified extruder + * L[distance] - Extrude distance for insertion, for the specified extruder + * + */ + inline void gcode_M603() { + + if (get_target_extruder_from_command(603)) return; + + // Unload length + if (parser.seen('U')) { + filament_change_unload_length[target_extruder] = FABS(parser.value_axis_units(E_AXIS)); + #if ENABLED(PREVENT_LENGTHY_EXTRUDE) + NOMORE(filament_change_unload_length[target_extruder], EXTRUDE_MAXLENGTH); + #endif + } + + // Load length + if (parser.seen('L')) { + filament_change_load_length[target_extruder] = FABS(parser.value_axis_units(E_AXIS)); + #if ENABLED(PREVENT_LENGTHY_EXTRUDE) + NOMORE(filament_change_load_length[target_extruder], EXTRUDE_MAXLENGTH); + #endif + } + } + #endif // ADVANCED_PAUSE_FEATURE #if ENABLED(MK2_MULTIPLEXER) @@ -10106,26 +10202,6 @@ inline void gcode_M502() { safe_delay(100); } - /** - * M702: Unload all extruders - */ - inline void gcode_M702() { - for (uint8_t s = 0; s < E_STEPPERS; s++) { - select_multiplexed_stepper(e); - // TODO: standard unload filament function - // MK2 firmware behavior: - // - Make sure temperature is high enough - // - Raise Z to at least 15 to make room - // - Extrude 1cm of filament in 1 second - // - Under 230C quickly purge ~12mm, over 230C purge ~10mm - // - Change E max feedrate to 80, eject the filament from the tube. Sync. - // - Restore E max feedrate to 50 - } - // Go back to the last active extruder - select_multiplexed_stepper(active_extruder); - disable_e_steppers(); - } - #endif // MK2_MULTIPLEXER #if ENABLED(DUAL_X_CARRIAGE) @@ -10183,6 +10259,134 @@ inline void gcode_M502() { #endif // DUAL_NOZZLE_DUPLICATION_MODE +#if ENABLED(FILAMENT_LOAD_UNLOAD_GCODES) + + /** + * M701: Load filament + * + * T[extruder] - Optional extruder number. Current extruder if omitted. + * Z[distance] - Move the Z axis by this distance + * L[distance] - Extrude distance for insertion (positive value) (manual reload) + * + * Default values are used for omitted arguments. + */ + inline void gcode_M701() { + point_t park_point = NOZZLE_PARK_POINT; + + if (get_target_extruder_from_command(200)) return; + + // Z axis lift + if (parser.seenval('Z')) park_point.z = parser.linearval('Z'); + + // Load filament + const float load_length = FABS(parser.seen('L') ? parser.value_axis_units(E_AXIS) : + filament_change_load_length[target_extruder]); + + // Show initial message + #if ENABLED(ULTIPANEL) + lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_LOAD, ADVANCED_PAUSE_MODE_LOAD_FILAMENT, target_extruder); + #endif + + #if EXTRUDERS > 1 + // Change toolhead if specified + uint8_t active_extruder_before_filament_change = active_extruder; + if (active_extruder != target_extruder) + tool_change(target_extruder, 0, true); + #endif + + // Lift Z axis + if (park_point.z > 0) + do_blocking_move_to_z(min(current_position[Z_AXIS] + park_point.z, Z_MAX_POS), NOZZLE_PARK_Z_FEEDRATE); + + load_filament(load_length, ADVANCED_PAUSE_EXTRUDE_LENGTH, FILAMENT_CHANGE_ALERT_BEEPS, true, + thermalManager.wait_for_heating(target_extruder), ADVANCED_PAUSE_MODE_LOAD_FILAMENT); + + // Restore Z axis + if (park_point.z > 0) + do_blocking_move_to_z(max(current_position[Z_AXIS] - park_point.z, Z_MIN_POS), NOZZLE_PARK_Z_FEEDRATE); + + #if EXTRUDERS > 1 + // Restore toolhead if it was changed + if (active_extruder_before_filament_change != active_extruder) + tool_change(active_extruder_before_filament_change, 0, true); + #endif + + // Show status screen + #if ENABLED(ULTIPANEL) + lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_STATUS); + #endif + } + + /** + * M702: Unload filament + * + * T[extruder] - Optional extruder number. If omitted, current extruder + * (or ALL extruders with FILAMENT_UNLOAD_ALL_EXTRUDERS). + * Z[distance] - Move the Z axis by this distance + * U[distance] - Retract distance for removal (manual reload) + * + * Default values are used for omitted arguments. + */ + inline void gcode_M702() { + point_t park_point = NOZZLE_PARK_POINT; + + if (get_target_extruder_from_command(702)) return; + + // Z axis lift + if (parser.seenval('Z')) park_point.z = parser.linearval('Z'); + + // Show initial message + #if ENABLED(ULTIPANEL) + lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_UNLOAD, ADVANCED_PAUSE_MODE_UNLOAD_FILAMENT, target_extruder); + #endif + + #if EXTRUDERS > 1 + // Change toolhead if specified + uint8_t active_extruder_before_filament_change = active_extruder; + if (active_extruder != target_extruder) + tool_change(target_extruder, 0, true); + #endif + + // Lift Z axis + if (park_point.z > 0) + do_blocking_move_to_z(min(current_position[Z_AXIS] + park_point.z, Z_MAX_POS), NOZZLE_PARK_Z_FEEDRATE); + + // Unload filament + #if EXTRUDERS > 1 && ENABLED(FILAMENT_UNLOAD_ALL_EXTRUDERS) + if (!parser.seenval('T')) { + HOTEND_LOOP() { + if (e != active_extruder) tool_change(e, 0, true); + unload_filament(-filament_change_unload_length[e], true, ADVANCED_PAUSE_MODE_UNLOAD_FILAMENT); + } + } + else + #endif + { + // Unload length + const float unload_length = -FABS(parser.seen('U') ? parser.value_axis_units(E_AXIS) : + filament_change_unload_length[target_extruder]); + + unload_filament(unload_length, true, ADVANCED_PAUSE_MODE_UNLOAD_FILAMENT); + } + + // Restore Z axis + if (park_point.z > 0) + do_blocking_move_to_z(max(current_position[Z_AXIS] - park_point.z, Z_MIN_POS), NOZZLE_PARK_Z_FEEDRATE); + + #if EXTRUDERS > 1 + // Restore toolhead if it was changed + if (active_extruder_before_filament_change != active_extruder) + tool_change(active_extruder_before_filament_change, 0, true); + #endif + + // Show status screen + #if ENABLED(ULTIPANEL) + lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_STATUS); + #endif + } + +#endif // FILAMENT_LOAD_UNLOAD_GCODES + #if ENABLED(LIN_ADVANCE) /** * M900: Set and/or Get advance K factor and WH/D ratio @@ -12295,6 +12499,10 @@ void process_parsed_command() { case 600: // M600: Pause for filament change gcode_M600(); break; + + case 603: // M603: Configure filament change + gcode_M603(); + break; #endif // ADVANCED_PAUSE_FEATURE #if ENABLED(DUAL_X_CARRIAGE) || ENABLED(DUAL_NOZZLE_DUPLICATION_MODE) @@ -12303,11 +12511,15 @@ void process_parsed_command() { break; #endif // DUAL_X_CARRIAGE - #if ENABLED(MK2_MULTIPLEXER) - case 702: // M702: Unload all extruders + #if ENABLED(FILAMENT_LOAD_UNLOAD_GCODES) + case 701: // M701: Load filament + gcode_M701(); + break; + + case 702: // M702: Unload filament gcode_M702(); break; - #endif + #endif // FILAMENT_LOAD_UNLOAD_GCODES #if ENABLED(LIN_ADVANCE) case 900: // M900: Set advance K factor. @@ -13821,6 +14033,16 @@ void enable_all_steppers() { enable_E4(); } +void disable_e_stepper(const uint8_t e) { + switch (e) { + case 0: disable_E0(); break; + case 1: disable_E1(); break; + case 2: disable_E2(); break; + case 3: disable_E3(); break; + case 4: disable_E4(); break; + } +} + void disable_e_steppers() { disable_E0(); disable_E1(); diff --git a/Marlin/SanityCheck.h b/Marlin/SanityCheck.h index 2399c42c7..a38f1e8f7 100644 --- a/Marlin/SanityCheck.h +++ b/Marlin/SanityCheck.h @@ -131,6 +131,8 @@ #error "FILAMENT_CHANGE_EXTRUDE_LENGTH is now ADVANCED_PAUSE_EXTRUDE_LENGTH. Please update your configuration." #elif defined(FILAMENT_CHANGE_NOZZLE_TIMEOUT) #error "FILAMENT_CHANGE_NOZZLE_TIMEOUT is now PAUSE_PARK_NOZZLE_TIMEOUT. Please update your configuration." +#elif defined(FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS) + #error "FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS is now FILAMENT_CHANGE_ALERT_BEEPS. Please update your configuration." #elif ENABLED(FILAMENT_CHANGE_NO_STEPPER_TIMEOUT) #error "FILAMENT_CHANGE_NO_STEPPER_TIMEOUT is now PAUSE_PARK_NO_STEPPER_TIMEOUT. Please update your configuration." #elif defined(PLA_PREHEAT_HOTEND_TEMP) @@ -406,16 +408,20 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE, * Advanced Pause */ #if ENABLED(ADVANCED_PAUSE_FEATURE) - #if DISABLED(NEWPANEL) - #error "ADVANCED_PAUSE_FEATURE currently requires an LCD controller." + #if !HAS_RESUME_CONTINUE + #error "ADVANCED_PAUSE_FEATURE currently requires an LCD controller or EMERGENCY_PARSER." #elif ENABLED(EXTRUDER_RUNOUT_PREVENT) #error "EXTRUDER_RUNOUT_PREVENT is incompatible with ADVANCED_PAUSE_FEATURE." #elif ENABLED(PARK_HEAD_ON_PAUSE) && DISABLED(SDSUPPORT) && DISABLED(NEWPANEL) && DISABLED(EMERGENCY_PARSER) #error "PARK_HEAD_ON_PAUSE requires SDSUPPORT, EMERGENCY_PARSER, or an LCD controller." #elif ENABLED(HOME_BEFORE_FILAMENT_CHANGE) && DISABLED(PAUSE_PARK_NO_STEPPER_TIMEOUT) - #error "HOME_BEFORE_FILAMENT_CHANGE requires PAUSE_PARK_NO_STEPPER_TIMEOUT" + #error "HOME_BEFORE_FILAMENT_CHANGE requires PAUSE_PARK_NO_STEPPER_TIMEOUT." #elif DISABLED(NOZZLE_PARK_FEATURE) - #error "ADVANCED_PAUSE_FEATURE requires NOZZLE_PARK_FEATURE" + #error "ADVANCED_PAUSE_FEATURE requires NOZZLE_PARK_FEATURE." + #elif ENABLED(PREVENT_LENGTHY_EXTRUDE) && FILAMENT_CHANGE_UNLOAD_LENGTH > EXTRUDE_MAXLENGTH + #error "FILAMENT_CHANGE_UNLOAD_LENGTH must be less than or equal to EXTRUDE_MAXLENGTH." + #elif ENABLED(PREVENT_LENGTHY_EXTRUDE) && FILAMENT_CHANGE_LOAD_LENGTH > EXTRUDE_MAXLENGTH + #error "FILAMENT_CHANGE_LOAD_LENGTH must be less than or equal to EXTRUDE_MAXLENGTH." #endif #endif @@ -454,8 +460,6 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE, */ #ifdef SNMM #error "SNMM is now MK2_MULTIPLEXER. Please update your configuration." -#elif ENABLED(MK2_MULTIPLEXER) && DISABLED(ADVANCED_PAUSE_FEATURE) - #error "ADVANCED_PAUSE_FEATURE is required with MK2_MULTIPLEXER." #endif /** diff --git a/Marlin/buzzer.h b/Marlin/buzzer.h index 530b72968..d36447deb 100644 --- a/Marlin/buzzer.h +++ b/Marlin/buzzer.h @@ -104,7 +104,7 @@ class Buzzer { * @param duration Duration of the tone in milliseconds * @param frequency Frequency of the tone in hertz */ - void tone(const uint16_t &duration, const uint16_t &frequency = 0) { + void tone(const uint16_t &duration, const uint16_t &frequency=0) { while (buffer.isFull()) { this->tick(); thermalManager.manage_heater(); diff --git a/Marlin/configuration_store.cpp b/Marlin/configuration_store.cpp index eb646bbbb..7353c12ab 100644 --- a/Marlin/configuration_store.cpp +++ b/Marlin/configuration_store.cpp @@ -36,13 +36,13 @@ * */ -#define EEPROM_VERSION "V47" +#define EEPROM_VERSION "V48" // Change EEPROM version if these are changed: #define EEPROM_OFFSET 100 /** - * V47 EEPROM Layout: + * V48 EEPROM Layout: * * 100 Version (char x4) * 104 EEPROM CRC16 (uint16_t) @@ -139,7 +139,7 @@ * * Volumetric Extrusion: 21 bytes * 539 M200 D parser.volumetric_enabled (bool) - * 540 M200 T D planner.filament_size (float x5) (T0..3) + * 540 M200 T D planner.filament_size (float x5) (T0..4) * * HAS_TRINAMIC: 22 bytes * 560 M906 X Stepper X current (uint16_t) @@ -154,7 +154,7 @@ * 578 M906 E3 Stepper E3 current (uint16_t) * 580 M906 E4 Stepper E4 current (uint16_t) * - * SENSORLESS HOMING 4 bytes + * SENSORLESS_HOMING: 4 bytes * 582 M914 X Stepper X and X2 threshold (int16_t) * 584 M914 Y Stepper Y and Y2 threshold (int16_t) * @@ -167,7 +167,7 @@ * 598 M907 Z Stepper Z current (uint32_t) * 602 M907 E Stepper E current (uint32_t) * - * CNC_COORDINATE_SYSTEMS 108 bytes + * CNC_COORDINATE_SYSTEMS: 108 bytes * 606 G54-G59.3 coordinate_system (float x 27) * * SKEW_CORRECTION: 12 bytes @@ -175,8 +175,12 @@ * 718 M852 J planner.xz_skew_factor (float) * 722 M852 K planner.yz_skew_factor (float) * - * 726 Minimum end-point - * 2255 (726 + 208 + 36 + 9 + 288 + 988) Maximum end-point + * ADVANCED_PAUSE_FEATURE: 40 bytes + * 726 M603 T U filament_change_unload_length (float x 5) (T0..4) + * 746 M603 T L filament_change_load_length (float x 5) (T0..4) + * + * 766 Minimum end-point + * 2295 (766 + 208 + 36 + 9 + 288 + 988) Maximum end-point * * ======================================================================== * meshes_begin (between max and min end-point, directly above) @@ -725,6 +729,23 @@ void MarlinSettings::postprocess() { for (uint8_t q = 3; q--;) EEPROM_WRITE(dummy); #endif + // + // Advanced Pause filament load & unload lengths + // + #if ENABLED(ADVANCED_PAUSE_FEATURE) + for (uint8_t q = 0; q < MAX_EXTRUDERS; q++) { + if (q < COUNT(filament_change_unload_length)) dummy = filament_change_unload_length[q]; + EEPROM_WRITE(dummy); + } + for (uint8_t q = 0; q < MAX_EXTRUDERS; q++) { + if (q < COUNT(filament_change_load_length)) dummy = filament_change_load_length[q]; + EEPROM_WRITE(dummy); + } + #else + dummy = 0.0f; + for (uint8_t q = MAX_EXTRUDERS * 2; q--;) EEPROM_WRITE(dummy); + #endif + if (!eeprom_error) { const int eeprom_size = eeprom_index; @@ -1207,6 +1228,23 @@ void MarlinSettings::postprocess() { for (uint8_t q = 3; q--;) EEPROM_READ(dummy); #endif + // + // Advanced Pause filament load & unload lengths + // + + #if ENABLED(ADVANCED_PAUSE_FEATURE) + for (uint8_t q = 0; q < MAX_EXTRUDERS; q++) { + EEPROM_READ(dummy); + if (q < COUNT(filament_change_unload_length)) filament_change_unload_length[q] = dummy; + } + for (uint8_t q = 0; q < MAX_EXTRUDERS; q++) { + EEPROM_READ(dummy); + if (q < COUNT(filament_change_load_length)) filament_change_load_length[q] = dummy; + } + #else + for (uint8_t q = MAX_EXTRUDERS * 2; q--;) EEPROM_READ(dummy); + #endif + if (working_crc == stored_crc) { postprocess(); #if ENABLED(EEPROM_CHITCHAT) @@ -1612,6 +1650,13 @@ void MarlinSettings::reset() { #endif #endif + #if ENABLED(ADVANCED_PAUSE_FEATURE) + for (uint8_t e = 0; e < E_STEPPERS; e++) { + filament_change_unload_length[e] = FILAMENT_CHANGE_UNLOAD_LENGTH; + filament_change_load_length[e] = FILAMENT_CHANGE_LOAD_LENGTH; + } + #endif + postprocess(); #if ENABLED(EEPROM_CHITCHAT) @@ -2155,6 +2200,42 @@ void MarlinSettings::reset() { SERIAL_ECHOPAIR(" E", stepper.motor_current_setting[2]); SERIAL_EOL(); #endif + + /** + * Advanced Pause filament load & unload lengths + */ + #if ENABLED(ADVANCED_PAUSE_FEATURE) + if (!forReplay) { + CONFIG_ECHO_START; + SERIAL_ECHOLNPGM("Filament load & unload lengths:"); + } + CONFIG_ECHO_START; + #if EXTRUDERS == 1 + SERIAL_ECHOPAIR(" M603 U", LINEAR_UNIT(filament_change_unload_length[0])); + SERIAL_ECHOLNPAIR(" L", LINEAR_UNIT(filament_change_load_length[0])); + #else + SERIAL_ECHOPAIR(" M603 T0 U", LINEAR_UNIT(filament_change_unload_length[0])); + SERIAL_ECHOLNPAIR(" L", LINEAR_UNIT(filament_change_load_length[0])); + CONFIG_ECHO_START; + SERIAL_ECHOPAIR(" M603 T1 U", LINEAR_UNIT(filament_change_unload_length[1])); + SERIAL_ECHOLNPAIR(" L", LINEAR_UNIT(filament_change_load_length[1])); + #if EXTRUDERS > 2 + CONFIG_ECHO_START; + SERIAL_ECHOPAIR(" M603 T2 U", LINEAR_UNIT(filament_change_unload_length[2])); + SERIAL_ECHOLNPAIR(" L", LINEAR_UNIT(filament_change_load_length[2])); + #if EXTRUDERS > 3 + CONFIG_ECHO_START; + SERIAL_ECHOPAIR(" M603 T3 U", LINEAR_UNIT(filament_change_unload_length[3])); + SERIAL_ECHOLNPAIR(" L", LINEAR_UNIT(filament_change_load_length[3])); + #if EXTRUDERS > 4 + CONFIG_ECHO_START; + SERIAL_ECHOPAIR(" M603 T4 U", LINEAR_UNIT(filament_change_unload_length[4])); + SERIAL_ECHOLNPAIR(" L", LINEAR_UNIT(filament_change_load_length[4])); + #endif // EXTRUDERS > 4 + #endif // EXTRUDERS > 3 + #endif // EXTRUDERS > 2 + #endif // EXTRUDERS == 1 + #endif // ADVANCED_PAUSE_FEATURE } #endif // !DISABLE_M503 diff --git a/Marlin/enum.h b/Marlin/enum.h index 4fa6496c2..0aa92c276 100644 --- a/Marlin/enum.h +++ b/Marlin/enum.h @@ -131,7 +131,7 @@ enum EndstopEnum { ADVANCED_PAUSE_MESSAGE_UNLOAD, ADVANCED_PAUSE_MESSAGE_INSERT, ADVANCED_PAUSE_MESSAGE_LOAD, - ADVANCED_PAUSE_MESSAGE_EXTRUDE, + ADVANCED_PAUSE_MESSAGE_PURGE, ADVANCED_PAUSE_MESSAGE_OPTION, ADVANCED_PAUSE_MESSAGE_RESUME, ADVANCED_PAUSE_MESSAGE_STATUS, @@ -139,6 +139,12 @@ enum EndstopEnum { ADVANCED_PAUSE_MESSAGE_WAIT_FOR_NOZZLES_TO_HEAT }; #endif + + enum AdvancedPauseMode { + ADVANCED_PAUSE_MODE_PAUSE_PRINT, + ADVANCED_PAUSE_MODE_LOAD_FILAMENT, + ADVANCED_PAUSE_MODE_UNLOAD_FILAMENT + }; #endif /** diff --git a/Marlin/language.h b/Marlin/language.h index 351b9dc33..8f9aaff70 100644 --- a/Marlin/language.h +++ b/Marlin/language.h @@ -205,7 +205,15 @@ #define MSG_ENDSTOPS_HIT "endstops hit: " #define MSG_ERR_COLD_EXTRUDE_STOP " cold extrusion prevented" #define MSG_ERR_LONG_EXTRUDE_STOP " too long extrusion prevented" -#define MSG_TOO_COLD_FOR_M600 "M600 Hotend too cold to change filament" +#define MSG_HOTEND_TOO_COLD "Hotend too cold" + +#define MSG_FILAMENT_CHANGE_HEAT "Press button (or M108) to heat nozzle" +#define MSG_FILAMENT_CHANGE_INSERT "Insert filament and press button (or M108)" +#define MSG_FILAMENT_CHANGE_HEAT_LCD "Press button to heat nozzle" +#define MSG_FILAMENT_CHANGE_INSERT_LCD "Insert filament and press button" +#define MSG_FILAMENT_CHANGE_HEAT_M108 "Send M108 to heat nozzle" +#define MSG_FILAMENT_CHANGE_INSERT_M108 "Insert filament and send M108" + #define MSG_SERIAL_ERROR_MENU_STRUCTURE "Error in menu structure" #define MSG_ERR_EEPROM_WRITE "Error writing to EEPROM!" diff --git a/Marlin/language_an.h b/Marlin/language_an.h index 3ab4d1d25..f5245d314 100644 --- a/Marlin/language_an.h +++ b/Marlin/language_an.h @@ -217,9 +217,6 @@ #define MSG_DRIVE_STRENGTH _UxGT("Fuerza d'o driver") #define MSG_DAC_PERCENT _UxGT("Driver %") #define MSG_DAC_EEPROM_WRITE _UxGT("Escri. DAC EEPROM") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") -#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extruir mas") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Resumir imp.") // @@ -246,8 +243,6 @@ #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("expulsar filament") #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Aguardando a") #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("cargar filamento") -#define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Aguardando a") -#define MSG_FILAMENT_CHANGE_EXTRUDE_2 _UxGT("extruir filamento") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Aguardando impre.") #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("pa continar") diff --git a/Marlin/language_ca.h b/Marlin/language_ca.h index 54137f7d4..9af28baf2 100644 --- a/Marlin/language_ca.h +++ b/Marlin/language_ca.h @@ -219,11 +219,7 @@ #define MSG_DRIVE_STRENGTH _UxGT("Força motor") #define MSG_DAC_PERCENT _UxGT("Driver %") #define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM Write") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") -#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extrudeix mes") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Repren impressió") -#define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("Temp minima es ") // // Filament Change screens show up to 3 lines on a 4-line display @@ -244,8 +240,6 @@ #define MSG_FILAMENT_CHANGE_HEATING_2 _UxGT("Espereu...") #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Esperant carrega") #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("de filament") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Esperant per") - #define MSG_FILAMENT_CHANGE_EXTRUDE_2 _UxGT("extreure filament") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Esperant per") #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("reprendre") #else // LCD_HEIGHT < 4 @@ -254,7 +248,6 @@ #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Insereix i prem") #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Escalfant...") #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Carregant...") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Extrudint...") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Reprenent...") #endif // LCD_HEIGHT < 4 diff --git a/Marlin/language_cz.h b/Marlin/language_cz.h index 5fab5b187..ddeae5abe 100644 --- a/Marlin/language_cz.h +++ b/Marlin/language_cz.h @@ -336,11 +336,7 @@ #define MSG_DRIVE_STRENGTH _UxGT("Buzeni motoru") #define MSG_DAC_PERCENT _UxGT("Motor %") #define MSG_DAC_EEPROM_WRITE _UxGT("Ulozit do EEPROM") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") -#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Jeste vytlacit") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Obnovit tisk") -#define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("Min. teplota je ") #define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Tryska: ") #define MSG_ERR_HOMING_FAILED _UxGT("Parkovani selhalo") #define MSG_ERR_PROBING_FAILED _UxGT("Kalibrace selhala") @@ -363,9 +359,6 @@ #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Cekejte prosim") #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("na zavedeni") #define MSG_FILAMENT_CHANGE_LOAD_3 _UxGT("filamentu") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Cekejte prosim") - #define MSG_FILAMENT_CHANGE_EXTRUDE_2 _UxGT("na vytlaceni") - #define MSG_FILAMENT_CHANGE_EXTRUDE_3 _UxGT("filamentu") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Cekejte prosim") #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("na pokracovani") #define MSG_FILAMENT_CHANGE_RESUME_3 _UxGT("tisku") @@ -376,7 +369,6 @@ #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Vlozte, kliknete") #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Nahrivani...") #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Zavadeni...") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Vytlacovani...") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Pokracovani...") #endif // LCD_HEIGHT < 4 diff --git a/Marlin/language_cz_utf8.h b/Marlin/language_cz_utf8.h index cad7d2acd..5a6936ae7 100644 --- a/Marlin/language_cz_utf8.h +++ b/Marlin/language_cz_utf8.h @@ -338,11 +338,7 @@ #define MSG_DRIVE_STRENGTH _UxGT("Buzení motorů") #define MSG_DAC_PERCENT _UxGT("Motor %") #define MSG_DAC_EEPROM_WRITE _UxGT("Uložit do EEPROM") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") -#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Ještě vytlačit") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Obnovit tisk") -#define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("Min. teplota je ") #define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Tryska: ") #define MSG_ERR_HOMING_FAILED _UxGT("Parkování selhalo") #define MSG_ERR_PROBING_FAILED _UxGT("Kalibrace selhala") @@ -365,9 +361,6 @@ #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Čekejte prosím") #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("na zavedení") #define MSG_FILAMENT_CHANGE_LOAD_3 _UxGT("filamentu") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Čekejte prosím") - #define MSG_FILAMENT_CHANGE_EXTRUDE_2 _UxGT("na vytlačení") - #define MSG_FILAMENT_CHANGE_EXTRUDE_3 _UxGT("filamentu") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Čekejte prosím") #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("na pokračování") #define MSG_FILAMENT_CHANGE_RESUME_3 _UxGT("tisku") @@ -378,7 +371,6 @@ #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Vložte, klikněte") #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Nahřívání...") #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Zavádění...") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Vytlačování...") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Pokračování...") #endif // LCD_HEIGHT < 4 diff --git a/Marlin/language_da.h b/Marlin/language_da.h index 1a3fdd444..9755c66ae 100644 --- a/Marlin/language_da.h +++ b/Marlin/language_da.h @@ -217,9 +217,6 @@ #define MSG_DAC_PERCENT _UxGT("Driv %") #define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM Skriv") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") -#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extruder mere") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Forsæt print") #if LCD_HEIGHT >= 4 @@ -233,8 +230,6 @@ #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("for at fortsætte...") #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Vent på") #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("filament indtag") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Vent på") - #define MSG_FILAMENT_CHANGE_EXTRUDE_2 _UxGT("filament extrudering") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Vent på at print") #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("fortsætter") #else // LCD_HEIGHT < 4 @@ -242,7 +237,6 @@ #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Udskyder...") #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Indsæt og klik") #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Indtager...") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Extrudere...") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Fortsætter...") #endif // LCD_HEIGHT < 4 diff --git a/Marlin/language_de.h b/Marlin/language_de.h index 4036a0dcf..da6c04c92 100644 --- a/Marlin/language_de.h +++ b/Marlin/language_de.h @@ -308,11 +308,9 @@ #define MSG_DAC_PERCENT _UxGT("Treiber %") #define MSG_DAC_EEPROM_WRITE _UxGT("Werte speichern") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("DRUCK PAUSIERT") +#define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("DRUCK PAUSIERT") #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("FORTS. OPTIONEN:") -#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extrude mehr") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Drucke weiter") -#define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("Min. Temperatur ist ") #define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Düse: ") #if LCD_HEIGHT >= 4 @@ -333,9 +331,6 @@ #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Warte auf") #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("Laden des") #define MSG_FILAMENT_CHANGE_LOAD_3 _UxGT("Filaments") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Warte auf") - #define MSG_FILAMENT_CHANGE_EXTRUDE_2 _UxGT("Extrusion des") - #define MSG_FILAMENT_CHANGE_EXTRUDE_3 _UxGT("Filaments") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Warte auf") #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("Fortsetzung des") #define MSG_FILAMENT_CHANGE_RESUME_3 _UxGT("Druckes...") @@ -346,7 +341,6 @@ #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Laden und Klick") #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Heizen...") #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Laden...") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Extrudieren...") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Fortsetzen...") #endif // LCD_HEIGHT < 4 diff --git a/Marlin/language_el.h b/Marlin/language_el.h index 1ae2a5b93..0fc9fc8e1 100644 --- a/Marlin/language_el.h +++ b/Marlin/language_el.h @@ -201,8 +201,8 @@ #define MSG_INFO_MAX_TEMP _UxGT("Max Temp") #define MSG_INFO_PSU _UxGT("PSU") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("CHANGE FILAMENT") -#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extrude more") +#define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("CHANGE FILAMENT") +#define MSG_FILAMENT_CHANGE_OPTION_PURGE _UxGT("Purge more") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Resume print") #if LCD_HEIGHT >= 4 @@ -217,8 +217,6 @@ #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("to continue...") #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Wait for") #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("filament load") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Wait for") - #define MSG_FILAMENT_CHANGE_EXTRUDE_2 _UxGT("filament extrude") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Wait for print") #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("to resume") #else // LCD_HEIGHT < 4 @@ -227,7 +225,6 @@ #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Ejecting...") #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Insert and Click") #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Loading...") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Extruding...") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Resuming...") #endif diff --git a/Marlin/language_en.h b/Marlin/language_en.h index 879a6fa01..caed8dccb 100644 --- a/Marlin/language_en.h +++ b/Marlin/language_en.h @@ -591,6 +591,12 @@ #ifndef MSG_FILAMENT_DIAM #define MSG_FILAMENT_DIAM _UxGT("Fil. Dia.") #endif +#ifndef MSG_FILAMENT_UNLOAD + #define MSG_FILAMENT_UNLOAD _UxGT("Unload mm") +#endif +#ifndef MSG_FILAMENT_LOAD + #define MSG_FILAMENT_LOAD _UxGT("Load mm") +#endif #ifndef MSG_ADVANCE_K #define MSG_ADVANCE_K _UxGT("Advance K") #endif @@ -690,6 +696,15 @@ #ifndef MSG_FILAMENTCHANGE #define MSG_FILAMENTCHANGE _UxGT("Change filament") #endif +#ifndef MSG_FILAMENTLOAD + #define MSG_FILAMENTLOAD _UxGT("Load filament") +#endif +#ifndef MSG_FILAMENTUNLOAD + #define MSG_FILAMENTUNLOAD _UxGT("Unload filament") +#endif +#ifndef MSG_FILAMENTUNLOAD_ALL + #define MSG_FILAMENTUNLOAD_ALL _UxGT("Unload All") +#endif #ifndef MSG_INIT_SDCARD #define MSG_INIT_SDCARD _UxGT("Init. SD card") #endif @@ -919,20 +934,23 @@ #ifndef MSG_DAC_EEPROM_WRITE #define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM Write") #endif -#ifndef MSG_FILAMENT_CHANGE_HEADER - #define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") +#ifndef MSG_FILAMENT_CHANGE_HEADER_PAUSE + #define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("PRINT PAUSED") +#endif +#ifndef MSG_FILAMENT_CHANGE_HEADER_LOAD + #define MSG_FILAMENT_CHANGE_HEADER_LOAD _UxGT("LOAD FILAMENT") +#endif +#ifndef MSG_FILAMENT_CHANGE_HEADER_UNLOAD + #define MSG_FILAMENT_CHANGE_HEADER_UNLOAD _UxGT("UNLOAD FILAMENT") #endif #ifndef MSG_FILAMENT_CHANGE_OPTION_HEADER #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") #endif -#ifndef MSG_FILAMENT_CHANGE_OPTION_EXTRUDE - #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extrude more") +#ifndef MSG_FILAMENT_CHANGE_OPTION_PURGE + #define MSG_FILAMENT_CHANGE_OPTION_PURGE _UxGT("Purge more") #endif #ifndef MSG_FILAMENT_CHANGE_OPTION_RESUME - #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Resume print") -#endif -#ifndef MSG_FILAMENT_CHANGE_MINTEMP - #define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("Minimum Temp is ") + #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Continue") #endif #ifndef MSG_FILAMENT_CHANGE_NOZZLE #define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Nozzle: ") @@ -975,9 +993,9 @@ #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Wait for") #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("filament load") #endif - #ifndef MSG_FILAMENT_CHANGE_EXTRUDE_1 - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Wait for") - #define MSG_FILAMENT_CHANGE_EXTRUDE_2 _UxGT("filament extrude") + #ifndef MSG_FILAMENT_CHANGE_PURGE_1 + #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Wait for") + #define MSG_FILAMENT_CHANGE_PURGE_2 _UxGT("filament purge") #endif #ifndef MSG_FILAMENT_CHANGE_RESUME_1 #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Wait for print") @@ -999,8 +1017,8 @@ #ifndef MSG_FILAMENT_CHANGE_LOAD_1 #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Loading...") #endif - #ifndef MSG_FILAMENT_CHANGE_EXTRUDE_1 - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Extruding...") + #ifndef MSG_FILAMENT_CHANGE_PURGE_1 + #define MSG_FILAMENT_CHANGE_PURGE_1 _UxGT("Purging...") #endif #ifndef MSG_FILAMENT_CHANGE_RESUME_1 #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Resuming...") diff --git a/Marlin/language_es.h b/Marlin/language_es.h index 248ecb193..6831038b2 100644 --- a/Marlin/language_es.h +++ b/Marlin/language_es.h @@ -226,12 +226,10 @@ #define MSG_DAC_PERCENT _UxGT("Driver %") #define MSG_DAC_EEPROM_WRITE _UxGT("Escribe DAC EEPROM") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("IMPR. PAUSADA") +#define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("IMPR. PAUSADA") #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("OPC. REINICIO:") -#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extruir mas") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Resumir imp.") -#define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("Temp Minima es ") #define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Boquilla: ") #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Esperando iniciar") @@ -254,8 +252,6 @@ #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("filamento expulsado") #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Esperado por") #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("Cargar filamento") -#define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Esperado por") -#define MSG_FILAMENT_CHANGE_EXTRUDE_2 _UxGT("Extruir filamento") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Esperando imp.") #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("para resumir") #define MSG_FILAMENT_CHANGE_HEAT_1 _UxGT("Oprima boton para") diff --git a/Marlin/language_eu.h b/Marlin/language_eu.h index 5be54c546..33452312e 100644 --- a/Marlin/language_eu.h +++ b/Marlin/language_eu.h @@ -225,12 +225,10 @@ #define MSG_DAC_PERCENT _UxGT("Driver %") #define MSG_DAC_EEPROM_WRITE _UxGT("Idatzi DAC EEPROM") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("HARIZPIA ALDATU") +#define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("HARIZPIA ALDATU") #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("ALDAKETA AUKERAK:") -#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Gehiago estruitu") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Inprima. jarraitu") -#define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("Tenp Minimoa ") #define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Pita: ") #endif // LANGUAGE_EU_H diff --git a/Marlin/language_fr.h b/Marlin/language_fr.h index e89abcd5d..ca7d6c7b1 100644 --- a/Marlin/language_fr.h +++ b/Marlin/language_fr.h @@ -305,11 +305,7 @@ #define MSG_DAC_PERCENT _UxGT("Driver %") #define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM sauv.") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") -#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("+ extrusion") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Reprendre impr.") -#define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("La temp. minimum est ") #define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Buse: ") #if LCD_HEIGHT >= 4 @@ -328,8 +324,6 @@ #define MSG_FILAMENT_CHANGE_HEATING_2 _UxGT("Patientez SVP...") #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("attente de") #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("chargement filament") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("attente de") - #define MSG_FILAMENT_CHANGE_EXTRUDE_2 _UxGT("extrusion filament") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("attente impression") #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("pour reprendre") #else // LCD_HEIGHT < 4 @@ -338,7 +332,6 @@ #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Ejection...") #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Inserer et clic") #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Chargement...") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Extrusion...") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Reprise...") #endif // LCD_HEIGHT < 4 diff --git a/Marlin/language_fr_utf8.h b/Marlin/language_fr_utf8.h index ab328950f..89db38a1d 100644 --- a/Marlin/language_fr_utf8.h +++ b/Marlin/language_fr_utf8.h @@ -304,11 +304,7 @@ #define MSG_DAC_PERCENT _UxGT("Driver %") #define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM sauv.") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") -#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("+ extrusion") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Reprendre impr.") -#define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("La temp. minimum est ") #define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Buse: ") #if LCD_HEIGHT >= 4 @@ -327,8 +323,6 @@ #define MSG_FILAMENT_CHANGE_HEATING_2 _UxGT("Patientez SVP...") #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("attente de") #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("chargement filament") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("attente de") - #define MSG_FILAMENT_CHANGE_EXTRUDE_2 _UxGT("extrusion filament") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("attente impression") #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("pour reprendre") #else // LCD_HEIGHT < 4 @@ -337,7 +331,6 @@ #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Ejection...") #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Insérer et clic") #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Chargement...") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Extrusion...") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Reprise...") #endif // LCD_HEIGHT < 4 diff --git a/Marlin/language_gl.h b/Marlin/language_gl.h index f8d50035e..8ee3acbdd 100644 --- a/Marlin/language_gl.h +++ b/Marlin/language_gl.h @@ -214,9 +214,6 @@ #define MSG_DAC_PERCENT _UxGT("Motor %") #define MSG_DAC_EEPROM_WRITE _UxGT("Garda DAC EEPROM") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") -#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extruir mais") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Segue traballo") #if LCD_HEIGHT >= 4 @@ -233,9 +230,6 @@ #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Agarde pola") #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("carga do") #define MSG_FILAMENT_CHANGE_LOAD_3 _UxGT("filamento") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Agarde pola") - #define MSG_FILAMENT_CHANGE_EXTRUDE_2 _UxGT("extrusion do") - #define MSG_FILAMENT_CHANGE_EXTRUDE_3 _UxGT("filamento") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Agarde para") #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("seguir co") #define MSG_FILAMENT_CHANGE_RESUME_3 _UxGT("traballo") @@ -245,7 +239,6 @@ #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Descargando...") #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Introduza e click") #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Cargando...") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Extruindo...") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Seguindo...") #endif // LCD_HEIGHT < 4 diff --git a/Marlin/language_hr.h b/Marlin/language_hr.h index 64de7492b..0d435c9f0 100644 --- a/Marlin/language_hr.h +++ b/Marlin/language_hr.h @@ -214,9 +214,6 @@ #define MSG_DAC_PERCENT _UxGT("Driver %") #define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM Write") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") -#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extrudiraj više") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Nastavi print") #if LCD_HEIGHT >= 4 @@ -231,8 +228,6 @@ #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("za nastavak...") #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Pričekaj") #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("filament load") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Pričekaj") - #define MSG_FILAMENT_CHANGE_EXTRUDE_2 _UxGT("filament extrude") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Wait for print") #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("to resume") #else // LCD_HEIGHT < 4 @@ -241,7 +236,6 @@ #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Ejecting...") #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Insert and Click") #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Loading...") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Extrudiranje...") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Nastavljam...") #endif // LCD_HEIGHT < 4 diff --git a/Marlin/language_it.h b/Marlin/language_it.h index fae438ce5..f2986a4ff 100644 --- a/Marlin/language_it.h +++ b/Marlin/language_it.h @@ -301,11 +301,9 @@ #define MSG_DAC_PERCENT _UxGT("Driver %") #define MSG_DAC_EEPROM_WRITE _UxGT("Scrivi DAC EEPROM") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("STAMPA IN PAUSA") +#define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("STAMPA IN PAUSA") #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("OPZIONI:") -#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Estrudi ancora") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Riprendi stampa") -#define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("Temp minima è ") #define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Ugello: ") #if LCD_HEIGHT >= 4 @@ -326,9 +324,6 @@ #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Attendere") #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("il caricamento") #define MSG_FILAMENT_CHANGE_LOAD_3 _UxGT("del filamento") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Attendere") - #define MSG_FILAMENT_CHANGE_EXTRUDE_2 _UxGT("l'estrusione") - #define MSG_FILAMENT_CHANGE_EXTRUDE_3 _UxGT("del filamento") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Attendere") #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("la ripresa") #define MSG_FILAMENT_CHANGE_RESUME_3 _UxGT("della stampa") @@ -339,7 +334,6 @@ #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Inserisci e premi") #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Riscaldamento...") #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Caricamento...") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Estrusione...") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Ripresa...") #endif // LCD_HEIGHT < 4 diff --git a/Marlin/language_kana.h b/Marlin/language_kana.h index 200aed4ec..b59607836 100644 --- a/Marlin/language_kana.h +++ b/Marlin/language_kana.h @@ -285,10 +285,7 @@ #else #define MSG_DAC_PERCENT "DAC\xbc\xad\xc2\xd8\xae\xb8" // "DACシュツリョク" ("Driver %") #endif -#define MSG_DAC_EEPROM_WRITE MSG_STORE_EPROM // "メモリヘカクノウ" ("DAC EEPROM Write") -#define MSG_FILAMENT_CHANGE_HEADER "PRINT PAUSED" -#define MSG_FILAMENT_CHANGE_OPTION_HEADER "RESUME OPTIONS:" -#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE "\xbb\xd7\xc6\xb5\xbc\xc0\xde\xbd" // "サラニオシダス" ("Extrude more") +#define MSG_DAC_EEPROM_WRITE MSG_STORE_EEPROM // "メモリヘカクノウ" ("DAC EEPROM Write") #define MSG_FILAMENT_CHANGE_OPTION_RESUME "\xcc\xdf\xd8\xdd\xc4\xbb\xb2\xb6\xb2" // "プリントサイカイ" ("Resume print") #if LCD_HEIGHT >= 4 @@ -301,8 +298,6 @@ #define MSG_FILAMENT_CHANGE_INSERT_2 "\xb8\xd8\xaf\xb8\xbd\xd9\xc4\xbf\xde\xaf\xba\xb3\xbc\xcf\xbd" // "クリックスルトゾッコウシマス" ("and press button") #define MSG_FILAMENT_CHANGE_LOAD_1 "\xcc\xa8\xd7\xd2\xdd\xc4\xbf\xb3\xc3\xdd\xc1\xad\xb3" // "フィラメントソウテンチュウ" ("Wait for") #define MSG_FILAMENT_CHANGE_LOAD_2 "\xbc\xca\xde\xd7\xb8\xb5\xcf\xc1\xb8\xc0\xde\xbb\xb2" // "シバラクオマチクダサイ" ("filament load") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 "\xcc\xa8\xd7\xd2\xdd\xc4\xb5\xbc\xc0\xde\xbc\xc1\xad\xb3" // "フィラメントオシダシチュウ" ("Wait for") - #define MSG_FILAMENT_CHANGE_EXTRUDE_2 "\xbc\xca\xde\xd7\xb8\xb5\xcf\xc1\xb8\xc0\xde\xbb\xb2" // "シバラクオマチクダサイ" ("filament extrude") #define MSG_FILAMENT_CHANGE_RESUME_1 "\xcc\xdf\xd8\xdd\xc4\xa6\xbb\xb2\xb6\xb2\xbc\xcf\xbd" // "プリントヲサイカイシマス" ("Wait for print") #define MSG_FILAMENT_CHANGE_RESUME_2 "\xbc\xca\xde\xd7\xb8\xb5\xcf\xc1\xb8\xc0\xde\xbb\xb2" // "シバラクオマチクダサイ" ("to resume") #else // LCD_HEIGHT < 4 @@ -315,7 +310,6 @@ #define MSG_FILAMENT_CHANGE_INSERT_1 "\xbf\xb3\xc6\xad\xb3\xbc\x2c\xb8\xd8\xaf\xb8\xbe\xd6" // "ソウニュウシ,クリックセヨ" ("Insert and Click") #endif #define MSG_FILAMENT_CHANGE_LOAD_1 "\xcc\xa8\xd7\xd2\xdd\xc4\xbf\xb3\xc3\xdd\xc1\xad\xb3" // "フィラメントソウテンチュウ" ("Loading...") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 "\xcc\xa8\xd7\xd2\xdd\xc4\xb5\xbc\xc0\xde\xbc\xc1\xad\xb3" // "フィラメントオシダシチュウ" ("Extruding...") #define MSG_FILAMENT_CHANGE_RESUME_1 "\xcc\xdf\xd8\xdd\xc4\xa6\xbb\xb2\xb6\xb2\xbc\xcf\xbd" // "プリントヲサイカイシマス" ("Resuming...") #endif // LCD_HEIGHT < 4 diff --git a/Marlin/language_kana_utf8.h b/Marlin/language_kana_utf8.h index b07aa4097..248bf46eb 100644 --- a/Marlin/language_kana_utf8.h +++ b/Marlin/language_kana_utf8.h @@ -204,10 +204,7 @@ #define MSG_INFO_PSU _UxGT("デンゲンシュベツ") // "Power Supply" #define MSG_DRIVE_STRENGTH _UxGT("モータークドウリョク") // "Drive Strength" #define MSG_DAC_PERCENT _UxGT("DACシュツリョク %") // "Driver %" -#define MSG_DAC_EEPROM_WRITE MSG_STORE_EPROM // "DAC EEPROM Write" -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") -#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("サラニオシダス") // "Extrude more" +#define MSG_DAC_EEPROM_WRITE MSG_STORE_EEPROM // "DAC EEPROM Write" #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("プリントサイカイ") // "Resume print" #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("コウカンヲカイシシマス") // "Wait for start" #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("シバラクオマチクダサイ") // "of the filament" @@ -217,8 +214,6 @@ #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("クリックスルトゾッコウシマス") // "and press button" #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("フィラメントソウテンチュウ") // "Wait for" #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("シバラクオマチクダサイ") // "filament load" -#define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("フィラメントオシダシチュウ") // "Wait for" -#define MSG_FILAMENT_CHANGE_EXTRUDE_2 _UxGT("シバラクオマチクダサイ") // "filament extrude" #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("プリントヲサイカイシマス") // "Wait for print" #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("シバラクオマチクダサイ") // "to resume" diff --git a/Marlin/language_nl.h b/Marlin/language_nl.h index 11f612de8..8967fd09d 100644 --- a/Marlin/language_nl.h +++ b/Marlin/language_nl.h @@ -226,11 +226,7 @@ #define MSG_DRIVE_STRENGTH _UxGT("Motorstroom") #define MSG_DAC_PERCENT _UxGT("Driver %") //accepted English term in Dutch #define MSG_DAC_EEPROM_WRITE _UxGT("DAC Opslaan") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") -#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Extrudeer meer") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Hervat print") -#define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("Minimum Temp is ") #define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Nozzle: ") //accepeted English term // // Filament Change screens show up to 3 lines on a 4-line display @@ -254,9 +250,6 @@ #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Wacht voor") #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("filament te") #define MSG_FILAMENT_CHANGE_LOAD_3 _UxGT("laden") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Wacht voor") - #define MSG_FILAMENT_CHANGE_EXTRUDE_2 _UxGT("filament te") - #define MSG_FILAMENT_CHANGE_EXTRUDE_3 _UxGT("extruderen") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Wacht voor print") #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("om verder") #define MSG_FILAMENT_CHANGE_RESUME_3 _UxGT("te gaan") @@ -273,8 +266,6 @@ #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("en druk knop") #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Wacht voor") #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("inladen...") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Wacht voor") - #define MSG_FILAMENT_CHANGE_EXTRUDE_2 _UxGT("extrudering") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Wacht voor") #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("printing...") #endif // LCD_HEIGHT < 4 diff --git a/Marlin/language_pl-DOGM.h b/Marlin/language_pl-DOGM.h index e712185c6..b5584a683 100644 --- a/Marlin/language_pl-DOGM.h +++ b/Marlin/language_pl-DOGM.h @@ -213,9 +213,8 @@ #define MSG_DAC_PERCENT _UxGT("Siła %") #define MSG_DAC_EEPROM_WRITE _UxGT("Zapisz DAC EEPROM") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("ZMIEŃ FILAMENT") +#define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("ZMIEŃ FILAMENT") #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("ZMIEŃ OPCJE:") -#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Ekstruduj więcej") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Wznów drukowanie") #if LCD_HEIGHT >= 4 @@ -229,8 +228,6 @@ #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("aby kontynuować...") #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Czekam na") #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("włożenie filamentu") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Czekam na") - #define MSG_FILAMENT_CHANGE_EXTRUDE_2 _UxGT("ekstruzję filamentu") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Czekam na") #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("wznowienie druku") #else // LCD_HEIGHT < 4 @@ -239,7 +236,6 @@ #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Wysuwanie...") #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Włóż i naciśnij prz.") #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Ładowanie...") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Ekstruzja...") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Wznowienie...") #endif // LCD_HEIGHT < 4 diff --git a/Marlin/language_pl-HD44780.h b/Marlin/language_pl-HD44780.h index d14cf9d77..3b25a5dd9 100644 --- a/Marlin/language_pl-HD44780.h +++ b/Marlin/language_pl-HD44780.h @@ -215,9 +215,8 @@ #define MSG_DAC_PERCENT _UxGT("Sila %") #define MSG_DAC_EEPROM_WRITE _UxGT("Zapisz DAC EEPROM") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("ZMIEN FILAMENT") +#define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("ZMIEN FILAMENT") #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("ZMIEN OPCJE:") -#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Ekstruduj wiecej") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Wznow drukowanie") #if LCD_HEIGHT >= 4 @@ -231,8 +230,6 @@ #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("aby kontynuowac...") #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Czekam na") #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("wlozenie filamentu") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Czekam na") - #define MSG_FILAMENT_CHANGE_EXTRUDE_2 _UxGT("ekstruzje filamentu") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Czekam na") #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("wznowienie druku") #else // LCD_HEIGHT < 4 @@ -241,7 +238,6 @@ #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Wysuwanie...") #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Wloz i nacisnij prz.") #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Ladowanie...") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Ekstruzja...") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Wznowienie...") #endif // LCD_HEIGHT < 4 @@ -256,8 +252,6 @@ #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("aby kontynuowac...") #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Czekam na") #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("wlozenie filamentu") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Czekam na") - #define MSG_FILAMENT_CHANGE_EXTRUDE_2 _UxGT("ekstruzje filamentu") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Czekam na") #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("wznowienie druku") #else // LCD_HEIGHT < 4 @@ -266,7 +260,6 @@ #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Wysuwanie...") #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Wloz i nacisnij prz.") #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Ladowanie...") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Ekstruzja...") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Wznowienie...") #endif // LCD_HEIGHT < 4 diff --git a/Marlin/language_ru.h b/Marlin/language_ru.h index 328198770..27135a38d 100644 --- a/Marlin/language_ru.h +++ b/Marlin/language_ru.h @@ -296,11 +296,9 @@ #define MSG_DRIVE_STRENGTH _UxGT("Сила привода") #define MSG_DAC_PERCENT _UxGT("Привод %") #define MSG_DAC_EEPROM_WRITE _UxGT("Записи DAC EEPROM") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("ПЕЧАТЬ ОСТАНОВЛЕНА") +#define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("ПЕЧАТЬ ОСТАНОВЛЕНА") #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("ОПЦИИ ВОЗОБНОВЛЕНИЯ:") -#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Выдавить ещё") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Возобновить печать") -#define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("Мин. температура") #define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Сопла: ") // // Filament Change screens show up to 3 lines on a 4-line display @@ -329,7 +327,6 @@ #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Вставь и нажми") #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Нагрев...") #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Загрузка...") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Выдавливание...") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Возобновление...") #endif // LCD_HEIGHT < 4 diff --git a/Marlin/language_sk_utf8.h b/Marlin/language_sk_utf8.h index d7157ca41..28a4660b6 100644 --- a/Marlin/language_sk_utf8.h +++ b/Marlin/language_sk_utf8.h @@ -305,11 +305,9 @@ #define MSG_DAC_PERCENT _UxGT("Motor %") #define MSG_DAC_EEPROM_WRITE _UxGT("Uložiť do EEPROM") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PAUZA TLAČE") +#define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("PAUZA TLAČE") #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("MOŽN. POKRAČ.:") -#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Ešte vytlačiť") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Obnoviť tlač") -#define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("Min. teplota je ") #define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Tryska: ") #if LCD_HEIGHT >= 4 @@ -330,9 +328,6 @@ #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Čakajte prosím") #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("na zavedenie") #define MSG_FILAMENT_CHANGE_LOAD_3 _UxGT("filamentu") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Čakajte prosím") - #define MSG_FILAMENT_CHANGE_EXTRUDE_2 _UxGT("na vytlačenie") - #define MSG_FILAMENT_CHANGE_EXTRUDE_3 _UxGT("filamentu") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Čakajte prosím") #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("na pokračovanie") #define MSG_FILAMENT_CHANGE_RESUME_3 _UxGT("tlače") @@ -343,7 +338,6 @@ #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Vložte, kliknite") #define MSG_FILAMENT_CHANGE_HEATING_1 _UxGT("Ohrev...") #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Zavádzanie...") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Vytlačovanie...") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Pokračovanie...") #endif // LCD_HEIGHT < 4 diff --git a/Marlin/language_tr.h b/Marlin/language_tr.h index daaa4c56f..b4b0cc37e 100644 --- a/Marlin/language_tr.h +++ b/Marlin/language_tr.h @@ -228,12 +228,8 @@ #define MSG_DRIVE_STRENGTH _UxGT("Sürücü Gücü") // Sürücü Gücü #define MSG_DAC_PERCENT _UxGT("Sürücü %") // Sürücü % -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") #define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("Seçenekler:") // Seçenekler: -#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Daha Akıt") // Daha Akıt #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Baskıyı sürdür") // Baskıyı sürdür -#define MSG_FILAMENT_CHANGE_MINTEMP _UxGT("Min. Sıcaklık") // Min. Sıcaklık: #define MSG_FILAMENT_CHANGE_NOZZLE _UxGT(" Nozül: ") // Nozül: #if LCD_HEIGHT >= 4 @@ -252,8 +248,6 @@ #define MSG_FILAMENT_CHANGE_HEATING_2 _UxGT("Lütfen Bekleyin...") // Lütfen Bekleyin... #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Bekleniyor") // Bekleniyor #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("filamanın yüklenmesi") // filamanın yüklenmesi - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Bekleniyor") // Bekleniyor - #define MSG_FILAMENT_CHANGE_EXTRUDE_2 _UxGT("filaman akması") // filaman akması #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Baskının sürdürülmesini") // Baskının sürdürülmesini #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("bekle") // bekle #else // LCD_HEIGHT < 4 @@ -262,7 +256,6 @@ #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Çıkartılıyor...") // Çıkartılıyor... #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Yükle ve bas") // Yükle ve bas #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Yüklüyor...") // Yüklüyor... - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Akıtılıyor...") // Akıtılıyor... #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Sürdürülüyor...") // Sürdürülüyor... #endif // LCD_HEIGHT < 4 diff --git a/Marlin/language_uk.h b/Marlin/language_uk.h index e687e49b2..8b92709af 100644 --- a/Marlin/language_uk.h +++ b/Marlin/language_uk.h @@ -204,9 +204,6 @@ #define MSG_DAC_PERCENT _UxGT("% мотору") #define MSG_DAC_EEPROM_WRITE _UxGT("Запис ЦАП на ПЗП") -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") -#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("Екструдувати") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Відновити друк") #if LCD_HEIGHT >= 4 @@ -221,9 +218,6 @@ #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("продовження...") #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Зачекайте на") #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("ввід волокна") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Зачекайте на") - #define MSG_FILAMENT_CHANGE_EXTRUDE_2 _UxGT("екструзію") - #define MSG_FILAMENT_CHANGE_EXTRUDE_3 _UxGT("волокна") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Зачекайте на") #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("відновлення") #define MSG_FILAMENT_CHANGE_RESUME_3 _UxGT("друку") @@ -233,7 +227,6 @@ #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Вивід...") #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Вставте і нат.") #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Ввід...") - #define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("Екструзія...") #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Відновлення...") #endif // LCD_HEIGHT < 4 diff --git a/Marlin/language_zh_CN.h b/Marlin/language_zh_CN.h index af5454b13..30f4a75cd 100644 --- a/Marlin/language_zh_CN.h +++ b/Marlin/language_zh_CN.h @@ -201,9 +201,6 @@ #define MSG_INFO_MAX_TEMP _UxGT("最高温度") //"Max Temp" #define MSG_INFO_PSU _UxGT("电源供应") //"Power Supply" -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") -#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("挤出更多") //"Extrude more" #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("恢复打印") //"Resume print" #if LCD_HEIGHT >= 4 @@ -219,9 +216,6 @@ #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("等待") //"Wait for" #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("进料") //"filament load" #define MSG_FILAMENT_CHANGE_LOAD_3 _UxGT("") //"" -#define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("等待") //"Wait for" -#define MSG_FILAMENT_CHANGE_EXTRUDE_2 _UxGT("丝料挤出") //"filament extrude" -#define MSG_FILAMENT_CHANGE_EXTRUDE_3 _UxGT("") //"" #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("等待打印") //"Wait for print" #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("恢复") //"to resume" #define MSG_FILAMENT_CHANGE_RESUME_3 _UxGT("") //"" @@ -231,7 +225,6 @@ #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("退出中 ...") //"Ejecting..." #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("插入并单击") //"Insert and Click" #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("装载中 ...") //"Loading..." -#define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("挤出中 ...") //"Extruding..." #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("恢复中 ...") //"Resuming..." #endif // LCD_HEIGHT < 4 diff --git a/Marlin/language_zh_TW.h b/Marlin/language_zh_TW.h index 315f77f7f..39b0e9944 100644 --- a/Marlin/language_zh_TW.h +++ b/Marlin/language_zh_TW.h @@ -201,9 +201,6 @@ #define MSG_INFO_MAX_TEMP _UxGT("最高溫度") //"Max Temp" #define MSG_INFO_PSU _UxGT("電源供應") //"Power Supply" -#define MSG_FILAMENT_CHANGE_HEADER _UxGT("PRINT PAUSED") -#define MSG_FILAMENT_CHANGE_OPTION_HEADER _UxGT("RESUME OPTIONS:") -#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE _UxGT("擠出更多") //"Extrude more" #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("恢復列印") //"Resume print" #if LCD_HEIGHT >= 4 @@ -219,9 +216,6 @@ #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("等待") //"Wait for" #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("進料") //"filament load" #define MSG_FILAMENT_CHANGE_LOAD_3 _UxGT("") //"" -#define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("等待") //"Wait for" -#define MSG_FILAMENT_CHANGE_EXTRUDE_2 _UxGT("絲料擠出") //"filament extrude" -#define MSG_FILAMENT_CHANGE_EXTRUDE_3 _UxGT("") //"" #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("等待列印") //"Wait for print" #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("恢復") //"to resume" #define MSG_FILAMENT_CHANGE_RESUME_3 _UxGT("") //"" @@ -231,7 +225,6 @@ #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("退出中 ...") //"Ejecting..." #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("插入並點擊") //"Insert and Click" #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("載入中 ...") //"Loading..." -#define MSG_FILAMENT_CHANGE_EXTRUDE_1 _UxGT("擠出中 ...") //"Extruding..." #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("恢復中 ...") //"Resuming..." #endif // LCD_HEIGHT < 4 diff --git a/Marlin/nozzle.h b/Marlin/nozzle.h index d6cf96819..e564081e5 100644 --- a/Marlin/nozzle.h +++ b/Marlin/nozzle.h @@ -86,7 +86,7 @@ class Nozzle { #if ENABLED(NOZZLE_PARK_FEATURE) - static void park(const uint8_t &z_action, const point_t &park = NOZZLE_PARK_POINT) _Os; + static void park(const uint8_t &z_action, const point_t &park=NOZZLE_PARK_POINT) _Os; #endif }; diff --git a/Marlin/temperature.h b/Marlin/temperature.h index 95db0f6a1..da05b1ce2 100644 --- a/Marlin/temperature.h +++ b/Marlin/temperature.h @@ -178,14 +178,22 @@ class Temperature { #if ENABLED(PREVENT_COLD_EXTRUSION) static bool allow_cold_extrude; static int16_t extrude_min_temp; - static bool tooColdToExtrude(uint8_t e) { + FORCE_INLINE static bool tooCold(const int16_t temp) { return allow_cold_extrude ? false : temp < extrude_min_temp; } + FORCE_INLINE static bool tooColdToExtrude(const uint8_t e) { #if HOTENDS == 1 UNUSED(e); #endif - return allow_cold_extrude ? false : degHotend(HOTEND_INDEX) < extrude_min_temp; + return tooCold(degHotend(HOTEND_INDEX)); + } + FORCE_INLINE static bool targetTooColdToExtrude(const uint8_t e) { + #if HOTENDS == 1 + UNUSED(e); + #endif + return tooCold(degTargetHotend(HOTEND_INDEX)); } #else - static bool tooColdToExtrude(uint8_t e) { UNUSED(e); return false; } + FORCE_INLINE static bool tooColdToExtrude(const uint8_t e) { UNUSED(e); return false; } + FORCE_INLINE static bool targetTooColdToExtrude(const uint8_t e) { UNUSED(e); return false; } #endif private: @@ -313,19 +321,19 @@ class Temperature { * Preheating hotends */ #ifdef MILLISECONDS_PREHEAT_TIME - static bool is_preheating(uint8_t e) { + static bool is_preheating(const uint8_t e) { #if HOTENDS == 1 UNUSED(e); #endif return preheat_end_time[HOTEND_INDEX] && PENDING(millis(), preheat_end_time[HOTEND_INDEX]); } - static void start_preheat_time(uint8_t e) { + static void start_preheat_time(const uint8_t e) { #if HOTENDS == 1 UNUSED(e); #endif preheat_end_time[HOTEND_INDEX] = millis() + MILLISECONDS_PREHEAT_TIME; } - static void reset_preheat_time(uint8_t e) { + static void reset_preheat_time(const uint8_t e) { #if HOTENDS == 1 UNUSED(e); #endif @@ -345,32 +353,32 @@ class Temperature { //inline so that there is no performance decrease. //deg=degreeCelsius - static float degHotend(uint8_t e) { + FORCE_INLINE static float degHotend(const uint8_t e) { #if HOTENDS == 1 UNUSED(e); #endif return current_temperature[HOTEND_INDEX]; } - static float degBed() { return current_temperature_bed; } + FORCE_INLINE static float degBed() { return current_temperature_bed; } #if ENABLED(SHOW_TEMP_ADC_VALUES) - static int16_t rawHotendTemp(uint8_t e) { + FORCE_INLINE static int16_t rawHotendTemp(const uint8_t e) { #if HOTENDS == 1 UNUSED(e); #endif return current_temperature_raw[HOTEND_INDEX]; } - static int16_t rawBedTemp() { return current_temperature_bed_raw; } + FORCE_INLINE static int16_t rawBedTemp() { return current_temperature_bed_raw; } #endif - static int16_t degTargetHotend(uint8_t e) { + FORCE_INLINE static int16_t degTargetHotend(const uint8_t e) { #if HOTENDS == 1 UNUSED(e); #endif return target_temperature[HOTEND_INDEX]; } - static int16_t degTargetBed() { return target_temperature_bed; } + FORCE_INLINE static int16_t degTargetBed() { return target_temperature_bed; } #if WATCH_HOTENDS static void start_watching_heater(const uint8_t e = 0); @@ -411,21 +419,25 @@ class Temperature { #endif } - static bool isHeatingHotend(uint8_t e) { + FORCE_INLINE static bool isHeatingHotend(const uint8_t e) { #if HOTENDS == 1 UNUSED(e); #endif return target_temperature[HOTEND_INDEX] > current_temperature[HOTEND_INDEX]; } - static bool isHeatingBed() { return target_temperature_bed > current_temperature_bed; } + FORCE_INLINE static bool isHeatingBed() { return target_temperature_bed > current_temperature_bed; } - static bool isCoolingHotend(uint8_t e) { + FORCE_INLINE static bool isCoolingHotend(const uint8_t e) { #if HOTENDS == 1 UNUSED(e); #endif return target_temperature[HOTEND_INDEX] < current_temperature[HOTEND_INDEX]; } - static bool isCoolingBed() { return target_temperature_bed < current_temperature_bed; } + FORCE_INLINE static bool isCoolingBed() { return target_temperature_bed < current_temperature_bed; } + + FORCE_INLINE static bool wait_for_heating(const uint8_t e) { + return degTargetHotend(e) > TEMP_HYSTERESIS && abs(degHotend(e) - degTargetHotend(e)) > TEMP_HYSTERESIS; + } /** * The software PWM power for a heater @@ -492,7 +504,7 @@ class Temperature { #if ENABLED(PROBING_HEATERS_OFF) static void pause(const bool p); - static bool is_paused() { return paused; } + FORCE_INLINE static bool is_paused() { return paused; } #endif #if HEATER_IDLE_HANDLER @@ -504,7 +516,7 @@ class Temperature { heater_idle_timeout_exceeded[HOTEND_INDEX] = false; } - static void reset_heater_idle_timer(uint8_t e) { + static void reset_heater_idle_timer(const uint8_t e) { #if HOTENDS == 1 UNUSED(e); #endif @@ -515,7 +527,7 @@ class Temperature { #endif } - static bool is_heater_idle(uint8_t e) { + FORCE_INLINE static bool is_heater_idle(const uint8_t e) { #if HOTENDS == 1 UNUSED(e); #endif @@ -536,9 +548,7 @@ class Temperature { #endif } - static bool is_bed_idle() { - return bed_idle_timeout_exceeded; - } + FORCE_INLINE static bool is_bed_idle() { return bed_idle_timeout_exceeded; } #endif #endif diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp index da92734d0..d1c9d2ebc 100644 --- a/Marlin/ultralcd.cpp +++ b/Marlin/ultralcd.cpp @@ -176,7 +176,7 @@ uint16_t max_display_update_time = 0; void lcd_control_temperature_preheat_material2_settings_menu(); void lcd_control_motion_menu(); - #if DISABLED(NO_VOLUMETRICS) + #if DISABLED(NO_VOLUMETRICS) || ENABLED(ADVANCED_PAUSE_FEATURE) void lcd_control_filament_menu(); #endif @@ -195,14 +195,16 @@ uint16_t max_display_update_time = 0; #endif #if ENABLED(ADVANCED_PAUSE_FEATURE) - void lcd_advanced_pause_toocold_menu(); + #if E_STEPPERS > 1 || ENABLED(FILAMENT_LOAD_UNLOAD_GCODES) + void lcd_change_filament_menu(); + #endif void lcd_advanced_pause_option_menu(); void lcd_advanced_pause_init_message(); void lcd_advanced_pause_unload_message(); void lcd_advanced_pause_insert_message(); void lcd_advanced_pause_load_message(); void lcd_advanced_pause_heat_nozzle(); - void lcd_advanced_pause_extrude_message(); + void lcd_advanced_pause_purge_message(); void lcd_advanced_pause_resume_message(); #endif @@ -292,36 +294,40 @@ uint16_t max_display_update_time = 0; if (encoderLine == _thisItemNr && lcd_clicked) { \ lcd_clicked = false - #define _MENU_ITEM_PART_2(TYPE, LABEL, ...) \ + #define _MENU_ITEM_PART_2(TYPE, PLABEL, ...) \ menu_action_ ## TYPE(__VA_ARGS__); \ if (screen_changed) return; \ } \ if (lcdDrawUpdate) \ - lcd_implementation_drawmenu_ ## TYPE(encoderLine == _thisItemNr, _lcdLineNr, PSTR(LABEL), ## __VA_ARGS__); \ + lcd_implementation_drawmenu_ ## TYPE(encoderLine == _thisItemNr, _lcdLineNr, PLABEL, ## __VA_ARGS__); \ } \ ++_thisItemNr - #define MENU_ITEM(TYPE, LABEL, ...) do { \ + #define MENU_ITEM_P(TYPE, PLABEL, ...) do { \ _skipStatic = false; \ _MENU_ITEM_PART_1(TYPE, ## __VA_ARGS__); \ - _MENU_ITEM_PART_2(TYPE, LABEL, ## __VA_ARGS__); \ + _MENU_ITEM_PART_2(TYPE, PLABEL, ## __VA_ARGS__); \ }while(0) + #define MENU_ITEM(TYPE, LABEL, ...) MENU_ITEM_P(TYPE, PSTR(LABEL), ## __VA_ARGS__) + #define MENU_BACK(LABEL) MENU_ITEM(back, LABEL, 0) // Used to print static text with no visible cursor. // Parameters: label [, bool center [, bool invert [, char *value] ] ] - #define STATIC_ITEM(LABEL, ...) \ + #define STATIC_ITEM_P(LABEL, ...) \ if (_menuLineNr == _thisItemNr) { \ if (_skipStatic && encoderLine <= _thisItemNr) { \ encoderPosition += ENCODER_STEPS_PER_MENU_ITEM; \ ++encoderLine; \ } \ if (lcdDrawUpdate) \ - lcd_implementation_drawmenu_static(_lcdLineNr, PSTR(LABEL), ## __VA_ARGS__); \ + lcd_implementation_drawmenu_static(_lcdLineNr, LABEL, ## __VA_ARGS__); \ } \ ++_thisItemNr + #define STATIC_ITEM(LABEL, ...) STATIC_ITEM_P(PSTR(LABEL), ## __VA_ARGS__) + #if ENABLED(ENCODER_RATE_MULTIPLIER) bool encoderRateMultiplierEnabled; @@ -332,11 +338,11 @@ uint16_t max_display_update_time = 0; /** * MENU_MULTIPLIER_ITEM generates drawing and handling code for a multiplier menu item */ - #define MENU_MULTIPLIER_ITEM(type, label, ...) do { \ - _MENU_ITEM_PART_1(type, ## __VA_ARGS__); \ + #define MENU_MULTIPLIER_ITEM(TYPE, LABEL, ...) do { \ + _MENU_ITEM_PART_1(TYPE, ## __VA_ARGS__); \ encoderRateMultiplierEnabled = true; \ lastEncoderMovementMillis = 0; \ - _MENU_ITEM_PART_2(type, label, ## __VA_ARGS__); \ + _MENU_ITEM_PART_2(TYPE, PSTR(LABEL), ## __VA_ARGS__); \ }while(0) #else // !ENCODER_RATE_MULTIPLIER @@ -344,14 +350,14 @@ uint16_t max_display_update_time = 0; #endif // !ENCODER_RATE_MULTIPLIER #define MENU_ITEM_DUMMY() do { _thisItemNr++; }while(0) - #define MENU_ITEM_EDIT(type, label, ...) MENU_ITEM(setting_edit_ ## type, label, PSTR(label), ## __VA_ARGS__) - #define MENU_ITEM_EDIT_CALLBACK(type, label, ...) MENU_ITEM(setting_edit_callback_ ## type, label, PSTR(label), ## __VA_ARGS__) + #define MENU_ITEM_EDIT(TYPE, LABEL, ...) MENU_ITEM(setting_edit_ ## TYPE, LABEL, PSTR(LABEL), ## __VA_ARGS__) + #define MENU_ITEM_EDIT_CALLBACK(TYPE, LABEL, ...) MENU_ITEM(setting_edit_callback_ ## TYPE, LABEL, PSTR(LABEL), ## __VA_ARGS__) #if ENABLED(ENCODER_RATE_MULTIPLIER) - #define MENU_MULTIPLIER_ITEM_EDIT(type, label, ...) MENU_MULTIPLIER_ITEM(setting_edit_ ## type, label, PSTR(label), ## __VA_ARGS__) - #define MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(type, label, ...) MENU_MULTIPLIER_ITEM(setting_edit_callback_ ## type, label, PSTR(label), ## __VA_ARGS__) + #define MENU_MULTIPLIER_ITEM_EDIT(TYPE, LABEL, ...) MENU_MULTIPLIER_ITEM(setting_edit_ ## TYPE, LABEL, PSTR(LABEL), ## __VA_ARGS__) + #define MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(TYPE, LABEL, ...) MENU_MULTIPLIER_ITEM(setting_edit_callback_ ## TYPE, LABEL, PSTR(LABEL), ## __VA_ARGS__) #else // !ENCODER_RATE_MULTIPLIER - #define MENU_MULTIPLIER_ITEM_EDIT(type, label, ...) MENU_ITEM(setting_edit_ ## type, label, PSTR(label), ## __VA_ARGS__) - #define MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(type, label, ...) MENU_ITEM(setting_edit_callback_ ## type, label, PSTR(label), ## __VA_ARGS__) + #define MENU_MULTIPLIER_ITEM_EDIT(TYPE, LABEL, ...) MENU_ITEM(setting_edit_ ## TYPE, LABEL, PSTR(LABEL), ## __VA_ARGS__) + #define MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(TYPE, LABEL, ...) MENU_ITEM(setting_edit_callback_ ## TYPE, LABEL, PSTR(LABEL), ## __VA_ARGS__) #endif // !ENCODER_RATE_MULTIPLIER /** @@ -1239,61 +1245,6 @@ void kill_screen(const char* lcd_msg) { #endif } - #if ENABLED(ADVANCED_PAUSE_FEATURE) - - void lcd_enqueue_filament_change( - #if EXTRUDERS > 1 - const uint8_t extruder - #endif - ) { - - #if ENABLED(PREVENT_COLD_EXTRUSION) - if (!DEBUGGING(DRYRUN) && thermalManager.tooColdToExtrude(active_extruder)) { - lcd_save_previous_screen(); - lcd_goto_screen(lcd_advanced_pause_toocold_menu); - return; - } - #endif - - lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INIT); - - #if EXTRUDERS <= 1 - enqueue_and_echo_commands_P(PSTR("M600 B0")); - #else - char *command_M600; - switch (extruder) { - case 0: command_M600 = PSTR("M600 B0 T0"); break; - case 1: command_M600 = PSTR("M600 B0 T1"); break; - #if EXTRUDERS > 2 - case 2: command_M600 = PSTR("M600 B0 T2"); break; - #if EXTRUDERS > 3 - case 3: command_M600 = PSTR("M600 B0 T3"); break; - #if EXTRUDERS > 4 - case 4: command_M600 = PSTR("M600 B0 T4"); break; - #endif // EXTRUDERS > 4 - #endif // EXTRUDERS > 3 - #endif // EXTRUDERS > 2 - } - enqueue_and_echo_commands_P(command_M600); - #endif // EXTRUDERS > 1 - } - - #if EXTRUDERS > 1 - void lcd_enqueue_filament_change_e0() { lcd_enqueue_filament_change(0); } - void lcd_enqueue_filament_change_e1() { lcd_enqueue_filament_change(1); } - #if EXTRUDERS > 2 - void lcd_enqueue_filament_change_e2() { lcd_enqueue_filament_change(2); } - #if EXTRUDERS > 3 - void lcd_enqueue_filament_change_e3() { lcd_enqueue_filament_change(3); } - #if EXTRUDERS > 4 - void lcd_enqueue_filament_change_e4() { lcd_enqueue_filament_change(4); } - #endif // EXTRUDERS > 4 - #endif // EXTRUDERS > 3 - #endif // EXTRUDERS > 2 - #endif // EXTRUDERS > 1 - - #endif // ADVANCED_PAUSE_FEATURE - // First Fan Speed title in "Tune" and "Control>Temperature" menus #if FAN_COUNT > 0 && HAS_FAN0 #if FAN_COUNT > 1 @@ -1435,26 +1386,13 @@ void kill_screen(const char* lcd_msg) { // Change filament // #if ENABLED(ADVANCED_PAUSE_FEATURE) - #if EXTRUDERS > 1 - if (!thermalManager.tooColdToExtrude(0)) - MENU_ITEM(function, MSG_FILAMENTCHANGE " " MSG_E1, lcd_enqueue_filament_change_e0); - if (!thermalManager.tooColdToExtrude(1)) - MENU_ITEM(function, MSG_FILAMENTCHANGE " " MSG_E2, lcd_enqueue_filament_change_e1); - #if EXTRUDERS > 2 - if (!thermalManager.tooColdToExtrude(2)) - MENU_ITEM(function, MSG_FILAMENTCHANGE " " MSG_E3, lcd_enqueue_filament_change_e2); - #if EXTRUDERS > 3 - if (!thermalManager.tooColdToExtrude(3)) - MENU_ITEM(function, MSG_FILAMENTCHANGE " " MSG_E4, lcd_enqueue_filament_change_e3); - #if EXTRUDERS > 4 - if (!thermalManager.tooColdToExtrude(4)) - MENU_ITEM(function, MSG_FILAMENTCHANGE " " MSG_E5, lcd_enqueue_filament_change_e4); - #endif // EXTRUDERS > 4 - #endif // EXTRUDERS > 3 - #endif // EXTRUDERS > 2 + #if E_STEPPERS == 1 && !ENABLED(FILAMENT_LOAD_UNLOAD_GCODES) + if (!thermalManager.targetTooColdToExtrude(active_extruder)) + MENU_ITEM(gcode, MSG_FILAMENTCHANGE, PSTR("M600 B0")); + else + MENU_ITEM(submenu, MSG_FILAMENTCHANGE, lcd_temp_menu_e0_filament_change); #else - if (!thermalManager.tooColdToExtrude(active_extruder)) - MENU_ITEM(function, MSG_FILAMENTCHANGE, lcd_enqueue_filament_change); + MENU_ITEM(submenu, MSG_FILAMENTCHANGE, lcd_change_filament_menu); #endif #endif @@ -2635,7 +2573,6 @@ void kill_screen(const char* lcd_msg) { // Set Home Offsets // MENU_ITEM(function, MSG_SET_HOME_OFFSETS, lcd_set_home_offsets); - //MENU_ITEM(gcode, MSG_SET_ORIGIN, PSTR("G92 X0 Y0 Z0")); #endif // @@ -2648,26 +2585,13 @@ void kill_screen(const char* lcd_msg) { // #if ENABLED(ADVANCED_PAUSE_FEATURE) if (!IS_SD_FILE_OPEN) { - #if EXTRUDERS > 1 - if (!thermalManager.tooColdToExtrude(0)) - MENU_ITEM(function, MSG_FILAMENTCHANGE " " MSG_E1, lcd_enqueue_filament_change_e0); - if (!thermalManager.tooColdToExtrude(1)) - MENU_ITEM(function, MSG_FILAMENTCHANGE " " MSG_E2, lcd_enqueue_filament_change_e1); - #if EXTRUDERS > 2 - if (!thermalManager.tooColdToExtrude(2)) - MENU_ITEM(function, MSG_FILAMENTCHANGE " " MSG_E3, lcd_enqueue_filament_change_e2); - #if EXTRUDERS > 3 - if (!thermalManager.tooColdToExtrude(3)) - MENU_ITEM(function, MSG_FILAMENTCHANGE " " MSG_E4, lcd_enqueue_filament_change_e3); - #if EXTRUDERS > 4 - if (!thermalManager.tooColdToExtrude(4)) - MENU_ITEM(function, MSG_FILAMENTCHANGE " " MSG_E5, lcd_enqueue_filament_change_e4); - #endif // EXTRUDERS > 4 - #endif // EXTRUDERS > 3 - #endif // EXTRUDERS > 2 + #if E_STEPPERS == 1 && !ENABLED(FILAMENT_LOAD_UNLOAD_GCODES) + if (!thermalManager.targetTooColdToExtrude(active_extruder)) + MENU_ITEM(gcode, MSG_FILAMENTCHANGE, PSTR("M600 B0")); + else + MENU_ITEM(submenu, MSG_FILAMENTCHANGE, lcd_temp_menu_e0_filament_change); #else - if (!thermalManager.tooColdToExtrude(active_extruder)) - MENU_ITEM(function, MSG_FILAMENTCHANGE, lcd_enqueue_filament_change); + MENU_ITEM(submenu, MSG_FILAMENTCHANGE, lcd_change_filament_menu); #endif } #endif // ADVANCED_PAUSE_FEATURE @@ -3217,12 +3141,12 @@ void kill_screen(const char* lcd_msg) { MENU_ITEM(submenu, MSG_TEMPERATURE, lcd_control_temperature_menu); MENU_ITEM(submenu, MSG_MOTION, lcd_control_motion_menu); - #if DISABLED(NO_VOLUMETRICS) + #if DISABLED(NO_VOLUMETRICS) || ENABLED(ADVANCED_PAUSE_FEATURE) MENU_ITEM(submenu, MSG_FILAMENT, lcd_control_filament_menu); #elif ENABLED(LIN_ADVANCE) MENU_ITEM_EDIT(float3, MSG_ADVANCE_K, &planner.extruder_advance_k, 0, 999); #endif - + #if HAS_LCD_CONTRAST MENU_ITEM_EDIT_CALLBACK(int3, MSG_CONTRAST, &lcd_contrast, LCD_CONTRAST_MIN, LCD_CONTRAST_MAX, lcd_callback_set_contrast, true); #endif @@ -3710,7 +3634,7 @@ void kill_screen(const char* lcd_msg) { END_MENU(); } - #if DISABLED(NO_VOLUMETRICS) + #if DISABLED(NO_VOLUMETRICS) || ENABLED(ADVANCED_PAUSE_FEATURE) /** * * "Control" > "Filament" submenu @@ -3724,30 +3648,76 @@ void kill_screen(const char* lcd_msg) { MENU_ITEM_EDIT(float3, MSG_ADVANCE_K, &planner.extruder_advance_k, 0, 999); #endif - MENU_ITEM_EDIT_CALLBACK(bool, MSG_VOLUMETRIC_ENABLED, &parser.volumetric_enabled, planner.calculate_volumetric_multipliers); + #if DISABLED(NO_VOLUMETRICS) + MENU_ITEM_EDIT_CALLBACK(bool, MSG_VOLUMETRIC_ENABLED, &parser.volumetric_enabled, planner.calculate_volumetric_multipliers); + + if (parser.volumetric_enabled) { + #if EXTRUDERS == 1 + MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM, &planner.filament_size[0], 1.5, 3.25, planner.calculate_volumetric_multipliers); + #else // EXTRUDERS > 1 + MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM, &planner.filament_size[active_extruder], 1.5, 3.25, planner.calculate_volumetric_multipliers); + MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM MSG_DIAM_E1, &planner.filament_size[0], 1.5, 3.25, planner.calculate_volumetric_multipliers); + MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM MSG_DIAM_E2, &planner.filament_size[1], 1.5, 3.25, planner.calculate_volumetric_multipliers); + #if EXTRUDERS > 2 + MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM MSG_DIAM_E3, &planner.filament_size[2], 1.5, 3.25, planner.calculate_volumetric_multipliers); + #if EXTRUDERS > 3 + MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM MSG_DIAM_E4, &planner.filament_size[3], 1.5, 3.25, planner.calculate_volumetric_multipliers); + #if EXTRUDERS > 4 + MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM MSG_DIAM_E5, &planner.filament_size[4], 1.5, 3.25, planner.calculate_volumetric_multipliers); + #endif // EXTRUDERS > 4 + #endif // EXTRUDERS > 3 + #endif // EXTRUDERS > 2 + #endif // EXTRUDERS > 1 + } + #endif + + #if ENABLED(ADVANCED_PAUSE_FEATURE) + const float extrude_maxlength = + #if ENABLED(PREVENT_LENGTHY_EXTRUDE) + EXTRUDE_MAXLENGTH + #else + 999.0f + #endif + ; - if (parser.volumetric_enabled) { #if EXTRUDERS == 1 - MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM, &planner.filament_size[0], 1.5, 3.25, planner.calculate_volumetric_multipliers); + MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_UNLOAD, &filament_change_unload_length[0], 0.0, extrude_maxlength); #else // EXTRUDERS > 1 - MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM, &planner.filament_size[active_extruder], 1.5, 3.25, planner.calculate_volumetric_multipliers); - MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM MSG_DIAM_E1, &planner.filament_size[0], 1.5, 3.25, planner.calculate_volumetric_multipliers); - MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM MSG_DIAM_E2, &planner.filament_size[1], 1.5, 3.25, planner.calculate_volumetric_multipliers); + MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_UNLOAD, &filament_change_unload_length[active_extruder], 0.0, extrude_maxlength); + MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_UNLOAD MSG_DIAM_E1, &filament_change_unload_length[0], 0.0, extrude_maxlength); + MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_UNLOAD MSG_DIAM_E2, &filament_change_unload_length[1], 0.0, extrude_maxlength); #if EXTRUDERS > 2 - MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM MSG_DIAM_E3, &planner.filament_size[2], 1.5, 3.25, planner.calculate_volumetric_multipliers); - #if EXTRUDERS > 3 - MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM MSG_DIAM_E4, &planner.filament_size[3], 1.5, 3.25, planner.calculate_volumetric_multipliers); - #if EXTRUDERS > 4 - MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float43, MSG_FILAMENT_DIAM MSG_DIAM_E5, &planner.filament_size[4], 1.5, 3.25, planner.calculate_volumetric_multipliers); + MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_UNLOAD MSG_DIAM_E3, &filament_change_unload_length[2], 0.0, extrude_maxlength); + #if EXTRUDERS > 3 + MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_UNLOAD MSG_DIAM_E4, &filament_change_unload_length[3], 0.0, extrude_maxlength); + #if EXTRUDERS > 4 + MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_UNLOAD MSG_DIAM_E5, &filament_change_unload_length[4], 0.0, extrude_maxlength); #endif // EXTRUDERS > 4 #endif // EXTRUDERS > 3 #endif // EXTRUDERS > 2 #endif // EXTRUDERS > 1 - } + + #if EXTRUDERS == 1 + MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_LOAD, &filament_change_load_length[0], 0.0, extrude_maxlength); + #else // EXTRUDERS > 1 + MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_LOAD, &filament_change_load_length[active_extruder], 0.0, extrude_maxlength); + MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_LOAD MSG_DIAM_E1, &filament_change_load_length[0], 0.0, extrude_maxlength); + MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_LOAD MSG_DIAM_E2, &filament_change_load_length[1], 0.0, extrude_maxlength); + #if EXTRUDERS > 2 + MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_LOAD MSG_DIAM_E3, &filament_change_load_length[2], 0.0, extrude_maxlength); + #if EXTRUDERS > 3 + MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_LOAD MSG_DIAM_E4, &filament_change_load_length[3], 0.0, extrude_maxlength); + #if EXTRUDERS > 4 + MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_FILAMENT_LOAD MSG_DIAM_E5, &filament_change_load_length[4], 0.0, extrude_maxlength); + #endif // EXTRUDERS > 4 + #endif // EXTRUDERS > 3 + #endif // EXTRUDERS > 2 + #endif // EXTRUDERS > 1 + #endif END_MENU(); } - #endif // !NO_VOLUMETRICS + #endif // !NO_VOLUMETRICS || ADVANCED_PAUSE_FEATURE /** * @@ -4104,12 +4074,258 @@ void kill_screen(const char* lcd_msg) { */ #if ENABLED(ADVANCED_PAUSE_FEATURE) + /** + * + * "Change Filament" > "Change/Unload/Load Filament" submenu + * + */ + static AdvancedPauseMode _change_filament_temp_mode; + static int8_t _change_filament_temp_extruder; + + static const char* _change_filament_temp_command() { + switch (_change_filament_temp_mode) { + case ADVANCED_PAUSE_MODE_LOAD_FILAMENT: + return PSTR("M701 T%d"); + case ADVANCED_PAUSE_MODE_UNLOAD_FILAMENT: + return _change_filament_temp_extruder >= 0 ? PSTR("M702 T%d") : PSTR("M702 ;%d"); + case ADVANCED_PAUSE_MODE_PAUSE_PRINT: + default: + return PSTR("M600 B0 T%d"); + } + return PSTR(MSG_FILAMENTCHANGE); + } + + void _change_filament_temp(const uint8_t index) { + char cmd[11]; + sprintf_P(cmd, _change_filament_temp_command(), _change_filament_temp_extruder); + thermalManager.setTargetHotend(index == 1 ? PREHEAT_1_TEMP_HOTEND : PREHEAT_2_TEMP_HOTEND, _change_filament_temp_extruder); + lcd_enqueue_command_sram(cmd); + } + void _lcd_change_filament_temp_1_menu() { _change_filament_temp(1); } + void _lcd_change_filament_temp_2_menu() { _change_filament_temp(2); } + + static const char* change_filament_header(const AdvancedPauseMode mode) { + switch (mode) { + case ADVANCED_PAUSE_MODE_LOAD_FILAMENT: + return PSTR(MSG_FILAMENTLOAD); + case ADVANCED_PAUSE_MODE_UNLOAD_FILAMENT: + return PSTR(MSG_FILAMENTUNLOAD); + default: break; + } + return PSTR(MSG_FILAMENTCHANGE); + } + + void _lcd_temp_menu_filament_op(const AdvancedPauseMode mode, const int8_t extruder) { + _change_filament_temp_mode = mode; + _change_filament_temp_extruder = extruder; + START_MENU(); + if (LCD_HEIGHT >= 4) STATIC_ITEM_P(change_filament_header(mode), true, true); + MENU_BACK(MSG_FILAMENTCHANGE); + MENU_ITEM(submenu, MSG_PREHEAT_1, _lcd_change_filament_temp_1_menu); + MENU_ITEM(submenu, MSG_PREHEAT_2, _lcd_change_filament_temp_2_menu); + END_MENU(); + } + void lcd_temp_menu_e0_filament_change() { _lcd_temp_menu_filament_op(ADVANCED_PAUSE_MODE_PAUSE_PRINT, 0); } + void lcd_temp_menu_e0_filament_load() { _lcd_temp_menu_filament_op(ADVANCED_PAUSE_MODE_LOAD_FILAMENT, 0); } + void lcd_temp_menu_e0_filament_unload() { _lcd_temp_menu_filament_op(ADVANCED_PAUSE_MODE_UNLOAD_FILAMENT, 0); } + #if E_STEPPERS > 1 + void lcd_temp_menu_e1_filament_change() { _lcd_temp_menu_filament_op(ADVANCED_PAUSE_MODE_PAUSE_PRINT, 1); } + void lcd_temp_menu_e1_filament_load() { _lcd_temp_menu_filament_op(ADVANCED_PAUSE_MODE_LOAD_FILAMENT, 1); } + void lcd_temp_menu_e1_filament_unload() { _lcd_temp_menu_filament_op(ADVANCED_PAUSE_MODE_UNLOAD_FILAMENT, 1); } + #if ENABLED(FILAMENT_UNLOAD_ALL_EXTRUDERS) + void lcd_unload_filament_all_temp_menu() { _lcd_temp_menu_filament_op(ADVANCED_PAUSE_MODE_UNLOAD_FILAMENT, -1); } + #endif + #if E_STEPPERS > 2 + void lcd_temp_menu_e2_filament_change() { _lcd_temp_menu_filament_op(ADVANCED_PAUSE_MODE_PAUSE_PRINT, 2); } + void lcd_temp_menu_e2_filament_load() { _lcd_temp_menu_filament_op(ADVANCED_PAUSE_MODE_LOAD_FILAMENT, 2); } + void lcd_temp_menu_e2_filament_unload() { _lcd_temp_menu_filament_op(ADVANCED_PAUSE_MODE_UNLOAD_FILAMENT, 2); } + #if E_STEPPERS > 3 + void lcd_temp_menu_e3_filament_change() { _lcd_temp_menu_filament_op(ADVANCED_PAUSE_MODE_PAUSE_PRINT, 3); } + void lcd_temp_menu_e3_filament_load() { _lcd_temp_menu_filament_op(ADVANCED_PAUSE_MODE_LOAD_FILAMENT, 3); } + void lcd_temp_menu_e3_filament_unload() { _lcd_temp_menu_filament_op(ADVANCED_PAUSE_MODE_UNLOAD_FILAMENT, 3); } + #if E_STEPPERS > 4 + void lcd_temp_menu_e4_filament_change() { _lcd_temp_menu_filament_op(ADVANCED_PAUSE_MODE_PAUSE_PRINT, 4); } + void lcd_temp_menu_e4_filament_load() { _lcd_temp_menu_filament_op(ADVANCED_PAUSE_MODE_LOAD_FILAMENT, 4); } + void lcd_temp_menu_e4_filament_unload() { _lcd_temp_menu_filament_op(ADVANCED_PAUSE_MODE_UNLOAD_FILAMENT, 4); } + #endif // E_STEPPERS > 4 + #endif // E_STEPPERS > 3 + #endif // E_STEPPERS > 2 + #endif // E_STEPPERS > 1 + + /** + * + * "Change Filament" submenu + * + */ + #if E_STEPPERS > 1 || ENABLED(FILAMENT_LOAD_UNLOAD_GCODES) + void lcd_change_filament_menu() { + START_MENU(); + MENU_BACK(MSG_PREPARE); + + // Change filament + #if E_STEPPERS == 1 + PGM_P msg0 = PSTR(MSG_FILAMENTCHANGE); + if (thermalManager.targetTooColdToExtrude(active_extruder)) + MENU_ITEM_P(submenu, msg0, lcd_temp_menu_e0_filament_change); + else + MENU_ITEM_P(gcode, msg0, PSTR("M600 B0")); + #else + PGM_P msg0 = PSTR(MSG_FILAMENTCHANGE " " MSG_E1); + PGM_P msg1 = PSTR(MSG_FILAMENTCHANGE " " MSG_E2); + if (thermalManager.targetTooColdToExtrude(0)) + MENU_ITEM_P(submenu, msg0, lcd_temp_menu_e0_filament_change); + else + MENU_ITEM_P(gcode, msg0, PSTR("M600 B0 T0")); + if (thermalManager.targetTooColdToExtrude(1)) + MENU_ITEM_P(submenu, msg1, lcd_temp_menu_e1_filament_change); + else + MENU_ITEM_P(gcode, msg1, PSTR("M600 B0 T1")); + #if E_STEPPERS > 2 + PGM_P msg2 = PSTR(MSG_FILAMENTCHANGE " " MSG_E3); + if (thermalManager.targetTooColdToExtrude(2)) + MENU_ITEM_P(submenu, msg2, lcd_temp_menu_e2_filament_change); + else + MENU_ITEM_P(gcode, msg2, PSTR("M600 B0 T2")); + #if E_STEPPERS > 3 + PGM_P msg3 = PSTR(MSG_FILAMENTCHANGE " " MSG_E4); + if (thermalManager.targetTooColdToExtrude(3)) + MENU_ITEM_P(submenu, msg3, lcd_temp_menu_e3_filament_change); + else + MENU_ITEM_P(gcode, msg3, PSTR("M600 B0 T3")); + #if E_STEPPERS > 4 + PGM_P msg4 = PSTR(MSG_FILAMENTCHANGE " " MSG_E5); + if (thermalManager.targetTooColdToExtrude(4)) + MENU_ITEM_P(submenu, msg4, lcd_temp_menu_e4_filament_change); + else + MENU_ITEM_P(gcode, msg4, PSTR("M600 B0 T4")); + #endif // E_STEPPERS > 4 + #endif // E_STEPPERS > 3 + #endif // E_STEPPERS > 2 + #endif // E_STEPPERS == 1 + + #if ENABLED(FILAMENT_LOAD_UNLOAD_GCODES) + if (!planner.movesplanned() && !IS_SD_FILE_OPEN) { + // Load filament + #if E_STEPPERS == 1 + PGM_P msg0 = PSTR(MSG_FILAMENTLOAD); + if (thermalManager.targetTooColdToExtrude(active_extruder)) + MENU_ITEM_P(submenu, msg0, lcd_temp_menu_e0_filament_load); + else + MENU_ITEM_P(gcode, msg0, PSTR("M701")); + #else + PGM_P msg0 = PSTR(MSG_FILAMENTLOAD " " MSG_E1); + PGM_P msg1 = PSTR(MSG_FILAMENTLOAD " " MSG_E2); + if (thermalManager.targetTooColdToExtrude(0)) + MENU_ITEM_P(submenu, msg0, lcd_temp_menu_e0_filament_load); + else + MENU_ITEM_P(gcode, msg0, PSTR("M701 T0")); + if (thermalManager.targetTooColdToExtrude(1)) + MENU_ITEM_P(submenu, msg1, lcd_temp_menu_e1_filament_load); + else + MENU_ITEM_P(gcode, msg1, PSTR("M701 T1")); + #if E_STEPPERS > 2 + PGM_P msg2 = PSTR(MSG_FILAMENTLOAD " " MSG_E3); + if (thermalManager.targetTooColdToExtrude(2)) + MENU_ITEM_P(submenu, msg2, lcd_temp_menu_e2_filament_load); + else + MENU_ITEM_P(gcode, msg2, PSTR("M701 T2")); + #if E_STEPPERS > 3 + PGM_P msg3 = PSTR(MSG_FILAMENTLOAD " " MSG_E4); + if (thermalManager.targetTooColdToExtrude(3)) + MENU_ITEM_P(submenu, msg3, lcd_temp_menu_e3_filament_load); + else + MENU_ITEM_P(gcode, msg3, PSTR("M701 T3")); + #if E_STEPPERS > 4 + PGM_P msg4 = PSTR(MSG_FILAMENTLOAD " " MSG_E5); + if (thermalManager.targetTooColdToExtrude(4)) + MENU_ITEM_P(submenu, msg4, lcd_temp_menu_e4_filament_load); + else + MENU_ITEM_P(gcode, msg4, PSTR("M701 T4")); + #endif // E_STEPPERS > 4 + #endif // E_STEPPERS > 3 + #endif // E_STEPPERS > 2 + #endif // E_STEPPERS == 1 + + // Unload filament + #if E_STEPPERS == 1 + if (!thermalManager.targetTooColdToExtrude(active_extruder)) + MENU_ITEM(gcode, MSG_FILAMENTUNLOAD, PSTR("M702")); + else + MENU_ITEM(submenu, MSG_FILAMENTUNLOAD, lcd_temp_menu_e0_filament_unload); + #else + #if ENABLED(FILAMENT_UNLOAD_ALL_EXTRUDERS) + if (!thermalManager.targetTooColdToExtrude(0) + #if E_STEPPERS > 1 + && !thermalManager.targetTooColdToExtrude(1) + #if E_STEPPERS > 2 + && !thermalManager.targetTooColdToExtrude(2) + #if E_STEPPERS > 3 + && !thermalManager.targetTooColdToExtrude(3) + #if E_STEPPERS > 4 + && !thermalManager.targetTooColdToExtrude(4) + #endif // E_STEPPERS > 4 + #endif // E_STEPPERS > 3 + #endif // E_STEPPERS > 2 + #endif // E_STEPPERS > 1 + ) + MENU_ITEM(gcode, MSG_FILAMENTUNLOAD_ALL, PSTR("M702")); + else + MENU_ITEM(submenu, MSG_FILAMENTUNLOAD_ALL, lcd_unload_filament_all_temp_menu); + #endif + if (!thermalManager.targetTooColdToExtrude(0)) + MENU_ITEM(gcode, MSG_FILAMENTUNLOAD " " MSG_E1, PSTR("M702 T0")); + else + MENU_ITEM(submenu, MSG_FILAMENTUNLOAD " " MSG_E1, lcd_temp_menu_e0_filament_unload); + if (!thermalManager.targetTooColdToExtrude(1)) + MENU_ITEM(gcode, MSG_FILAMENTUNLOAD " " MSG_E2, PSTR("M702 T1")); + else + MENU_ITEM(submenu, MSG_FILAMENTUNLOAD " " MSG_E2, lcd_temp_menu_e1_filament_unload); + #if E_STEPPERS > 2 + if (!thermalManager.targetTooColdToExtrude(2)) + MENU_ITEM(gcode, MSG_FILAMENTUNLOAD " " MSG_E3, PSTR("M702 T2")); + else + MENU_ITEM(submenu, MSG_FILAMENTUNLOAD " " MSG_E3, lcd_temp_menu_e2_filament_unload); + #if E_STEPPERS > 3 + if (!thermalManager.targetTooColdToExtrude(3)) + MENU_ITEM(gcode, MSG_FILAMENTUNLOAD " " MSG_E4, PSTR("M702 T3")); + else + MENU_ITEM(submenu, MSG_FILAMENTUNLOAD " " MSG_E4, lcd_temp_menu_e3_filament_unload); + #if E_STEPPERS > 4 + if (!thermalManager.targetTooColdToExtrude(4)) + MENU_ITEM(gcode, MSG_FILAMENTUNLOAD " " MSG_E5, PSTR("M702 T4")); + else + MENU_ITEM(submenu, MSG_FILAMENTUNLOAD " " MSG_E5, lcd_temp_menu_e4_filament_unload); + #endif // E_STEPPERS > 4 + #endif // E_STEPPERS > 3 + #endif // E_STEPPERS > 2 + #endif // E_STEPPERS == 1 + } + #endif + + END_MENU(); + } + #endif + + static AdvancedPauseMode advanced_pause_mode = ADVANCED_PAUSE_MODE_PAUSE_PRINT; + static uint8_t hotend_status_extruder = 0; + + static const char* advanced_pause_header() { + switch (advanced_pause_mode) { + case ADVANCED_PAUSE_MODE_LOAD_FILAMENT: + return PSTR(MSG_FILAMENT_CHANGE_HEADER_LOAD); + case ADVANCED_PAUSE_MODE_UNLOAD_FILAMENT: + return PSTR(MSG_FILAMENT_CHANGE_HEADER_UNLOAD); + default: break; + } + return PSTR(MSG_FILAMENT_CHANGE_HEADER_PAUSE); + } + // Portions from STATIC_ITEM... #define HOTEND_STATUS_ITEM() do { \ if (_menuLineNr == _thisItemNr) { \ if (lcdDrawUpdate) { \ lcd_implementation_drawmenu_static(_lcdLineNr, PSTR(MSG_FILAMENT_CHANGE_NOZZLE), false, true); \ - lcd_implementation_hotend_status(_lcdLineNr); \ + lcd_implementation_hotend_status(_lcdLineNr, hotend_status_extruder); \ } \ if (_skipStatic && encoderLine <= _thisItemNr) { \ encoderPosition += ENCODER_STEPS_PER_MENU_ITEM; \ @@ -4120,18 +4336,6 @@ void kill_screen(const char* lcd_msg) { ++_thisItemNr; \ }while(0) - void lcd_advanced_pause_toocold_menu() { - START_MENU(); - STATIC_ITEM(MSG_HEATING_FAILED_LCD, true, true); - STATIC_ITEM(MSG_FILAMENT_CHANGE_MINTEMP STRINGIFY(EXTRUDE_MINTEMP) ".", false, false); - MENU_BACK(MSG_BACK); - #if LCD_HEIGHT > 4 - STATIC_ITEM(" "); - #endif - HOTEND_STATUS_ITEM(); - END_MENU(); - } - void lcd_advanced_pause_resume_print() { advanced_pause_menu_response = ADVANCED_PAUSE_RESPONSE_RESUME_PRINT; } @@ -4146,13 +4350,13 @@ void kill_screen(const char* lcd_msg) { STATIC_ITEM(MSG_FILAMENT_CHANGE_OPTION_HEADER, true, false); #endif MENU_ITEM(function, MSG_FILAMENT_CHANGE_OPTION_RESUME, lcd_advanced_pause_resume_print); - MENU_ITEM(function, MSG_FILAMENT_CHANGE_OPTION_EXTRUDE, lcd_advanced_pause_extrude_more); + MENU_ITEM(function, MSG_FILAMENT_CHANGE_OPTION_PURGE, lcd_advanced_pause_extrude_more); END_MENU(); } void lcd_advanced_pause_init_message() { START_SCREEN(); - STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true); + STATIC_ITEM_P(advanced_pause_header(), true, true); STATIC_ITEM(MSG_FILAMENT_CHANGE_INIT_1); #ifdef MSG_FILAMENT_CHANGE_INIT_2 STATIC_ITEM(MSG_FILAMENT_CHANGE_INIT_2); @@ -4175,7 +4379,7 @@ void kill_screen(const char* lcd_msg) { void lcd_advanced_pause_unload_message() { START_SCREEN(); - STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true); + STATIC_ITEM_P(advanced_pause_header(), true, true); STATIC_ITEM(MSG_FILAMENT_CHANGE_UNLOAD_1); #ifdef MSG_FILAMENT_CHANGE_UNLOAD_2 STATIC_ITEM(MSG_FILAMENT_CHANGE_UNLOAD_2); @@ -4198,7 +4402,7 @@ void kill_screen(const char* lcd_msg) { void lcd_advanced_pause_wait_for_nozzles_to_heat() { START_SCREEN(); - STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true); + STATIC_ITEM_P(advanced_pause_header(), true, true); STATIC_ITEM(MSG_FILAMENT_CHANGE_HEATING_1); #ifdef MSG_FILAMENT_CHANGE_HEATING_2 STATIC_ITEM(MSG_FILAMENT_CHANGE_HEATING_2); @@ -4215,7 +4419,7 @@ void kill_screen(const char* lcd_msg) { void lcd_advanced_pause_heat_nozzle() { START_SCREEN(); - STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true); + STATIC_ITEM_P(advanced_pause_header(), true, true); STATIC_ITEM(MSG_FILAMENT_CHANGE_HEAT_1); #ifdef MSG_FILAMENT_CHANGE_INSERT_2 STATIC_ITEM(MSG_FILAMENT_CHANGE_HEAT_2); @@ -4232,7 +4436,7 @@ void kill_screen(const char* lcd_msg) { void lcd_advanced_pause_insert_message() { START_SCREEN(); - STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true); + STATIC_ITEM_P(advanced_pause_header(), true, true); STATIC_ITEM(MSG_FILAMENT_CHANGE_INSERT_1); #ifdef MSG_FILAMENT_CHANGE_INSERT_2 STATIC_ITEM(MSG_FILAMENT_CHANGE_INSERT_2); @@ -4255,7 +4459,7 @@ void kill_screen(const char* lcd_msg) { void lcd_advanced_pause_load_message() { START_SCREEN(); - STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true); + STATIC_ITEM_P(advanced_pause_header(), true, true); STATIC_ITEM(MSG_FILAMENT_CHANGE_LOAD_1); #ifdef MSG_FILAMENT_CHANGE_LOAD_2 STATIC_ITEM(MSG_FILAMENT_CHANGE_LOAD_2); @@ -4276,18 +4480,18 @@ void kill_screen(const char* lcd_msg) { END_SCREEN(); } - void lcd_advanced_pause_extrude_message() { + void lcd_advanced_pause_purge_message() { START_SCREEN(); - STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true); - STATIC_ITEM(MSG_FILAMENT_CHANGE_EXTRUDE_1); - #ifdef MSG_FILAMENT_CHANGE_EXTRUDE_2 - STATIC_ITEM(MSG_FILAMENT_CHANGE_EXTRUDE_2); + STATIC_ITEM_P(advanced_pause_header(), true, true); + STATIC_ITEM(MSG_FILAMENT_CHANGE_PURGE_1); + #ifdef MSG_FILAMENT_CHANGE_PURGE_2 + STATIC_ITEM(MSG_FILAMENT_CHANGE_PURGE_2); #define __FC_LINES_G 3 #else #define __FC_LINES_G 2 #endif - #ifdef MSG_FILAMENT_CHANGE_EXTRUDE_3 - STATIC_ITEM(MSG_FILAMENT_CHANGE_EXTRUDE_3); + #ifdef MSG_FILAMENT_CHANGE_PURGE_3 + STATIC_ITEM(MSG_FILAMENT_CHANGE_PURGE_3); #define _FC_LINES_G (__FC_LINES_G + 1) #else #define _FC_LINES_G __FC_LINES_G @@ -4301,7 +4505,7 @@ void kill_screen(const char* lcd_msg) { void lcd_advanced_pause_resume_message() { START_SCREEN(); - STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true); + STATIC_ITEM_P(advanced_pause_header(), true, true); STATIC_ITEM(MSG_FILAMENT_CHANGE_RESUME_1); #ifdef MSG_FILAMENT_CHANGE_RESUME_2 STATIC_ITEM(MSG_FILAMENT_CHANGE_RESUME_2); @@ -4312,7 +4516,13 @@ void kill_screen(const char* lcd_msg) { END_SCREEN(); } - void lcd_advanced_pause_show_message(const AdvancedPauseMessage message) { + void lcd_advanced_pause_show_message( + const AdvancedPauseMessage message, + const AdvancedPauseMode mode/*=ADVANCED_PAUSE_MODE_PAUSE_PRINT*/, + const uint8_t extruder/*=active_extruder*/ + ) { + advanced_pause_mode = mode; + hotend_status_extruder = extruder; switch (message) { case ADVANCED_PAUSE_MESSAGE_INIT: defer_return_to_status = true; @@ -4330,9 +4540,9 @@ void kill_screen(const char* lcd_msg) { defer_return_to_status = true; lcd_goto_screen(lcd_advanced_pause_load_message); break; - case ADVANCED_PAUSE_MESSAGE_EXTRUDE: + case ADVANCED_PAUSE_MESSAGE_PURGE: defer_return_to_status = true; - lcd_goto_screen(lcd_advanced_pause_extrude_message); + lcd_goto_screen(lcd_advanced_pause_purge_message); break; case ADVANCED_PAUSE_MESSAGE_CLICK_TO_HEAT_NOZZLE: defer_return_to_status = true; diff --git a/Marlin/ultralcd.h b/Marlin/ultralcd.h index ab2ce15a3..523db3fad 100644 --- a/Marlin/ultralcd.h +++ b/Marlin/ultralcd.h @@ -99,7 +99,9 @@ void lcd_completion_feedback(const bool good=true); #if ENABLED(ADVANCED_PAUSE_FEATURE) - void lcd_advanced_pause_show_message(const AdvancedPauseMessage message); + void lcd_advanced_pause_show_message(const AdvancedPauseMessage message, + const AdvancedPauseMode mode=ADVANCED_PAUSE_MODE_PAUSE_PRINT, + const uint8_t extruder=active_extruder); #endif // ADVANCED_PAUSE_FEATURE #else diff --git a/Marlin/ultralcd_impl_DOGM.h b/Marlin/ultralcd_impl_DOGM.h index 0cd66872b..201dbbdbc 100644 --- a/Marlin/ultralcd_impl_DOGM.h +++ b/Marlin/ultralcd_impl_DOGM.h @@ -764,7 +764,7 @@ static void lcd_implementation_status_screen() { #if ENABLED(ADVANCED_PAUSE_FEATURE) - static void lcd_implementation_hotend_status(const uint8_t row) { + static void lcd_implementation_hotend_status(const uint8_t row, const uint8_t extruder=active_extruder) { row_y1 = row * row_height + 1; row_y2 = row_y1 + row_height - 1; @@ -772,13 +772,13 @@ static void lcd_implementation_status_screen() { u8g.setPrintPos(LCD_PIXEL_WIDTH - 11 * (DOG_CHAR_WIDTH), row_y2); lcd_print('E'); - lcd_print((char)('1' + active_extruder)); + lcd_print((char)('1' + extruder)); lcd_print(' '); - lcd_print(itostr3(thermalManager.degHotend(active_extruder))); + lcd_print(itostr3(thermalManager.degHotend(extruder))); lcd_print('/'); - if (lcd_blink() || !thermalManager.is_heater_idle(active_extruder)) - lcd_print(itostr3(thermalManager.degTargetHotend(active_extruder))); + if (lcd_blink() || !thermalManager.is_heater_idle(extruder)) + lcd_print(itostr3(thermalManager.degTargetHotend(extruder))); } #endif // ADVANCED_PAUSE_FEATURE diff --git a/Marlin/ultralcd_impl_HD44780.h b/Marlin/ultralcd_impl_HD44780.h index 4add6256a..11a5174b9 100644 --- a/Marlin/ultralcd_impl_HD44780.h +++ b/Marlin/ultralcd_impl_HD44780.h @@ -799,8 +799,7 @@ static void lcd_implementation_status_screen() { lcd.setCursor(0, 1); // If the first line has two extruder temps, - // show more temperatures on the next line - // instead of + // show more temperatures on the next line. #if HOTENDS > 2 || (HOTENDS > 1 && TEMP_SENSOR_BED) @@ -951,10 +950,10 @@ static void lcd_implementation_status_screen() { #if ENABLED(ADVANCED_PAUSE_FEATURE) - static void lcd_implementation_hotend_status(const uint8_t row) { + static void lcd_implementation_hotend_status(const uint8_t row, const uint8_t extruder=active_extruder) { if (row < LCD_HEIGHT) { lcd.setCursor(LCD_WIDTH - 9, row); - _draw_heater_status(active_extruder, LCD_STR_THERMOMETER[0], lcd_blink()); + _draw_heater_status(extruder, LCD_STR_THERMOMETER[0], lcd_blink()); } }