Browse Source

Implement filament change continuous purge

Sean 6 years ago
parent
commit
2fa0a73c2c
5 changed files with 78 additions and 38 deletions
  1. 2
    2
      .travis.yml
  2. 1
    0
      Marlin/Configuration_adv.h
  3. 43
    27
      Marlin/src/feature/pause.cpp
  4. 3
    0
      Marlin/src/feature/pause.h
  5. 29
    9
      Marlin/src/lcd/ultralcd.cpp

+ 2
- 2
.travis.yml View File

@@ -116,7 +116,7 @@ script:
116 116
   #      ULTIMAKERCONTROLLER, FILAMENT_LCD_DISPLAY, FILAMENT_WIDTH_SENSOR,
117 117
   #      PRINTCOUNTER, NOZZLE_PARK_FEATURE, NOZZLE_CLEAN_FEATURE, PCA9632,
118 118
   #      Z_DUAL_STEPPER_DRIVERS, Z_DUAL_ENDSTOPS, BEZIER_CURVE_SUPPORT, EXPERIMENTAL_I2CBUS,
119
-  #      ADVANCED_PAUSE_FEATURE, PARK_HEAD_ON_PAUSE, LCD_INFO_MENU,
119
+  #      ADVANCED_PAUSE_FEATURE, ADVANCED_PAUSE_CONTINUOUS_PURGE, PARK_HEAD_ON_PAUSE, LCD_INFO_MENU,
120 120
   #      EEPROM_SETTINGS, EEPROM_CHITCHAT, M100_FREE_MEMORY_WATCHER,
121 121
   #      INCH_MODE_SUPPORT, TEMPERATURE_UNITS_SUPPORT
122 122
   #
@@ -127,7 +127,7 @@ script:
127 127
   - opt_enable ULTIMAKERCONTROLLER SDSUPPORT
128 128
   - opt_enable PRINTCOUNTER NOZZLE_PARK_FEATURE NOZZLE_CLEAN_FEATURE PCA9632 USE_XMAX_PLUG
129 129
   - opt_enable_adv BEZIER_CURVE_SUPPORT EXPERIMENTAL_I2CBUS
130
-  - opt_enable_adv ADVANCED_PAUSE_FEATURE FILAMENT_LOAD_UNLOAD_GCODES PARK_HEAD_ON_PAUSE LCD_INFO_MENU M114_DETAIL
130
+  - opt_enable_adv ADVANCED_PAUSE_FEATURE ADVANCED_PAUSE_CONTINUOUS_PURGE FILAMENT_LOAD_UNLOAD_GCODES PARK_HEAD_ON_PAUSE LCD_INFO_MENU M114_DETAIL
131 131
   - opt_set_adv PWM_MOTOR_CURRENT {1300,1300,1250}
132 132
   - opt_set_adv I2C_SLAVE_ADDRESS 63
133 133
   - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}

+ 1
- 0
Marlin/Configuration_adv.h View File

@@ -921,6 +921,7 @@
921 921
   #define FILAMENT_UNLOAD_RETRACT_LENGTH 13   // (mm) Unload initial retract length.
922 922
   #define FILAMENT_UNLOAD_DELAY 5000          // (ms) Delay for the filament to cool after retract.
923 923
   #define FILAMENT_UNLOAD_PURGE_LENGTH 8      // (mm) An unretract is done, then this length is purged.
924
+  //#define ADVANCED_PAUSE_CONTINUOUS_PURGE   // Purge continuously up to the purge length until interrupted.
924 925
 
925 926
   #define PAUSE_PARK_NOZZLE_TIMEOUT 45        // (seconds) Time limit before the nozzle is turned off for safety.
926 927
   #define FILAMENT_CHANGE_ALERT_BEEPS 10      // Number of alert beeps to play when a response is needed.

+ 43
- 27
Marlin/src/feature/pause.cpp View File

