浏览代码

Unify M600 and M125 pause features (#6407)

* Unify M600 and M125 pause features
* Cleanup per thinkyhead's comments
* Rename filament_change_menu_response to advanced_pause_menu_response
* Include HAS_BED_PROBE in QUIET_PROBING
* Update gMax example file
* is_idle() is out of scope without the braces
* Convert FT-i3-2020 to Advance Pause names...
* Allow pause even if not printing
Thomas Moore 8 年前
父节点
当前提交
fb5e0ffe16
共有 54 个文件被更改,包括 1091 次插入846 次删除
  1. 1
    1
      Marlin/Conditionals_post.h
  2. 16
    15
      Marlin/Configuration_adv.h
  3. 3
    3
      Marlin/Marlin.h
  4. 327
    289
      Marlin/Marlin_main.cpp
  5. 38
    7
      Marlin/SanityCheck.h
  6. 16
    16
      Marlin/enum.h
  7. 16
    15
      Marlin/example_configurations/Cartesio/Configuration_adv.h
  8. 16
    15
      Marlin/example_configurations/Felix/Configuration_adv.h
  9. 19
    16
      Marlin/example_configurations/FolgerTech-i3-2020/Configuration_adv.h
  10. 16
    15
      Marlin/example_configurations/Hephestos/Configuration_adv.h
  11. 16
    15
      Marlin/example_configurations/Hephestos_2/Configuration_adv.h
  12. 16
    15
      Marlin/example_configurations/K8200/Configuration_adv.h
  13. 16
    15
      Marlin/example_configurations/K8400/Configuration_adv.h
  14. 16
    15
      Marlin/example_configurations/RigidBot/Configuration_adv.h
  15. 16
    15
      Marlin/example_configurations/SCARA/Configuration_adv.h
  16. 16
    15
      Marlin/example_configurations/TAZ4/Configuration_adv.h
  17. 16
    15
      Marlin/example_configurations/TinyBoy2/Configuration_adv.h
  18. 16
    15
      Marlin/example_configurations/WITBOX/Configuration_adv.h
  19. 16
    15
      Marlin/example_configurations/delta/FLSUN/auto_calibrate/Configuration_adv.h
  20. 16
    15
      Marlin/example_configurations/delta/FLSUN/kossel_mini/Configuration_adv.h
  21. 16
    15
      Marlin/example_configurations/delta/generic/Configuration_adv.h
  22. 16
    15
      Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h
  23. 16
    15
      Marlin/example_configurations/delta/kossel_pro/Configuration_adv.h
  24. 16
    15
      Marlin/example_configurations/delta/kossel_xl/Configuration_adv.h
  25. 18
    15
      Marlin/example_configurations/gCreate_gMax1.5+/Configuration_adv.h
  26. 16
    15
      Marlin/example_configurations/makibox/Configuration_adv.h
  27. 16
    15
      Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h
  28. 16
    15
      Marlin/example_configurations/wt150/Configuration_adv.h
  29. 2
    2
      Marlin/language_an.h
  30. 2
    2
      Marlin/language_bg.h
  31. 2
    2
      Marlin/language_ca.h
  32. 2
    2
      Marlin/language_cz.h
  33. 2
    2
      Marlin/language_da.h
  34. 2
    2
      Marlin/language_de.h
  35. 5
    2
      Marlin/language_en.h
  36. 2
    2
      Marlin/language_es.h
  37. 2
    2
      Marlin/language_fr.h
  38. 2
    2
      Marlin/language_gl.h
  39. 2
    2
      Marlin/language_hr.h
  40. 2
    2
      Marlin/language_it.h
  41. 2
    2
      Marlin/language_kana.h
  42. 2
    2
      Marlin/language_kana_utf8.h
  43. 2
    2
      Marlin/language_nl.h
  44. 2
    2
      Marlin/language_pl.h
  45. 2
    2
      Marlin/language_tr.h
  46. 2
    2
      Marlin/language_uk.h
  47. 2
    2
      Marlin/language_zh_CN.h
  48. 2
    2
      Marlin/language_zh_TW.h
  49. 105
    55
      Marlin/temperature.cpp
  50. 54
    2
      Marlin/temperature.h
  51. 65
    55
      Marlin/ultralcd.cpp
  52. 3
    3
      Marlin/ultralcd.h
  53. 18
    7
      Marlin/ultralcd_impl_DOGM.h
  54. 45
    22
      Marlin/ultralcd_impl_HD44780.h

+ 1
- 1
Marlin/Conditionals_post.h 查看文件

@@ -652,7 +652,7 @@
652 652
   #if FAN_COUNT == 0
653 653
     #undef PROBING_FANS_OFF
654 654
   #endif
655
-  #define QUIET_PROBING (ENABLED(PROBING_HEATERS_OFF) || ENABLED(PROBING_FANS_OFF))
655
+  #define QUIET_PROBING (HAS_BED_PROBE && (ENABLED(PROBING_HEATERS_OFF) || ENABLED(PROBING_FANS_OFF)))
656 656
 
657 657
   /**
658 658
    * Servos and probes

+ 16
- 15
Marlin/Configuration_adv.h 查看文件

@@ -763,22 +763,23 @@
763 763
 #endif
764 764
 
765 765
 /**
766
- * Filament Change
767
- * Experimental filament change support.
766
+ * Advanced Pause
767
+ * Experimental feature for filament change support and for parking the nozzle when paused.
768 768
  * Adds the GCode M600 for initiating filament change.
769
+ * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
769 770
  *
770 771
  * Requires an LCD display.
771 772
  * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
772 773
  */
773
-//#define FILAMENT_CHANGE_FEATURE
774
-#if ENABLED(FILAMENT_CHANGE_FEATURE)
775
-  #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
776
-  #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
777
-  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
778
-  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
779
-  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
780
-  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
781
-  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
774
+//#define ADVANCED_PAUSE_FEATURE
775
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
776
+  #define PAUSE_PARK_X_POS 3                  // X position of hotend
777
+  #define PAUSE_PARK_Y_POS 3                  // Y position of hotend
778
+  #define PAUSE_PARK_Z_ADD 10                 // Z addition of hotend (lift)
779
+  #define PAUSE_PARK_XY_FEEDRATE 100          // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
780
+  #define PAUSE_PARK_Z_FEEDRATE 5             // Z axis feedrate in mm/s (not used for delta printers)
781
+  #define PAUSE_PARK_RETRACT_FEEDRATE 60      // Initial retract feedrate in mm/s
782
+  #define PAUSE_PARK_RETRACT_LENGTH 2         // Initial retract in mm
782 783
                                               // It is a short retract used immediately after print interrupt before move to filament exchange position
783 784
   #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
784 785
   #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
@@ -789,14 +790,14 @@
789 790
   #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
790 791
                                               // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
791 792
                                               // Short or zero length for printers without bowden where loading is not used
792
-  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
793
-  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
793
+  #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3   // Extrude filament feedrate in mm/s - must be slower than load feedrate
794
+  #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50    // Extrude filament length in mm after filament is loaded over the hotend,
794 795
                                               // 0 to disable for manual extrusion
795 796
                                               // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
796 797
                                               // or until outcoming filament color is not clear for filament color change
797
-  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45   // Turn off nozzle if user doesn't change filament within this time limit in seconds
798
+  #define PAUSE_PARK_NOZZLE_TIMEOUT 45        // Turn off nozzle if user doesn't change filament within this time limit in seconds
798 799
   #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
799
-  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT  // Enable to have stepper motors hold position during filament change
800
+  #define PAUSE_PARK_NO_STEPPER_TIMEOUT       // Enable to have stepper motors hold position during filament change
800 801
                                               // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
801 802
   //#define PARK_HEAD_ON_PAUSE                // Go to filament change position on pause, return to print position on resume
802 803
 #endif

+ 3
- 3
Marlin/Marlin.h 查看文件

@@ -48,7 +48,7 @@
48 48
 #endif
49 49
 
50 50
 void idle(
51
-  #if ENABLED(FILAMENT_CHANGE_FEATURE)
51
+  #if ENABLED(ADVANCED_PAUSE_FEATURE)
52 52
     bool no_stepper_sleep = false  // pass true to keep steppers from disabling on timeout
53 53
   #endif
54 54
 );
@@ -369,8 +369,8 @@ extern float soft_endstop_min[XYZ], soft_endstop_max[XYZ];
369 369
   extern int meas_delay_cm;            // Delay distance
370 370
 #endif
371 371
 
372
-#if ENABLED(FILAMENT_CHANGE_FEATURE)
373
-  extern FilamentChangeMenuResponse filament_change_menu_response;
372
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
373
+  extern AdvancedPauseMenuResponse advanced_pause_menu_response;
374 374
 #endif
375 375
 
376 376
 #if ENABLED(PID_EXTRUSION_SCALING)

+ 327
- 289
Marlin/Marlin_main.cpp 查看文件

@@ -195,7 +195,7 @@
195 195
  * M502 - Revert to the default "factory settings". ** Does not write them to EEPROM! **
196 196
  * M503 - Print the current settings (in memory): "M503 S<verbose>". S0 specifies compact output.
197 197
  * M540 - Enable/disable SD card abort on endstop hit: "M540 S<state>". (Requires ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED)
198
- * M600 - Pause for filament change: "M600 X<pos> Y<pos> Z<raise> E<first_retract> L<later_retract>". (Requires FILAMENT_CHANGE_FEATURE)
198
+ * M600 - Pause for filament change: "M600 X<pos> Y<pos> Z<raise> E<first_retract> L<later_retract>". (Requires ADVANCED_PAUSE_FEATURE)
199 199
  * M665 - Set delta configurations: "M665 L<diagonal rod> R<delta radius> S<segments/s> A<rod A trim mm> B<rod B trim mm> C<rod C trim mm> I<tower A trim angle> J<tower B trim angle> K<tower C trim angle>" (Requires DELTA)
200 200
  * M666 - Set delta endstop adjustment. (Requires DELTA)
201 201
  * M605 - Set dual x-carriage movement mode: "M605 S<mode> [X<x_offset>] [R<temp_offset>]". (Requires DUAL_X_CARRIAGE)
@@ -627,8 +627,8 @@ float cartes[XYZ] = { 0 };
627 627
   static bool filament_ran_out = false;
628 628
 #endif
629 629
 
630
-#if ENABLED(FILAMENT_CHANGE_FEATURE)
631
-  FilamentChangeMenuResponse filament_change_menu_response;
630
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
631
+  AdvancedPauseMenuResponse advanced_pause_menu_response;
632 632
 #endif
633 633
 
634 634
 #if ENABLED(MIXING_EXTRUDER)
@@ -5738,14 +5738,244 @@ inline void gcode_M17() {
5738 5738
   #define RUNPLAN(RATE_MM_S) line_to_destination(RATE_MM_S)
5739 5739
 #endif
5740 5740
 
5741
-#if ENABLED(PARK_HEAD_ON_PAUSE)
5741
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
5742
+
5743
+  static float resume_position[XYZE];
5744
+  static bool move_away_flag = false;
5745
+  #if ENABLED(SDSUPPORT)
5746
+    static bool sd_print_paused = false;
5747
+  #endif
5748
+
5749
+  static void filament_change_beep(const int max_beep_count, const bool init=false) {
5750
+    static millis_t next_buzz = 0;
5751
+    static uint16_t runout_beep = 0;
5752
+
5753
+    if (init) next_buzz = runout_beep = 0;
5754
+
5755
+    const millis_t ms = millis();
5756
+    if (ELAPSED(ms, next_buzz)) {
5757
+      if (max_beep_count < 0 || runout_beep < max_beep_count + 5) { // Only beep as long as we're supposed to
5758
+        next_buzz = ms + ((max_beep_count < 0 || runout_beep < max_beep_count) ? 2500 : 400);
5759
+        BUZZ(300, 2000);
5760
+        runout_beep++;
5761
+      }
5762
+    }
5763
+  }
5764
+
5765
+  static bool pause_print(const float& retract, const float& z_lift, const float& x_pos, const float& y_pos,
5766
+                          const float& unload_length = 0 , int max_beep_count = 0, bool show_lcd = false) {
5767
+    if (move_away_flag) return false; // already paused
5768
+
5769
+    if (!DEBUGGING(DRYRUN) && thermalManager.tooColdToExtrude(active_extruder) && unload_length > 0) {
5770
+      SERIAL_ERROR_START;
5771
+      SERIAL_ERRORLNPGM(MSG_TOO_COLD_FOR_M600);
5772
+      return false;
5773
+    }
5774
+
5775
+    const bool job_running = print_job_timer.isRunning();
5776
+
5777
+    // Indicate that the printer is paused
5778
+    move_away_flag = true;
5779
+
5780
+    // Pause the print job and timer
5781
+    #if ENABLED(SDSUPPORT)
5782
+      if (card.sdprinting) {
5783
+        card.pauseSDPrint();
5784
+        sd_print_paused = true;
5785
+      }
5786
+    #endif
5787
+    print_job_timer.pause();
5788
+
5789
+    // Show initial message and wait for synchronize steppers
5790
+    if (show_lcd) {
5791
+      #if ENABLED(ULTIPANEL)
5792
+        lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INIT);
5793
+      #endif
5794
+    }
5795
+    stepper.synchronize();
5796
+
5797
+    // Save current position
5798
+    COPY(resume_position, current_position);
5799
+    set_destination_to_current();
5800
+
5801
+    // Initial retract before move to filament change position
5802
+    destination[E_AXIS] += retract;
5803
+
5804
+    RUNPLAN(PAUSE_PARK_RETRACT_FEEDRATE);
5805
+
5806
+    // Lift Z axis
5807
+    if (z_lift > 0) {
5808
+      destination[Z_AXIS] += z_lift;
5809
+      NOMORE(destination[Z_AXIS], Z_MAX_POS);
5810
+      RUNPLAN(PAUSE_PARK_Z_FEEDRATE);
5811
+    }
5812
+
5813
+    // Move XY axes to filament exchange position
5814
+    destination[X_AXIS] = x_pos;
5815
+    destination[Y_AXIS] = y_pos;
5816
+
5817
+    clamp_to_software_endstops(destination);
5818
+    RUNPLAN(PAUSE_PARK_XY_FEEDRATE);
5819
+    stepper.synchronize();
5820
+
5821
+    if (unload_length != 0) {
5822
+      if (show_lcd) {
5823
+        #if ENABLED(ULTIPANEL)
5824
+          lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_UNLOAD);
5825
+          idle();
5826
+        #endif
5827
+      }
5828
+
5829
+      // Unload filament
5830
+      destination[E_AXIS] += unload_length;
5831
+      RUNPLAN(FILAMENT_CHANGE_UNLOAD_FEEDRATE);
5832
+      stepper.synchronize();
5833
+
5834
+      if (show_lcd) {
5835
+        #if ENABLED(ULTIPANEL)
5836
+          lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INSERT);
5837
+        #endif
5838
+      }
5839
+
5840
+      #if HAS_BUZZER
5841
+        filament_change_beep(max_beep_count, true);
5842
+      #endif
5843
+
5844
+      idle();
5845
+    }
5846
+
5847
+    // Disable extruders steppers for manual filament changing
5848
+    disable_e_steppers();
5849
+    safe_delay(100);
5850
+
5851
+    // Start the heater idle timers
5852
+    const millis_t nozzle_timeout = (millis_t)(PAUSE_PARK_NOZZLE_TIMEOUT) * 1000UL;
5853
+
5854
+    HOTEND_LOOP()
5855
+      thermalManager.start_heater_idle_timer(e, nozzle_timeout);
5856
+
5857
+    return true;
5858
+  }
5859
+
5860
+  static void wait_for_filament_reload(int max_beep_count = 0) {
5861
+    bool nozzle_timed_out = false;
5862
+
5863
+    // Wait for filament insert by user and press button
5864
+    KEEPALIVE_STATE(PAUSED_FOR_USER);
5865
+    wait_for_user = true;    // LCD click or M108 will clear this
5866
+    while (wait_for_user) {
5867
+      #if HAS_BUZZER
5868
+        filament_change_beep(max_beep_count);
5869
+      #endif
5742 5870
 
5743
-  float resume_position[XYZE];
5744
-  bool move_away_flag = false;
5871
+      if (!nozzle_timed_out)
5872
+        HOTEND_LOOP()
5873
+          nozzle_timed_out |= thermalManager.is_heater_idle(e);
5874
+
5875
+      #if ENABLED(ULTIPANEL)
5876
+        if (nozzle_timed_out)
5877
+          lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_CLICK_TO_HEAT_NOZZLE);
5878
+      #endif
5879
+
5880
+      idle(true);
5881
+    }
5882
+    KEEPALIVE_STATE(IN_HANDLER);
5883
+  }
5884
+
5885
+  static void resume_print(const float& load_length = 0, const float& initial_extrude_length = 0, int max_beep_count = 0) {
5886
+    bool nozzle_timed_out = false;
5745 5887
 
5746
-  inline void move_back_on_resume() {
5747 5888
     if (!move_away_flag) return;
5748
-    move_away_flag = false;
5889
+
5890
+    // Re-enable the heaters if they timed out
5891
+    HOTEND_LOOP() {
5892
+      nozzle_timed_out |= thermalManager.is_heater_idle(e);
5893
+      thermalManager.reset_heater_idle_timer(e);
5894
+    }
5895
+
5896
+    #if ENABLED(ULTIPANEL)
5897
+      // Show "wait for heating"
5898
+      lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_WAIT_FOR_NOZZLES_TO_HEAT);
5899
+    #endif
5900
+
5901
+    wait_for_heatup = true;
5902
+    while (wait_for_heatup) {
5903
+      idle();
5904
+      wait_for_heatup = false;
5905
+      HOTEND_LOOP() {
5906
+        if (abs(thermalManager.degHotend(e) - thermalManager.degTargetHotend(e)) > 3) {
5907
+          wait_for_heatup = true;
5908
+          break;
5909
+        }
5910
+      }
5911
+    }
5912
+
5913
+    #if HAS_BUZZER
5914
+      filament_change_beep(max_beep_count, true);
5915
+    #endif
5916
+
5917
+    if (load_length != 0) {
5918
+      #if ENABLED(ULTIPANEL)
5919
+        // Show "insert filament"
5920
+        if (nozzle_timed_out)
5921
+          lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INSERT);
5922
+      #endif
5923
+
5924
+      KEEPALIVE_STATE(PAUSED_FOR_USER);
5925
+      wait_for_user = true;    // LCD click or M108 will clear this
5926
+      while (wait_for_user && nozzle_timed_out) {
5927
+        #if HAS_BUZZER
5928
+          filament_change_beep(max_beep_count);
5929
+        #endif
5930
+        idle(true);
5931
+      }
5932
+      KEEPALIVE_STATE(IN_HANDLER);
5933
+
5934
+      #if ENABLED(ULTIPANEL)
5935
+        // Show "load" message
5936
+        lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_LOAD);
5937
+      #endif
5938
+
5939
+      // Load filament
5940
+      destination[E_AXIS] += load_length;
5941
+
5942
+      RUNPLAN(FILAMENT_CHANGE_LOAD_FEEDRATE);
5943
+      stepper.synchronize();
5944
+    }
5945
+
5946
+    #if ENABLED(ULTIPANEL) && defined(ADVANCED_PAUSE_EXTRUDE_LENGTH) && ADVANCED_PAUSE_EXTRUDE_LENGTH > 0
5947
+
5948
+      float extrude_length = initial_extrude_length;
5949
+
5950
+      do {
5951
+        if (extrude_length > 0) {
5952
+          // "Wait for filament extrude"
5953
+          lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_EXTRUDE);
5954
+
5955
+          // Extrude filament to get into hotend
5956
+          destination[E_AXIS] += extrude_length;
5957
+          RUNPLAN(ADVANCED_PAUSE_EXTRUDE_FEEDRATE);
5958
+          stepper.synchronize();
5959
+        }
5960
+
5961
+        // Show "Extrude More" / "Resume" menu and wait for reply
5962
+        KEEPALIVE_STATE(PAUSED_FOR_USER);
5963
+        wait_for_user = false;
5964
+        lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_OPTION);
5965
+        while (advanced_pause_menu_response == ADVANCED_PAUSE_RESPONSE_WAIT_FOR) idle(true);
5966
+        KEEPALIVE_STATE(IN_HANDLER);
5967
+
5968
+        extrude_length = ADVANCED_PAUSE_EXTRUDE_LENGTH;
5969
+
5970
+        // Keep looping if "Extrude More" was selected
5971
+      } while (advanced_pause_menu_response == ADVANCED_PAUSE_RESPONSE_EXTRUDE_MORE);
5972
+
5973
+    #endif
5974
+
5975
+    #if ENABLED(ULTIPANEL)
5976
+      // "Wait for print to resume"
5977
+      lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_RESUME);
5978
+    #endif
5749 5979
 
5750 5980
     // Set extruder to saved position
5751 5981
     destination[E_AXIS] = current_position[E_AXIS] = resume_position[E_AXIS];
@@ -5753,24 +5983,38 @@ inline void gcode_M17() {
5753 5983
 
5754 5984
     #if IS_KINEMATIC
5755 5985
       // Move XYZ to starting position
5756
-      planner.buffer_line_kinematic(lastpos, FILAMENT_CHANGE_XY_FEEDRATE, active_extruder);
5986
+      planner.buffer_line_kinematic(lastpos, PAUSE_PARK_XY_FEEDRATE, active_extruder);
5757 5987
     #else
5758 5988
       // Move XY to starting position, then Z
5759 5989
       destination[X_AXIS] = resume_position[X_AXIS];
5760 5990
       destination[Y_AXIS] = resume_position[Y_AXIS];
5761
-      RUNPLAN(FILAMENT_CHANGE_XY_FEEDRATE);
5991
+      RUNPLAN(PAUSE_PARK_XY_FEEDRATE);
5762 5992
       destination[Z_AXIS] = resume_position[Z_AXIS];
5763
-      RUNPLAN(FILAMENT_CHANGE_Z_FEEDRATE);
5993
+      RUNPLAN(PAUSE_PARK_Z_FEEDRATE);
5764 5994
     #endif
5765 5995
     stepper.synchronize();
5766 5996
 
5767 5997
     #if ENABLED(FILAMENT_RUNOUT_SENSOR)
5768 5998
       filament_ran_out = false;
5769 5999
     #endif
6000
+
5770 6001
     set_current_to_destination();
5771
-  }
5772 6002
 