@@ -187,37 +187,53 @@ bool load_filament(const float &load_length/*=0*/, const float &purge_length/*=0
187 187
   // Load filament
188 188
   if (load_length) do_pause_e_move(load_length, FILAMENT_CHANGE_LOAD_FEEDRATE);
189 189
 
190
-  do {
191
-    if (purge_length > 0) {
192
-      // "Wait for filament purge"
193
-      #if ENABLED(ULTIPANEL)
194
-        if (show_lcd)
195
-          lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_PURGE, mode);
196
-      #endif
197
-
198
-      // Extrude filament to get into hotend
199
-      do_pause_e_move(purge_length, ADVANCED_PAUSE_EXTRUDE_FEEDRATE);
200
-    }
190
+  #if ENABLED(ADVANCED_PAUSE_CONTINUOUS_PURGE)
201 191
 
202
-    // Show "Purge More" / "Resume" menu and wait for reply
203 192
     #if ENABLED(ULTIPANEL)
204
-      if (show_lcd) {
205
-        KEEPALIVE_STATE(PAUSED_FOR_USER);
206
-        wait_for_user = false;
207
-        lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_OPTION, mode);
208
-        while (advanced_pause_menu_response == ADVANCED_PAUSE_RESPONSE_WAIT_FOR) idle(true);
209
-        KEEPALIVE_STATE(IN_HANDLER);
210
-      }
193
+      if (show_lcd)
194
+        lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_CONTINUOUS_PURGE);
211 195
     #endif
212 196
 
213
-    // Keep looping if "Purge More" was selected
214
-  } while (
215
-    #if ENABLED(ULTIPANEL)
216
-      show_lcd && advanced_pause_menu_response == ADVANCED_PAUSE_RESPONSE_EXTRUDE_MORE
217
-    #else
218
-      0
219
-    #endif
220
-  );
197
+    wait_for_user = true;
198
+    for (float purge_count = purge_length; purge_count > 0 && wait_for_user; --purge_count)
199
+      do_pause_e_move(1, ADVANCED_PAUSE_EXTRUDE_FEEDRATE);
200
+    wait_for_user = false;
201
+
202
+  #else
203
+
204
+    do {
205
+      if (purge_length > 0) {
206
+        // "Wait for filament purge"
207
+        #if ENABLED(ULTIPANEL)
208
+          if (show_lcd)
209
+            lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_PURGE, mode);
210
+        #endif
211
+
212
+        // Extrude filament to get into hotend
213
+        do_pause_e_move(purge_length, ADVANCED_PAUSE_EXTRUDE_FEEDRATE);
214
+      }
215
+
216
+      // Show "Purge More" / "Resume" menu and wait for reply
217
+      #if ENABLED(ULTIPANEL)
218
+        if (show_lcd) {
219
+          KEEPALIVE_STATE(PAUSED_FOR_USER);
220
+          wait_for_user = false;
221
+          lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_OPTION, mode);
222
+          while (advanced_pause_menu_response == ADVANCED_PAUSE_RESPONSE_WAIT_FOR) idle(true);
223
+          KEEPALIVE_STATE(IN_HANDLER);
224
+        }
225
+      #endif
226
+
227
+      // Keep looping if "Purge More" was selected
228
+    } while (
229
+      #if ENABLED(ULTIPANEL)
230
+        show_lcd && advanced_pause_menu_response == ADVANCED_PAUSE_RESPONSE_EXTRUDE_MORE
231
+      #else
232
+        0
233
+      #endif
234
+    );
235
+
236
+  #endif      
221 237
 
222 238
   return true;
223 239
 }

+ 3
- 0
Marlin/src/feature/pause.h View File

@@ -44,6 +44,9 @@ enum AdvancedPauseMessage : char {
44 44
   ADVANCED_PAUSE_MESSAGE_INSERT,
45 45
   ADVANCED_PAUSE_MESSAGE_LOAD,
46 46
   ADVANCED_PAUSE_MESSAGE_PURGE,
47
+  #if ENABLED(ADVANCED_PAUSE_CONTINUOUS_PURGE)
48
+    ADVANCED_PAUSE_MESSAGE_CONTINUOUS_PURGE,
49
+  #endif
47 50
   ADVANCED_PAUSE_MESSAGE_OPTION,
48 51
   ADVANCED_PAUSE_MESSAGE_RESUME,
49 52
   ADVANCED_PAUSE_MESSAGE_STATUS,

+ 29
- 9
Marlin/src/lcd/ultralcd.cpp View File

@@ -218,14 +218,6 @@ uint16_t max_display_update_time = 0;
218 218
     #else
219 219
       void lcd_temp_menu_e0_filament_change();
220 220
     #endif
221
-    void lcd_advanced_pause_option_menu();
222
-    void lcd_advanced_pause_init_message();
223
-    void lcd_advanced_pause_unload_message();
224
-    void lcd_advanced_pause_insert_message();
225
-    void lcd_advanced_pause_load_message();
226
-    void lcd_advanced_pause_heat_nozzle();
227
-    void lcd_advanced_pause_purge_message();
228
-    void lcd_advanced_pause_resume_message();
229 221
   #endif
230 222
 
231 223
   #if ENABLED(DAC_STEPPER_CURRENT)
@@ -4598,10 +4590,35 @@ void kill_screen(const char* lcd_msg) {
4598 4590
       #if LCD_HEIGHT > _FC_LINES_G + 1
4599 4591
         STATIC_ITEM(" ");
4600 4592
       #endif
4601
-      HOTEND_STATUS_ITEM();
4593
+      HOTEND_STATUS_ITEM();                         
4602 4594
       END_SCREEN();
4603 4595
     }
4604 4596
 
4597
+    #if ENABLED(ADVANCED_PAUSE_CONTINUOUS_PURGE)
4598
+      void lcd_advanced_pause_continuous_purge_menu() {
4599
+        START_SCREEN();
4600
+        STATIC_ITEM(MSG_FILAMENT_CHANGE_PURGE_1);
4601
+        #ifdef MSG_FILAMENT_CHANGE_PURGE_2
4602
+          STATIC_ITEM(MSG_FILAMENT_CHANGE_PURGE_2);
4603
+          #define __FC_LINES_G 3
4604
+        #else
4605
+          #define __FC_LINES_G 2
4606
+        #endif
4607
+        #ifdef MSG_FILAMENT_CHANGE_PURGE_3
4608
+          STATIC_ITEM(MSG_FILAMENT_CHANGE_PURGE_3);
4609
+          #define _FC_LINES_G (__FC_LINES_G + 1)
4610
+        #else
4611
+          #define _FC_LINES_G __FC_LINES_G
4612
+        #endif
4613
+        #if LCD_HEIGHT > _FC_LINES_G + 1
4614
+          STATIC_ITEM(" ");
4615
+        #endif
4616
+        HOTEND_STATUS_ITEM();
4617
+        STATIC_ITEM(MSG_USERWAIT);
4618
+        END_SCREEN();
4619
+      }
4620
+    #endif
4621
+
4605 4622
     void lcd_advanced_pause_resume_message() {
4606 4623
       START_SCREEN();
4607 4624
       STATIC_ITEM_P(advanced_pause_header(), true, true);
@@ -4627,6 +4644,9 @@ void kill_screen(const char* lcd_msg) {
4627 4644
         case ADVANCED_PAUSE_MESSAGE_WAIT_FOR_NOZZLES_TO_HEAT: return lcd_advanced_pause_wait_for_nozzles_to_heat;
4628 4645
         case ADVANCED_PAUSE_MESSAGE_OPTION: advanced_pause_menu_response = ADVANCED_PAUSE_RESPONSE_WAIT_FOR;
4629 4646
                                             return lcd_advanced_pause_option_menu;
4647
+        #if ENABLED(ADVANCED_PAUSE_CONTINUOUS_PURGE)
4648
+          case ADVANCED_PAUSE_MESSAGE_CONTINUOUS_PURGE: return lcd_advanced_pause_continuous_purge_menu;                                                                                              
4649
+        #endif
4630 4650
         case ADVANCED_PAUSE_MESSAGE_STATUS:
4631 4651
         default: break;
4632 4652
       }

Loading…
Cancel
Save