5773
-#endif // PARK_HEAD_ON_PAUSE
6003
+    #if ENABLED(ULTIPANEL)
6004
+      // Show status screen
6005
+      lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_STATUS);
6006
+    #endif
6007
+
6008
+    #if ENABLED(SDSUPPORT)
6009
+      if (sd_print_paused) {
6010
+        card.startFileprint();
6011
+        sd_print_paused = false;
6012
+      }
6013
+    #endif
6014
+
6015
+    move_away_flag = false;
6016
+  }
6017
+#endif // ADVANCED_PAUSE_FEATURE
5774 6018
 
5775 6019
 #if ENABLED(SDSUPPORT)
5776 6020
 
@@ -5803,7 +6047,7 @@ inline void gcode_M17() {
5803 6047
    */
5804 6048
   inline void gcode_M24() {
5805 6049
     #if ENABLED(PARK_HEAD_ON_PAUSE)
5806
-      move_back_on_resume();
6050
+      resume_print();
5807 6051
     #endif
5808 6052
 
5809 6053
     card.startFileprint();
@@ -7462,89 +7706,55 @@ inline void gcode_M121() { endstops.enable_globally(false); }
7462 7706
    *    Z = override Z raise
7463 7707
    */
7464 7708
   inline void gcode_M125() {
7465
-    if (move_away_flag) return; // already paused
7466
-
7467
-    const bool job_running = print_job_timer.isRunning();
7468
-
7469
-    // there are blocks after this one, or sd printing
7470
-    move_away_flag = job_running || planner.blocks_queued()
7471
-      #if ENABLED(SDSUPPORT)
7472
-        || card.sdprinting
7473
-      #endif
7474
-    ;
7475
-
7476
-    if (!move_away_flag) return; // nothing to pause
7477
-
7478
-    // M125 can be used to pause a print too
7479
-    #if ENABLED(SDSUPPORT)
7480
-      card.pauseSDPrint();
7481
-    #endif
7482
-    print_job_timer.pause();
7483
-
7484
-    // Save current position
7485
-    COPY(resume_position, current_position);
7486
-
7487
-    set_destination_to_current();
7488 7709
 
7489 7710
     // Initial retract before move to filament change position
7490
-    destination[E_AXIS] += parser.seen('L') ? parser.value_axis_units(E_AXIS) : 0
7491
-      #if defined(FILAMENT_CHANGE_RETRACT_LENGTH) && FILAMENT_CHANGE_RETRACT_LENGTH > 0
7492
-        - (FILAMENT_CHANGE_RETRACT_LENGTH)
7711
+    const float retract = parser.seen('L') ? parser.value_axis_units(E_AXIS) : 0
7712
+      #if defined(PAUSE_PARK_RETRACT_LENGTH) && PAUSE_PARK_RETRACT_LENGTH > 0
7713
+        - (PAUSE_PARK_RETRACT_LENGTH)
7493 7714
       #endif
7494 7715
     ;
7495
-    RUNPLAN(FILAMENT_CHANGE_RETRACT_FEEDRATE);
7496 7716
 
7497 7717
     // Lift Z axis
7498 7718
     const float z_lift = parser.seen('Z') ? parser.value_linear_units() :
7499
-      #if defined(FILAMENT_CHANGE_Z_ADD) && FILAMENT_CHANGE_Z_ADD > 0
7500
-        FILAMENT_CHANGE_Z_ADD
7719
+      #if defined(PAUSE_PARK_Z_ADD) && PAUSE_PARK_Z_ADD > 0
7720
+        PAUSE_PARK_Z_ADD
7501 7721
       #else
7502 7722
         0
7503 7723
       #endif
7504 7724
     ;
7505
-    if (z_lift > 0) {
7506
-      destination[Z_AXIS] += z_lift;
7507
-      NOMORE(destination[Z_AXIS], Z_MAX_POS);
7508
-      RUNPLAN(FILAMENT_CHANGE_Z_FEEDRATE);
7509
-    }
7510 7725
 
7511 7726
     // Move XY axes to filament change position or given position
7512
-    destination[X_AXIS] = parser.seen('X') ? parser.value_linear_units() : 0
7513
-      #ifdef FILAMENT_CHANGE_X_POS
7514
-        + FILAMENT_CHANGE_X_POS
7727
+    const float x_pos = parser.seen('X') ? parser.value_linear_units() : 0
7728
+      #ifdef PAUSE_PARK_X_POS
7729
+        + PAUSE_PARK_X_POS
7515 7730
       #endif
7516 7731
     ;
7517
-    destination[Y_AXIS] = parser.seen('Y') ? parser.value_linear_units() : 0
7518
-      #ifdef FILAMENT_CHANGE_Y_POS
7519
-        + FILAMENT_CHANGE_Y_POS
7732
+    const float y_pos = parser.seen('Y') ? parser.value_linear_units() : 0
7733
+      #ifdef PAUSE_PARK_Y_POS
7734
+        + PAUSE_PARK_Y_POS
7520 7735
       #endif
7521 7736
     ;
7522 7737
 
7523 7738
     #if HOTENDS > 1 && DISABLED(DUAL_X_CARRIAGE)
7524 7739
       if (active_extruder > 0) {
7525
-        if (!parser.seen('X')) destination[X_AXIS] += hotend_offset[X_AXIS][active_extruder];
7526
-        if (!parser.seen('Y')) destination[Y_AXIS] += hotend_offset[Y_AXIS][active_extruder];
7740
+        if (!parser.seen('X')) x_pos += hotend_offset[X_AXIS][active_extruder];
7741
+        if (!parser.seen('Y')) y_pos += hotend_offset[Y_AXIS][active_extruder];
7527 7742
       }
7528 7743
     #endif
7529 7744
 
7530
-    clamp_to_software_endstops(destination);
7531
-    RUNPLAN(FILAMENT_CHANGE_XY_FEEDRATE);
7532
-    set_current_to_destination();
7533
-    stepper.synchronize();
7534
-    disable_e_steppers();
7745
+    const bool job_running = print_job_timer.isRunning();
7535 7746
 
7536
-    #if DISABLED(SDSUPPORT)
7537
-      // Wait for lcd click or M108
7538
-      KEEPALIVE_STATE(PAUSED_FOR_USER);
7539
-      wait_for_user = true;
7540
-      while (wait_for_user) idle();
7541
-      KEEPALIVE_STATE(IN_HANDLER);
7747
+    if (pause_print(retract, z_lift, x_pos, y_pos)) {
7748
+      #if DISABLED(SDSUPPORT)
7749
+        // Wait for lcd click or M108
7750
+        wait_for_filament_reload();
7542 7751
 
7543
-      // Return to print position and continue
7544
-      move_back_on_resume();
7545
-      if (job_running) print_job_timer.start();
7546
-      move_away_flag = false;
7547
-    #endif
7752
+        // Return to print position and continue
7753
+        resume_print();
7754
+
7755
+        if (job_running) print_job_timer.start();
7756
+      #endif
7757
+    }
7548 7758
   }
7549 7759
 
7550 7760
 #endif // PARK_HEAD_ON_PAUSE
@@ -8812,25 +9022,7 @@ inline void gcode_M503() {
8812 9022
 
8813 9023
 #endif // HAS_BED_PROBE
8814 9024
 
8815
-#if ENABLED(FILAMENT_CHANGE_FEATURE)
8816
-
8817
-  void filament_change_beep(const bool init=false) {
8818
-    static millis_t next_buzz = 0;
8819
-    static uint16_t runout_beep = 0;
8820
-
8821
-    if (init) next_buzz = runout_beep = 0;
8822
-
8823
-    const millis_t ms = millis();
8824
-    if (ELAPSED(ms, next_buzz)) {
8825
-      if (runout_beep <= FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS + 5) { // Only beep as long as we're supposed to
8826
-        next_buzz = ms + (runout_beep <= FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS ? 2500 : 400);
8827
-        BUZZ(300, 2000);
8828
-        runout_beep++;
8829
-      }
8830
-    }
8831
-  }
8832
-
8833
-  static bool busy_doing_M600 = false;
9025
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
8834 9026
 
8835 9027
   /**
8836 9028
    * M600: Pause for filament change
@@ -8839,231 +9031,77 @@ inline void gcode_M503() {
8839 9031
    *  Z[distance] - Move the Z axis by this distance
8840 9032
    *  X[position] - Move to this X position, with Y
8841 9033
    *  Y[position] - Move to this Y position, with X
8842
-   *  L[distance] - Retract distance for removal (manual reload)
9034
+   *  U[distance] - Retract distance for removal (negative value) (manual reload)
9035
+   *  L[distance] - Extrude distance for insertion (positive value) (manual reload)
9036
+   *  B[count]    - Number of times to beep, -1 for indefinite (if equipped with a buzzer)
8843 9037
    *
8844 9038
    *  Default values are used for omitted arguments.
8845 9039
    *
8846 9040
    */
8847 9041
   inline void gcode_M600() {
8848 9042
 
8849
-    if (!DEBUGGING(DRYRUN) && thermalManager.tooColdToExtrude(active_extruder)) {
8850
-      SERIAL_ERROR_START;
8851
-      SERIAL_ERRORLNPGM(MSG_TOO_COLD_FOR_M600);
8852
-      return;
8853
-    }
8854
-
8855
-    busy_doing_M600 = true;  // Stepper Motors can't timeout when this is set
8856
-
8857
-    // Pause the print job timer
8858
-    const bool job_running = print_job_timer.isRunning();
8859
-
8860
-    print_job_timer.pause();
8861
-
8862
-    // Show initial message and wait for synchronize steppers
8863
-    lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_INIT);
8864
-    stepper.synchronize();
8865
-
8866
-    // Save current position of all axes
8867
-    float lastpos[XYZE];
8868
-    COPY(lastpos, current_position);
8869
-    set_destination_to_current();
8870
-
8871 9043
     // Initial retract before move to filament change position
8872
-    destination[E_AXIS] += parser.seen('E') ? parser.value_axis_units(E_AXIS) : 0
8873
-      #if defined(FILAMENT_CHANGE_RETRACT_LENGTH) && FILAMENT_CHANGE_RETRACT_LENGTH > 0
8874
-        - (FILAMENT_CHANGE_RETRACT_LENGTH)
9044
+    const float retract = parser.seen('E') ? parser.value_axis_units(E_AXIS) : 0
9045
+      #if defined(PAUSE_PARK_RETRACT_LENGTH) && PAUSE_PARK_RETRACT_LENGTH > 0
9046
+        - (PAUSE_PARK_RETRACT_LENGTH)
8875 9047
       #endif
8876 9048
     ;
8877 9049
 
8878
-    RUNPLAN(FILAMENT_CHANGE_RETRACT_FEEDRATE);
8879
-
8880 9050
     // Lift Z axis
8881
-    float z_lift = parser.seen('Z') ? parser.value_linear_units() :
8882
-      #if defined(FILAMENT_CHANGE_Z_ADD) && FILAMENT_CHANGE_Z_ADD > 0
8883
-        FILAMENT_CHANGE_Z_ADD
9051
+    const float z_lift = parser.seen('Z') ? parser.value_linear_units() :
9052
+      #if defined(PAUSE_PARK_Z_ADD) && PAUSE_PARK_Z_ADD > 0
9053
+        PAUSE_PARK_Z_ADD
8884 9054
       #else
8885 9055
         0
8886 9056
       #endif
8887 9057
     ;
8888 9058
 
8889
-    if (z_lift > 0) {
8890
-      destination[Z_AXIS] += z_lift;
8891
-      NOMORE(destination[Z_AXIS], Z_MAX_POS);
8892
-      RUNPLAN(FILAMENT_CHANGE_Z_FEEDRATE);
8893
-    }
8894
-
8895 9059
     // Move XY axes to filament exchange position
8896
-    if (parser.seen('X')) destination[X_AXIS] = parser.value_linear_units();
8897
-    #ifdef FILAMENT_CHANGE_X_POS
8898
-      else destination[X_AXIS] = FILAMENT_CHANGE_X_POS;
8899
-    #endif
8900
-
8901
-    if (parser.seen('Y')) destination[Y_AXIS] = parser.value_linear_units();
8902
-    #ifdef FILAMENT_CHANGE_Y_POS
8903
-      else destination[Y_AXIS] = FILAMENT_CHANGE_Y_POS;
8904
-    #endif
8905
-
8906
-    RUNPLAN(FILAMENT_CHANGE_XY_FEEDRATE);
8907
-
8908
-    stepper.synchronize();
8909
-    lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_UNLOAD);
8910
-    idle();
8911
-
8912
-    // Unload filament
8913
-    destination[E_AXIS] += parser.seen('L') ? parser.value_axis_units(E_AXIS) : 0
8914
-      #if FILAMENT_CHANGE_UNLOAD_LENGTH > 0
8915
-        - (FILAMENT_CHANGE_UNLOAD_LENGTH)
9060
+    const float x_pos = parser.seen('X') ? parser.value_linear_units() : 0
9061
+      #ifdef PAUSE_PARK_X_POS
9062
+        + PAUSE_PARK_X_POS
8916 9063
       #endif
8917 9064
     ;
8918
-
8919
-    RUNPLAN(FILAMENT_CHANGE_UNLOAD_FEEDRATE);
8920
-
8921
-    // Synchronize steppers and then disable extruders steppers for manual filament changing
8922
-    stepper.synchronize();
8923
-    disable_e_steppers();
8924
-    safe_delay(100);
8925
-
8926
-    const millis_t nozzle_timeout = millis() + (millis_t)(FILAMENT_CHANGE_NOZZLE_TIMEOUT) * 1000UL;
8927
-    bool nozzle_timed_out = false;
8928
-
8929
-    // Wait for filament insert by user and press button
8930
-    lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_INSERT);
8931
-
8932
-    #if HAS_BUZZER
8933
-      filament_change_beep(true);
8934
-    #endif
8935
-
8936
-    idle();
8937
-
8938
-    int16_t temps[HOTENDS];
8939
-    HOTEND_LOOP() temps[e] = thermalManager.target_temperature[e]; // Save nozzle temps
8940
-
8941
-    KEEPALIVE_STATE(PAUSED_FOR_USER);
8942
-    wait_for_user = true;    // LCD click or M108 will clear this
8943
-    while (wait_for_user) {
8944
-
8945
-      if (nozzle_timed_out)
8946
-        lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_CLICK_TO_HEAT_NOZZLE);
8947
-
8948
-      #if HAS_BUZZER
8949
-        filament_change_beep();
9065
+    const float y_pos = parser.seen('Y') ? parser.value_linear_units() : 0
9066
+      #ifdef PAUSE_PARK_Y_POS
9067
+        + PAUSE_PARK_Y_POS
8950 9068
       #endif
9069
+    ;
8951 9070
 
8952
-      if (!nozzle_timed_out && ELAPSED(millis(), nozzle_timeout)) {
8953
-        nozzle_timed_out = true; // on nozzle timeout remember the nozzles need to be reheated
8954
-        HOTEND_LOOP() thermalManager.setTargetHotend(0, e); // Turn off all the nozzles
8955
-        lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_CLICK_TO_HEAT_NOZZLE);
8956
-      }
8957
-      idle(true);
8958
-    }
8959
-    KEEPALIVE_STATE(IN_HANDLER);
8960
-
8961
-    if (nozzle_timed_out)      // Turn nozzles back on if they were turned off
8962
-      HOTEND_LOOP() thermalManager.setTargetHotend(temps[e], e);
8963
-
8964
-    // Show "wait for heating"
8965
-    lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_WAIT_FOR_NOZZLES_TO_HEAT);
8966
-
8967
-    wait_for_heatup = true;
8968
-    while (wait_for_heatup) {
8969
-      idle();
8970
-      wait_for_heatup = false;
8971
-      HOTEND_LOOP() {
8972
-        if (abs(thermalManager.degHotend(e) - temps[e]) > 3) {
8973
-          wait_for_heatup = true;
8974
-          break;
8975
-        }
8976
-      }
8977
-    }
8978
-
8979
-    // Show "insert filament"
8980
-    if (nozzle_timed_out)
8981
-      lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_INSERT);
8982
-
8983
-    #if HAS_BUZZER
8984
-      filament_change_beep(true);
8985
-    #endif
8986
-
8987
-    KEEPALIVE_STATE(PAUSED_FOR_USER);
8988
-    wait_for_user = true;    // LCD click or M108 will clear this
8989
-    while (wait_for_user && nozzle_timed_out) {
8990
-      #if HAS_BUZZER
8991
-        filament_change_beep();
9071
+    // Unload filament
9072
+    const float unload_length = parser.seen('U') ? parser.value_axis_units(E_AXIS) : 0
9073
+      #if defined(FILAMENT_CHANGE_UNLOAD_LENGTH) && FILAMENT_CHANGE_UNLOAD_LENGTH > 0
9074
+        - (FILAMENT_CHANGE_UNLOAD_LENGTH)
8992 9075
       #endif
8993
-      idle(true);
8994
-    }
8995
-    KEEPALIVE_STATE(IN_HANDLER);
8996
-
8997
-    // Show "load" message
8998
-    lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_LOAD);
9076
+    ;
8999 9077
 
9000 9078
     // Load filament
9001
-    destination[E_AXIS] += parser.seen('L') ? -parser.value_axis_units(E_AXIS) : 0
9002
-      #if FILAMENT_CHANGE_LOAD_LENGTH > 0
9079
+    const float load_length = parser.seen('L') ? parser.value_axis_units(E_AXIS) : 0
9080
+      #ifdef FILAMENT_CHANGE_LOAD_LENGTH
9003 9081
         + FILAMENT_CHANGE_LOAD_LENGTH
9004 9082
       #endif
9005 9083
     ;
9006 9084
 
9007
-    RUNPLAN(FILAMENT_CHANGE_LOAD_FEEDRATE);
9008
-    stepper.synchronize();
9009
-
9010
-    #if defined(FILAMENT_CHANGE_EXTRUDE_LENGTH) && FILAMENT_CHANGE_EXTRUDE_LENGTH > 0
9011
-
9012
-      do {
9013
-        // "Wait for filament extrude"
9014
-        lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_EXTRUDE);
9015
-
9016
-        // Extrude filament to get into hotend
9017
-        destination[E_AXIS] += FILAMENT_CHANGE_EXTRUDE_LENGTH;
9018
-        RUNPLAN(FILAMENT_CHANGE_EXTRUDE_FEEDRATE);
9019
-        stepper.synchronize();
9020
-
9021
-        // Show "Extrude More" / "Resume" menu and wait for reply
9022
-        KEEPALIVE_STATE(PAUSED_FOR_USER);
9023
-        wait_for_user = false;
9024
-        lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_OPTION);
9025
-        while (filament_change_menu_response == FILAMENT_CHANGE_RESPONSE_WAIT_FOR) idle(true);
9026
-        KEEPALIVE_STATE(IN_HANDLER);
9027
-
9028
-        // Keep looping if "Extrude More" was selected
9029
-      } while (filament_change_menu_response == FILAMENT_CHANGE_RESPONSE_EXTRUDE_MORE);
9030
-
9031
-    #endif
9032
-
9033
-    // "Wait for print to resume"
9034
-    lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_RESUME);
9035
-
9036
-    // Set extruder to saved position
9037
-    destination[E_AXIS] = current_position[E_AXIS] = lastpos[E_AXIS];
9038
-    planner.set_e_position_mm(current_position[E_AXIS]);
9039
-
9040
-    #if IS_KINEMATIC
9041
-      // Move XYZ to starting position
9042
-      planner.buffer_line_kinematic(lastpos, FILAMENT_CHANGE_XY_FEEDRATE, active_extruder);
9043
-    #else
9044
-      // Move XY to starting position, then Z
9045
-      destination[X_AXIS] = lastpos[X_AXIS];
9046
-      destination[Y_AXIS] = lastpos[Y_AXIS];
9047
-      RUNPLAN(FILAMENT_CHANGE_XY_FEEDRATE);
9048
-      destination[Z_AXIS] = lastpos[Z_AXIS];
9049
-      RUNPLAN(FILAMENT_CHANGE_Z_FEEDRATE);
9050
-    #endif
9051
-    stepper.synchronize();
9085
+    const int beep_count = parser.seen('B') ? parser.value_int() :
9086
+      #ifdef FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS
9087
+        FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS
9088
+      #else
9089
+        -1
9090
+      #endif
9091
+    ;
9052 9092
 
9053
-    #if ENABLED(FILAMENT_RUNOUT_SENSOR)
9054
-      filament_ran_out = false;
9055
-    #endif
9093
+    const bool job_running = print_job_timer.isRunning();
9056 9094
 
9057
-    // Show status screen
9058
-    lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_STATUS);
9095
+    if (pause_print(retract, z_lift, x_pos, y_pos, unload_length, beep_count, true)) {
9096
+      wait_for_filament_reload(beep_count);
9097
+      resume_print(load_length, ADVANCED_PAUSE_EXTRUDE_LENGTH, beep_count);
9098
+    }
9059 9099
 
9060 9100
     // Resume the print job timer if it was running
9061 9101
     if (job_running) print_job_timer.start();
9062
-
9063
-    busy_doing_M600 = false;  // Allow Stepper Motors to be turned off during inactivity
9064 9102
   }
9065 9103
 
9066
-#endif // FILAMENT_CHANGE_FEATURE
9104
+#endif // ADVANCED_PAUSE_FEATURE
9067 9105
 
9068 9106
 #if ENABLED(DUAL_X_CARRIAGE)
9069 9107
 
@@ -10569,11 +10607,11 @@ void process_next_command() {
10569 10607
           break;
10570 10608
       #endif // HAS_BED_PROBE
10571 10609
 
10572
-      #if ENABLED(FILAMENT_CHANGE_FEATURE)
10610
+      #if ENABLED(ADVANCED_PAUSE_FEATURE)
10573 10611
         case 600: // M600: Pause for filament change
10574 10612
           gcode_M600();
10575 10613
           break;
10576
-      #endif // FILAMENT_CHANGE_FEATURE
10614
+      #endif // ADVANCED_PAUSE_FEATURE
10577 10615
 
10578 10616
       #if ENABLED(DUAL_X_CARRIAGE) || ENABLED(DUAL_NOZZLE_DUPLICATION_MODE)
10579 10617
         case 605: // M605: Set Dual X Carriage movement mode
@@ -12064,13 +12102,13 @@ void manage_inactivity(bool ignore_stepper_queue/*=false*/) {
12064 12102
   }
12065 12103
 
12066 12104
   // Prevent steppers timing-out in the middle of M600
12067
-  #if ENABLED(FILAMENT_CHANGE_FEATURE) && ENABLED(FILAMENT_CHANGE_NO_STEPPER_TIMEOUT)
12068
-    #define M600_TEST !busy_doing_M600
12105
+  #if ENABLED(ADVANCED_PAUSE_FEATURE) && ENABLED(PAUSE_PARK_NO_STEPPER_TIMEOUT)
12106
+    #define MOVE_AWAY_TEST !move_away_flag
12069 12107
   #else
12070
-    #define M600_TEST true
12108
+    #define MOVE_AWAY_TEST true
12071 12109
   #endif
12072 12110
 
12073
-  if (M600_TEST && stepper_inactive_time && ELAPSED(ms, previous_cmd_ms + stepper_inactive_time)
12111
+  if (MOVE_AWAY_TEST && stepper_inactive_time && ELAPSED(ms, previous_cmd_ms + stepper_inactive_time)
12074 12112
       && !ignore_stepper_queue && !planner.blocks_queued()) {
12075 12113
     #if ENABLED(DISABLE_INACTIVE_X)
12076 12114
       disable_X();
@@ -12216,7 +12254,7 @@ void manage_inactivity(bool ignore_stepper_queue/*=false*/) {
12216 12254
  * Standard idle routine keeps the machine alive
12217 12255
  */
12218 12256
 void idle(
12219
-  #if ENABLED(FILAMENT_CHANGE_FEATURE)
12257
+  #if ENABLED(ADVANCED_PAUSE_FEATURE)
12220 12258
     bool no_stepper_sleep/*=false*/
12221 12259
   #endif
12222 12260
 ) {
@@ -12229,7 +12267,7 @@ void idle(
12229 12267
   #endif
12230 12268
 
12231 12269
   manage_inactivity(
12232
-    #if ENABLED(FILAMENT_CHANGE_FEATURE)
12270
+    #if ENABLED(ADVANCED_PAUSE_FEATURE)
12233 12271
       no_stepper_sleep
12234 12272
     #endif
12235 12273
   );

+ 38
- 7
Marlin/SanityCheck.h 查看文件

@@ -99,7 +99,31 @@
99 99
 #elif defined(SERVO_DEACTIVATION_DELAY)
100 100
   #error "SERVO_DEACTIVATION_DELAY is deprecated. Use SERVO_DELAY instead."
101 101
 #elif ENABLED(FILAMENTCHANGEENABLE)
102
-  #error "FILAMENTCHANGEENABLE is now FILAMENT_CHANGE_FEATURE. Please update your configuration."
102
+  #error "FILAMENTCHANGEENABLE is now ADVANCED_PAUSE_FEATURE. Please update your configuration."
103
+#elif ENABLED(FILAMENT_CHANGE_FEATURE)
104
+  #error "FILAMENT_CHANGE_FEATURE is now ADVANCED_PAUSE_FEATURE. Please update your configuration."
105
+#elif ENABLED(FILAMENT_CHANGE_X_POS)
106
+  #error "FILAMENT_CHANGE_X_POS is now PAUSE_PARK_X_POS. Please update your configuration."
107
+#elif ENABLED(FILAMENT_CHANGE_Y_POS)
108
+  #error "FILAMENT_CHANGE_Y_POS is now PAUSE_PARK_Y_POS. Please update your configuration."
109
+#elif ENABLED(FILAMENT_CHANGE_Z_ADD)
110
+  #error "FILAMENT_CHANGE_Z_ADD is now PAUSE_PARK_Z_ADD. Please update your configuration."
111
+#elif ENABLED(FILAMENT_CHANGE_XY_FEEDRATE)
112
+  #error "FILAMENT_CHANGE_XY_FEEDRATE is now PAUSE_PARK_XY_FEEDRATE. Please update your configuration."
113
+#elif ENABLED(FILAMENT_CHANGE_Z_FEEDRATE)
114
+  #error "FILAMENT_CHANGE_Z_FEEDRATE is now PAUSE_PARK_Z_FEEDRATE. Please update your configuration."
115
+#elif ENABLED(FILAMENT_CHANGE_RETRACT_FEEDRATE)
116
+  #error "FILAMENT_CHANGE_RETRACT_FEEDRATE is now PAUSE_PARK_RETRACT_FEEDRATE. Please update your configuration."
117
+#elif ENABLED(FILAMENT_CHANGE_RETRACT_LENGTH)
118
+  #error "FILAMENT_CHANGE_RETRACT_LENGTH is now PAUSE_PARK_RETRACT_LENGTH. Please update your configuration."
119
+#elif ENABLED(FILAMENT_CHANGE_EXTRUDE_FEEDRATE)
120
+  #error "FILAMENT_CHANGE_EXTRUDE_FEEDRATE is now ADVANCED_PAUSE_EXTRUDE_FEEDRATE. Please update your configuration."
121
+#elif ENABLED(FILAMENT_CHANGE_EXTRUDE_LENGTH)
122
+  #error "FILAMENT_CHANGE_EXTRUDE_LENGTH is now ADVANCED_PAUSE_EXTRUDE_LENGTH. Please update your configuration."
123
+#elif ENABLED(FILAMENT_CHANGE_NOZZLE_TIMEOUT)
124
+  #error "FILAMENT_CHANGE_NOZZLE_TIMEOUT is now PAUSE_PARK_NOZZLE_TIMEOUT. Please update your configuration."
125
+#elif ENABLED(FILAMENT_CHANGE_NO_STEPPER_TIMEOUT)
126
+  #error "FILAMENT_CHANGE_NO_STEPPER_TIMEOUT is now PAUSE_PARK_NO_STEPPER_TIMEOUT. Please update your configuration."
103 127
 #elif defined(PLA_PREHEAT_HOTEND_TEMP)
104 128
   #error "PLA_PREHEAT_HOTEND_TEMP is now PREHEAT_1_TEMP_HOTEND. Please update your configuration."
105 129
 #elif defined(PLA_PREHEAT_HPB_TEMP)
@@ -286,19 +310,19 @@
286 310
     #error "FILAMENT_RUNOUT_SENSOR requires FIL_RUNOUT_PIN."
287 311
   #elif DISABLED(SDSUPPORT) && DISABLED(PRINTJOB_TIMER_AUTOSTART)
288 312
     #error "FILAMENT_RUNOUT_SENSOR requires SDSUPPORT or PRINTJOB_TIMER_AUTOSTART."
289
-  #elif DISABLED(FILAMENT_CHANGE_FEATURE)
290
-    static_assert(NULL == strstr(FILAMENT_RUNOUT_SCRIPT, "M600"), "FILAMENT_CHANGE_FEATURE is required to use M600 with FILAMENT_RUNOUT_SENSOR.");
313
+  #elif DISABLED(ADVANCED_PAUSE_FEATURE)
314
+    static_assert(NULL == strstr(FILAMENT_RUNOUT_SCRIPT, "M600"), "ADVANCED_PAUSE_FEATURE is required to use M600 with FILAMENT_RUNOUT_SENSOR.");
291 315
   #endif
292 316
 #endif
293 317
 
294 318
 /**
295
- * Filament Change with Extruder Runout Prevention
319
+ * Advanced Pause
296 320
  */
297
-#if ENABLED(FILAMENT_CHANGE_FEATURE)
321
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
298 322
   #if DISABLED(ULTIPANEL)
299
-    #error "FILAMENT_CHANGE_FEATURE currently requires an LCD controller."
323
+    #error "ADVANCED_PAUSE_FEATURE currently requires an LCD controller."
300 324
   #elif ENABLED(EXTRUDER_RUNOUT_PREVENT)
301
-    #error "EXTRUDER_RUNOUT_PREVENT is incompatible with FILAMENT_CHANGE_FEATURE."
325
+    #error "EXTRUDER_RUNOUT_PREVENT is incompatible with ADVANCED_PAUSE_FEATURE."
302 326
   #elif ENABLED(PARK_HEAD_ON_PAUSE) && DISABLED(SDSUPPORT) && DISABLED(ULTIPANEL) && DISABLED(EMERGENCY_PARSER)
303 327
     #error "PARK_HEAD_ON_PAUSE requires SDSUPPORT, EMERGENCY_PARSER, or an LCD controller."
304 328
   #endif
@@ -545,6 +569,13 @@ static_assert(1 >= 0
545 569
     #error "Probes need Z_CLEARANCE_BETWEEN_PROBES >= 0."
546 570
   #endif
547 571
 
572
+   /**
573
+    * Advanced Pause is required in order to turn the heaters off during probing
574
+    */
575
+   #if (ENABLED(PROBING_HEATERS_OFF) && DISABLED(ADVANCED_PAUSE_FEATURE))
576
+     #error "PROBING_HEATERS_OFF requires ADVANCED_PAUSE_FEATURE"
577
+   #endif
578
+
548 579
 #else
549 580
 
550 581
   /**

+ 16
- 16
Marlin/enum.h 查看文件

@@ -108,25 +108,25 @@ enum EndstopEnum {
108 108
   };
109 109
 #endif
110 110
 
111
-#if ENABLED(FILAMENT_CHANGE_FEATURE)
112
-  enum FilamentChangeMenuResponse {
113
-    FILAMENT_CHANGE_RESPONSE_WAIT_FOR,
114
-    FILAMENT_CHANGE_RESPONSE_EXTRUDE_MORE,
115
-    FILAMENT_CHANGE_RESPONSE_RESUME_PRINT
111
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
112
+  enum AdvancedPauseMenuResponse {
113
+    ADVANCED_PAUSE_RESPONSE_WAIT_FOR,
114
+    ADVANCED_PAUSE_RESPONSE_EXTRUDE_MORE,
115
+    ADVANCED_PAUSE_RESPONSE_RESUME_PRINT
116 116
   };
117 117
 
118 118
   #if ENABLED(ULTIPANEL)
119
-    enum FilamentChangeMessage {
120
-      FILAMENT_CHANGE_MESSAGE_INIT,
121
-      FILAMENT_CHANGE_MESSAGE_UNLOAD,
122
-      FILAMENT_CHANGE_MESSAGE_INSERT,
123
-      FILAMENT_CHANGE_MESSAGE_LOAD,
124
-      FILAMENT_CHANGE_MESSAGE_EXTRUDE,
125
-      FILAMENT_CHANGE_MESSAGE_OPTION,
126
-      FILAMENT_CHANGE_MESSAGE_RESUME,
127
-      FILAMENT_CHANGE_MESSAGE_STATUS,
128
-      FILAMENT_CHANGE_MESSAGE_CLICK_TO_HEAT_NOZZLE,
129
-      FILAMENT_CHANGE_MESSAGE_WAIT_FOR_NOZZLES_TO_HEAT
119
+    enum AdvancedPauseMessage {
120
+      ADVANCED_PAUSE_MESSAGE_INIT,
121
+      ADVANCED_PAUSE_MESSAGE_UNLOAD,
122
+      ADVANCED_PAUSE_MESSAGE_INSERT,
123
+      ADVANCED_PAUSE_MESSAGE_LOAD,
124
+      ADVANCED_PAUSE_MESSAGE_EXTRUDE,
125
+      ADVANCED_PAUSE_MESSAGE_OPTION,
126
+      ADVANCED_PAUSE_MESSAGE_RESUME,
127
+      ADVANCED_PAUSE_MESSAGE_STATUS,
128
+      ADVANCED_PAUSE_MESSAGE_CLICK_TO_HEAT_NOZZLE,
129
+      ADVANCED_PAUSE_MESSAGE_WAIT_FOR_NOZZLES_TO_HEAT
130 130
     };
131 131
   #endif
132 132
 #endif

+ 16
- 15
Marlin/example_configurations/Cartesio/Configuration_adv.h 查看文件

@@ -756,22 +756,23 @@
756 756
 #endif
757 757
 
758 758
 /**
759
- * Filament Change
760
- * Experimental filament change support.
759
+ * Advanced Pause
760
+ * Experimental feature for filament change support and for parking the nozzle when paused.
761 761
  * Adds the GCode M600 for initiating filament change.
762
+ * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
762 763
  *
763 764
  * Requires an LCD display.
764 765
  * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
765 766
  */
766
-//#define FILAMENT_CHANGE_FEATURE
767
-#if ENABLED(FILAMENT_CHANGE_FEATURE)
768
-  #define FILAMENT_CHANGE_X_POS 30            // X position of hotend
769
-  #define FILAMENT_CHANGE_Y_POS 10            // Y position of hotend
770
-  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
771
-  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
772
-  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
773
-  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
774
-  #define FILAMENT_CHANGE_RETRACT_LENGTH 1    // Initial retract in mm
767
+//#define ADVANCED_PAUSE_FEATURE
768
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
769
+  #define PAUSE_PARK_X_POS 30                 // X position of hotend
770
+  #define PAUSE_PARK_Y_POS 10                 // Y position of hotend
771
+  #define PAUSE_PARK_Z_ADD 10                 // Z addition of hotend (lift)
772
+  #define PAUSE_PARK_XY_FEEDRATE 100          // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
773
+  #define PAUSE_PARK_Z_FEEDRATE 5             // Z axis feedrate in mm/s (not used for delta printers)
774
+  #define PAUSE_PARK_RETRACT_FEEDRATE 60      // Initial retract feedrate in mm/s
775
+  #define PAUSE_PARK_RETRACT_LENGTH 1         // Initial retract in mm
775 776
                                               // It is a short retract used immediately after print interrupt before move to filament exchange position
776 777
   #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
777 778
   //#define FILAMENT_CHANGE_UNLOAD_LENGTH 100 // Unload filament length from hotend in mm
@@ -782,14 +783,14 @@
782 783
   #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
783 784
                                               // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
784 785
                                               // Short or zero length for printers without bowden where loading is not used
785
-  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
786
-  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
786
+  #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3   // Extrude filament feedrate in mm/s - must be slower than load feedrate
787
+  #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50    // Extrude filament length in mm after filament is loaded over the hotend,
787 788
                                               // 0 to disable for manual extrusion
788 789
                                               // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
789 790
                                               // or until outcoming filament color is not clear for filament color change
790
-  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45   // Turn off nozzle if user doesn't change filament within this time limit in seconds
791
+  #define PAUSE_PARK_NOZZLE_TIMEOUT 45        // Turn off nozzle if user doesn't change filament within this time limit in seconds
791 792
   #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
792
-  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT  // Enable to have stepper motors hold position during filament change
793
+  #define PAUSE_PARK_NO_STEPPER_TIMEOUT       // Enable to have stepper motors hold position during filament change
793 794
                                               // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
794 795
   //#define PARK_HEAD_ON_PAUSE                // Go to filament change position on pause, return to print position on resume
795 796
 #endif

+ 16
- 15
Marlin/example_configurations/Felix/Configuration_adv.h 查看文件

@@ -756,22 +756,23 @@
756 756
 #endif
757 757
 
758 758
 /**
759
- * Filament Change
760
- * Experimental filament change support.
759
+ * Advanced Pause
760
+ * Experimental feature for filament change support and for parking the nozzle when paused.
761 761
  * Adds the GCode M600 for initiating filament change.
762
+ * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
762 763
  *
763 764
  * Requires an LCD display.
764 765
  * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
765 766
  */
766
-//#define FILAMENT_CHANGE_FEATURE
767
-#if ENABLED(FILAMENT_CHANGE_FEATURE)
768
-  #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
769
-  #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
770
-  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
771
-  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
772
-  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
773
-  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
774
-  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
767
+//#define ADVANCED_PAUSE_FEATURE
768
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
769
+  #define PAUSE_PARK_X_POS 3                  // X position of hotend
770
+  #define PAUSE_PARK_Y_POS 3                  // Y position of hotend
771
+  #define PAUSE_PARK_Z_ADD 10                 // Z addition of hotend (lift)
772
+  #define PAUSE_PARK_XY_FEEDRATE 100          // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
773
+  #define PAUSE_PARK_Z_FEEDRATE 5             // Z axis feedrate in mm/s (not used for delta printers)
774
+  #define PAUSE_PARK_RETRACT_FEEDRATE 60      // Initial retract feedrate in mm/s
775
+  #define PAUSE_PARK_RETRACT_LENGTH 2         // Initial retract in mm
775 776
                                               // It is a short retract used immediately after print interrupt before move to filament exchange position
776 777
   #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
777 778
   #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
@@ -782,14 +783,14 @@
782 783
   #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
783 784
                                               // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
784 785
                                               // Short or zero length for printers without bowden where loading is not used
785
-  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
786
-  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
786
+  #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3   // Extrude filament feedrate in mm/s - must be slower than load feedrate
787
+  #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50    // Extrude filament length in mm after filament is loaded over the hotend,
787 788
                                               // 0 to disable for manual extrusion
788 789
                                               // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
789 790
                                               // or until outcoming filament color is not clear for filament color change
790
-  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45   // Turn off nozzle if user doesn't change filament within this time limit in seconds
791
+  #define PAUSE_PARK_NOZZLE_TIMEOUT 45        // Turn off nozzle if user doesn't change filament within this time limit in seconds
791 792
   #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
792
-  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT  // Enable to have stepper motors hold position during filament change
793
+  #define PAUSE_PARK_NO_STEPPER_TIMEOUT       // Enable to have stepper motors hold position during filament change
793 794
                                               // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
794 795
   //#define PARK_HEAD_ON_PAUSE                // Go to filament change position on pause, return to print position on resume
795 796
 #endif

+ 19
- 16
Marlin/example_configurations/FolgerTech-i3-2020/Configuration_adv.h 查看文件

@@ -763,22 +763,25 @@
763 763
 #endif
764 764
 
765 765
 /**
766
- * Filament Change
767
- * Experimental filament change support.
766
+ * Advanced Pause
767
+ * Experimental feature for filament change support and for parking the nozzle when paused.
768 768
  * Adds the GCode M600 for initiating filament change.
769
+ * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
769 770
  *
770 771
  * Requires an LCD display.
771 772
  * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
772 773
  */
773
-#define FILAMENT_CHANGE_FEATURE
774
-#if ENABLED(FILAMENT_CHANGE_FEATURE)
775
-  #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
776
-  #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
777
-  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
778
-  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
779
-  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
780
-  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
781
-  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
774
+
775
+#define ADVANCED_PAUSE_FEATURE
776
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
777
+  #define PAUSE_PARK_X_POS 10                 // X position of hotend
778
+  #define PAUSE_PARK_Y_POS 10                 // Y position of hotend
779
+  #define PAUSE_PARK_Z_ADD 10                 // Z addition of hotend (lift)
780
+  #define PAUSE_PARK_XY_FEEDRATE 100          // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
781
+  #define PAUSE_PARK_Z_FEEDRATE 5             // Z axis feedrate in mm/s (not used for delta printers)
782
+  #define PAUSE_PARK_RETRACT_FEEDRATE 60      // Initial retract feedrate in mm/s
783
+  #define PAUSE_PARK_RETRACT_LENGTH 2         // Initial retract in mm
784
+ 
782 785
                                               // It is a short retract used immediately after print interrupt before move to filament exchange position
783 786
   #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
784 787
   #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
@@ -789,16 +792,16 @@
789 792
   #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
790 793
                                               // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
791 794
                                               // Short or zero length for printers without bowden where loading is not used
792
-  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
793
-  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
795
+  #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3   // Extrude filament feedrate in mm/s - must be slower than load feedrate
796
+  #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50    // Extrude filament length in mm after filament is loaded over the hotend,
794 797
                                               // 0 to disable for manual extrusion
795 798
                                               // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
796 799
                                               // or until outcoming filament color is not clear for filament color change
797
-  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45   // Turn off nozzle if user doesn't change filament within this time limit in seconds
800
+  #define PAUSE_PARK_NOZZLE_TIMEOUT 45        // Turn off nozzle if user doesn't change filament within this time limit in seconds
798 801
   #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
799
-  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT  // Enable to have stepper motors hold position during filament change
802
+  #define PAUSE_PARK_NO_STEPPER_TIMEOUT       // Enable to have stepper motors hold position during filament change
800 803
                                               // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
801
-  //#define PARK_HEAD_ON_PAUSE                // Go to filament change position on pause, return to print position on resume
804
+  #define PARK_HEAD_ON_PAUSE                  // Go to filament change position on pause, return to print position on resume
802 805
 #endif
803 806
 
804 807
 // @section tmc

+ 16
- 15
Marlin/example_configurations/Hephestos/Configuration_adv.h 查看文件

@@ -756,22 +756,23 @@
756 756
 #endif
757 757
 
758 758
 /**
759
- * Filament Change
760
- * Experimental filament change support.
759
+ * Advanced Pause
760
+ * Experimental feature for filament change support and for parking the nozzle when paused.
761 761
  * Adds the GCode M600 for initiating filament change.
762
+ * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
762 763
  *
763 764
  * Requires an LCD display.
764 765
  * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
765 766
  */
766
-//#define FILAMENT_CHANGE_FEATURE
767
-#if ENABLED(FILAMENT_CHANGE_FEATURE)
768
-  #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
769
-  #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
770
-  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
771
-  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
772
-  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
773
-  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
774
-  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
767
+//#define ADVANCED_PAUSE_FEATURE
768
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
769
+  #define PAUSE_PARK_X_POS 3                  // X position of hotend
770
+  #define PAUSE_PARK_Y_POS 3                  // Y position of hotend
771
+  #define PAUSE_PARK_Z_ADD 10                 // Z addition of hotend (lift)
772
+  #define PAUSE_PARK_XY_FEEDRATE 100          // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
773
+  #define PAUSE_PARK_Z_FEEDRATE 5             // Z axis feedrate in mm/s (not used for delta printers)
774
+  #define PAUSE_PARK_RETRACT_FEEDRATE 60      // Initial retract feedrate in mm/s
775
+  #define PAUSE_PARK_RETRACT_LENGTH 2         // Initial retract in mm
775 776
                                               // It is a short retract used immediately after print interrupt before move to filament exchange position
776 777
   #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
777 778
   #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
@@ -782,14 +783,14 @@
782 783
   #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
783 784
                                               // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
784 785
                                               // Short or zero length for printers without bowden where loading is not used
785
-  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
786
-  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
786
+  #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3   // Extrude filament feedrate in mm/s - must be slower than load feedrate
787
+  #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50    // Extrude filament length in mm after filament is loaded over the hotend,
787 788
                                               // 0 to disable for manual extrusion
788 789
                                               // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
789 790
                                               // or until outcoming filament color is not clear for filament color change
790
-  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45   // Turn off nozzle if user doesn't change filament within this time limit in seconds
791
+  #define PAUSE_PARK_NOZZLE_TIMEOUT 45        // Turn off nozzle if user doesn't change filament within this time limit in seconds
791 792
   #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
792
-  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT  // Enable to have stepper motors hold position during filament change
793
+  #define PAUSE_PARK_NO_STEPPER_TIMEOUT       // Enable to have stepper motors hold position during filament change
793 794
                                               // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
794 795
   //#define PARK_HEAD_ON_PAUSE                // Go to filament change position on pause, return to print position on resume
795 796
 #endif

+ 16
- 15
Marlin/example_configurations/Hephestos_2/Configuration_adv.h 查看文件

@@ -740,22 +740,23 @@
740 740
 #endif
741 741
 
742 742
 /**
743
- * Filament Change
744
- * Experimental filament change support.
743
+ * Advanced Pause
744
+ * Experimental feature for filament change support and for parking the nozzle when paused.
745 745
  * Adds the GCode M600 for initiating filament change.
746
+ * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
746 747
  *
747 748
  * Requires an LCD display.
748 749
  * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
749 750
  */
750
-//#define FILAMENT_CHANGE_FEATURE
751
-#if ENABLED(FILAMENT_CHANGE_FEATURE)
752
-  #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
753
-  #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
754
-  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
755
-  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
756
-  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
757
-  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
758
-  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
751
+//#define ADVANCED_PAUSE_FEATURE
752
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
753
+  #define PAUSE_PARK_X_POS 3                  // X position of hotend
754
+  #define PAUSE_PARK_Y_POS 3                  // Y position of hotend
755
+  #define PAUSE_PARK_Z_ADD 10                 // Z addition of hotend (lift)
756
+  #define PAUSE_PARK_XY_FEEDRATE 100          // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
757
+  #define PAUSE_PARK_Z_FEEDRATE 5             // Z axis feedrate in mm/s (not used for delta printers)
758
+  #define PAUSE_PARK_RETRACT_FEEDRATE 60      // Initial retract feedrate in mm/s
759
+  #define PAUSE_PARK_RETRACT_LENGTH 2         // Initial retract in mm
759 760
                                               // It is a short retract used immediately after print interrupt before move to filament exchange position
760 761
   #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
761 762
   #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
@@ -766,14 +767,14 @@
766 767
   #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
767 768
                                               // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
768 769
                                               // Short or zero length for printers without bowden where loading is not used
769
-  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
770
-  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
770
+  #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3   // Extrude filament feedrate in mm/s - must be slower than load feedrate
771
+  #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50    // Extrude filament length in mm after filament is loaded over the hotend,
771 772
                                               // 0 to disable for manual extrusion
772 773
                                               // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
773 774
                                               // or until outcoming filament color is not clear for filament color change
774
-  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45   // Turn off nozzle if user doesn't change filament within this time limit in seconds
775
+  #define PAUSE_PARK_NOZZLE_TIMEOUT 45        // Turn off nozzle if user doesn't change filament within this time limit in seconds
775 776
   #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
776
-  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT  // Enable to have stepper motors hold position during filament change
777
+  #define PAUSE_PARK_NO_STEPPER_TIMEOUT       // Enable to have stepper motors hold position during filament change
777 778
                                               // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
778 779
   //#define PARK_HEAD_ON_PAUSE                // Go to filament change position on pause, return to print position on resume
779 780
 #endif

+ 16
- 15
Marlin/example_configurations/K8200/Configuration_adv.h 查看文件

@@ -769,22 +769,23 @@
769 769
 #endif
770 770
 
771 771
 /**
772
- * Filament Change
773
- * Experimental filament change support.
772
+ * Advanced Pause
773
+ * Experimental feature for filament change support and for parking the nozzle when paused.
774 774
  * Adds the GCode M600 for initiating filament change.
775
+ * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
775 776
  *
776 777
  * Requires an LCD display.
777 778
  * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
778 779
  */
779
-//#define FILAMENT_CHANGE_FEATURE
780
-#if ENABLED(FILAMENT_CHANGE_FEATURE)
781
-  #define FILAMENT_CHANGE_X_POS (X_MAX_POS-3) // X position of hotend
782
-  #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
783
-  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
784
-  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
785
-  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
786
-  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
787
-  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
780
+//#define ADVANCED_PAUSE_FEATURE
781
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
782
+  #define PAUSE_PARK_X_POS (X_MAX_POS-3)      // X position of hotend
783
+  #define PAUSE_PARK_Y_POS 3                  // Y position of hotend
784
+  #define PAUSE_PARK_Z_ADD 10                 // Z addition of hotend (lift)
785
+  #define PAUSE_PARK_XY_FEEDRATE 100          // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
786
+  #define PAUSE_PARK_Z_FEEDRATE 5             // Z axis feedrate in mm/s (not used for delta printers)
787
+  #define PAUSE_PARK_RETRACT_FEEDRATE 60      // Initial retract feedrate in mm/s
788
+  #define PAUSE_PARK_RETRACT_LENGTH 2         // Initial retract in mm
788 789
                                               // It is a short retract used immediately after print interrupt before move to filament exchange position
789 790
   #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
790 791
   #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
@@ -795,14 +796,14 @@
795 796
   #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
796 797
                                               // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
797 798
                                               // Short or zero length for printers without bowden where loading is not used
798
-  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
799
-  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
799
+  #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3   // Extrude filament feedrate in mm/s - must be slower than load feedrate
800
+  #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50    // Extrude filament length in mm after filament is loaded over the hotend,
800 801
                                               // 0 to disable for manual extrusion
801 802
                                               // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
802 803
                                               // or until outcoming filament color is not clear for filament color change
803
-  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45   // Turn off nozzle if user doesn't change filament within this time limit in seconds
804
+  #define PAUSE_PARK_NOZZLE_TIMEOUT 45        // Turn off nozzle if user doesn't change filament within this time limit in seconds
804 805
   #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
805
-  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT  // Enable to have stepper motors hold position during filament change
806
+  #define PAUSE_PARK_NO_STEPPER_TIMEOUT       // Enable to have stepper motors hold position during filament change
806 807
                                               // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
807 808
   //#define PARK_HEAD_ON_PAUSE                // Go to filament change position on pause, return to print position on resume
808 809
 #endif

+ 16
- 15
Marlin/example_configurations/K8400/Configuration_adv.h 查看文件

@@ -756,22 +756,23 @@
756 756
 #endif
757 757
 
758 758
 /**
759
- * Filament Change
760
- * Experimental filament change support.
759
+ * Advanced Pause
760
+ * Experimental feature for filament change support and for parking the nozzle when paused.
761 761
  * Adds the GCode M600 for initiating filament change.
762
+ * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
762 763
  *
763 764
  * Requires an LCD display.
764 765
  * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
765 766
  */
766
-//#define FILAMENT_CHANGE_FEATURE
767
-#if ENABLED(FILAMENT_CHANGE_FEATURE)
768
-  #define FILAMENT_CHANGE_X_POS 100           // X position of hotend
769
-  #define FILAMENT_CHANGE_Y_POS 100           // Y position of hotend
770
-  #define FILAMENT_CHANGE_Z_ADD 20            // Z addition of hotend (lift)
771
-  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
772
-  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
773
-  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
774
-  #define FILAMENT_CHANGE_RETRACT_LENGTH 5    // Initial retract in mm
767
+//#define ADVANCED_PAUSE_FEATURE
768
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
769
+  #define PAUSE_PARK_X_POS 100                // X position of hotend
770
+  #define PAUSE_PARK_Y_POS 100                // Y position of hotend
771
+  #define PAUSE_PARK_Z_ADD 20                 // Z addition of hotend (lift)
772
+  #define PAUSE_PARK_XY_FEEDRATE 100          // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
773
+  #define PAUSE_PARK_Z_FEEDRATE 5             // Z axis feedrate in mm/s (not used for delta printers)
774
+  #define PAUSE_PARK_RETRACT_FEEDRATE 60      // Initial retract feedrate in mm/s
775
+  #define PAUSE_PARK_RETRACT_LENGTH 5         // Initial retract in mm
775 776
                                               // It is a short retract used immediately after print interrupt before move to filament exchange position
776 777
   #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
777 778
   #define FILAMENT_CHANGE_UNLOAD_LENGTH 600   // Unload filament length from hotend in mm
@@ -782,14 +783,14 @@
782 783
   #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
783 784
                                               // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
784 785
                                               // Short or zero length for printers without bowden where loading is not used
785
-  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
786
-  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 100  // Extrude filament length in mm after filament is loaded over the hotend,
786
+  #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3   // Extrude filament feedrate in mm/s - must be slower than load feedrate
787
+  #define ADVANCED_PAUSE_EXTRUDE_LENGTH 100   // Extrude filament length in mm after filament is loaded over the hotend,
787 788
                                               // 0 to disable for manual extrusion
788 789
                                               // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
789 790
                                               // or until outcoming filament color is not clear for filament color change
790
-  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45   // Turn off nozzle if user doesn't change filament within this time limit in seconds
791
+  #define PAUSE_PARK_NOZZLE_TIMEOUT 45        // Turn off nozzle if user doesn't change filament within this time limit in seconds
791 792
   #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
792
-  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT  // Enable to have stepper motors hold position during filament change
793
+  #define PAUSE_PARK_NO_STEPPER_TIMEOUT       // Enable to have stepper motors hold position during filament change
793 794
                                               // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
794 795
   //#define PARK_HEAD_ON_PAUSE                // Go to filament change position on pause, return to print position on resume
795 796
 #endif

+ 16
- 15
Marlin/example_configurations/RigidBot/Configuration_adv.h 查看文件

@@ -756,22 +756,23 @@
756 756
 #endif
757 757
 
758 758
 /**
759
- * Filament Change
760
- * Experimental filament change support.
759
+ * Advanced Pause
760
+ * Experimental feature for filament change support and for parking the nozzle when paused.
761 761
  * Adds the GCode M600 for initiating filament change.
762
+ * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
762 763
  *
763 764
  * Requires an LCD display.
764 765
  * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
765 766
  */
766
-//#define FILAMENT_CHANGE_FEATURE
767
-#if ENABLED(FILAMENT_CHANGE_FEATURE)
768
-  #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
769
-  #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
770
-  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
771
-  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
772
-  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
773
-  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
774
-  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
767
+//#define ADVANCED_PAUSE_FEATURE
768
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
769
+  #define PAUSE_PARK_X_POS 3                  // X position of hotend
770
+  #define PAUSE_PARK_Y_POS 3                  // Y position of hotend
771
+  #define PAUSE_PARK_Z_ADD 10                 // Z addition of hotend (lift)
772
+  #define PAUSE_PARK_XY_FEEDRATE 100          // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
773
+  #define PAUSE_PARK_Z_FEEDRATE 5             // Z axis feedrate in mm/s (not used for delta printers)
774
+  #define PAUSE_PARK_RETRACT_FEEDRATE 60      // Initial retract feedrate in mm/s
775
+  #define PAUSE_PARK_RETRACT_LENGTH 2         // Initial retract in mm
775 776
                                               // It is a short retract used immediately after print interrupt before move to filament exchange position
776 777
   #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
777 778
   #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
@@ -782,14 +783,14 @@
782 783
   #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
783 784
                                               // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
784 785
                                               // Short or zero length for printers without bowden where loading is not used
785
-  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
786
-  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
786
+  #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3   // Extrude filament feedrate in mm/s - must be slower than load feedrate
787
+  #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50    // Extrude filament length in mm after filament is loaded over the hotend,
787 788
                                               // 0 to disable for manual extrusion
788 789
                                               // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
789 790
                                               // or until outcoming filament color is not clear for filament color change
790
-  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45   // Turn off nozzle if user doesn't change filament within this time limit in seconds
791
+  #define PAUSE_PARK_NOZZLE_TIMEOUT 45        // Turn off nozzle if user doesn't change filament within this time limit in seconds
791 792
   #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
792
-  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT  // Enable to have stepper motors hold position during filament change
793
+  #define PAUSE_PARK_NO_STEPPER_TIMEOUT       // Enable to have stepper motors hold position during filament change
793 794
                                               // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
794 795
   //#define PARK_HEAD_ON_PAUSE                // Go to filament change position on pause, return to print position on resume
795 796
 #endif

+ 16
- 15
Marlin/example_configurations/SCARA/Configuration_adv.h 查看文件

@@ -756,22 +756,23 @@
756 756
 #endif
757 757
 
758 758
 /**
759
- * Filament Change
760
- * Experimental filament change support.
759
+ * Advanced Pause
760
+ * Experimental feature for filament change support and for parking the nozzle when paused.
761 761
  * Adds the GCode M600 for initiating filament change.
762
+ * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
762 763
  *
763 764
  * Requires an LCD display.
764 765
  * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
765 766
  */
766
-//#define FILAMENT_CHANGE_FEATURE
767
-#if ENABLED(FILAMENT_CHANGE_FEATURE)
768
-  #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
769
-  #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
770
-  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
771
-  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
772
-  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
773
-  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
774
-  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
767
+//#define ADVANCED_PAUSE_FEATURE
768
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
769
+  #define PAUSE_PARK_X_POS 3                  // X position of hotend
770
+  #define PAUSE_PARK_Y_POS 3                  // Y position of hotend
771
+  #define PAUSE_PARK_Z_ADD 10                 // Z addition of hotend (lift)
772
+  #define PAUSE_PARK_XY_FEEDRATE 100          // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
773
+  #define PAUSE_PARK_Z_FEEDRATE 5             // Z axis feedrate in mm/s (not used for delta printers)
774
+  #define PAUSE_PARK_RETRACT_FEEDRATE 60      // Initial retract feedrate in mm/s
775
+  #define PAUSE_PARK_RETRACT_LENGTH 2         // Initial retract in mm
775 776
                                               // It is a short retract used immediately after print interrupt before move to filament exchange position
776 777
   #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
777 778
   #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
@@ -782,14 +783,14 @@
782 783
   #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
783 784
                                               // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
784 785
                                               // Short or zero length for printers without bowden where loading is not used
785
-  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
786
-  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
786
+  #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3   // Extrude filament feedrate in mm/s - must be slower than load feedrate
787
+  #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50    // Extrude filament length in mm after filament is loaded over the hotend,
787 788
                                               // 0 to disable for manual extrusion
788 789
                                               // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
789 790
                                               // or until outcoming filament color is not clear for filament color change
790
-  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45   // Turn off nozzle if user doesn't change filament within this time limit in seconds
791
+  #define PAUSE_PARK_NOZZLE_TIMEOUT 45        // Turn off nozzle if user doesn't change filament within this time limit in seconds
791 792
   #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
792
-  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT  // Enable to have stepper motors hold position during filament change
793
+  #define PAUSE_PARK_NO_STEPPER_TIMEOUT       // Enable to have stepper motors hold position during filament change
793 794
                                               // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
794 795
   //#define PARK_HEAD_ON_PAUSE                // Go to filament change position on pause, return to print position on resume
795 796
 #endif

+ 16
- 15
Marlin/example_configurations/TAZ4/Configuration_adv.h 查看文件

@@ -756,22 +756,23 @@
756 756
 #endif
757 757
 
758 758
 /**
759
- * Filament Change
760
- * Experimental filament change support.
759
+ * Advanced Pause
760
+ * Experimental feature for filament change support and for parking the nozzle when paused.
761 761
  * Adds the GCode M600 for initiating filament change.
762
+ * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
762 763
  *
763 764
  * Requires an LCD display.
764 765
  * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
765 766
  */
766
-//#define FILAMENT_CHANGE_FEATURE
767
-#if ENABLED(FILAMENT_CHANGE_FEATURE)
768
-  #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
769
-  #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
770
-  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
771
-  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
772
-  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
773
-  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
774
-  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
767
+//#define ADVANCED_PAUSE_FEATURE
768
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
769
+  #define PAUSE_PARK_X_POS 3                  // X position of hotend
770
+  #define PAUSE_PARK_Y_POS 3                  // Y position of hotend
771
+  #define PAUSE_PARK_Z_ADD 10                 // Z addition of hotend (lift)
772
+  #define PAUSE_PARK_XY_FEEDRATE 100          // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
773
+  #define PAUSE_PARK_Z_FEEDRATE 5             // Z axis feedrate in mm/s (not used for delta printers)
774
+  #define PAUSE_PARK_RETRACT_FEEDRATE 60      // Initial retract feedrate in mm/s
775
+  #define PAUSE_PARK_RETRACT_LENGTH 2         // Initial retract in mm
775 776
                                               // It is a short retract used immediately after print interrupt before move to filament exchange position
776 777
   #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
777 778
   #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
@@ -782,14 +783,14 @@
782 783
   #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
783 784
                                               // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
784 785
                                               // Short or zero length for printers without bowden where loading is not used
785
-  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
786
-  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
786
+  #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3   // Extrude filament feedrate in mm/s - must be slower than load feedrate
787
+  #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50    // Extrude filament length in mm after filament is loaded over the hotend,
787 788
                                               // 0 to disable for manual extrusion
788 789
                                               // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
789 790
                                               // or until outcoming filament color is not clear for filament color change
790
-  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45   // Turn off nozzle if user doesn't change filament within this time limit in seconds
791
+  #define PAUSE_PARK_NOZZLE_TIMEOUT 45        // Turn off nozzle if user doesn't change filament within this time limit in seconds
791 792
   #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
792
-  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT  // Enable to have stepper motors hold position during filament change
793
+  #define PAUSE_PARK_NO_STEPPER_TIMEOUT       // Enable to have stepper motors hold position during filament change
793 794
                                               // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
794 795
   //#define PARK_HEAD_ON_PAUSE                // Go to filament change position on pause, return to print position on resume
795 796
 #endif

+ 16
- 15
Marlin/example_configurations/TinyBoy2/Configuration_adv.h 查看文件

@@ -759,22 +759,23 @@
759 759
 #endif
760 760
 
761 761
 /**
762
- * Filament Change
763
- * Experimental filament change support.
762
+ * Advanced Pause
763
+ * Experimental feature for filament change support and for parking the nozzle when paused.
764 764
  * Adds the GCode M600 for initiating filament change.
765
+ * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
765 766
  *
766 767
  * Requires an LCD display.
767 768
  * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
768 769
  */
769
-//#define FILAMENT_CHANGE_FEATURE
770
-#if ENABLED(FILAMENT_CHANGE_FEATURE)
771
-  #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
772
-  #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
773
-  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
774
-  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
775
-  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
776
-  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
777
-  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
770
+//#define ADVANCED_PAUSE_FEATURE
771
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
772
+  #define PAUSE_PARK_X_POS 3                  // X position of hotend
773
+  #define PAUSE_PARK_Y_POS 3                  // Y position of hotend
774
+  #define PAUSE_PARK_Z_ADD 10                 // Z addition of hotend (lift)
775
+  #define PAUSE_PARK_XY_FEEDRATE 100          // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
776
+  #define PAUSE_PARK_Z_FEEDRATE 5             // Z axis feedrate in mm/s (not used for delta printers)
777
+  #define PAUSE_PARK_RETRACT_FEEDRATE 60      // Initial retract feedrate in mm/s
778
+  #define PAUSE_PARK_RETRACT_LENGTH 2         // Initial retract in mm
778 779
                                               // It is a short retract used immediately after print interrupt before move to filament exchange position
779 780
   #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
780 781
   #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
@@ -785,14 +786,14 @@
785 786
   #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
786 787
                                               // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
787 788
                                               // Short or zero length for printers without bowden where loading is not used
788
-  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
789
-  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
789
+  #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3   // Extrude filament feedrate in mm/s - must be slower than load feedrate
790
+  #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50    // Extrude filament length in mm after filament is loaded over the hotend,
790 791
                                               // 0 to disable for manual extrusion
791 792
                                               // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
792 793
                                               // or until outcoming filament color is not clear for filament color change
793
-  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45   // Turn off nozzle if user doesn't change filament within this time limit in seconds
794
+  #define PAUSE_PARK_NOZZLE_TIMEOUT 45        // Turn off nozzle if user doesn't change filament within this time limit in seconds
794 795
   #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
795
-  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT  // Enable to have stepper motors hold position during filament change
796
+  #define PAUSE_PARK_NO_STEPPER_TIMEOUT       // Enable to have stepper motors hold position during filament change
796 797
                                               // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
797 798
   //#define PARK_HEAD_ON_PAUSE                // Go to filament change position on pause, return to print position on resume
798 799
 #endif

+ 16
- 15
Marlin/example_configurations/WITBOX/Configuration_adv.h 查看文件

@@ -756,22 +756,23 @@
756 756
 #endif
757 757
 
758 758
 /**
759
- * Filament Change
760
- * Experimental filament change support.
759
+ * Advanced Pause
760
+ * Experimental feature for filament change support and for parking the nozzle when paused.
761 761
  * Adds the GCode M600 for initiating filament change.
762
+ * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
762 763
  *
763 764
  * Requires an LCD display.
764 765
  * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
765 766
  */
766
-//#define FILAMENT_CHANGE_FEATURE
767
-#if ENABLED(FILAMENT_CHANGE_FEATURE)
768
-  #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
769
-  #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
770
-  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
771
-  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
772
-  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
773
-  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
774
-  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
767
+//#define ADVANCED_PAUSE_FEATURE
768
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
769
+  #define PAUSE_PARK_X_POS 3                  // X position of hotend
770
+  #define PAUSE_PARK_Y_POS 3                  // Y position of hotend
771
+  #define PAUSE_PARK_Z_ADD 10                 // Z addition of hotend (lift)
772
+  #define PAUSE_PARK_XY_FEEDRATE 100          // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
773
+  #define PAUSE_PARK_Z_FEEDRATE 5             // Z axis feedrate in mm/s (not used for delta printers)
774
+  #define PAUSE_PARK_RETRACT_FEEDRATE 60      // Initial retract feedrate in mm/s
775
+  #define PAUSE_PARK_RETRACT_LENGTH 2         // Initial retract in mm
775 776
                                               // It is a short retract used immediately after print interrupt before move to filament exchange position
776 777
   #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
777 778
   #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
@@ -782,14 +783,14 @@
782 783
   #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
783 784
                                               // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
784 785
                                               // Short or zero length for printers without bowden where loading is not used
785
-  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
786
-  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
786
+  #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3   // Extrude filament feedrate in mm/s - must be slower than load feedrate
787
+  #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50    // Extrude filament length in mm after filament is loaded over the hotend,
787 788
                                               // 0 to disable for manual extrusion
788 789
                                               // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
789 790
                                               // or until outcoming filament color is not clear for filament color change
790
-  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45   // Turn off nozzle if user doesn't change filament within this time limit in seconds
791
+  #define PAUSE_PARK_NOZZLE_TIMEOUT 45        // Turn off nozzle if user doesn't change filament within this time limit in seconds
791 792
   #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
792
-  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT  // Enable to have stepper motors hold position during filament change
793
+  #define PAUSE_PARK_NO_STEPPER_TIMEOUT       // Enable to have stepper motors hold position during filament change
793 794
                                               // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
794 795
   //#define PARK_HEAD_ON_PAUSE                // Go to filament change position on pause, return to print position on resume
795 796
 #endif

+ 16
- 15
Marlin/example_configurations/delta/FLSUN/auto_calibrate/Configuration_adv.h 查看文件

@@ -761,22 +761,23 @@
761 761
 #endif
762 762
 
763 763
 /**
764
- * Filament Change
765
- * Experimental filament change support.
764
+ * Advanced Pause
765
+ * Experimental feature for filament change support and for parking the nozzle when paused.
766 766
  * Adds the GCode M600 for initiating filament change.
767
+ * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
767 768
  *
768 769
  * Requires an LCD display.
769 770
  * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
770 771
  */
771
-//#define FILAMENT_CHANGE_FEATURE
772
-#if ENABLED(FILAMENT_CHANGE_FEATURE)
773
-  #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
774
-  #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
775
-  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
776
-  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
777
-  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
778
-  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
779
-  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
772
+//#define ADVANCED_PAUSE_FEATURE
773
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
774
+  #define PAUSE_PARK_X_POS 3                  // X position of hotend
775
+  #define PAUSE_PARK_Y_POS 3                  // Y position of hotend
776
+  #define PAUSE_PARK_Z_ADD 10                 // Z addition of hotend (lift)
777
+  #define PAUSE_PARK_XY_FEEDRATE 100          // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
778
+  #define PAUSE_PARK_Z_FEEDRATE 5             // Z axis feedrate in mm/s (not used for delta printers)
779
+  #define PAUSE_PARK_RETRACT_FEEDRATE 60      // Initial retract feedrate in mm/s
780
+  #define PAUSE_PARK_RETRACT_LENGTH 2         // Initial retract in mm
780 781
                                               // It is a short retract used immediately after print interrupt before move to filament exchange position
781 782
   #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
782 783
   #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
@@ -787,14 +788,14 @@
787 788
   #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
788 789
                                               // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
789 790
                                               // Short or zero length for printers without bowden where loading is not used
790
-  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
791
-  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
791
+  #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3   // Extrude filament feedrate in mm/s - must be slower than load feedrate
792
+  #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50    // Extrude filament length in mm after filament is loaded over the hotend,
792 793
                                               // 0 to disable for manual extrusion
793 794
                                               // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
794 795
                                               // or until outcoming filament color is not clear for filament color change
795
-  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45   // Turn off nozzle if user doesn't change filament within this time limit in seconds
796
+  #define PAUSE_PARK_NOZZLE_TIMEOUT 45        // Turn off nozzle if user doesn't change filament within this time limit in seconds
796 797
   #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
797
-  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT  // Enable to have stepper motors hold position during filament change
798
+  #define PAUSE_PARK_NO_STEPPER_TIMEOUT       // Enable to have stepper motors hold position during filament change
798 799
                                               // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
799 800
   //#define PARK_HEAD_ON_PAUSE                // Go to filament change position on pause, return to print position on resume
800 801
 #endif

+ 16
- 15
Marlin/example_configurations/delta/FLSUN/kossel_mini/Configuration_adv.h 查看文件

@@ -760,22 +760,23 @@
760 760
 #endif
761 761
 
762 762
 /**
763
- * Filament Change
764
- * Experimental filament change support.
763
+ * Advanced Pause
764
+ * Experimental feature for filament change support and for parking the nozzle when paused.
765 765
  * Adds the GCode M600 for initiating filament change.
766
+ * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
766 767
  *
767 768
  * Requires an LCD display.
768 769
  * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
769 770
  */
770
-//#define FILAMENT_CHANGE_FEATURE
771
-#if ENABLED(FILAMENT_CHANGE_FEATURE)
772
-  #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
773
-  #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
774
-  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
775
-  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
776
-  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
777
-  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
778
-  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
771
+//#define ADVANCED_PAUSE_FEATURE
772
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
773
+  #define PAUSE_PARK_X_POS 3                  // X position of hotend
774
+  #define PAUSE_PARK_Y_POS 3                  // Y position of hotend
775
+  #define PAUSE_PARK_Z_ADD 10                 // Z addition of hotend (lift)
776
+  #define PAUSE_PARK_XY_FEEDRATE 100          // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
777
+  #define PAUSE_PARK_Z_FEEDRATE 5             // Z axis feedrate in mm/s (not used for delta printers)
778
+  #define PAUSE_PARK_RETRACT_FEEDRATE 60      // Initial retract feedrate in mm/s
779
+  #define PAUSE_PARK_RETRACT_LENGTH 2         // Initial retract in mm
779 780
                                               // It is a short retract used immediately after print interrupt before move to filament exchange position
780 781
   #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
781 782
   #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
@@ -786,14 +787,14 @@
786 787
   #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
787 788
                                               // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
788 789
                                               // Short or zero length for printers without bowden where loading is not used
789
-  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
790
-  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
790
+  #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3   // Extrude filament feedrate in mm/s - must be slower than load feedrate
791
+  #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50    // Extrude filament length in mm after filament is loaded over the hotend,
791 792
                                               // 0 to disable for manual extrusion
792 793
                                               // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
793 794
                                               // or until outcoming filament color is not clear for filament color change
794
-  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45   // Turn off nozzle if user doesn't change filament within this time limit in seconds
795
+  #define PAUSE_PARK_NOZZLE_TIMEOUT 45        // Turn off nozzle if user doesn't change filament within this time limit in seconds
795 796
   #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
796
-  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT  // Enable to have stepper motors hold position during filament change
797
+  #define PAUSE_PARK_NO_STEPPER_TIMEOUT       // Enable to have stepper motors hold position during filament change
797 798
                                               // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
798 799
   //#define PARK_HEAD_ON_PAUSE                // Go to filament change position on pause, return to print position on resume
799 800
 #endif

+ 16
- 15
Marlin/example_configurations/delta/generic/Configuration_adv.h 查看文件

@@ -758,22 +758,23 @@
758 758
 #endif
759 759
 
760 760
 /**
761
- * Filament Change
762
- * Experimental filament change support.
761
+ * Advanced Pause
762
+ * Experimental feature for filament change support and for parking the nozzle when paused.
763 763
  * Adds the GCode M600 for initiating filament change.
764
+ * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
764 765
  *
765 766
  * Requires an LCD display.
766 767
  * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
767 768
  */
768
-//#define FILAMENT_CHANGE_FEATURE
769
-#if ENABLED(FILAMENT_CHANGE_FEATURE)
770
-  #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
771
-  #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
772
-  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
773
-  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
774
-  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
775
-  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
776
-  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
769
+//#define ADVANCED_PAUSE_FEATURE
770
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
771
+  #define PAUSE_PARK_X_POS 3                  // X position of hotend
772
+  #define PAUSE_PARK_Y_POS 3                  // Y position of hotend
773
+  #define PAUSE_PARK_Z_ADD 10                 // Z addition of hotend (lift)
774
+  #define PAUSE_PARK_XY_FEEDRATE 100          // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
775
+  #define PAUSE_PARK_Z_FEEDRATE 5             // Z axis feedrate in mm/s (not used for delta printers)
776
+  #define PAUSE_PARK_RETRACT_FEEDRATE 60      // Initial retract feedrate in mm/s
777
+  #define PAUSE_PARK_RETRACT_LENGTH 2         // Initial retract in mm
777 778
                                               // It is a short retract used immediately after print interrupt before move to filament exchange position
778 779
   #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
779 780
   #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
@@ -784,14 +785,14 @@
784 785
   #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
785 786
                                               // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
786 787
                                               // Short or zero length for printers without bowden where loading is not used
787
-  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
788
-  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
788
+  #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3   // Extrude filament feedrate in mm/s - must be slower than load feedrate
789
+  #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50    // Extrude filament length in mm after filament is loaded over the hotend,
789 790
                                               // 0 to disable for manual extrusion
790 791
                                               // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
791 792
                                               // or until outcoming filament color is not clear for filament color change
792
-  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45   // Turn off nozzle if user doesn't change filament within this time limit in seconds
793
+  #define PAUSE_PARK_NOZZLE_TIMEOUT 45        // Turn off nozzle if user doesn't change filament within this time limit in seconds
793 794
   #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
794
-  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT  // Enable to have stepper motors hold position during filament change
795
+  #define PAUSE_PARK_NO_STEPPER_TIMEOUT       // Enable to have stepper motors hold position during filament change
795 796
                                               // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
796 797
   //#define PARK_HEAD_ON_PAUSE                // Go to filament change position on pause, return to print position on resume
797 798
 #endif

+ 16
- 15
Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h 查看文件

@@ -758,22 +758,23 @@
758 758
 #endif
759 759
 
760 760
 /**
761
- * Filament Change
762
- * Experimental filament change support.
761
+ * Advanced Pause
762
+ * Experimental feature for filament change support and for parking the nozzle when paused.
763 763
  * Adds the GCode M600 for initiating filament change.
764
+ * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
764 765
  *
765 766
  * Requires an LCD display.
766 767
  * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
767 768
  */
768
-//#define FILAMENT_CHANGE_FEATURE
769
-#if ENABLED(FILAMENT_CHANGE_FEATURE)
770
-  #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
771
-  #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
772
-  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
773
-  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
774
-  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
775
-  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
776
-  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
769
+//#define ADVANCED_PAUSE_FEATURE
770
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
771
+  #define PAUSE_PARK_X_POS 3                  // X position of hotend
772
+  #define PAUSE_PARK_Y_POS 3                  // Y position of hotend
773
+  #define PAUSE_PARK_Z_ADD 10                 // Z addition of hotend (lift)
774
+  #define PAUSE_PARK_XY_FEEDRATE 100          // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
775
+  #define PAUSE_PARK_Z_FEEDRATE 5             // Z axis feedrate in mm/s (not used for delta printers)
776
+  #define PAUSE_PARK_RETRACT_FEEDRATE 60      // Initial retract feedrate in mm/s
777
+  #define PAUSE_PARK_RETRACT_LENGTH 2         // Initial retract in mm
777 778
                                               // It is a short retract used immediately after print interrupt before move to filament exchange position
778 779
   #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
779 780
   #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
@@ -784,14 +785,14 @@
784 785
   #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
785 786
                                               // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
786 787
                                               // Short or zero length for printers without bowden where loading is not used
787
-  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
788
-  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
788
+  #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3   // Extrude filament feedrate in mm/s - must be slower than load feedrate
789
+  #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50    // Extrude filament length in mm after filament is loaded over the hotend,
789 790
                                               // 0 to disable for manual extrusion
790 791
                                               // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
791 792
                                               // or until outcoming filament color is not clear for filament color change
792
-  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45   // Turn off nozzle if user doesn't change filament within this time limit in seconds
793
+  #define PAUSE_PARK_NOZZLE_TIMEOUT 45        // Turn off nozzle if user doesn't change filament within this time limit in seconds
793 794
   #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
794
-  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT  // Enable to have stepper motors hold position during filament change
795
+  #define PAUSE_PARK_NO_STEPPER_TIMEOUT       // Enable to have stepper motors hold position during filament change
795 796
                                               // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
796 797
   //#define PARK_HEAD_ON_PAUSE                // Go to filament change position on pause, return to print position on resume
797 798
 #endif

+ 16
- 15
Marlin/example_configurations/delta/kossel_pro/Configuration_adv.h 查看文件

@@ -763,22 +763,23 @@
763 763
 #endif
764 764
 
765 765
 /**
766
- * Filament Change
767
- * Experimental filament change support.
766
+ * Advanced Pause
767
+ * Experimental feature for filament change support and for parking the nozzle when paused.
768 768
  * Adds the GCode M600 for initiating filament change.
769
+ * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
769 770
  *
770 771
  * Requires an LCD display.
771 772
  * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
772 773
  */
773
-//#define FILAMENT_CHANGE_FEATURE
774
-#if ENABLED(FILAMENT_CHANGE_FEATURE)
775
-  #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
776
-  #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
777
-  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
778
-  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
779
-  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
780
-  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
781
-  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
774
+//#define ADVANCED_PAUSE_FEATURE
775
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
776
+  #define PAUSE_PARK_X_POS 3                  // X position of hotend
777
+  #define PAUSE_PARK_Y_POS 3                  // Y position of hotend
778
+  #define PAUSE_PARK_Z_ADD 10                 // Z addition of hotend (lift)
779
+  #define PAUSE_PARK_XY_FEEDRATE 100          // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
780
+  #define PAUSE_PARK_Z_FEEDRATE 5             // Z axis feedrate in mm/s (not used for delta printers)
781
+  #define PAUSE_PARK_RETRACT_FEEDRATE 60      // Initial retract feedrate in mm/s
782
+  #define PAUSE_PARK_RETRACT_LENGTH 2         // Initial retract in mm
782 783
                                               // It is a short retract used immediately after print interrupt before move to filament exchange position
783 784
   #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
784 785
   #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
@@ -789,14 +790,14 @@
789 790
   #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
790 791
                                               // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
791 792
                                               // Short or zero length for printers without bowden where loading is not used
792
-  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
793
-  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
793
+  #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3   // Extrude filament feedrate in mm/s - must be slower than load feedrate
794
+  #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50    // Extrude filament length in mm after filament is loaded over the hotend,
794 795
                                               // 0 to disable for manual extrusion
795 796
                                               // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
796 797
                                               // or until outcoming filament color is not clear for filament color change
797
-  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45   // Turn off nozzle if user doesn't change filament within this time limit in seconds
798
+  #define PAUSE_PARK_NOZZLE_TIMEOUT 45        // Turn off nozzle if user doesn't change filament within this time limit in seconds
798 799
   #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
799
-  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT  // Enable to have stepper motors hold position during filament change
800
+  #define PAUSE_PARK_NO_STEPPER_TIMEOUT       // Enable to have stepper motors hold position during filament change
800 801
                                               // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
801 802
   //#define PARK_HEAD_ON_PAUSE                // Go to filament change position on pause, return to print position on resume
802 803
 #endif

+ 16
- 15
Marlin/example_configurations/delta/kossel_xl/Configuration_adv.h 查看文件

@@ -758,22 +758,23 @@
758 758
 #endif
759 759
 
760 760
 /**
761
- * Filament Change
762
- * Experimental filament change support.
761
+ * Advanced Pause
762
+ * Experimental feature for filament change support and for parking the nozzle when paused.
763 763
  * Adds the GCode M600 for initiating filament change.
764
+ * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
764 765
  *
765 766
  * Requires an LCD display.
766 767
  * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
767 768
  */
768
-//#define FILAMENT_CHANGE_FEATURE
769
-#if ENABLED(FILAMENT_CHANGE_FEATURE)
770
-  #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
771
-  #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
772
-  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
773
-  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
774
-  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
775
-  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
776
-  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
769
+//#define ADVANCED_PAUSE_FEATURE
770
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
771
+  #define PAUSE_PARK_X_POS 3                  // X position of hotend
772
+  #define PAUSE_PARK_Y_POS 3                  // Y position of hotend
773
+  #define PAUSE_PARK_Z_ADD 10                 // Z addition of hotend (lift)
774
+  #define PAUSE_PARK_XY_FEEDRATE 100          // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
775
+  #define PAUSE_PARK_Z_FEEDRATE 5             // Z axis feedrate in mm/s (not used for delta printers)
776
+  #define PAUSE_PARK_RETRACT_FEEDRATE 60      // Initial retract feedrate in mm/s
777
+  #define PAUSE_PARK_RETRACT_LENGTH 2         // Initial retract in mm
777 778
                                               // It is a short retract used immediately after print interrupt before move to filament exchange position
778 779
   #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
779 780
   #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
@@ -784,14 +785,14 @@
784 785
   #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
785 786
                                               // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
786 787
                                               // Short or zero length for printers without bowden where loading is not used
787
-  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
788
-  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
788
+  #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3   // Extrude filament feedrate in mm/s - must be slower than load feedrate
789
+  #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50    // Extrude filament length in mm after filament is loaded over the hotend,
789 790
                                               // 0 to disable for manual extrusion
790 791
                                               // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
791 792
                                               // or until outcoming filament color is not clear for filament color change
792
-  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45   // Turn off nozzle if user doesn't change filament within this time limit in seconds
793
+  #define PAUSE_PARK_NOZZLE_TIMEOUT 45        // Turn off nozzle if user doesn't change filament within this time limit in seconds
793 794
   #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
794
-  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT  // Enable to have stepper motors hold position during filament change
795
+  #define PAUSE_PARK_NO_STEPPER_TIMEOUT       // Enable to have stepper motors hold position during filament change
795 796
                                               // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
796 797
   //#define PARK_HEAD_ON_PAUSE                // Go to filament change position on pause, return to print position on resume
797 798
 #endif

+ 18
- 15
Marlin/example_configurations/gCreate_gMax1.5+/Configuration_adv.h 查看文件

@@ -763,22 +763,25 @@
763 763
 #endif
764 764
 
765 765
 /**
766
- * Filament Change
767
- * Experimental filament change support.
766
+ * Advanced Pause
767
+ * Experimental feature for filament change support and for parking the nozzle when paused.
768 768
  * Adds the GCode M600 for initiating filament change.
769
+ * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
769 770
  *
770 771
  * Requires an LCD display.
771 772
  * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
772 773
  */
773
-#define FILAMENT_CHANGE_FEATURE
774
-#if ENABLED(FILAMENT_CHANGE_FEATURE)
775
-  #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
776
-  #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
777
-  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
778
-  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
779
-  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
780
-  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
781
-  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
774
+
775
+#define ADVANCED_PAUSE_FEATURE
776
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
777
+  #define PAUSE_PARK_X_POS 75                 // X position of hotend
778
+  #define PAUSE_PARK_Y_POS 75                 // Y position of hotend
779
+  #define PAUSE_PARK_Z_ADD 10                 // Z addition of hotend (lift)
780
+  #define PAUSE_PARK_XY_FEEDRATE 100          // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
781
+  #define PAUSE_PARK_Z_FEEDRATE 5             // Z axis feedrate in mm/s (not used for delta printers)
782
+  #define PAUSE_PARK_RETRACT_FEEDRATE 60      // Initial retract feedrate in mm/s
783
+  #define PAUSE_PARK_RETRACT_LENGTH 2         // Initial retract in mm
784
+ 
782 785
                                               // It is a short retract used immediately after print interrupt before move to filament exchange position
783 786
   #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
784 787
   #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
@@ -789,14 +792,14 @@
789 792
   #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
790 793
                                               // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
791 794
                                               // Short or zero length for printers without bowden where loading is not used
792
-  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
793
-  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
795
+  #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3   // Extrude filament feedrate in mm/s - must be slower than load feedrate
796
+  #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50    // Extrude filament length in mm after filament is loaded over the hotend,
794 797
                                               // 0 to disable for manual extrusion
795 798
                                               // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
796 799
                                               // or until outcoming filament color is not clear for filament color change
797
-  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45   // Turn off nozzle if user doesn't change filament within this time limit in seconds
800
+  #define PAUSE_PARK_NOZZLE_TIMEOUT 45        // Turn off nozzle if user doesn't change filament within this time limit in seconds
798 801
   #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
799
-  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT  // Enable to have stepper motors hold position during filament change
802
+  #define PAUSE_PARK_NO_STEPPER_TIMEOUT       // Enable to have stepper motors hold position during filament change
800 803
                                               // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
801 804
   #define PARK_HEAD_ON_PAUSE                  // Go to filament change position on pause, return to print position on resume
802 805
 #endif

+ 16
- 15
Marlin/example_configurations/makibox/Configuration_adv.h 查看文件

@@ -756,22 +756,23 @@
756 756
 #endif
757 757
 
758 758
 /**
759
- * Filament Change
760
- * Experimental filament change support.
759
+ * Advanced Pause
760
+ * Experimental feature for filament change support and for parking the nozzle when paused.
761 761
  * Adds the GCode M600 for initiating filament change.
762
+ * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
762 763
  *
763 764
  * Requires an LCD display.
764 765
  * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
765 766
  */
766
-//#define FILAMENT_CHANGE_FEATURE
767
-#if ENABLED(FILAMENT_CHANGE_FEATURE)
768
-  #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
769
-  #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
770
-  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
771
-  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
772
-  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
773
-  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
774
-  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
767
+//#define ADVANCED_PAUSE_FEATURE
768
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
769
+  #define PAUSE_PARK_X_POS 3                  // X position of hotend
770
+  #define PAUSE_PARK_Y_POS 3                  // Y position of hotend
771
+  #define PAUSE_PARK_Z_ADD 10                 // Z addition of hotend (lift)
772
+  #define PAUSE_PARK_XY_FEEDRATE 100          // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
773
+  #define PAUSE_PARK_Z_FEEDRATE 5             // Z axis feedrate in mm/s (not used for delta printers)
774
+  #define PAUSE_PARK_RETRACT_FEEDRATE 60      // Initial retract feedrate in mm/s
775
+  #define PAUSE_PARK_RETRACT_LENGTH 2         // Initial retract in mm
775 776
                                               // It is a short retract used immediately after print interrupt before move to filament exchange position
776 777
   #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
777 778
   #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
@@ -782,14 +783,14 @@
782 783
   #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
783 784
                                               // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
784 785
                                               // Short or zero length for printers without bowden where loading is not used
785
-  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
786
-  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
786
+  #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3   // Extrude filament feedrate in mm/s - must be slower than load feedrate
787
+  #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50    // Extrude filament length in mm after filament is loaded over the hotend,
787 788
                                               // 0 to disable for manual extrusion
788 789
                                               // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
789 790
                                               // or until outcoming filament color is not clear for filament color change
790
-  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45   // Turn off nozzle if user doesn't change filament within this time limit in seconds
791
+  #define PAUSE_PARK_NOZZLE_TIMEOUT 45        // Turn off nozzle if user doesn't change filament within this time limit in seconds
791 792
   #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
792
-  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT  // Enable to have stepper motors hold position during filament change
793
+  #define PAUSE_PARK_NO_STEPPER_TIMEOUT       // Enable to have stepper motors hold position during filament change
793 794
                                               // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
794 795
   //#define PARK_HEAD_ON_PAUSE                // Go to filament change position on pause, return to print position on resume
795 796
 #endif

+ 16
- 15
Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h 查看文件

@@ -756,22 +756,23 @@
756 756
 #endif
757 757
 
758 758
 /**
759
- * Filament Change
760
- * Experimental filament change support.
759
+ * Advanced Pause
760
+ * Experimental feature for filament change support and for parking the nozzle when paused.
761 761
  * Adds the GCode M600 for initiating filament change.
762
+ * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
762 763
  *
763 764
  * Requires an LCD display.
764 765
  * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
765 766
  */
766
-//#define FILAMENT_CHANGE_FEATURE
767
-#if ENABLED(FILAMENT_CHANGE_FEATURE)
768
-  #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
769
-  #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
770
-  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
771
-  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
772
-  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
773
-  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
774
-  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
767
+//#define ADVANCED_PAUSE_FEATURE
768
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
769
+  #define PAUSE_PARK_X_POS 3                  // X position of hotend
770
+  #define PAUSE_PARK_Y_POS 3                  // Y position of hotend
771
+  #define PAUSE_PARK_Z_ADD 10                 // Z addition of hotend (lift)
772
+  #define PAUSE_PARK_XY_FEEDRATE 100          // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
773
+  #define PAUSE_PARK_Z_FEEDRATE 5             // Z axis feedrate in mm/s (not used for delta printers)
774
+  #define PAUSE_PARK_RETRACT_FEEDRATE 60      // Initial retract feedrate in mm/s
775
+  #define PAUSE_PARK_RETRACT_LENGTH 2         // Initial retract in mm
775 776
                                               // It is a short retract used immediately after print interrupt before move to filament exchange position
776 777
   #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
777 778
   #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
@@ -782,14 +783,14 @@
782 783
   #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
783 784
                                               // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
784 785
                                               // Short or zero length for printers without bowden where loading is not used
785
-  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
786
-  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
786
+  #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3   // Extrude filament feedrate in mm/s - must be slower than load feedrate
787
+  #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50    // Extrude filament length in mm after filament is loaded over the hotend,
787 788
                                               // 0 to disable for manual extrusion
788 789
                                               // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
789 790
                                               // or until outcoming filament color is not clear for filament color change
790
-  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45   // Turn off nozzle if user doesn't change filament within this time limit in seconds
791
+  #define PAUSE_PARK_NOZZLE_TIMEOUT 45        // Turn off nozzle if user doesn't change filament within this time limit in seconds
791 792
   #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
792
-  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT  // Enable to have stepper motors hold position during filament change
793
+  #define PAUSE_PARK_NO_STEPPER_TIMEOUT       // Enable to have stepper motors hold position during filament change
793 794
                                               // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
794 795
   //#define PARK_HEAD_ON_PAUSE                // Go to filament change position on pause, return to print position on resume
795 796
 #endif

+ 16
- 15
Marlin/example_configurations/wt150/Configuration_adv.h 查看文件

@@ -759,22 +759,23 @@
759 759
 #endif
760 760
 
761 761
 /**
762
- * Filament Change
763
- * Experimental filament change support.
762
+ * Advanced Pause
763
+ * Experimental feature for filament change support and for parking the nozzle when paused.
764 764
  * Adds the GCode M600 for initiating filament change.
765
+ * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
765 766
  *
766 767
  * Requires an LCD display.
767 768
  * This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
768 769
  */
769
-//#define FILAMENT_CHANGE_FEATURE
770
-#if ENABLED(FILAMENT_CHANGE_FEATURE)
771
-  #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
772
-  #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
773
-  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
774
-  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
775
-  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
776
-  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
777
-  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
770
+//#define ADVANCED_PAUSE_FEATURE
771
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
772
+  #define PAUSE_PARK_X_POS 3                  // X position of hotend
773
+  #define PAUSE_PARK_Y_POS 3                  // Y position of hotend
774
+  #define PAUSE_PARK_Z_ADD 10                 // Z addition of hotend (lift)
775
+  #define PAUSE_PARK_XY_FEEDRATE 100          // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
776
+  #define PAUSE_PARK_Z_FEEDRATE 5             // Z axis feedrate in mm/s (not used for delta printers)
777
+  #define PAUSE_PARK_RETRACT_FEEDRATE 60      // Initial retract feedrate in mm/s
778
+  #define PAUSE_PARK_RETRACT_LENGTH 2         // Initial retract in mm
778 779
                                               // It is a short retract used immediately after print interrupt before move to filament exchange position
779 780
   #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
780 781
   #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
@@ -785,14 +786,14 @@
785 786
   #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
786 787
                                               // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
787 788
                                               // Short or zero length for printers without bowden where loading is not used
788
-  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
789
-  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
789
+  #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3   // Extrude filament feedrate in mm/s - must be slower than load feedrate
790
+  #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50    // Extrude filament length in mm after filament is loaded over the hotend,
790 791
                                               // 0 to disable for manual extrusion
791 792
                                               // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
792 793
                                               // or until outcoming filament color is not clear for filament color change
793
-  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45   // Turn off nozzle if user doesn't change filament within this time limit in seconds
794
+  #define PAUSE_PARK_NOZZLE_TIMEOUT 45        // Turn off nozzle if user doesn't change filament within this time limit in seconds
794 795
   #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5 // Number of alert beeps before printer goes quiet
795
-  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT  // Enable to have stepper motors hold position during filament change
796
+  #define PAUSE_PARK_NO_STEPPER_TIMEOUT       // Enable to have stepper motors hold position during filament change
796 797
                                               // even if it takes longer than DEFAULT_STEPPER_DEACTIVE_TIME.
797 798
   //#define PARK_HEAD_ON_PAUSE                // Go to filament change position on pause, return to print position on resume
798 799
 #endif

+ 2
- 2
Marlin/language_an.h 查看文件

@@ -214,8 +214,8 @@
214 214
 #define MSG_DRIVE_STRENGTH                  _UxGT("Fuerza d'o driver")
215 215
 #define MSG_DAC_PERCENT                     _UxGT("Driver %")
216 216
 #define MSG_DAC_EEPROM_WRITE                _UxGT("Escri. DAC EEPROM")
217
-#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("Cambear filamento")
218
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("Opcion de cambio:")
217
+#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("PRINT PAUSED")
218
+#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("RESUME OPTIONS:")
219 219
 #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE  _UxGT("Extruir mas")
220 220
 #define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Resumir imp.")
221 221
 

+ 2
- 2
Marlin/language_bg.h 查看文件

@@ -216,8 +216,8 @@
216 216
 #define MSG_DAC_PERCENT                     _UxGT("Driver %")
217 217
 #define MSG_DAC_EEPROM_WRITE                _UxGT("DAC EEPROM Write")
218 218
 
219
-#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("CHANGE FILAMENT")
220
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("CHANGE OPTIONS:")
219
+#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("PRINT PAUSED")
220
+#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("RESUME OPTIONS:")
221 221
 #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE  _UxGT("Extrude more")
222 222
 #define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Resume print")
223 223
 

+ 2
- 2
Marlin/language_ca.h 查看文件

@@ -218,8 +218,8 @@
218 218
 #define MSG_DRIVE_STRENGTH                  _UxGT("Força motor")
219 219
 #define MSG_DAC_PERCENT                     _UxGT("Driver %")
220 220
 #define MSG_DAC_EEPROM_WRITE                _UxGT("DAC EEPROM Write")
221
-#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("CANVI DE FILAMENT")
222
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("OPCIONS CANVI:")
221
+#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("PRINT PAUSED")
222
+#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("RESUME OPTIONS:")
223 223
 #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE  _UxGT("Extrudeix mes")
224 224
 #define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Repren impressió")
225 225
 #define MSG_FILAMENT_CHANGE_MINTEMP         _UxGT("Temp minima es ")

+ 2
- 2
Marlin/language_cz.h 查看文件

@@ -225,8 +225,8 @@
225 225
 #define MSG_DAC_PERCENT                     _UxGT("Motor %")
226 226
 #define MSG_DAC_EEPROM_WRITE                _UxGT("Ulozit do EEPROM")
227 227
 
228
-#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("VYMENA FILAMENTU")
229
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("CO DAL?")
228
+#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("PRINT PAUSED")
229
+#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("RESUME OPTIONS:")
230 230
 #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE  _UxGT("Jeste vytlacit")
231 231
 #define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Obnovit tisk")
232 232
 #define MSG_FILAMENT_CHANGE_MINTEMP         _UxGT("Min. teplota je ")

+ 2
- 2
Marlin/language_da.h 查看文件

@@ -215,8 +215,8 @@
215 215
 #define MSG_DAC_PERCENT                     _UxGT("Driv %")
216 216
 #define MSG_DAC_EEPROM_WRITE                _UxGT("DAC EEPROM Skriv")
217 217
 
218
-#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("SKIFT FILAMENT")
219
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("Skift muligheder:")
218
+#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("PRINT PAUSED")
219
+#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("RESUME OPTIONS:")
220 220
 #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE  _UxGT("Extruder mere")
221 221
 #define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Forsæt print")
222 222
 

+ 2
- 2
Marlin/language_de.h 查看文件

@@ -227,8 +227,8 @@
227 227
 #define MSG_DAC_PERCENT                     _UxGT("Treiber %")
228 228
 #define MSG_DAC_EEPROM_WRITE                _UxGT("Werte speichern")
229 229
 
230
-#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("ÄNDERE FILAMENT")
231
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("ÄNDERE OPTIONEN:")
230
+#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("PRINT PAUSED")
231
+#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("RESUME OPTIONS:")
232 232
 #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE  _UxGT("Extrude mehr")
233 233
 #define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Drucke weiter")
234 234
 #define MSG_FILAMENT_CHANGE_MINTEMP         _UxGT("Min. Temperatur ist ")

+ 5
- 2
Marlin/language_en.h 查看文件

@@ -499,6 +499,9 @@
499 499
 #ifndef MSG_USERWAIT
500 500
   #define MSG_USERWAIT                        _UxGT("Click to resume...")
501 501
 #endif
502
+#ifndef MSG_PRINT_PAUSED
503
+  #define MSG_PRINT_PAUSED                    _UxGT("Print paused")
504
+#endif
502 505
 #ifndef MSG_RESUMING
503 506
   #define MSG_RESUMING                        _UxGT("Resuming print")
504 507
 #endif
@@ -742,10 +745,10 @@
742 745
   #define MSG_DAC_EEPROM_WRITE                _UxGT("DAC EEPROM Write")
743 746
 #endif
744 747
 #ifndef MSG_FILAMENT_CHANGE_HEADER
745
-  #define MSG_FILAMENT_CHANGE_HEADER          _UxGT("CHANGE FILAMENT")
748
+  #define MSG_FILAMENT_CHANGE_HEADER          _UxGT("PRINT PAUSED")
746 749
 #endif
747 750
 #ifndef MSG_FILAMENT_CHANGE_OPTION_HEADER
748
-  #define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("CHANGE OPTIONS:")
751
+  #define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("RESUME OPTIONS:")
749 752
 #endif
750 753
 #ifndef MSG_FILAMENT_CHANGE_OPTION_EXTRUDE
751 754
   #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE  _UxGT("Extrude more")

+ 2
- 2
Marlin/language_es.h 查看文件

@@ -221,8 +221,8 @@
221 221
 #define MSG_DAC_PERCENT                     _UxGT("Driver %")
222 222
 #define MSG_DAC_EEPROM_WRITE                _UxGT("Escribe DAC EEPROM")
223 223
 
224
-#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("Cambiar Filamento")
225
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("Opciones de cambio:")
224
+#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("PRINT PAUSED")
225
+#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("RESUME OPTIONS:")
226 226
 #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE  _UxGT("Extruir mas")
227 227
 #define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Resumir imp.")
228 228
 

+ 2
- 2
Marlin/language_fr.h 查看文件

@@ -229,8 +229,8 @@
229 229
 #define MSG_DAC_PERCENT                     _UxGT("Driver %")
230 230
 #define MSG_DAC_EEPROM_WRITE                _UxGT("DAC EEPROM sauv.")
231 231
 
232
-#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("CHANGER FILAMENT")
233
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("CHANGER OPTIONS:")
232
+#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("PRINT PAUSED")
233
+#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("RESUME OPTIONS:")
234 234
 #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE  _UxGT("+ extrusion")
235 235
 #define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Reprendre impr.")
236 236
 #define MSG_FILAMENT_CHANGE_MINTEMP         _UxGT("La temp. minimum est ")

+ 2
- 2
Marlin/language_gl.h 查看文件

@@ -212,8 +212,8 @@
212 212
 #define MSG_DAC_PERCENT                     _UxGT("Motor %")
213 213
 #define MSG_DAC_EEPROM_WRITE                _UxGT("Garda DAC EEPROM")
214 214
 
215
-#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("TROCO FILAMENTO")
216
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("OPCIONS TROCO:")
215
+#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("PRINT PAUSED")
216
+#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("RESUME OPTIONS:")
217 217
 #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE  _UxGT("Extruir mais")
218 218
 #define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Segue traballo")
219 219
 

+ 2
- 2
Marlin/language_hr.h 查看文件

@@ -213,8 +213,8 @@
213 213
 #define MSG_DAC_PERCENT                     _UxGT("Driver %")
214 214
 #define MSG_DAC_EEPROM_WRITE                _UxGT("DAC EEPROM Write")
215 215
 
216
-#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("CHANGE FILAMENT")
217
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("CHANGE OPTIONS:")
216
+#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("PRINT PAUSED")
217
+#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("RESUME OPTIONS:")
218 218
 #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE  _UxGT("Extrudiraj više")
219 219
 #define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Nastavi print")
220 220
 

+ 2
- 2
Marlin/language_it.h 查看文件

@@ -238,8 +238,8 @@
238 238
 #define MSG_DAC_PERCENT                     _UxGT("Driver %")
239 239
 #define MSG_DAC_EEPROM_WRITE                _UxGT("Scrivi DAC EEPROM")
240 240
 
241
-#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("CAMBIA FILAMENTO")
242
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("CAMBIA OPZIONI:")
241
+#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("PRINT PAUSED")
242
+#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("RESUME OPTIONS:")
243 243
 #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE  _UxGT("Estrusione")
244 244
 #define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Riprendi stampa")
245 245
 #if ENABLED(DOGLCD)

+ 2
- 2
Marlin/language_kana.h 查看文件

@@ -285,8 +285,8 @@
285 285
   #define MSG_DAC_PERCENT                   "DAC\xbc\xad\xc2\xd8\xae\xb8"                                      // "DACシュツリョク" ("Driver %")
286 286
 #endif
287 287
 #define MSG_DAC_EEPROM_WRITE                MSG_STORE_EPROM                                                    // "メモリヘカクノウ" ("DAC EEPROM Write")
288
-#define MSG_FILAMENT_CHANGE_HEADER          "\xcc\xa8\xd7\xd2\xdd\xc4\xba\xb3\xb6\xdd"                         // "フィラメントコウカン" ("CHANGE FILAMENT")
289
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   "\xc4\xde\xb3\xbb\xa6\xbe\xdd\xc0\xb8\xbc\xc3\xb8\xc0\xde\xbb\xb2" // "ドウサヲセンタクシテクダサイ" ("CHANGE OPTIONS:")
288
+#define MSG_FILAMENT_CHANGE_HEADER          "PRINT PAUSED"
289
+#define MSG_FILAMENT_CHANGE_OPTION_HEADER   "RESUME OPTIONS:"
290 290
 #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE  "\xbb\xd7\xc6\xb5\xbc\xc0\xde\xbd"                                 // "サラニオシダス" ("Extrude more")
291 291
 #define MSG_FILAMENT_CHANGE_OPTION_RESUME   "\xcc\xdf\xd8\xdd\xc4\xbb\xb2\xb6\xb2"                             // "プリントサイカイ" ("Resume print")
292 292
 

+ 2
- 2
Marlin/language_kana_utf8.h 查看文件

@@ -212,8 +212,8 @@
212 212
 #define MSG_DRIVE_STRENGTH                  _UxGT("モータークドウリョク")              // "Drive Strength"
213 213
 #define MSG_DAC_PERCENT                     _UxGT("DACシュツリョク %")               // "Driver %"
214 214
 #define MSG_DAC_EEPROM_WRITE                MSG_STORE_EPROM                     // "DAC EEPROM Write"
215
-#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("フィラメントコウカン")              // "CHANGE FILAMENT"
216
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("ドウサヲセンタクシテクダサイ")        // "CHANGE OPTIONS:"
215
+#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("PRINT PAUSED")
216
+#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("RESUME OPTIONS:")
217 217
 #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE  _UxGT("サラニオシダス")                 // "Extrude more"
218 218
 #define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("プリントサイカイ")                // "Resume print"
219 219
 #define MSG_FILAMENT_CHANGE_INIT_1          _UxGT("コウカンヲカイシシマス")            // "Wait for start"

+ 2
- 2
Marlin/language_nl.h 查看文件

@@ -224,8 +224,8 @@
224 224
 #define MSG_DRIVE_STRENGTH                  _UxGT("Motorstroom")
225 225
 #define MSG_DAC_PERCENT                     _UxGT("Driver %")  //accepted English term in Dutch
226 226
 #define MSG_DAC_EEPROM_WRITE                _UxGT("DAC Opslaan")
227
-#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("WISSEL FILAMENT")
228
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("WISSEL OPTIES:")
227
+#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("PRINT PAUSED")
228
+#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("RESUME OPTIONS:")
229 229
 #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE  _UxGT("Extrudeer meer")
230 230
 #define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Hervat print")
231 231
 #define MSG_FILAMENT_CHANGE_MINTEMP         _UxGT("Minimum Temp is ")

+ 2
- 2
Marlin/language_pl.h 查看文件

@@ -433,8 +433,8 @@
433 433
 #define MSG_DAC_PERCENT                     _UxGT("Sila %")
434 434
 #define MSG_DAC_EEPROM_WRITE                _UxGT("Zapisz DAC EEPROM")
435 435
 
436
-#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("ZMIEN FILAMENT")
437
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("ZMIEN OPCJE:")
436
+#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("PRINT PAUSED")
437
+#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("RESUME OPTIONS:")
438 438
 #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE  _UxGT("Ekstruduj wiecej")
439 439
 #define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Wznow drukowanie")
440 440
 

+ 2
- 2
Marlin/language_tr.h 查看文件

@@ -227,8 +227,8 @@
227 227
 
228 228
 #define MSG_DRIVE_STRENGTH                  _UxGT("Sürücü Gücü")                                        // Sürücü Gücü
229 229
 #define MSG_DAC_PERCENT                     _UxGT("Sürücü %")                                           // Sürücü %
230
-#define MSG_DAC_EEPROM_WRITE                _UxGT("DAC'ı EEPROM'a Yaz")                                 // DAC'ı EEPROM'a Yaz
231
-#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("Filaman Değiştir")                                   // Filaman Değiştir
230
+#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("PRINT PAUSED")
231
+#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("RESUME OPTIONS:")
232 232
 #define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("Seçenekler:")                                        // Seçenekler:
233 233
 #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE  _UxGT("Daha Akıt")                                          // Daha Akıt
234 234
 #define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Baskıyı sürdür")                                     // Baskıyı sürdür

+ 2
- 2
Marlin/language_uk.h 查看文件

@@ -203,8 +203,8 @@
203 203
 #define MSG_DAC_PERCENT                     _UxGT("% мотору")
204 204
 #define MSG_DAC_EEPROM_WRITE                _UxGT("Запис ЦАП на ПЗП")
205 205
 
206
-#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("ЗАМІНА ВОЛОКНА")
207
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("НАЛАШТ. ЗАМІНИ:")
206
+#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("PRINT PAUSED")
207
+#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("RESUME OPTIONS:")
208 208
 #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE  _UxGT("Екструдувати")
209 209
 #define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("Відновити друк")
210 210
 

+ 2
- 2
Marlin/language_zh_CN.h 查看文件

@@ -199,8 +199,8 @@
199 199
 #define MSG_INFO_MAX_TEMP                   _UxGT("最高温度")  //"Max Temp"
200 200
 #define MSG_INFO_PSU                        _UxGT("电源供应")  //"Power Supply"
201 201
 
202
-#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("修改丝料")  //"CHANGE FILAMENT"
203
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("修改选项:")  //"CHANGE OPTIONS:"
202
+#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("PRINT PAUSED")
203
+#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("RESUME OPTIONS:")
204 204
 #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE  _UxGT("挤出更多")  //"Extrude more"
205 205
 #define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("恢复打印")  //"Resume print"
206 206
 

+ 2
- 2
Marlin/language_zh_TW.h 查看文件

@@ -199,8 +199,8 @@
199 199
 #define MSG_INFO_MAX_TEMP                   _UxGT("最高溫度")  //"Max Temp"
200 200
 #define MSG_INFO_PSU                        _UxGT("電源供應")  //"Power Supply"
201 201
 
202
-#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("修改絲料")  //"CHANGE FILAMENT"
203
-#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("修改選項:")  //"CHANGE OPTIONS:"
202
+#define MSG_FILAMENT_CHANGE_HEADER          _UxGT("PRINT PAUSED")
203
+#define MSG_FILAMENT_CHANGE_OPTION_HEADER   _UxGT("RESUME OPTIONS:")
204 204
 #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE  _UxGT("擠出更多")  //"Extrude more"
205 205
 #define MSG_FILAMENT_CHANGE_OPTION_RESUME   _UxGT("恢複列印")  //"Resume print"
206 206
 

+ 105
- 55
Marlin/temperature.cpp 查看文件

@@ -202,9 +202,14 @@ uint8_t Temperature::soft_pwm_amount[HOTENDS],
202 202
 
203 203
 #if ENABLED(PROBING_HEATERS_OFF)
204 204
   bool Temperature::paused;
205
-  int16_t Temperature::paused_hotend_temp[HOTENDS];
205
+#endif
206
+
207
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
208
+  millis_t Temperature::heater_idle_timeout_ms[HOTENDS] = { 0 };
209
+  bool Temperature::heater_idle_timeout_exceeded[HOTENDS] = { false };
206 210
   #if HAS_TEMP_BED
207
-    int16_t Temperature::paused_bed_temp;
211
+    millis_t Temperature::bed_idle_timeout_ms = 0;
212
+    bool Temperature::bed_idle_timeout_exceeded = false;
208 213
   #endif
209 214
 #endif
210 215
 
@@ -554,11 +559,22 @@ float Temperature::get_pid_output(int e) {
554 559
       pid_error[HOTEND_INDEX] = target_temperature[HOTEND_INDEX] - current_temperature[HOTEND_INDEX];
555 560
       dTerm[HOTEND_INDEX] = K2 * PID_PARAM(Kd, HOTEND_INDEX) * (current_temperature[HOTEND_INDEX] - temp_dState[HOTEND_INDEX]) + K1 * dTerm[HOTEND_INDEX];
556 561
       temp_dState[HOTEND_INDEX] = current_temperature[HOTEND_INDEX];
562
+      #if ENABLED(ADVANCED_PAUSE_FEATURE)
563
+        if (heater_idle_timeout_exceeded[HOTEND_INDEX]) {
564
+          pid_output = 0;
565
+          pid_reset[HOTEND_INDEX] = true;
566
+        }
567
+        else
568
+      #endif
557 569
       if (pid_error[HOTEND_INDEX] > PID_FUNCTIONAL_RANGE) {
558 570
         pid_output = BANG_MAX;
559 571
         pid_reset[HOTEND_INDEX] = true;
560 572
       }
561
-      else if (pid_error[HOTEND_INDEX] < -(PID_FUNCTIONAL_RANGE) || target_temperature[HOTEND_INDEX] == 0) {
573
+      else if (pid_error[HOTEND_INDEX] < -(PID_FUNCTIONAL_RANGE) || target_temperature[HOTEND_INDEX] == 0
574
+        #if ENABLED(ADVANCED_PAUSE_FEATURE)
575
+          || heater_idle_timeout_exceeded[HOTEND_INDEX]
576
+        #endif
577
+        ) {
562 578
         pid_output = 0;
563 579
         pid_reset[HOTEND_INDEX] = true;
564 580
       }
@@ -618,6 +634,11 @@ float Temperature::get_pid_output(int e) {
618 634
     #endif // PID_DEBUG
619 635
 
620 636
   #else /* PID off */
637
+    #if ENABLED(ADVANCED_PAUSE_FEATURE)
638
+      if (heater_idle_timeout_exceeded[HOTEND_INDEX])
639
+        pid_output = 0;
640
+      else
641
+    #endif
621 642
     pid_output = (current_temperature[HOTEND_INDEX] < target_temperature[HOTEND_INDEX]) ? PID_MAX : 0;
622 643
   #endif
623 644
 
@@ -699,12 +720,17 @@ void Temperature::manage_heater() {
699 720
     if (current_temperature[0] < max(HEATER_0_MINTEMP, MAX6675_TMIN + .01)) min_temp_error(0);
700 721
   #endif
701 722
 
702
-  #if WATCH_HOTENDS || WATCH_THE_BED || DISABLED(PIDTEMPBED) || HAS_AUTO_FAN
723
+  #if WATCH_HOTENDS || WATCH_THE_BED || DISABLED(PIDTEMPBED) || HAS_AUTO_FAN || ENABLED(ADVANCED_PAUSE_FEATURE)
703 724
     millis_t ms = millis();
704 725
   #endif
705 726
 
706 727
   HOTEND_LOOP() {
707 728
 
729
+    #if ENABLED(ADVANCED_PAUSE_FEATURE)
730
+      if (!heater_idle_timeout_exceeded[e] && heater_idle_timeout_ms[e] && ELAPSED(ms, heater_idle_timeout_ms[e]))
731
+        heater_idle_timeout_exceeded[e] = true;
732
+    #endif
733
+
708 734
     #if ENABLED(THERMAL_PROTECTION_HOTENDS)
709 735
       // Check for thermal runaway
710 736
       thermal_runaway_protection(&thermal_runaway_state_machine[e], &thermal_runaway_timer[e], current_temperature[e], target_temperature[e], e, THERMAL_PROTECTION_PERIOD, THERMAL_PROTECTION_HYSTERESIS);
@@ -722,16 +748,6 @@ void Temperature::manage_heater() {
722 748
       }
723 749
     #endif
724 750
 
725
-    #if WATCH_THE_BED
726
-      // Make sure temperature is increasing
727
-      if (watch_bed_next_ms && ELAPSED(ms, watch_bed_next_ms)) {        // Time to check the bed?
728
-        if (degBed() < watch_target_bed_temp)                           // Failed to increase enough?
729
-          _temp_error(-1, PSTR(MSG_T_HEATING_FAILED), PSTR(MSG_HEATING_FAILED_LCD));
730
-        else                                                            // Start again if the target is still far off
731
-          start_watching_bed();
732
-      }
733
-    #endif
734
-
735 751
     #if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT)
736 752
       // Make sure measured temperatures are close together
737 753
       if (fabs(current_temperature[0] - redundant_temperature) > MAX_REDUNDANT_TEMP_SENSOR_DIFF)
@@ -761,43 +777,71 @@ void Temperature::manage_heater() {
761 777
     }
762 778
   #endif // FILAMENT_WIDTH_SENSOR
763 779
 
780
+  #if WATCH_THE_BED
781
+    // Make sure temperature is increasing
782
+    if (watch_bed_next_ms && ELAPSED(ms, watch_bed_next_ms)) {        // Time to check the bed?
783
+      if (degBed() < watch_target_bed_temp)                           // Failed to increase enough?
784
+        _temp_error(-1, PSTR(MSG_T_HEATING_FAILED), PSTR(MSG_HEATING_FAILED_LCD));
785
+      else                                                            // Start again if the target is still far off
786
+        start_watching_bed();
787
+    }
788
+  #endif // WATCH_THE_BED
789
+
764 790
   #if DISABLED(PIDTEMPBED)
765 791
     if (PENDING(ms, next_bed_check_ms)) return;
766 792
     next_bed_check_ms = ms + BED_CHECK_INTERVAL;
767 793
   #endif
768 794
 
769
-  #if TEMP_SENSOR_BED != 0
795
+  #if HAS_TEMP_BED
796
+
797
+    #if ENABLED(ADVANCED_PAUSE_FEATURE)
798
+      if (!bed_idle_timeout_exceeded && bed_idle_timeout_ms && ELAPSED(ms, bed_idle_timeout_ms))
799
+        bed_idle_timeout_exceeded = true;
800
+    #endif
770 801
 
771 802
     #if HAS_THERMALLY_PROTECTED_BED
772 803
       thermal_runaway_protection(&thermal_runaway_bed_state_machine, &thermal_runaway_bed_timer, current_temperature_bed, target_temperature_bed, -1, THERMAL_PROTECTION_BED_PERIOD, THERMAL_PROTECTION_BED_HYSTERESIS);
773 804
     #endif
774 805
 
775
-    #if ENABLED(PIDTEMPBED)
776
-      soft_pwm_amount_bed = WITHIN(current_temperature_bed, BED_MINTEMP, BED_MAXTEMP) ? (int)get_pid_output_bed() >> 1 : 0;
777
-
778
-    #elif ENABLED(BED_LIMIT_SWITCHING)
779
-      // Check if temperature is within the correct band
780
-      if (WITHIN(current_temperature_bed, BED_MINTEMP, BED_MAXTEMP)) {
781
-        if (current_temperature_bed >= target_temperature_bed + BED_HYSTERESIS)
782
-          soft_pwm_amount_bed = 0;
783
-        else if (current_temperature_bed <= target_temperature_bed - (BED_HYSTERESIS))
784
-          soft_pwm_amount_bed = MAX_BED_POWER >> 1;
785
-      }
786
-      else {
806
+    #if ENABLED(ADVANCED_PAUSE_FEATURE)
807
+      if (bed_idle_timeout_exceeded)
808
+      {
787 809
         soft_pwm_amount_bed = 0;
788
-        WRITE_HEATER_BED(LOW);
789
-      }
790
-    #else // !PIDTEMPBED && !BED_LIMIT_SWITCHING
791
-      // Check if temperature is within the correct range
792
-      if (WITHIN(current_temperature_bed, BED_MINTEMP, BED_MAXTEMP)) {
793
-        soft_pwm_amount_bed = current_temperature_bed < target_temperature_bed ? MAX_BED_POWER >> 1 : 0;
794
-      }
795
-      else {
796
-        soft_pwm_amount_bed = 0;
797
-        WRITE_HEATER_BED(LOW);
810
+
811
+        #if DISABLED(PIDTEMPBED)
812
+          WRITE_HEATER_BED(LOW);
813
+        #endif
798 814
       }
815
+      else
799 816
     #endif
800
-  #endif // TEMP_SENSOR_BED != 0
817
+    {
818
+      #if ENABLED(PIDTEMPBED)
819
+        soft_pwm_amount_bed = WITHIN(current_temperature_bed, BED_MINTEMP, BED_MAXTEMP) ? (int)get_pid_output_bed() >> 1 : 0;
820
+
821
+      #elif ENABLED(BED_LIMIT_SWITCHING)
822
+        // Check if temperature is within the correct band
823
+        if (WITHIN(current_temperature_bed, BED_MINTEMP, BED_MAXTEMP)) {
824
+          if (current_temperature_bed >= target_temperature_bed + BED_HYSTERESIS)
825
+            soft_pwm_amount_bed = 0;
826
+          else if (current_temperature_bed <= target_temperature_bed - (BED_HYSTERESIS))
827
+            soft_pwm_amount_bed = MAX_BED_POWER >> 1;
828
+        }
829
+        else {
830
+          soft_pwm_amount_bed = 0;
831
+          WRITE_HEATER_BED(LOW);
832
+        }
833
+      #else // !PIDTEMPBED && !BED_LIMIT_SWITCHING
834
+        // Check if temperature is within the correct range
835
+        if (WITHIN(current_temperature_bed, BED_MINTEMP, BED_MAXTEMP)) {
836
+          soft_pwm_amount_bed = current_temperature_bed < target_temperature_bed ? MAX_BED_POWER >> 1 : 0;
837
+        }
838
+        else {
839
+          soft_pwm_amount_bed = 0;
840
+          WRITE_HEATER_BED(LOW);
841
+        }
842
+      #endif
843
+    }
844
+  #endif // HAS_TEMP_BED
801 845
 }
802 846
 
803 847
 #define PGM_RD_W(x)   (short)pgm_read_word(&x)
@@ -1180,10 +1224,6 @@ void Temperature::init() {
1180 1224
 
1181 1225
   #if ENABLED(PROBING_HEATERS_OFF)
1182 1226
     paused = false;
1183
-    ZERO(paused_hotend_temp);
1184
-    #if HAS_TEMP_BED
1185
-      paused_bed_temp = 0;
1186
-    #endif
1187 1227
   #endif
1188 1228
 }
1189 1229
 
@@ -1246,11 +1286,29 @@ void Temperature::init() {
1246 1286
         SERIAL_ECHOPAIR(" ;  Timer:", *timer);
1247 1287
         SERIAL_ECHOPAIR(" ;  Temperature:", current);
1248 1288
         SERIAL_ECHOPAIR(" ;  Target Temp:", target);
1289
+        if (heater_id >= 0)
1290
+          SERIAL_ECHOPAIR(" ;  Idle Timeout:", heater_idle_timeout_exceeded[heater_id]);
1291
+        else
1292
+          SERIAL_ECHOPAIR(" ;  Idle Timeout:", bed_idle_timeout_exceeded);
1249 1293
         SERIAL_EOL;
1250 1294
     */
1251 1295
 
1252 1296
     int heater_index = heater_id >= 0 ? heater_id : HOTENDS;
1253 1297
 
1298
+    #if ENABLED(ADVANCED_PAUSE_FEATURE)
1299
+      // If the heater idle timeout expires, restart
1300
+      if (heater_id >= 0 && heater_idle_timeout_exceeded[heater_id]) {
1301
+        *state = TRInactive;
1302
+        tr_target_temperature[heater_index] = 0;
1303
+      }
1304
+      #if HAS_TEMP_BED
1305
+        else if (heater_id < 0 && bed_idle_timeout_exceeded) {
1306
+          *state = TRInactive;
1307
+          tr_target_temperature[heater_index] = 0;
1308
+        }
1309
+      #endif
1310
+      else
1311
+    #endif
1254 1312
     // If the target temperature changes, restart
1255 1313
     if (tr_target_temperature[heater_index] != target) {
1256 1314
       tr_target_temperature[heater_index] = target;
@@ -1290,11 +1348,7 @@ void Temperature::disable_all_heaters() {
1290 1348
 
1291 1349
   // Unpause and reset everything
1292 1350
   #if ENABLED(PROBING_HEATERS_OFF)
1293
-    paused = false;
1294
-    ZERO(paused_hotend_temp);
1295
-    #if HAS_TEMP_BED
1296
-      paused_bed_temp = 0;
1297
-    #endif
1351
+    pause(false);
1298 1352
   #endif
1299 1353
 
1300 1354
   // If all heaters go down then for sure our print job has stopped
@@ -1337,19 +1391,15 @@ void Temperature::disable_all_heaters() {
1337 1391
     if (p != paused) {
1338 1392
       paused = p;
1339 1393
       if (p) {
1340
-        HOTEND_LOOP() {
1341
-          paused_hotend_temp[e] = degTargetHotend(e);
1342
-          setTargetHotend(0, e);
1343
-        }
1394
+        HOTEND_LOOP() start_heater_idle_timer(e, 0); // timeout immediately
1344 1395
         #if HAS_TEMP_BED
1345
-          paused_bed_temp = degTargetBed();
1346
-          setTargetBed(0);
1396
+          start_bed_idle_timer(0); // timeout immediately
1347 1397
         #endif
1348 1398
       }
1349 1399
       else {
1350
-        HOTEND_LOOP() setTargetHotend(paused_hotend_temp[e], e);
1400
+        HOTEND_LOOP() reset_heater_idle_timer(e);
1351 1401
         #if HAS_TEMP_BED
1352
-          setTargetBed(paused_bed_temp);
1402
+          reset_bed_idle_timer();
1353 1403
         #endif
1354 1404
       }
1355 1405
     }

+ 54
- 2
Marlin/temperature.h 查看文件

@@ -257,10 +257,14 @@ class Temperature {
257 257
 
258 258
     #if ENABLED(PROBING_HEATERS_OFF)
259 259
       static bool paused;
260
-      static int16_t paused_hotend_temp[HOTENDS];
260
+    #endif
261 261
 
262
+    #if ENABLED(ADVANCED_PAUSE_FEATURE)
263
+      static millis_t heater_idle_timeout_ms[HOTENDS];
264
+      static bool heater_idle_timeout_exceeded[HOTENDS];
262 265
       #if HAS_TEMP_BED
263
-        static int16_t paused_bed_temp;
266
+        static millis_t bed_idle_timeout_ms;
267
+        static bool bed_idle_timeout_exceeded;
264 268
       #endif
265 269
     #endif
266 270
 
@@ -458,6 +462,54 @@ class Temperature {
458 462
 
459 463
     #if ENABLED(PROBING_HEATERS_OFF)
460 464
       static void pause(const bool p);
465
+      static bool is_paused() { return paused; }
466
+    #endif
467
+
468
+    #if ENABLED(ADVANCED_PAUSE_FEATURE)
469
+      static void start_heater_idle_timer(uint8_t e, millis_t timeout_ms) {
470
+        #if HOTENDS == 1
471
+          UNUSED(e);
472
+        #endif
473
+        heater_idle_timeout_ms[HOTEND_INDEX] = millis() + timeout_ms;
474
+        heater_idle_timeout_exceeded[HOTEND_INDEX] = false;
475
+      }
476
+
477
+      static void reset_heater_idle_timer(uint8_t e) {
478
+        #if HOTENDS == 1
479
+          UNUSED(e);
480
+        #endif
481
+        heater_idle_timeout_ms[HOTEND_INDEX] = 0;
482
+        heater_idle_timeout_exceeded[HOTEND_INDEX] = false;
483
+        #if WATCH_HOTENDS
484
+          start_watching_heater(HOTEND_INDEX);
485
+        #endif
486
+      }
487
+
488
+      static bool is_heater_idle(uint8_t e) {
489
+        #if HOTENDS == 1
490
+          UNUSED(e);
491
+        #endif
492
+        return heater_idle_timeout_exceeded[HOTEND_INDEX];
493
+      }
494
+
495
+      #if HAS_TEMP_BED
496
+        static void start_bed_idle_timer(millis_t timeout_ms) {
497
+          bed_idle_timeout_ms = millis() + timeout_ms;
498
+          bed_idle_timeout_exceeded = false;
499
+        }
500
+
501
+        static void reset_bed_idle_timer() {
502
+          bed_idle_timeout_ms = 0;
503
+          bed_idle_timeout_exceeded = false;
504
+          #if WATCH_THE_BED
505
+            start_watching_bed();
506
+          #endif
507
+        }
508
+
509
+        static bool is_bed_idle() {
510
+          return bed_idle_timeout_exceeded;
511
+        }
512
+      #endif
461 513
     #endif
462 514
 
463 515
   private:

+ 65
- 55
Marlin/ultralcd.cpp 查看文件

@@ -126,16 +126,16 @@ uint16_t max_display_update_time = 0;
126 126
     void lcd_info_menu();
127 127
   #endif // LCD_INFO_MENU
128 128
 
129
-  #if ENABLED(FILAMENT_CHANGE_FEATURE)
130
-    void lcd_filament_change_toocold_menu();
131
-    void lcd_filament_change_option_menu();
132
-    void lcd_filament_change_init_message();
133
-    void lcd_filament_change_unload_message();
134
-    void lcd_filament_change_insert_message();
135
-    void lcd_filament_change_load_message();
136
-    void lcd_filament_change_heat_nozzle();
137
-    void lcd_filament_change_extrude_message();
138
-    void lcd_filament_change_resume_message();
129
+  #if ENABLED(ADVANCED_PAUSE_FEATURE)
130
+    void lcd_advanced_pause_toocold_menu();
131
+    void lcd_advanced_pause_option_menu();
132
+    void lcd_advanced_pause_init_message();
133
+    void lcd_advanced_pause_unload_message();
134
+    void lcd_advanced_pause_insert_message();
135
+    void lcd_advanced_pause_load_message();
136
+    void lcd_advanced_pause_heat_nozzle();
137
+    void lcd_advanced_pause_extrude_message();
138
+    void lcd_advanced_pause_resume_message();
139 139
   #endif
140 140
 
141 141
   #if ENABLED(DAC_STEPPER_CURRENT)
@@ -676,6 +676,7 @@ void kill_screen(const char* lcd_msg) {
676 676
       #if ENABLED(PARK_HEAD_ON_PAUSE)
677 677
         enqueue_and_echo_commands_P(PSTR("M125"));
678 678
       #endif
679
+      lcd_setstatuspgm(PSTR(MSG_PRINT_PAUSED), true);
679 680
     }
680 681
 
681 682
     void lcd_sdcard_resume() {
@@ -685,6 +686,7 @@ void kill_screen(const char* lcd_msg) {
685 686
         card.startFileprint();
686 687
         print_job_timer.start();
687 688
       #endif
689
+      lcd_setstatuspgm(PSTR(""), true);
688 690
     }
689 691
 
690 692
     void lcd_sdcard_stop() {
@@ -1006,15 +1008,15 @@ void kill_screen(const char* lcd_msg) {
1006 1008
     void watch_temp_callback_bed() { thermalManager.start_watching_bed(); }
1007 1009
   #endif
1008 1010
 
1009
-  #if ENABLED(FILAMENT_CHANGE_FEATURE)
1011
+  #if ENABLED(ADVANCED_PAUSE_FEATURE)
1010 1012
     void lcd_enqueue_filament_change() {
1011 1013
       if (!DEBUGGING(DRYRUN) && thermalManager.tooColdToExtrude(active_extruder)) {
1012 1014
         lcd_save_previous_screen();
1013
-        lcd_goto_screen(lcd_filament_change_toocold_menu);
1015
+        lcd_goto_screen(lcd_advanced_pause_toocold_menu);
1014 1016
         return;
1015 1017
       }
1016
-      lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_INIT);
1017
-      enqueue_and_echo_commands_P(PSTR("M600"));
1018
+      lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INIT);
1019
+      enqueue_and_echo_commands_P(PSTR("M600 B0"));
1018 1020
     }
1019 1021
   #endif
1020 1022
 
@@ -1129,7 +1131,7 @@ void kill_screen(const char* lcd_msg) {
1129 1131
     //
1130 1132
     // Change filament
1131 1133
     //
1132
-    #if ENABLED(FILAMENT_CHANGE_FEATURE)
1134
+    #if ENABLED(ADVANCED_PAUSE_FEATURE)
1133 1135
       if (!thermalManager.tooColdToExtrude(active_extruder))
1134 1136
         MENU_ITEM(function, MSG_FILAMENTCHANGE, lcd_enqueue_filament_change);
1135 1137
     #endif
@@ -2043,7 +2045,7 @@ void kill_screen(const char* lcd_msg) {
2043 2045
     //
2044 2046
     // Change filament
2045 2047
     //
2046
-    #if ENABLED(FILAMENT_CHANGE_FEATURE)
2048
+    #if ENABLED(ADVANCED_PAUSE_FEATURE)
2047 2049
       if (!thermalManager.tooColdToExtrude(active_extruder))
2048 2050
         MENU_ITEM(function, MSG_FILAMENTCHANGE, lcd_enqueue_filament_change);
2049 2051
     #endif
@@ -3183,7 +3185,7 @@ void kill_screen(const char* lcd_msg) {
3183 3185
    * Filament Change Feature Screens
3184 3186
    *
3185 3187
    */
3186
-  #if ENABLED(FILAMENT_CHANGE_FEATURE)
3188
+  #if ENABLED(ADVANCED_PAUSE_FEATURE)
3187 3189
 
3188 3190
     // Portions from STATIC_ITEM...
3189 3191
     #define HOTEND_STATUS_ITEM() do { \
@@ -3201,7 +3203,7 @@ void kill_screen(const char* lcd_msg) {
3201 3203
       ++_thisItemNr; \
3202 3204
     } while(0)
3203 3205
 
3204
-    void lcd_filament_change_toocold_menu() {
3206
+    void lcd_advanced_pause_toocold_menu() {
3205 3207
       START_MENU();
3206 3208
       STATIC_ITEM(MSG_HEATING_FAILED_LCD, true, true);
3207 3209
       STATIC_ITEM(MSG_FILAMENT_CHANGE_MINTEMP STRINGIFY(EXTRUDE_MINTEMP) ".", false, false);
@@ -3213,25 +3215,25 @@ void kill_screen(const char* lcd_msg) {
3213 3215
       END_MENU();
3214 3216
     }
3215 3217
 
3216
-    void lcd_filament_change_resume_print() {
3217
-      filament_change_menu_response = FILAMENT_CHANGE_RESPONSE_RESUME_PRINT;
3218
+    void lcd_advanced_pause_resume_print() {
3219
+      advanced_pause_menu_response = ADVANCED_PAUSE_RESPONSE_RESUME_PRINT;
3218 3220
     }
3219 3221
 
3220
-    void lcd_filament_change_extrude_more() {
3221
-      filament_change_menu_response = FILAMENT_CHANGE_RESPONSE_EXTRUDE_MORE;
3222
+    void lcd_advanced_pause_extrude_more() {
3223
+      advanced_pause_menu_response = ADVANCED_PAUSE_RESPONSE_EXTRUDE_MORE;
3222 3224
     }
3223 3225
 
3224
-    void lcd_filament_change_option_menu() {
3226
+    void lcd_advanced_pause_option_menu() {
3225 3227
       START_MENU();
3226 3228
       #if LCD_HEIGHT > 2
3227 3229
         STATIC_ITEM(MSG_FILAMENT_CHANGE_OPTION_HEADER, true, false);
3228 3230
       #endif
3229
-      MENU_ITEM(function, MSG_FILAMENT_CHANGE_OPTION_RESUME, lcd_filament_change_resume_print);
3230
-      MENU_ITEM(function, MSG_FILAMENT_CHANGE_OPTION_EXTRUDE, lcd_filament_change_extrude_more);
3231
+      MENU_ITEM(function, MSG_FILAMENT_CHANGE_OPTION_RESUME, lcd_advanced_pause_resume_print);
3232
+      MENU_ITEM(function, MSG_FILAMENT_CHANGE_OPTION_EXTRUDE, lcd_advanced_pause_extrude_more);
3231 3233
       END_MENU();
3232 3234
     }
3233 3235
 
3234
-    void lcd_filament_change_init_message() {
3236
+    void lcd_advanced_pause_init_message() {
3235 3237
       START_SCREEN();
3236 3238
       STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true);
3237 3239
       STATIC_ITEM(MSG_FILAMENT_CHANGE_INIT_1);
@@ -3254,7 +3256,7 @@ void kill_screen(const char* lcd_msg) {
3254 3256
       END_SCREEN();
3255 3257
     }
3256 3258
 
3257
-    void lcd_filament_change_unload_message() {
3259
+    void lcd_advanced_pause_unload_message() {
3258 3260
       START_SCREEN();
3259 3261
       STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true);
3260 3262
       STATIC_ITEM(MSG_FILAMENT_CHANGE_UNLOAD_1);
@@ -3277,7 +3279,7 @@ void kill_screen(const char* lcd_msg) {
3277 3279
       END_SCREEN();
3278 3280
     }
3279 3281
 
3280
-    void lcd_filament_change_wait_for_nozzles_to_heat() {
3282
+    void lcd_advanced_pause_wait_for_nozzles_to_heat() {
3281 3283
       START_SCREEN();
3282 3284
       STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true);
3283 3285
       STATIC_ITEM(MSG_FILAMENT_CHANGE_HEATING_1);
@@ -3294,7 +3296,7 @@ void kill_screen(const char* lcd_msg) {
3294 3296
       END_SCREEN();
3295 3297
     }
3296 3298
 
3297
-    void lcd_filament_change_heat_nozzle() {
3299
+    void lcd_advanced_pause_heat_nozzle() {
3298 3300
       START_SCREEN();
3299 3301
       STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true);
3300 3302
       STATIC_ITEM(MSG_FILAMENT_CHANGE_HEAT_1);
@@ -3311,7 +3313,7 @@ void kill_screen(const char* lcd_msg) {
3311 3313
       END_SCREEN();
3312 3314
     }
3313 3315
 
3314
-    void lcd_filament_change_insert_message() {
3316
+    void lcd_advanced_pause_insert_message() {
3315 3317
       START_SCREEN();
3316 3318
       STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true);
3317 3319
       STATIC_ITEM(MSG_FILAMENT_CHANGE_INSERT_1);
@@ -3334,7 +3336,7 @@ void kill_screen(const char* lcd_msg) {
3334 3336
       END_SCREEN();
3335 3337
     }
3336 3338
 
3337
-    void lcd_filament_change_load_message() {
3339
+    void lcd_advanced_pause_load_message() {
3338 3340
       START_SCREEN();
3339 3341
       STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true);
3340 3342
       STATIC_ITEM(MSG_FILAMENT_CHANGE_LOAD_1);
@@ -3357,7 +3359,7 @@ void kill_screen(const char* lcd_msg) {
3357 3359
       END_SCREEN();
3358 3360
     }
3359 3361
 
3360
-    void lcd_filament_change_extrude_message() {
3362
+    void lcd_advanced_pause_extrude_message() {
3361 3363
       START_SCREEN();
3362 3364
       STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true);
3363 3365
       STATIC_ITEM(MSG_FILAMENT_CHANGE_EXTRUDE_1);
@@ -3380,7 +3382,7 @@ void kill_screen(const char* lcd_msg) {
3380 3382
       END_SCREEN();
3381 3383
     }
3382 3384
 
3383
-    void lcd_filament_change_resume_message() {
3385
+    void lcd_advanced_pause_resume_message() {
3384 3386
       START_SCREEN();
3385 3387
       STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER, true, true);
3386 3388
       STATIC_ITEM(MSG_FILAMENT_CHANGE_RESUME_1);
@@ -3393,44 +3395,52 @@ void kill_screen(const char* lcd_msg) {
3393 3395
       END_SCREEN();
3394 3396
     }
3395 3397
 
3396
-    void lcd_filament_change_show_message(const FilamentChangeMessage message) {
3398
+    void lcd_advanced_pause_show_message(const AdvancedPauseMessage message) {
3397 3399
       switch (message) {
3398
-        case FILAMENT_CHANGE_MESSAGE_INIT:
3400
+        case ADVANCED_PAUSE_MESSAGE_INIT:
3399 3401
           defer_return_to_status = true;
3400
-          lcd_goto_screen(lcd_filament_change_init_message);
3402
+          lcd_goto_screen(lcd_advanced_pause_init_message);
3401 3403
           break;
3402
-        case FILAMENT_CHANGE_MESSAGE_UNLOAD:
3403
-          lcd_goto_screen(lcd_filament_change_unload_message);
3404
+        case ADVANCED_PAUSE_MESSAGE_UNLOAD:
3405
+          defer_return_to_status = true;
3406
+          lcd_goto_screen(lcd_advanced_pause_unload_message);
3404 3407
           break;
3405
-        case FILAMENT_CHANGE_MESSAGE_INSERT:
3406
-          lcd_goto_screen(lcd_filament_change_insert_message);
3408
+        case ADVANCED_PAUSE_MESSAGE_INSERT:
3409
+          defer_return_to_status = true;
3410
+          lcd_goto_screen(lcd_advanced_pause_insert_message);
3407 3411
           break;
3408
-        case FILAMENT_CHANGE_MESSAGE_LOAD:
3409
-          lcd_goto_screen(lcd_filament_change_load_message);
3412
+        case ADVANCED_PAUSE_MESSAGE_LOAD:
3413
+          defer_return_to_status = true;
3414
+          lcd_goto_screen(lcd_advanced_pause_load_message);
3410 3415
           break;
3411
-        case FILAMENT_CHANGE_MESSAGE_EXTRUDE:
3412
-          lcd_goto_screen(lcd_filament_change_extrude_message);
3416
+        case ADVANCED_PAUSE_MESSAGE_EXTRUDE:
3417
+          defer_return_to_status = true;
3418
+          lcd_goto_screen(lcd_advanced_pause_extrude_message);
3413 3419
           break;
3414
-        case FILAMENT_CHANGE_MESSAGE_CLICK_TO_HEAT_NOZZLE:
3415
-          lcd_goto_screen(lcd_filament_change_heat_nozzle);
3420
+        case ADVANCED_PAUSE_MESSAGE_CLICK_TO_HEAT_NOZZLE:
3421
+          defer_return_to_status = true;
3422
+          lcd_goto_screen(lcd_advanced_pause_heat_nozzle);
3416 3423
           break;
3417
-        case FILAMENT_CHANGE_MESSAGE_WAIT_FOR_NOZZLES_TO_HEAT:
3418
-          lcd_goto_screen(lcd_filament_change_wait_for_nozzles_to_heat);
3424
+        case ADVANCED_PAUSE_MESSAGE_WAIT_FOR_NOZZLES_TO_HEAT:
3425
+          defer_return_to_status = true;
3426
+          lcd_goto_screen(lcd_advanced_pause_wait_for_nozzles_to_heat);
3419 3427
           break;
3420
-        case FILAMENT_CHANGE_MESSAGE_OPTION:
3421
-          filament_change_menu_response = FILAMENT_CHANGE_RESPONSE_WAIT_FOR;
3422
-          lcd_goto_screen(lcd_filament_change_option_menu);
3428
+        case ADVANCED_PAUSE_MESSAGE_OPTION:
3429
+          defer_return_to_status = true;
3430
+          advanced_pause_menu_response = ADVANCED_PAUSE_RESPONSE_WAIT_FOR;
3431
+          lcd_goto_screen(lcd_advanced_pause_option_menu);
3423 3432
           break;
3424
-        case FILAMENT_CHANGE_MESSAGE_RESUME:
3425
-          lcd_goto_screen(lcd_filament_change_resume_message);
3433
+        case ADVANCED_PAUSE_MESSAGE_RESUME:
3434
+          defer_return_to_status = true;
3435
+          lcd_goto_screen(lcd_advanced_pause_resume_message);
3426 3436
           break;
3427
-        case FILAMENT_CHANGE_MESSAGE_STATUS:
3437
+        case ADVANCED_PAUSE_MESSAGE_STATUS:
3428 3438
           lcd_return_to_status();
3429 3439
           break;
3430 3440
       }
3431 3441
     }
3432 3442
 
3433
-  #endif // FILAMENT_CHANGE_FEATURE
3443
+  #endif // ADVANCED_PAUSE_FEATURE
3434 3444
 
3435 3445
   /**
3436 3446
    *

+ 3
- 3
Marlin/ultralcd.h 查看文件

@@ -83,9 +83,9 @@
83 83
     void lcd_quick_feedback();        // Audible feedback for a button click - could also be visual
84 84
     void lcd_completion_feedback(const bool good=true);
85 85
 
86
-    #if ENABLED(FILAMENT_CHANGE_FEATURE)
87
-      void lcd_filament_change_show_message(const FilamentChangeMessage message);
88
-    #endif // FILAMENT_CHANGE_FEATURE
86
+    #if ENABLED(ADVANCED_PAUSE_FEATURE)
87
+      void lcd_advanced_pause_show_message(const AdvancedPauseMessage message);
88
+    #endif // ADVANCED_PAUSE_FEATURE
89 89
 
90 90
   #else
91 91
 

+ 18
- 7
Marlin/ultralcd_impl_DOGM.h 查看文件

@@ -340,15 +340,26 @@ FORCE_INLINE void _draw_centered_temp(const int temp, const uint8_t x, const uin
340 340
   lcd_printPGM(PSTR(LCD_STR_DEGREE " "));
341 341
 }
342 342
 
343
-FORCE_INLINE void _draw_heater_status(const uint8_t x, const int8_t heater) {
343
+FORCE_INLINE void _draw_heater_status(const uint8_t x, const int8_t heater, const bool blink) {
344 344
   #if HAS_TEMP_BED
345 345
     bool isBed = heater < 0;
346 346
   #else
347 347
     const bool isBed = false;
348 348
   #endif
349 349
 
350
-  if (PAGE_UNDER(7))
351
-    _draw_centered_temp((isBed ? thermalManager.degTargetBed() : thermalManager.degTargetHotend(heater)) + 0.5, x, 7);
350
+  if (PAGE_UNDER(7)) {
351
+    #if ENABLED(ADVANCED_PAUSE_FEATURE)
352
+      const bool is_idle = (!isBed ? thermalManager.is_heater_idle(heater) :
353
+      #if HAS_TEMP_BED
354
+        thermalManager.is_bed_idle()
355
+      #else
356
+        false
357
+      #endif
358
+      );
359
+
360
+      if (blink || !is_idle)
361
+    #endif
362
+    _draw_centered_temp((isBed ? thermalManager.degTargetBed() : thermalManager.degTargetHotend(heater)) + 0.5, x, 7); }
352 363
 
353 364
   if (PAGE_CONTAINS(21, 28))
354 365
     _draw_centered_temp((isBed ? thermalManager.degBed() : thermalManager.degHotend(heater)) + 0.5, x, 28);
@@ -415,11 +426,11 @@ static void lcd_implementation_status_screen() {
415 426
 
416 427
   if (PAGE_UNDER(28)) {
417 428
     // Extruders
418
-    HOTEND_LOOP() _draw_heater_status(5 + e * 25, e);
429
+    HOTEND_LOOP() _draw_heater_status(5 + e * 25, e, blink);
419 430
 
420 431
     // Heated bed
421 432
     #if HOTENDS < 4 && HAS_TEMP_BED
422
-      _draw_heater_status(81, -1);
433
+      _draw_heater_status(81, -1, blink);
423 434
     #endif
424 435
 
425 436
     #if HAS_FAN0
@@ -662,7 +673,7 @@ static void lcd_implementation_status_screen() {
662 673
   uint8_t row_y1, row_y2;
663 674
   uint8_t constexpr row_height = DOG_CHAR_HEIGHT + 2 * (TALL_FONT_CORRECTION);
664 675
 
665
-  #if ENABLED(FILAMENT_CHANGE_FEATURE)
676
+  #if ENABLED(ADVANCED_PAUSE_FEATURE)
666 677
 
667 678
     static void lcd_implementation_hotend_status(const uint8_t row) {
668 679
       row_y1 = row * row_height + 1;
@@ -679,7 +690,7 @@ static void lcd_implementation_status_screen() {
679 690
       lcd_print(itostr3(thermalManager.degTargetHotend(active_extruder)));
680 691
     }
681 692
 
682
-  #endif // FILAMENT_CHANGE_FEATURE
693
+  #endif // ADVANCED_PAUSE_FEATURE
683 694
 
684 695
   // Set the colors for a menu item based on whether it is selected
685 696
   static void lcd_implementation_mark_as_selected(const uint8_t row, const bool isSelected) {

+ 45
- 22
Marlin/ultralcd_impl_HD44780.h 查看文件

@@ -573,6 +573,41 @@ FORCE_INLINE void _draw_axis_label(const AxisEnum axis, const char* const pstr,
573 573
   }
574 574
 }
575 575
 
576
+FORCE_INLINE void _draw_heater_status(const int8_t heater, const char prefix, const bool blink) {
577
+  const bool isBed = heater < 0;
578
+
579
+  const float t1 = (isBed ? thermalManager.degBed() : thermalManager.degHotend(heater));
580
+  const float t2 = (isBed ? thermalManager.degTargetBed() : thermalManager.degTargetHotend(heater));
581
+
582
+  if (prefix >= 0) lcd.print(prefix);
583
+
584
+  lcd.print(itostr3(t1 + 0.5));
585
+  lcd.print('/');
586
+
587
+  #if ENABLED(ADVANCED_PAUSE_FEATURE)
588
+    const bool is_idle = (!isBed ? thermalManager.is_heater_idle(heater) :
589
+    #if HAS_TEMP_BED
590
+      thermalManager.is_bed_idle()
591
+    #else
592
+      false
593
+    #endif
594
+    );
595
+
596
+    if (!blink && is_idle) {
597
+      lcd.print(' ');
598
+      if (t2 >= 10) lcd.print(' ');
599
+      if (t2 >= 100) lcd.print(' ');
600
+    }
601
+    else
602
+  #endif
603
+  lcd.print(itostr3left(t2 + 0.5));
604
+
605
+  if (prefix >= 0) {
606
+    lcd_printPGM(PSTR(LCD_STR_DEGREE " "));
607
+    if (t2 < 10) lcd.print(' ');
608
+  }
609
+}
610
+
576 611
 #if ENABLED(LCD_PROGRESS_BAR)
577 612
 
578 613
   inline void lcd_draw_progress_bar(const uint8_t percent) {
@@ -616,17 +651,7 @@ Possible status screens:
616 651
        |01234567890123456789|
617 652
 */
618 653
 static void lcd_implementation_status_screen() {
619
-
620
-  #define LCD_TEMP_ONLY(T1,T2) \
621
-    lcd.print(itostr3(T1 + 0.5)); \
622
-    lcd.print('/'); \
623
-    lcd.print(itostr3left(T2 + 0.5))
624
-
625
-  #define LCD_TEMP(T1,T2,PREFIX) \
626
-    lcd.print(PREFIX); \
627
-    LCD_TEMP_ONLY(T1,T2); \
628
-    lcd_printPGM(PSTR(LCD_STR_DEGREE " ")); \
629
-    if (T2 < 10) lcd.print(' ')
654
+  bool blink = lcd_blink();
630 655
 
631 656
   //
632 657
   // Line 1
@@ -639,7 +664,7 @@ static void lcd_implementation_status_screen() {
639 664
     //
640 665
     // Hotend 0 Temperature
641 666
     //
642
-    LCD_TEMP_ONLY(thermalManager.degHotend(0), thermalManager.degTargetHotend(0));
667
+    _draw_heater_status(0, -1, blink);
643 668
 
644 669
     //
645 670
     // Hotend 1 or Bed Temperature
@@ -649,10 +674,10 @@ static void lcd_implementation_status_screen() {
649 674
       lcd.setCursor(8, 0);
650 675
       #if HOTENDS > 1
651 676
         lcd.print(LCD_STR_THERMOMETER[0]);
652
-        LCD_TEMP_ONLY(thermalManager.degHotend(1), thermalManager.degTargetHotend(1));
677
+        _draw_heater_status(1, -1, blink);
653 678
       #else
654 679
         lcd.print(LCD_STR_BEDTEMP[0]);
655
-        LCD_TEMP_ONLY(thermalManager.degBed(), thermalManager.degTargetBed());
680
+        _draw_heater_status(-1, -1, blink);
656 681
       #endif
657 682
 
658 683
     #endif // HOTENDS > 1 || TEMP_SENSOR_BED != 0
@@ -662,7 +687,7 @@ static void lcd_implementation_status_screen() {
662 687
     //
663 688
     // Hotend 0 Temperature
664 689
     //
665
-    LCD_TEMP(thermalManager.degHotend(0), thermalManager.degTargetHotend(0), LCD_STR_THERMOMETER[0]);
690
+    _draw_heater_status(0, LCD_STR_THERMOMETER[0], blink);
666 691
 
667 692
     //
668 693
     // Hotend 1 or Bed Temperature
@@ -670,9 +695,9 @@ static void lcd_implementation_status_screen() {
670 695
     #if HOTENDS > 1 || TEMP_SENSOR_BED != 0
671 696
       lcd.setCursor(10, 0);
672 697
       #if HOTENDS > 1
673
-        LCD_TEMP(thermalManager.degHotend(1), thermalManager.degTargetHotend(1), LCD_STR_THERMOMETER[0]);
698
+        _draw_heater_status(1, LCD_STR_THERMOMETER[0], blink);
674 699
       #else
675
-        LCD_TEMP(thermalManager.degBed(), thermalManager.degTargetBed(), LCD_STR_BEDTEMP[0]);
700
+        _draw_heater_status(-1, LCD_STR_BEDTEMP[0], blink);
676 701
       #endif
677 702
 
678 703
     #endif // HOTENDS > 1 || TEMP_SENSOR_BED != 0
@@ -685,8 +710,6 @@ static void lcd_implementation_status_screen() {
685 710
 
686 711
   #if LCD_HEIGHT > 2
687 712
 
688
-    bool blink = lcd_blink();
689
-
690 713
     #if LCD_WIDTH < 20
691 714
 
692 715
       #if ENABLED(SDSUPPORT)
@@ -708,7 +731,7 @@ static void lcd_implementation_status_screen() {
708 731
         // If we both have a 2nd extruder and a heated bed,
709 732
         // show the heated bed temp on the left,
710 733
         // since the first line is filled with extruder temps
711
-        LCD_TEMP(thermalManager.degBed(), thermalManager.degTargetBed(), LCD_STR_BEDTEMP[0]);
734
+      _draw_heater_status(-1, LCD_STR_BEDTEMP[0], blink);
712 735
 
713 736
       #else
714 737
         // Before homing the axis letters are blinking 'X' <-> '?'.
@@ -803,7 +826,7 @@ static void lcd_implementation_status_screen() {
803 826
 
804 827
 #if ENABLED(ULTIPANEL)
805 828
 
806
-  #if ENABLED(FILAMENT_CHANGE_FEATURE)
829
+  #if ENABLED(ADVANCED_PAUSE_FEATURE)
807 830
 
808 831
     static void lcd_implementation_hotend_status(const uint8_t row) {
809 832
       if (row < LCD_HEIGHT) {
@@ -815,7 +838,7 @@ static void lcd_implementation_status_screen() {
815 838
       }
816 839
     }
817 840
 
818
-  #endif // FILAMENT_CHANGE_FEATURE
841
+  #endif // ADVANCED_PAUSE_FEATURE
819 842
 
820 843
   static void lcd_implementation_drawmenu_static(const uint8_t row, const char* pstr, const bool center=true, const bool invert=false, const char *valstr=NULL) {
821 844
     UNUSED(invert);

正在加载...
取消
保存