Browse Source

Merge pull request #3662 from thinkyhead/rc_fixup_auto_filament_change

Rewritten FILAMENT_CHANGE_ENABLE feature
Scott Lahteine 9 years ago
parent
commit
b37e727072

+ 2
- 2
.travis.yml View File

@@ -161,11 +161,11 @@ script:
161 161
   - opt_set MOTHERBOARD BOARD_MINIRAMBO
162 162
   - build_marlin
163 163
   #
164
-  # Test FILAMENTCHANGEENABLE and LCD_INFO_MENU
164
+  # Test FILAMENT_CHANGE_FEATURE and LCD_INFO_MENU
165 165
   #
166 166
   - restore_configs
167 167
   - opt_enable ULTIMAKERCONTROLLER
168
-  - opt_enable_adv FILAMENTCHANGEENABLE LCD_INFO_MENU
168
+  - opt_enable_adv FILAMENT_CHANGE_FEATURE LCD_INFO_MENU
169 169
   - build_marlin
170 170
   #
171 171
   # Enable filament sensor

+ 24
- 10
Marlin/Configuration_adv.h View File

@@ -551,16 +551,30 @@ const unsigned int dropsegments = 5; //everything with less than this number of
551 551
 
552 552
 // Add support for experimental filament exchange support M600; requires display
553 553
 #if ENABLED(ULTIPANEL)
554
-  //#define FILAMENTCHANGEENABLE
555
-  #if ENABLED(FILAMENTCHANGEENABLE)
556
-    #define FILAMENTCHANGE_XPOS 3
557
-    #define FILAMENTCHANGE_YPOS 3
558
-    #define FILAMENTCHANGE_ZADD 10
559
-    #define FILAMENTCHANGE_FIRSTRETRACT -2
560
-    #define FILAMENTCHANGE_FINALRETRACT -100
561
-    #define AUTO_FILAMENT_CHANGE                //This extrude filament until you press the button on LCD
562
-    #define AUTO_FILAMENT_CHANGE_LENGTH 0.04    //Extrusion length on automatic extrusion loop
563
-    #define AUTO_FILAMENT_CHANGE_FEEDRATE 300   //Extrusion feedrate (mm/min) on automatic extrusion loop
554
+  // #define FILAMENT_CHANGE_FEATURE             // Enable filament exchange menu and M600 g-code (used for runout sensor too)
555
+  #if ENABLED(FILAMENT_CHANGE_FEATURE)
556
+    #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
557
+    #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
558
+    #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
559
+    #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
560
+    #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
561
+    #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
562
+                                                // It is a short retract used immediately after print interrupt before move to filament exchange position
563
+    #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
564
+    #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
565
+                                                // Longer length for bowden printers to unload filament from whole bowden tube,
566
+                                                // shorter lenght for printers without bowden to unload filament from extruder only,
567
+                                                // 0 to disable unloading for manual unloading
568
+    #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
569
+    #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
570
+                                                // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
571
+                                                // Short or zero length for printers without bowden where loading is not used
572
+    #define FILAMENT_CHANGE_LOAD_FEEDRATE 10    // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
573
+    #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
574
+                                                // 0 to disable for manual extrusion
575
+                                                // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
576
+                                                // or until outcoming filament color is not clear for filament color change
577
+    #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
564 578
   #endif
565 579
 #endif
566 580
 

+ 11
- 2
Marlin/Marlin.h View File

@@ -123,8 +123,8 @@ FORCE_INLINE void serialprintPGM(const char* str) {
123 123
 }
124 124
 
125 125
 void idle(
126
-  #if ENABLED(FILAMENTCHANGEENABLE)
127
-    bool no_stepper_sleep=false  // pass true to keep steppers from disabling on timeout
126
+  #if ENABLED(FILAMENT_CHANGE_FEATURE)
127
+    bool no_stepper_sleep = false  // pass true to keep steppers from disabling on timeout
128 128
   #endif
129 129
 );
130 130
 
@@ -346,6 +346,15 @@ float code_value_temp_diff();
346 346
   extern int meas_delay_cm; //delay distance
347 347
 #endif
348 348
 
349
+#if ENABLED(FILAMENT_CHANGE_FEATURE)
350
+  enum FilamentChangeMenuResponse {
351
+    FILAMENT_CHANGE_RESPONSE_WAIT_FOR,
352
+    FILAMENT_CHANGE_RESPONSE_EXTRUDE_MORE,
353
+    FILAMENT_CHANGE_RESPONSE_RESUME_PRINT
354
+  };
355
+  extern FilamentChangeMenuResponse filament_change_menu_response;
356
+#endif
357
+
349 358
 #if ENABLED(PID_ADD_EXTRUSION_RATE)
350 359
   extern int lpq_len;
351 360
 #endif

+ 112
- 77
Marlin/Marlin_main.cpp View File

@@ -294,6 +294,7 @@ static char command_queue[BUFSIZE][MAX_CMD_SIZE];
294 294
 #endif
295 295
 
296 296
 const float homing_feedrate[] = HOMING_FEEDRATE;
297
+
297 298
 bool axis_relative_modes[] = AXIS_RELATIVE_MODES;
298 299
 int feedrate_multiplier = 100; //100->1 200->2
299 300
 int saved_feedrate_multiplier;
@@ -490,6 +491,10 @@ static uint8_t target_extruder;
490 491
   static bool filament_ran_out = false;
491 492
 #endif
492 493
 
494
+#if ENABLED(FILAMENT_CHANGE_FEATURE)
495
+  FilamentChangeMenuResponse filament_change_menu_response;
496
+#endif
497
+
493 498
 static bool send_ok[BUFSIZE];
494 499
 
495 500
 #if HAS_SERVOS
@@ -1564,9 +1569,8 @@ inline void line_to_z(float zPosition) {
1564 1569
 inline void line_to_destination(float mm_m) {
1565 1570
   planner.buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], mm_m / 60, active_extruder);
1566 1571
 }
1567
-inline void line_to_destination() {
1568
-  line_to_destination(feedrate);
1569
-}
1572
+inline void line_to_destination() { line_to_destination(feedrate); }
1573
+
1570 1574
 /**
1571 1575
  * sync_plan_position
1572 1576
  * Set planner / stepper positions to the cartesian current_position.
@@ -3123,7 +3127,7 @@ inline void gcode_G28() {
3123 3127
   enum MeshLevelingState { MeshReport, MeshStart, MeshNext, MeshSet, MeshSetZOffset, MeshReset };
3124 3128
 
3125 3129
   inline void _mbl_goto_xy(float x, float y) {
3126
-    saved_feedrate = feedrate;
3130
+    float old_feedrate = feedrate;
3127 3131
     feedrate = homing_feedrate[X_AXIS];
3128 3132
 
3129 3133
     current_position[Z_AXIS] = MESH_HOME_SEARCH_Z
@@ -3144,7 +3148,7 @@ inline void gcode_G28() {
3144 3148
       line_to_current_position();
3145 3149
     #endif
3146 3150
 
3147
-    feedrate = saved_feedrate;
3151
+    feedrate = old_feedrate;
3148 3152
     stepper.synchronize();
3149 3153
   }
3150 3154
 
@@ -6131,7 +6135,7 @@ inline void gcode_M503() {
6131 6135
 
6132 6136
 #endif // HAS_BED_PROBE
6133 6137
 
6134
-#if ENABLED(FILAMENTCHANGEENABLE)
6138
+#if ENABLED(FILAMENT_CHANGE_FEATURE)
6135 6139
 
6136 6140
   /**
6137 6141
    * M600: Pause for filament change
@@ -6153,129 +6157,160 @@ inline void gcode_M503() {
6153 6157
       return;
6154 6158
     }
6155 6159
 
6160
+    // Show initial message and wait for synchronize steppers
6161
+    lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_INIT);
6162
+    stepper.synchronize();
6163
+
6156 6164
     float lastpos[NUM_AXIS];
6157
-    #if ENABLED(DELTA)
6158
-      float fr60 = feedrate / 60;
6159
-    #endif
6160 6165
 
6161
-    for (int i = 0; i < NUM_AXIS; i++)
6166
+    // Save current position of all axes
6167
+    for (uint8_t i = 0; i < NUM_AXIS; i++)
6162 6168
       lastpos[i] = destination[i] = current_position[i];
6163 6169
 
6170
+    // Define runplan for move axes
6164 6171
     #if ENABLED(DELTA)
6165
-      #define RUNPLAN calculate_delta(destination); \
6166
-                      planner.buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], destination[E_AXIS], fr60, active_extruder);
6172
+      #define RUNPLAN(RATE) calculate_delta(destination); \
6173
+                            planner.buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], destination[E_AXIS], RATE, active_extruder);
6167 6174
     #else
6168
-      #define RUNPLAN line_to_destination();
6175
+      #define RUNPLAN(RATE) line_to_destination(RATE * 60);
6169 6176
     #endif
6170 6177
 
6171
-    //retract by E
6178
+    KEEPALIVE_STATE(IN_HANDLER);
6179
+
6180
+    // Initial retract before move to filament change position
6172 6181
     if (code_seen('E')) destination[E_AXIS] += code_value_axis_units(E_AXIS);
6173
-    #ifdef FILAMENTCHANGE_FIRSTRETRACT
6174
-      else destination[E_AXIS] += FILAMENTCHANGE_FIRSTRETRACT;
6182
+    #if defined(FILAMENT_CHANGE_RETRACT_LENGTH) && FILAMENT_CHANGE_RETRACT_LENGTH > 0
6183
+      else destination[E_AXIS] -= FILAMENT_CHANGE_RETRACT_LENGTH;
6175 6184
     #endif
6176 6185
 
6177
-    RUNPLAN;
6186
+    RUNPLAN(FILAMENT_CHANGE_RETRACT_FEEDRATE);
6178 6187
 
6179
-    //lift Z
6180
-    if (code_seen('Z')) destination[Z_AXIS] += code_value_axis_units(Z_AXIS);
6181
-    #ifdef FILAMENTCHANGE_ZADD
6182
-      else destination[Z_AXIS] += FILAMENTCHANGE_ZADD;
6183
-    #endif
6188
+    // Lift Z axis
6189
+    float z_lift = code_seen('Z') ? code_value_axis_units(Z_AXIS) :
6190
+      #if defined(FILAMENT_CHANGE_Z_ADD) && FILAMENT_CHANGE_Z_ADD > 0
6191
+        FILAMENT_CHANGE_Z_ADD
6192
+      #else
6193
+        0
6194
+      #endif
6195
+    ;
6184 6196
 
6185
-    RUNPLAN;
6197
+    if (z_lift > 0) {
6198
+      destination[Z_AXIS] += z_lift;
6199
+      NOMORE(destination[Z_AXIS], Z_MAX_POS);
6200
+      RUNPLAN(FILAMENT_CHANGE_Z_FEEDRATE);
6201
+    }
6186 6202
 
6187
-    //move xy
6203
+    // Move XY axes to filament exchange position
6188 6204
     if (code_seen('X')) destination[X_AXIS] = code_value_axis_units(X_AXIS);
6189
-    #ifdef FILAMENTCHANGE_XPOS
6190
-      else destination[X_AXIS] = FILAMENTCHANGE_XPOS;
6205
+    #ifdef FILAMENT_CHANGE_X_POS
6206
+      else destination[X_AXIS] = FILAMENT_CHANGE_X_POS;
6191 6207
     #endif
6192 6208
 
6193 6209
     if (code_seen('Y')) destination[Y_AXIS] = code_value_axis_units(Y_AXIS);
6194
-    #ifdef FILAMENTCHANGE_YPOS
6195
-      else destination[Y_AXIS] = FILAMENTCHANGE_YPOS;
6210
+    #ifdef FILAMENT_CHANGE_Y_POS
6211
+      else destination[Y_AXIS] = FILAMENT_CHANGE_Y_POS;
6196 6212
     #endif
6197 6213
 
6198
-    RUNPLAN;
6214
+    RUNPLAN(FILAMENT_CHANGE_XY_FEEDRATE);
6215
+
6216
+    stepper.synchronize();
6217
+    lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_UNLOAD);
6199 6218
 
6219
+    // Unload filament
6200 6220
     if (code_seen('L')) destination[E_AXIS] += code_value_axis_units(E_AXIS);
6201
-    #ifdef FILAMENTCHANGE_FINALRETRACT
6202
-      else destination[E_AXIS] += FILAMENTCHANGE_FINALRETRACT;
6221
+    #if defined(FILAMENT_CHANGE_UNLOAD_LENGTH) && FILAMENT_CHANGE_UNLOAD_LENGTH > 0
6222
+      else destination[E_AXIS] -= FILAMENT_CHANGE_UNLOAD_LENGTH;
6203 6223
     #endif
6204 6224
 
6205
-    RUNPLAN;
6225
+    RUNPLAN(FILAMENT_CHANGE_UNLOAD_FEEDRATE);
6206 6226
 
6207
-    //finish moves
6227
+    // Synchronize steppers and then disable extruders steppers for manual filament changing
6208 6228
     stepper.synchronize();
6209
-    //disable extruder steppers so filament can be removed
6210 6229
     disable_e0();
6211 6230
     disable_e1();
6212 6231
     disable_e2();
6213 6232
     disable_e3();
6214 6233
     delay(100);
6215
-    LCD_ALERTMESSAGEPGM(MSG_FILAMENTCHANGE);
6216
-    #if DISABLED(AUTO_FILAMENT_CHANGE)
6217
-      millis_t next_tick = 0;
6218
-    #endif
6219
-    KEEPALIVE_STATE(PAUSED_FOR_USER);
6234
+
6235
+    millis_t next_tick = 0;
6236
+
6237
+    // Wait for filament insert by user and press button
6238
+    lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_INSERT);
6239
+
6220 6240
     while (!lcd_clicked()) {
6221
-      #if DISABLED(AUTO_FILAMENT_CHANGE)
6241
+      #if HAS_BUZZER
6222 6242
         millis_t ms = millis();
6223
-        if (ELAPSED(ms, next_tick)) {
6224
-          lcd_quick_feedback();
6225
-          next_tick = ms + 2500UL; // feedback every 2.5s while waiting
6243
+        if (ms >= next_tick) {
6244
+          buzzer.tone(300, 2000);
6245
+          next_tick = ms + 2500; // Beep every 2.5s while waiting
6226 6246
         }
6227
-        idle(true);
6228
-      #else
6229
-        current_position[E_AXIS] += AUTO_FILAMENT_CHANGE_LENGTH;
6230
-        destination[E_AXIS] = current_position[E_AXIS];
6231
-        line_to_destination(AUTO_FILAMENT_CHANGE_FEEDRATE);
6232
-        stepper.synchronize();
6233 6247
       #endif
6234
-    } // while(!lcd_clicked)
6235
-    KEEPALIVE_STATE(IN_HANDLER);
6236
-    lcd_quick_feedback(); // click sound feedback
6248
+      idle(true);
6249
+    }
6250
+    delay(100);
6251
+    while (lcd_clicked()) idle(true);
6252
+    delay(100);
6237 6253
 
6238
-    #if ENABLED(AUTO_FILAMENT_CHANGE)
6239
-      current_position[E_AXIS] = 0;
6240
-      stepper.synchronize();
6241
-    #endif
6254
+    // Show load message
6255
+    lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_LOAD);
6242 6256
 
6243
-    //return to normal
6257
+    // Load filament
6244 6258
     if (code_seen('L')) destination[E_AXIS] -= code_value_axis_units(E_AXIS);
6245
-    #ifdef FILAMENTCHANGE_FINALRETRACT
6246
-      else destination[E_AXIS] -= FILAMENTCHANGE_FINALRETRACT;
6259
+    #if defined(FILAMENT_CHANGE_LOAD_LENGTH) && FILAMENT_CHANGE_LOAD_LENGTH > 0
6260
+      else destination[E_AXIS] += FILAMENT_CHANGE_LOAD_LENGTH;
6247 6261
     #endif
6248 6262
 
6249
-    current_position[E_AXIS] = destination[E_AXIS]; //the long retract of L is compensated by manual filament feeding
6250
-    sync_plan_position_e();
6263
+    RUNPLAN(FILAMENT_CHANGE_LOAD_FEEDRATE);
6264
+    stepper.synchronize();
6251 6265
 
6252
-    RUNPLAN; //should do nothing
6266
+    #if defined(FILAMENT_CHANGE_EXTRUDE_LENGTH) && FILAMENT_CHANGE_EXTRUDE_LENGTH > 0
6267
+      do {
6268
+        // Extrude filament to get into hotend
6269
+        lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_EXTRUDE);
6270
+        destination[E_AXIS] += FILAMENT_CHANGE_EXTRUDE_LENGTH;
6271
+        RUNPLAN(FILAMENT_CHANGE_EXTRUDE_FEEDRATE);
6272
+        stepper.synchronize();
6273
+        // Ask user if more filament should be extruded
6274
+        KEEPALIVE_STATE(PAUSED_FOR_USER);
6275
+        lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_OPTION);
6276
+        while (filament_change_menu_response == FILAMENT_CHANGE_RESPONSE_WAIT_FOR) idle(true);
6277
+        KEEPALIVE_STATE(IN_HANDLER);
6278
+      } while (filament_change_menu_response != FILAMENT_CHANGE_RESPONSE_RESUME_PRINT);
6279
+    #endif
6280
+
6281
+    lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_RESUME);
6253 6282
 
6254
-    lcd_reset_alert_level();
6283
+    KEEPALIVE_STATE(IN_HANDLER);
6284
+
6285
+    // Set extruder to saved position
6286
+    current_position[E_AXIS] = lastpos[E_AXIS];
6287
+    destination[E_AXIS] = lastpos[E_AXIS];
6288
+    planner.set_e_position_mm(current_position[E_AXIS]);
6255 6289
 
6256 6290
     #if ENABLED(DELTA)
6257 6291
       // Move XYZ to starting position, then E
6258 6292
       calculate_delta(lastpos);
6259
-      planner.buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], destination[E_AXIS], fr60, active_extruder);
6260
-      planner.buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], lastpos[E_AXIS], fr60, active_extruder);
6293
+      planner.buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], destination[E_AXIS], FILAMENT_CHANGE_XY_FEEDRATE, active_extruder);
6294
+      planner.buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], lastpos[E_AXIS], FILAMENT_CHANGE_XY_FEEDRATE, active_extruder);
6261 6295
     #else
6262 6296
       // Move XY to starting position, then Z, then E
6263 6297
       destination[X_AXIS] = lastpos[X_AXIS];
6264 6298
       destination[Y_AXIS] = lastpos[Y_AXIS];
6265
-      line_to_destination();
6299
+      RUNPLAN(FILAMENT_CHANGE_XY_FEEDRATE);
6266 6300
       destination[Z_AXIS] = lastpos[Z_AXIS];
6267
-      line_to_destination();
6268
-      destination[E_AXIS] = lastpos[E_AXIS];
6269
-      line_to_destination();
6301
+      RUNPLAN(FILAMENT_CHANGE_Z_FEEDRATE);
6270 6302
     #endif
6303
+    stepper.synchronize();
6271 6304
 
6272 6305
     #if ENABLED(FILAMENT_RUNOUT_SENSOR)
6273 6306
       filament_ran_out = false;
6274 6307
     #endif
6275 6308
 
6309
+    // Show status screen
6310
+    lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_STATUS);
6276 6311
   }
6277 6312
 
6278
-#endif // FILAMENTCHANGEENABLE
6313
+#endif // FILAMENT_CHANGE_FEATURE
6279 6314
 
6280 6315
 #if ENABLED(DUAL_X_CARRIAGE)
6281 6316
 
@@ -6464,11 +6499,11 @@ inline void gcode_T(uint8_t tmp_extruder) {
6464 6499
 
6465 6500
   #if HOTENDS > 1
6466 6501
 
6467
-    float stored_feedrate = feedrate;
6502
+    float old_feedrate = feedrate;
6468 6503
 
6469 6504
     if (code_seen('F')) {
6470 6505
       float next_feedrate = code_value_axis_units(X_AXIS);
6471
-      if (next_feedrate > 0.0) stored_feedrate = feedrate = next_feedrate;
6506
+      if (next_feedrate > 0.0) old_feedrate = feedrate = next_feedrate;
6472 6507
     }
6473 6508
     else
6474 6509
       feedrate = XY_PROBE_FEEDRATE;
@@ -6624,7 +6659,7 @@ inline void gcode_T(uint8_t tmp_extruder) {
6624 6659
       enable_solenoid_on_active_extruder();
6625 6660
     #endif // EXT_SOLENOID
6626 6661
 
6627
-    feedrate = stored_feedrate;
6662
+    feedrate = old_feedrate;
6628 6663
 
6629 6664
   #else // !HOTENDS > 1
6630 6665
 
@@ -7232,11 +7267,11 @@ void process_next_command() {
7232 7267
           break;
7233 7268
       #endif // HAS_BED_PROBE
7234 7269
 
7235
-      #if ENABLED(FILAMENTCHANGEENABLE)
7270
+      #if ENABLED(FILAMENT_CHANGE_FEATURE)
7236 7271
         case 600: //Pause for filament change X[pos] Y[pos] Z[relative lift] E[initial retract] L[later retract distance for removal]
7237 7272
           gcode_M600();
7238 7273
           break;
7239
-      #endif // FILAMENTCHANGEENABLE
7274
+      #endif // FILAMENT_CHANGE_FEATURE
7240 7275
 
7241 7276
       #if ENABLED(DUAL_X_CARRIAGE)
7242 7277
         case 605:
@@ -7993,14 +8028,14 @@ void disable_all_steppers() {
7993 8028
  * Standard idle routine keeps the machine alive
7994 8029
  */
7995 8030
 void idle(
7996
-  #if ENABLED(FILAMENTCHANGEENABLE)
8031
+  #if ENABLED(FILAMENT_CHANGE_FEATURE)
7997 8032
     bool no_stepper_sleep/*=false*/
7998 8033
   #endif
7999 8034
 ) {
8000 8035
   lcd_update();
8001 8036
   host_keepalive();
8002 8037
   manage_inactivity(
8003
-    #if ENABLED(FILAMENTCHANGEENABLE)
8038
+    #if ENABLED(FILAMENT_CHANGE_FEATURE)
8004 8039
       no_stepper_sleep
8005 8040
     #endif
8006 8041
   );

+ 4
- 2
Marlin/SanityCheck.h View File

@@ -124,8 +124,8 @@
124 124
 /**
125 125
  * Filament Change with Extruder Runout Prevention
126 126
  */
127
-#if ENABLED(FILAMENTCHANGEENABLE) && ENABLED(EXTRUDER_RUNOUT_PREVENT)
128
-  #error "EXTRUDER_RUNOUT_PREVENT currently incompatible with FILAMENTCHANGE."
127
+#if ENABLED(FILAMENT_CHANGE_FEATURE) && ENABLED(EXTRUDER_RUNOUT_PREVENT)
128
+  #error "EXTRUDER_RUNOUT_PREVENT is incompatible with FILAMENT_CHANGE_FEATURE."
129 129
 #endif
130 130
 
131 131
 /**
@@ -623,6 +623,8 @@
623 623
   #error "PROBE_SERVO_DEACTIVATION_DELAY is deprecated. Use DEACTIVATE_SERVOS_AFTER_MOVE instead."
624 624
 #elif defined(SERVO_DEACTIVATION_DELAY)
625 625
   #error "SERVO_DEACTIVATION_DELAY is deprecated. Use SERVO_DELAY instead."
626
+#elif ENABLED(FILAMENTCHANGEENABLE)
627
+  #error "FILAMENTCHANGEENABLE is now FILAMENT_CHANGE_FEATURE. Please update your configuration."
626 628
 #endif
627 629
 
628 630
 #endif //SANITYCHECK_H

+ 4
- 5
Marlin/dogm_lcd_implementation.h View File

@@ -473,14 +473,14 @@ static void lcd_implementation_mark_as_selected(uint8_t row, bool isSelected) {
473 473
   u8g.setPrintPos((START_ROW) * (DOG_CHAR_WIDTH), (row + 1) * (DOG_CHAR_HEIGHT));
474 474
 }
475 475
 
476
-#if ENABLED(LCD_INFO_MENU)
476
+#if ENABLED(LCD_INFO_MENU) || ENABLED(FILAMENT_CHANGE_FEATURE)
477 477
 
478
-  static void lcd_implementation_drawmenu_static(uint8_t row, const char* pstr, const char* valstr=NULL, bool center=false) {
478
+  static void lcd_implementation_drawmenu_static(uint8_t row, const char* pstr, const char* valstr=NULL, bool center=true) {
479 479
     char c;
480 480
     int8_t n = LCD_WIDTH;
481 481
     u8g.setPrintPos(0, (row + 1) * (DOG_CHAR_HEIGHT));
482 482
     u8g.setColorIndex(1); // normal text
483
-    if (center) {
483
+    if (center && !valstr) {
484 484
       int8_t pad = (LCD_WIDTH - lcd_strlen_P(pstr)) / 2;
485 485
       while (--pad >= 0) { lcd_print(' '); n--; }
486 486
     }
@@ -495,10 +495,9 @@ static void lcd_implementation_mark_as_selected(uint8_t row, bool isSelected) {
495 495
     while (n-- > 0) lcd_print(' ');
496 496
   }
497 497
 
498
-#endif // LCD_INFO_MENU
498
+#endif // LCD_INFO_MENU || FILAMENT_CHANGE_FEATURE
499 499
 
500 500
 static void lcd_implementation_drawmenu_generic(bool isSelected, uint8_t row, const char* pstr, char pre_char, char post_char) {
501
-  UNUSED(pstr);
502 501
   UNUSED(pre_char);
503 502
 
504 503
   char c;

+ 24
- 10
Marlin/example_configurations/Felix/Configuration_adv.h View File

@@ -551,16 +551,30 @@ const unsigned int dropsegments = 5; //everything with less than this number of
551 551
 
552 552
 // Add support for experimental filament exchange support M600; requires display
553 553
 #if ENABLED(ULTIPANEL)
554
-  //#define FILAMENTCHANGEENABLE
555
-  #if ENABLED(FILAMENTCHANGEENABLE)
556
-    #define FILAMENTCHANGE_XPOS 3
557
-    #define FILAMENTCHANGE_YPOS 3
558
-    #define FILAMENTCHANGE_ZADD 10
559
-    #define FILAMENTCHANGE_FIRSTRETRACT -2
560
-    #define FILAMENTCHANGE_FINALRETRACT -100
561
-    #define AUTO_FILAMENT_CHANGE                //This extrude filament until you press the button on LCD
562
-    #define AUTO_FILAMENT_CHANGE_LENGTH 0.04    //Extrusion length on automatic extrusion loop
563
-    #define AUTO_FILAMENT_CHANGE_FEEDRATE 300   //Extrusion feedrate (mm/min) on automatic extrusion loop
554
+  // #define FILAMENT_CHANGE_FEATURE             // Enable filament exchange menu and M600 g-code (used for runout sensor too)
555
+  #if ENABLED(FILAMENT_CHANGE_FEATURE)
556
+    #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
557
+    #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
558
+    #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
559
+    #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
560
+    #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
561
+    #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
562
+                                                // It is a short retract used immediately after print interrupt before move to filament exchange position
563
+    #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
564
+    #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
565
+                                                // Longer length for bowden printers to unload filament from whole bowden tube,
566
+                                                // shorter lenght for printers without bowden to unload filament from extruder only,
567
+                                                // 0 to disable unloading for manual unloading
568
+    #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
569
+    #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
570
+                                                // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
571
+                                                // Short or zero length for printers without bowden where loading is not used
572
+    #define FILAMENT_CHANGE_LOAD_FEEDRATE 10    // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
573
+    #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
574
+                                                // 0 to disable for manual extrusion
575
+                                                // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
576
+                                                // or until outcoming filament color is not clear for filament color change
577
+    #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
564 578
   #endif
565 579
 #endif
566 580
 

+ 24
- 10
Marlin/example_configurations/Hephestos/Configuration_adv.h View File

@@ -551,16 +551,30 @@ const unsigned int dropsegments = 5; //everything with less than this number of
551 551
 
552 552
 // Add support for experimental filament exchange support M600; requires display
553 553
 #if ENABLED(ULTIPANEL)
554
-  //#define FILAMENTCHANGEENABLE
555
-  #if ENABLED(FILAMENTCHANGEENABLE)
556
-    #define FILAMENTCHANGE_XPOS 3
557
-    #define FILAMENTCHANGE_YPOS 3
558
-    #define FILAMENTCHANGE_ZADD 10
559
-    #define FILAMENTCHANGE_FIRSTRETRACT -2
560
-    #define FILAMENTCHANGE_FINALRETRACT -100
561
-    #define AUTO_FILAMENT_CHANGE                //This extrude filament until you press the button on LCD
562
-    #define AUTO_FILAMENT_CHANGE_LENGTH 0.04    //Extrusion length on automatic extrusion loop
563
-    #define AUTO_FILAMENT_CHANGE_FEEDRATE 300   //Extrusion feedrate (mm/min) on automatic extrusion loop
554
+  // #define FILAMENT_CHANGE_FEATURE             // Enable filament exchange menu and M600 g-code (used for runout sensor too)
555
+  #if ENABLED(FILAMENT_CHANGE_FEATURE)
556
+    #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
557
+    #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
558
+    #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
559
+    #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
560
+    #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
561
+    #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
562
+                                                // It is a short retract used immediately after print interrupt before move to filament exchange position
563
+    #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
564
+    #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
565
+                                                // Longer length for bowden printers to unload filament from whole bowden tube,
566
+                                                // shorter lenght for printers without bowden to unload filament from extruder only,
567
+                                                // 0 to disable unloading for manual unloading
568
+    #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
569
+    #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
570
+                                                // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
571
+                                                // Short or zero length for printers without bowden where loading is not used
572
+    #define FILAMENT_CHANGE_LOAD_FEEDRATE 10    // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
573
+    #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
574
+                                                // 0 to disable for manual extrusion
575
+                                                // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
576
+                                                // or until outcoming filament color is not clear for filament color change
577
+    #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
564 578
   #endif
565 579
 #endif
566 580
 

+ 24
- 10
Marlin/example_configurations/Hephestos_2/Configuration_adv.h View File

@@ -551,16 +551,30 @@ const unsigned int dropsegments = 5; //everything with less than this number of
551 551
 
552 552
 // Add support for experimental filament exchange support M600; requires display
553 553
 #if ENABLED(ULTIPANEL)
554
-  //#define FILAMENTCHANGEENABLE
555
-  #if ENABLED(FILAMENTCHANGEENABLE)
556
-    #define FILAMENTCHANGE_XPOS 3
557
-    #define FILAMENTCHANGE_YPOS 3
558
-    #define FILAMENTCHANGE_ZADD 10
559
-    #define FILAMENTCHANGE_FIRSTRETRACT -2
560
-    #define FILAMENTCHANGE_FINALRETRACT -100
561
-    #define AUTO_FILAMENT_CHANGE                //This extrude filament until you press the button on LCD
562
-    #define AUTO_FILAMENT_CHANGE_LENGTH 0.04    //Extrusion length on automatic extrusion loop
563
-    #define AUTO_FILAMENT_CHANGE_FEEDRATE 300   //Extrusion feedrate (mm/min) on automatic extrusion loop
554
+  // #define FILAMENT_CHANGE_FEATURE             // Enable filament exchange menu and M600 g-code (used for runout sensor too)
555
+  #if ENABLED(FILAMENT_CHANGE_FEATURE)
556
+    #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
557
+    #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
558
+    #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
559
+    #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
560
+    #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
561
+    #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
562
+                                                // It is a short retract used immediately after print interrupt before move to filament exchange position
563
+    #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
564
+    #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
565
+                                                // Longer length for bowden printers to unload filament from whole bowden tube,
566
+                                                // shorter lenght for printers without bowden to unload filament from extruder only,
567
+                                                // 0 to disable unloading for manual unloading
568
+    #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
569
+    #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
570
+                                                // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
571
+                                                // Short or zero length for printers without bowden where loading is not used
572
+    #define FILAMENT_CHANGE_LOAD_FEEDRATE 10    // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
573
+    #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
574
+                                                // 0 to disable for manual extrusion
575
+                                                // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
576
+                                                // or until outcoming filament color is not clear for filament color change
577
+    #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
564 578
   #endif
565 579
 #endif
566 580
 

+ 24
- 10
Marlin/example_configurations/K8200/Configuration_adv.h View File

@@ -557,16 +557,30 @@ const unsigned int dropsegments = 2; //everything with less than this number of
557 557
 
558 558
 // Add support for experimental filament exchange support M600; requires display
559 559
 #if ENABLED(ULTIPANEL)
560
-  //#define FILAMENTCHANGEENABLE
561
-  #if ENABLED(FILAMENTCHANGEENABLE)
562
-    #define FILAMENTCHANGE_XPOS 3
563
-    #define FILAMENTCHANGE_YPOS 3
564
-    #define FILAMENTCHANGE_ZADD 10
565
-    #define FILAMENTCHANGE_FIRSTRETRACT -2
566
-    #define FILAMENTCHANGE_FINALRETRACT -100
567
-    #define AUTO_FILAMENT_CHANGE                //This extrude filament until you press the button on LCD
568
-    #define AUTO_FILAMENT_CHANGE_LENGTH 0.04    //Extrusion length on automatic extrusion loop
569
-    #define AUTO_FILAMENT_CHANGE_FEEDRATE 300   //Extrusion feedrate (mm/min) on automatic extrusion loop
560
+  // #define FILAMENT_CHANGE_FEATURE             // Enable filament exchange menu and M600 g-code (used for runout sensor too)
561
+  #if ENABLED(FILAMENT_CHANGE_FEATURE)
562
+    #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
563
+    #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
564
+    #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
565
+    #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
566
+    #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
567
+    #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
568
+                                                // It is a short retract used immediately after print interrupt before move to filament exchange position
569
+    #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
570
+    #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
571
+                                                // Longer length for bowden printers to unload filament from whole bowden tube,
572
+                                                // shorter lenght for printers without bowden to unload filament from extruder only,
573
+                                                // 0 to disable unloading for manual unloading
574
+    #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
575
+    #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
576
+                                                // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
577
+                                                // Short or zero length for printers without bowden where loading is not used
578
+    #define FILAMENT_CHANGE_LOAD_FEEDRATE 10    // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
579
+    #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
580
+                                                // 0 to disable for manual extrusion
581
+                                                // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
582
+                                                // or until outcoming filament color is not clear for filament color change
583
+    #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
570 584
   #endif
571 585
 #endif
572 586
 

+ 24
- 10
Marlin/example_configurations/RigidBot/Configuration_adv.h View File

@@ -551,16 +551,30 @@ const unsigned int dropsegments = 5; //everything with less than this number of
551 551
 
552 552
 // Add support for experimental filament exchange support M600; requires display
553 553
 #if ENABLED(ULTIPANEL)
554
-  //#define FILAMENTCHANGEENABLE
555
-  #if ENABLED(FILAMENTCHANGEENABLE)
556
-    #define FILAMENTCHANGE_XPOS 3
557
-    #define FILAMENTCHANGE_YPOS 3
558
-    #define FILAMENTCHANGE_ZADD 10
559
-    #define FILAMENTCHANGE_FIRSTRETRACT -2
560
-    #define FILAMENTCHANGE_FINALRETRACT -100
561
-    #define AUTO_FILAMENT_CHANGE                //This extrude filament until you press the button on LCD
562
-    #define AUTO_FILAMENT_CHANGE_LENGTH 0.04    //Extrusion length on automatic extrusion loop
563
-    #define AUTO_FILAMENT_CHANGE_FEEDRATE 300   //Extrusion feedrate (mm/min) on automatic extrusion loop
554
+  // #define FILAMENT_CHANGE_FEATURE             // Enable filament exchange menu and M600 g-code (used for runout sensor too)
555
+  #if ENABLED(FILAMENT_CHANGE_FEATURE)
556
+    #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
557
+    #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
558
+    #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
559
+    #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
560
+    #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
561
+    #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
562
+                                                // It is a short retract used immediately after print interrupt before move to filament exchange position
563
+    #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
564
+    #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
565
+                                                // Longer length for bowden printers to unload filament from whole bowden tube,
566
+                                                // shorter lenght for printers without bowden to unload filament from extruder only,
567
+                                                // 0 to disable unloading for manual unloading
568
+    #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
569
+    #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
570
+                                                // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
571
+                                                // Short or zero length for printers without bowden where loading is not used
572
+    #define FILAMENT_CHANGE_LOAD_FEEDRATE 10    // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
573
+    #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
574
+                                                // 0 to disable for manual extrusion
575
+                                                // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
576
+                                                // or until outcoming filament color is not clear for filament color change
577
+    #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
564 578
   #endif
565 579
 #endif
566 580
 

+ 24
- 10
Marlin/example_configurations/SCARA/Configuration_adv.h View File

@@ -551,16 +551,30 @@ const unsigned int dropsegments = 5; //everything with less than this number of
551 551
 
552 552
 // Add support for experimental filament exchange support M600; requires display
553 553
 #if ENABLED(ULTIPANEL)
554
-  //#define FILAMENTCHANGEENABLE
555
-  #if ENABLED(FILAMENTCHANGEENABLE)
556
-    #define FILAMENTCHANGE_XPOS 3
557
-    #define FILAMENTCHANGE_YPOS 3
558
-    #define FILAMENTCHANGE_ZADD 10
559
-    #define FILAMENTCHANGE_FIRSTRETRACT -2
560
-    #define FILAMENTCHANGE_FINALRETRACT -100
561
-    #define AUTO_FILAMENT_CHANGE                //This extrude filament until you press the button on LCD
562
-    #define AUTO_FILAMENT_CHANGE_LENGTH 0.04    //Extrusion length on automatic extrusion loop
563
-    #define AUTO_FILAMENT_CHANGE_FEEDRATE 300   //Extrusion feedrate (mm/min) on automatic extrusion loop
554
+  // #define FILAMENT_CHANGE_FEATURE             // Enable filament exchange menu and M600 g-code (used for runout sensor too)
555
+  #if ENABLED(FILAMENT_CHANGE_FEATURE)
556
+    #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
557
+    #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
558
+    #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
559
+    #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
560
+    #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
561
+    #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
562
+                                                // It is a short retract used immediately after print interrupt before move to filament exchange position
563
+    #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
564
+    #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
565
+                                                // Longer length for bowden printers to unload filament from whole bowden tube,
566
+                                                // shorter lenght for printers without bowden to unload filament from extruder only,
567
+                                                // 0 to disable unloading for manual unloading
568
+    #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
569
+    #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
570
+                                                // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
571
+                                                // Short or zero length for printers without bowden where loading is not used
572
+    #define FILAMENT_CHANGE_LOAD_FEEDRATE 10    // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
573
+    #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
574
+                                                // 0 to disable for manual extrusion
575
+                                                // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
576
+                                                // or until outcoming filament color is not clear for filament color change
577
+    #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
564 578
   #endif
565 579
 #endif
566 580
 

+ 24
- 10
Marlin/example_configurations/TAZ4/Configuration_adv.h View File

@@ -559,16 +559,30 @@ const unsigned int dropsegments = 5; //everything with less than this number of
559 559
 
560 560
 // Add support for experimental filament exchange support M600; requires display
561 561
 #if ENABLED(ULTIPANEL)
562
-  #define FILAMENTCHANGEENABLE
563
-  #if ENABLED(FILAMENTCHANGEENABLE)
564
-    #define FILAMENTCHANGE_XPOS 3
565
-    #define FILAMENTCHANGE_YPOS 3
566
-    #define FILAMENTCHANGE_ZADD 10
567
-    #define FILAMENTCHANGE_FIRSTRETRACT -2
568
-    #define FILAMENTCHANGE_FINALRETRACT -100
569
-    //#define AUTO_FILAMENT_CHANGE                //This extrude filament until you press the button on LCD
570
-    //#define AUTO_FILAMENT_CHANGE_LENGTH 0.04    //Extrusion length on automatic extrusion loop
571
-    //#define AUTO_FILAMENT_CHANGE_FEEDRATE 300   //Extrusion feedrate (mm/min) on automatic extrusion loop
562
+  #define FILAMENT_CHANGE_FEATURE               // Enable filament exchange menu and M600 g-code (used for runout sensor too)
563
+  #if ENABLED(FILAMENT_CHANGE_FEATURE)
564
+    #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
565
+    #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
566
+    #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
567
+    #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
568
+    #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
569
+    #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
570
+                                                // It is a short retract used immediately after print interrupt before move to filament exchange position
571
+    #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
572
+    #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
573
+                                                // Longer length for bowden printers to unload filament from whole bowden tube,
574
+                                                // shorter lenght for printers without bowden to unload filament from extruder only,
575
+                                                // 0 to disable unloading for manual unloading
576
+    #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
577
+    #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
578
+                                                // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
579
+                                                // Short or zero length for printers without bowden where loading is not used
580
+    #define FILAMENT_CHANGE_LOAD_FEEDRATE 10    // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
581
+    #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
582
+                                                // 0 to disable for manual extrusion
583
+                                                // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
584
+                                                // or until outcoming filament color is not clear for filament color change
585
+    #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
572 586
   #endif
573 587
 #endif
574 588
 

+ 24
- 10
Marlin/example_configurations/WITBOX/Configuration_adv.h View File

@@ -551,16 +551,30 @@ const unsigned int dropsegments = 5; //everything with less than this number of
551 551
 
552 552
 // Add support for experimental filament exchange support M600; requires display
553 553
 #if ENABLED(ULTIPANEL)
554
-  //#define FILAMENTCHANGEENABLE
555
-  #if ENABLED(FILAMENTCHANGEENABLE)
556
-    #define FILAMENTCHANGE_XPOS 3
557
-    #define FILAMENTCHANGE_YPOS 3
558
-    #define FILAMENTCHANGE_ZADD 10
559
-    #define FILAMENTCHANGE_FIRSTRETRACT -2
560
-    #define FILAMENTCHANGE_FINALRETRACT -100
561
-    #define AUTO_FILAMENT_CHANGE                //This extrude filament until you press the button on LCD
562
-    #define AUTO_FILAMENT_CHANGE_LENGTH 0.04    //Extrusion length on automatic extrusion loop
563
-    #define AUTO_FILAMENT_CHANGE_FEEDRATE 300   //Extrusion feedrate (mm/min) on automatic extrusion loop
554
+  // #define FILAMENT_CHANGE_FEATURE             // Enable filament exchange menu and M600 g-code (used for runout sensor too)
555
+  #if ENABLED(FILAMENT_CHANGE_FEATURE)
556
+    #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
557
+    #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
558
+    #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
559
+    #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
560
+    #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
561
+    #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
562
+                                                // It is a short retract used immediately after print interrupt before move to filament exchange position
563
+    #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
564
+    #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
565
+                                                // Longer length for bowden printers to unload filament from whole bowden tube,
566
+                                                // shorter lenght for printers without bowden to unload filament from extruder only,
567
+                                                // 0 to disable unloading for manual unloading
568
+    #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
569
+    #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
570
+                                                // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
571
+                                                // Short or zero length for printers without bowden where loading is not used
572
+    #define FILAMENT_CHANGE_LOAD_FEEDRATE 10    // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
573
+    #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
574
+                                                // 0 to disable for manual extrusion
575
+                                                // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
576
+                                                // or until outcoming filament color is not clear for filament color change
577
+    #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
564 578
   #endif
565 579
 #endif
566 580
 

+ 24
- 10
Marlin/example_configurations/delta/biv2.5/Configuration_adv.h View File

@@ -553,16 +553,30 @@ const unsigned int dropsegments = 5; //everything with less than this number of
553 553
 
554 554
 // Add support for experimental filament exchange support M600; requires display
555 555
 #if ENABLED(ULTIPANEL)
556
-  //#define FILAMENTCHANGEENABLE
557
-  #if ENABLED(FILAMENTCHANGEENABLE)
558
-    #define FILAMENTCHANGE_XPOS 3
559
-    #define FILAMENTCHANGE_YPOS 3
560
-    #define FILAMENTCHANGE_ZADD 10
561
-    #define FILAMENTCHANGE_FIRSTRETRACT -2
562
-    #define FILAMENTCHANGE_FINALRETRACT -100
563
-    #define AUTO_FILAMENT_CHANGE                //This extrude filament until you press the button on LCD
564
-    #define AUTO_FILAMENT_CHANGE_LENGTH 0.04    //Extrusion length on automatic extrusion loop
565
-    #define AUTO_FILAMENT_CHANGE_FEEDRATE 300   //Extrusion feedrate (mm/min) on automatic extrusion loop
556
+  // #define FILAMENT_CHANGE_FEATURE             // Enable filament exchange menu and M600 g-code (used for runout sensor too)
557
+  #if ENABLED(FILAMENT_CHANGE_FEATURE)
558
+    #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
559
+    #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
560
+    #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
561
+    #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
562
+    #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
563
+    #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
564
+                                                // It is a short retract used immediately after print interrupt before move to filament exchange position
565
+    #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
566
+    #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
567
+                                                // Longer length for bowden printers to unload filament from whole bowden tube,
568
+                                                // shorter lenght for printers without bowden to unload filament from extruder only,
569
+                                                // 0 to disable unloading for manual unloading
570
+    #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
571
+    #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
572
+                                                // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
573
+                                                // Short or zero length for printers without bowden where loading is not used
574
+    #define FILAMENT_CHANGE_LOAD_FEEDRATE 10    // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
575
+    #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
576
+                                                // 0 to disable for manual extrusion
577
+                                                // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
578
+                                                // or until outcoming filament color is not clear for filament color change
579
+    #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
566 580
   #endif
567 581
 #endif
568 582
 

+ 24
- 10
Marlin/example_configurations/delta/generic/Configuration_adv.h View File

@@ -553,16 +553,30 @@ const unsigned int dropsegments = 5; //everything with less than this number of
553 553
 
554 554
 // Add support for experimental filament exchange support M600; requires display
555 555
 #if ENABLED(ULTIPANEL)
556
-  //#define FILAMENTCHANGEENABLE
557
-  #if ENABLED(FILAMENTCHANGEENABLE)
558
-    #define FILAMENTCHANGE_XPOS 3
559
-    #define FILAMENTCHANGE_YPOS 3
560
-    #define FILAMENTCHANGE_ZADD 10
561
-    #define FILAMENTCHANGE_FIRSTRETRACT -2
562
-    #define FILAMENTCHANGE_FINALRETRACT -100
563
-    #define AUTO_FILAMENT_CHANGE                //This extrude filament until you press the button on LCD
564
-    #define AUTO_FILAMENT_CHANGE_LENGTH 0.04    //Extrusion length on automatic extrusion loop
565
-    #define AUTO_FILAMENT_CHANGE_FEEDRATE 300   //Extrusion feedrate (mm/min) on automatic extrusion loop
556
+  // #define FILAMENT_CHANGE_FEATURE             // Enable filament exchange menu and M600 g-code (used for runout sensor too)
557
+  #if ENABLED(FILAMENT_CHANGE_FEATURE)
558
+    #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
559
+    #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
560
+    #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
561
+    #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
562
+    #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
563
+    #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
564
+                                                // It is a short retract used immediately after print interrupt before move to filament exchange position
565
+    #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
566
+    #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
567
+                                                // Longer length for bowden printers to unload filament from whole bowden tube,
568
+                                                // shorter lenght for printers without bowden to unload filament from extruder only,
569
+                                                // 0 to disable unloading for manual unloading
570
+    #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
571
+    #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
572
+                                                // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
573
+                                                // Short or zero length for printers without bowden where loading is not used
574
+    #define FILAMENT_CHANGE_LOAD_FEEDRATE 10    // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
575
+    #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
576
+                                                // 0 to disable for manual extrusion
577
+                                                // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
578
+                                                // or until outcoming filament color is not clear for filament color change
579
+    #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
566 580
   #endif
567 581
 #endif
568 582
 

+ 24
- 10
Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h View File

@@ -552,16 +552,30 @@ const unsigned int dropsegments = 5; //everything with less than this number of
552 552
 
553 553
 // Add support for experimental filament exchange support M600; requires display
554 554
 #if ENABLED(ULTIPANEL)
555
-  //#define FILAMENTCHANGEENABLE
556
-  #if ENABLED(FILAMENTCHANGEENABLE)
557
-    #define FILAMENTCHANGE_XPOS 3
558
-    #define FILAMENTCHANGE_YPOS 3
559
-    #define FILAMENTCHANGE_ZADD 10
560
-    #define FILAMENTCHANGE_FIRSTRETRACT -2
561
-    #define FILAMENTCHANGE_FINALRETRACT -100
562
-    #define AUTO_FILAMENT_CHANGE                //This extrude filament until you press the button on LCD
563
-    #define AUTO_FILAMENT_CHANGE_LENGTH 0.04    //Extrusion length on automatic extrusion loop
564
-    #define AUTO_FILAMENT_CHANGE_FEEDRATE 300   //Extrusion feedrate (mm/min) on automatic extrusion loop
555
+  // #define FILAMENT_CHANGE_FEATURE             // Enable filament exchange menu and M600 g-code (used for runout sensor too)
556
+  #if ENABLED(FILAMENT_CHANGE_FEATURE)
557
+    #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
558
+    #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
559
+    #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
560
+    #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
561
+    #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
562
+    #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
563
+                                                // It is a short retract used immediately after print interrupt before move to filament exchange position
564
+    #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
565
+    #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
566
+                                                // Longer length for bowden printers to unload filament from whole bowden tube,
567
+                                                // shorter lenght for printers without bowden to unload filament from extruder only,
568
+                                                // 0 to disable unloading for manual unloading
569
+    #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
570
+    #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
571
+                                                // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
572
+                                                // Short or zero length for printers without bowden where loading is not used
573
+    #define FILAMENT_CHANGE_LOAD_FEEDRATE 10    // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
574
+    #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
575
+                                                // 0 to disable for manual extrusion
576
+                                                // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
577
+                                                // or until outcoming filament color is not clear for filament color change
578
+    #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
565 579
   #endif
566 580
 #endif
567 581
 

+ 24
- 10
Marlin/example_configurations/delta/kossel_pro/Configuration_adv.h View File

@@ -557,16 +557,30 @@ const unsigned int dropsegments = 5; //everything with less than this number of
557 557
 
558 558
 // Add support for experimental filament exchange support M600; requires display
559 559
 #if ENABLED(ULTIPANEL)
560
-  //#define FILAMENTCHANGEENABLE
561
-  #if ENABLED(FILAMENTCHANGEENABLE)
562
-    #define FILAMENTCHANGE_XPOS 3
563
-    #define FILAMENTCHANGE_YPOS 3
564
-    #define FILAMENTCHANGE_ZADD 10
565
-    #define FILAMENTCHANGE_FIRSTRETRACT -2
566
-    #define FILAMENTCHANGE_FINALRETRACT -100
567
-    #define AUTO_FILAMENT_CHANGE                //This extrude filament until you press the button on LCD
568
-    #define AUTO_FILAMENT_CHANGE_LENGTH 0.04    //Extrusion length on automatic extrusion loop
569
-    #define AUTO_FILAMENT_CHANGE_FEEDRATE 300   //Extrusion feedrate (mm/min) on automatic extrusion loop
560
+  // #define FILAMENT_CHANGE_FEATURE             // Enable filament exchange menu and M600 g-code (used for runout sensor too)
561
+  #if ENABLED(FILAMENT_CHANGE_FEATURE)
562
+    #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
563
+    #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
564
+    #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
565
+    #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
566
+    #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
567
+    #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
568
+                                                // It is a short retract used immediately after print interrupt before move to filament exchange position
569
+    #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
570
+    #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
571
+                                                // Longer length for bowden printers to unload filament from whole bowden tube,
572
+                                                // shorter lenght for printers without bowden to unload filament from extruder only,
573
+                                                // 0 to disable unloading for manual unloading
574
+    #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
575
+    #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
576
+                                                // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
577
+                                                // Short or zero length for printers without bowden where loading is not used
578
+    #define FILAMENT_CHANGE_LOAD_FEEDRATE 10    // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
579
+    #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
580
+                                                // 0 to disable for manual extrusion
581
+                                                // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
582
+                                                // or until outcoming filament color is not clear for filament color change
583
+    #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
570 584
   #endif
571 585
 #endif
572 586
 

+ 24
- 10
Marlin/example_configurations/delta/kossel_xl/Configuration_adv.h View File

@@ -553,16 +553,30 @@ const unsigned int dropsegments = 5; //everything with less than this number of
553 553
 
554 554
 // Add support for experimental filament exchange support M600; requires display
555 555
 #if ENABLED(ULTIPANEL)
556
-  //#define FILAMENTCHANGEENABLE
557
-  #if ENABLED(FILAMENTCHANGEENABLE)
558
-    #define FILAMENTCHANGE_XPOS 3
559
-    #define FILAMENTCHANGE_YPOS 3
560
-    #define FILAMENTCHANGE_ZADD 10
561
-    #define FILAMENTCHANGE_FIRSTRETRACT -2
562
-    #define FILAMENTCHANGE_FINALRETRACT -100
563
-    #define AUTO_FILAMENT_CHANGE                //This extrude filament until you press the button on LCD
564
-    #define AUTO_FILAMENT_CHANGE_LENGTH 0.04    //Extrusion length on automatic extrusion loop
565
-    #define AUTO_FILAMENT_CHANGE_FEEDRATE 300   //Extrusion feedrate (mm/min) on automatic extrusion loop
556
+  // #define FILAMENT_CHANGE_FEATURE             // Enable filament exchange menu and M600 g-code (used for runout sensor too)
557
+  #if ENABLED(FILAMENT_CHANGE_FEATURE)
558
+    #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
559
+    #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
560
+    #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
561
+    #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
562
+    #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
563
+    #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
564
+                                                // It is a short retract used immediately after print interrupt before move to filament exchange position
565
+    #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
566
+    #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
567
+                                                // Longer length for bowden printers to unload filament from whole bowden tube,
568
+                                                // shorter lenght for printers without bowden to unload filament from extruder only,
569
+                                                // 0 to disable unloading for manual unloading
570
+    #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
571
+    #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
572
+                                                // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
573
+                                                // Short or zero length for printers without bowden where loading is not used
574
+    #define FILAMENT_CHANGE_LOAD_FEEDRATE 10    // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
575
+    #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
576
+                                                // 0 to disable for manual extrusion
577
+                                                // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
578
+                                                // or until outcoming filament color is not clear for filament color change
579
+    #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
566 580
   #endif
567 581
 #endif
568 582
 

+ 24
- 10
Marlin/example_configurations/makibox/Configuration_adv.h View File

@@ -551,16 +551,30 @@ const unsigned int dropsegments = 5; //everything with less than this number of
551 551
 
552 552
 // Add support for experimental filament exchange support M600; requires display
553 553
 #if ENABLED(ULTIPANEL)
554
-  //#define FILAMENTCHANGEENABLE
555
-  #if ENABLED(FILAMENTCHANGEENABLE)
556
-    #define FILAMENTCHANGE_XPOS 3
557
-    #define FILAMENTCHANGE_YPOS 3
558
-    #define FILAMENTCHANGE_ZADD 10
559
-    #define FILAMENTCHANGE_FIRSTRETRACT -2
560
-    #define FILAMENTCHANGE_FINALRETRACT -100
561
-    #define AUTO_FILAMENT_CHANGE                //This extrude filament until you press the button on LCD
562
-    #define AUTO_FILAMENT_CHANGE_LENGTH 0.04    //Extrusion length on automatic extrusion loop
563
-    #define AUTO_FILAMENT_CHANGE_FEEDRATE 300   //Extrusion feedrate (mm/min) on automatic extrusion loop
554
+  // #define FILAMENT_CHANGE_FEATURE             // Enable filament exchange menu and M600 g-code (used for runout sensor too)
555
+  #if ENABLED(FILAMENT_CHANGE_FEATURE)
556
+    #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
557
+    #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
558
+    #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
559
+    #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
560
+    #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
561
+    #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
562
+                                                // It is a short retract used immediately after print interrupt before move to filament exchange position
563
+    #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
564
+    #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
565
+                                                // Longer length for bowden printers to unload filament from whole bowden tube,
566
+                                                // shorter lenght for printers without bowden to unload filament from extruder only,
567
+                                                // 0 to disable unloading for manual unloading
568
+    #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
569
+    #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
570
+                                                // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
571
+                                                // Short or zero length for printers without bowden where loading is not used
572
+    #define FILAMENT_CHANGE_LOAD_FEEDRATE 10    // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
573
+    #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
574
+                                                // 0 to disable for manual extrusion
575
+                                                // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
576
+                                                // or until outcoming filament color is not clear for filament color change
577
+    #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
564 578
   #endif
565 579
 #endif
566 580
 

+ 24
- 10
Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h View File

@@ -551,16 +551,30 @@ const unsigned int dropsegments = 5; //everything with less than this number of
551 551
 
552 552
 // Add support for experimental filament exchange support M600; requires display
553 553
 #if ENABLED(ULTIPANEL)
554
-  //#define FILAMENTCHANGEENABLE
555
-  #if ENABLED(FILAMENTCHANGEENABLE)
556
-    #define FILAMENTCHANGE_XPOS 3
557
-    #define FILAMENTCHANGE_YPOS 3
558
-    #define FILAMENTCHANGE_ZADD 10
559
-    #define FILAMENTCHANGE_FIRSTRETRACT -2
560
-    #define FILAMENTCHANGE_FINALRETRACT -100
561
-    #define AUTO_FILAMENT_CHANGE                //This extrude filament until you press the button on LCD
562
-    #define AUTO_FILAMENT_CHANGE_LENGTH 0.04    //Extrusion length on automatic extrusion loop
563
-    #define AUTO_FILAMENT_CHANGE_FEEDRATE 300   //Extrusion feedrate (mm/min) on automatic extrusion loop
554
+  // #define FILAMENT_CHANGE_FEATURE             // Enable filament exchange menu and M600 g-code (used for runout sensor too)
555
+  #if ENABLED(FILAMENT_CHANGE_FEATURE)
556
+    #define FILAMENT_CHANGE_X_POS 3             // X position of hotend
557
+    #define FILAMENT_CHANGE_Y_POS 3             // Y position of hotend
558
+    #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
559
+    #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
560
+    #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
561
+    #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
562
+                                                // It is a short retract used immediately after print interrupt before move to filament exchange position
563
+    #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
564
+    #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
565
+                                                // Longer length for bowden printers to unload filament from whole bowden tube,
566
+                                                // shorter lenght for printers without bowden to unload filament from extruder only,
567
+                                                // 0 to disable unloading for manual unloading
568
+    #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
569
+    #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
570
+                                                // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
571
+                                                // Short or zero length for printers without bowden where loading is not used
572
+    #define FILAMENT_CHANGE_LOAD_FEEDRATE 10    // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
573
+    #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
574
+                                                // 0 to disable for manual extrusion
575
+                                                // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
576
+                                                // or until outcoming filament color is not clear for filament color change
577
+    #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
564 578
   #endif
565 579
 #endif
566 580
 

+ 23
- 0
Marlin/language_cz.h View File

@@ -200,4 +200,27 @@
200 200
 #define MSG_DELTA_CALIBRATE_Z               "Kalibrovat Z"
201 201
 #define MSG_DELTA_CALIBRATE_CENTER          "Kalibrovat Stred"
202 202
 
203
+#define MSG_FILAMENT_CHANGE_HEADER          "VYMENA FILAMENTU"
204
+#define MSG_FILAMENT_CHANGE_INIT_1          "Cekejte prosim"
205
+#define MSG_FILAMENT_CHANGE_INIT_2          "na zahajeni"
206
+#define MSG_FILAMENT_CHANGE_INIT_3          "vymeny filamentu"
207
+#define MSG_FILAMENT_CHANGE_UNLOAD_1        "Cekejte prosim"
208
+#define MSG_FILAMENT_CHANGE_UNLOAD_2        "na vysunuti"
209
+#define MSG_FILAMENT_CHANGE_UNLOAD_3        "filamentu"
210
+#define MSG_FILAMENT_CHANGE_INSERT_1        "Vlozte filament"
211
+#define MSG_FILAMENT_CHANGE_INSERT_2        "a stisknete"
212
+#define MSG_FILAMENT_CHANGE_INSERT_3        "tlacitko..."
213
+#define MSG_FILAMENT_CHANGE_LOAD_1          "Cekejte prosim"
214
+#define MSG_FILAMENT_CHANGE_LOAD_2          "na zavedeni"
215
+#define MSG_FILAMENT_CHANGE_LOAD_3          "filamentu"
216
+#define MSG_FILAMENT_CHANGE_EXTRUDE_1       "Cekejte prosim"
217
+#define MSG_FILAMENT_CHANGE_EXTRUDE_2       "na vytlaceni"
218
+#define MSG_FILAMENT_CHANGE_EXTRUDE_3       "filamentu"
219
+#define MSG_FILAMENT_CHANGE_OPTION_HEADER   "CO DAL?"
220
+#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE  "Jeste vytlacit"
221
+#define MSG_FILAMENT_CHANGE_OPTION_RESUME   "Obnovit tisk"
222
+#define MSG_FILAMENT_CHANGE_RESUME_1        "Cekejte prosim"
223
+#define MSG_FILAMENT_CHANGE_RESUME_2        "na pokracovani"
224
+#define MSG_FILAMENT_CHANGE_RESUME_3        "tisku"
225
+
203 226
 #endif // LANGUAGE_CZ_H

+ 88
- 0
Marlin/language_en.h View File

@@ -563,4 +563,92 @@
563 563
   #define MSG_INFO_PSU                        "Power Supply"
564 564
 #endif
565 565
 
566
+#ifndef MSG_FILAMENT_CHANGE_HEADER
567
+  #define MSG_FILAMENT_CHANGE_HEADER          "CHANGE FILAMENT"
568
+#endif
569
+#ifndef MSG_FILAMENT_CHANGE_OPTION_HEADER
570
+  #define MSG_FILAMENT_CHANGE_OPTION_HEADER   "CHANGE OPTIONS:"
571
+#endif
572
+#ifndef MSG_FILAMENT_CHANGE_OPTION_EXTRUDE
573
+  #define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE  "Extrude more"
574
+#endif
575
+#ifndef MSG_FILAMENT_CHANGE_OPTION_RESUME
576
+  #define MSG_FILAMENT_CHANGE_OPTION_RESUME   "Resume print"
577
+#endif
578
+#if LCD_HEIGHT >= 4
579
+  #ifndef MSG_FILAMENT_CHANGE_INIT_1
580
+    #define MSG_FILAMENT_CHANGE_INIT_1          "Wait for start"
581
+  #endif
582
+  #ifndef MSG_FILAMENT_CHANGE_INIT_2
583
+    #define MSG_FILAMENT_CHANGE_INIT_2          "of the filament"
584
+  #endif
585
+  #ifndef MSG_FILAMENT_CHANGE_INIT_3
586
+    #define MSG_FILAMENT_CHANGE_INIT_3          "change"
587
+  #endif
588
+  #ifndef MSG_FILAMENT_CHANGE_UNLOAD_1
589
+    #define MSG_FILAMENT_CHANGE_UNLOAD_1        "Wait for"
590
+  #endif
591
+  #ifndef MSG_FILAMENT_CHANGE_UNLOAD_2
592
+    #define MSG_FILAMENT_CHANGE_UNLOAD_2        "filament unload"
593
+  #endif
594
+  #ifndef MSG_FILAMENT_CHANGE_UNLOAD_3
595
+    #define MSG_FILAMENT_CHANGE_UNLOAD_3        ""
596
+  #endif
597
+  #ifndef MSG_FILAMENT_CHANGE_INSERT_1
598
+    #define MSG_FILAMENT_CHANGE_INSERT_1        "Insert filament"
599
+  #endif
600
+  #ifndef MSG_FILAMENT_CHANGE_INSERT_2
601
+    #define MSG_FILAMENT_CHANGE_INSERT_2        "and press button"
602
+  #endif
603
+  #ifndef MSG_FILAMENT_CHANGE_INSERT_3
604
+    #define MSG_FILAMENT_CHANGE_INSERT_3        "to continue..."
605
+  #endif
606
+  #ifndef MSG_FILAMENT_CHANGE_LOAD_1
607
+    #define MSG_FILAMENT_CHANGE_LOAD_1          "Wait for"
608
+  #endif
609
+  #ifndef MSG_FILAMENT_CHANGE_LOAD_2
610
+    #define MSG_FILAMENT_CHANGE_LOAD_2          "filament load"
611
+  #endif
612
+  #ifndef MSG_FILAMENT_CHANGE_LOAD_3
613
+    #define MSG_FILAMENT_CHANGE_LOAD_3          ""
614
+  #endif
615
+  #ifndef MSG_FILAMENT_CHANGE_EXTRUDE_1
616
+    #define MSG_FILAMENT_CHANGE_EXTRUDE_1       "Wait for"
617
+  #endif
618
+  #ifndef MSG_FILAMENT_CHANGE_EXTRUDE_2
619
+    #define MSG_FILAMENT_CHANGE_EXTRUDE_2       "filament extrude"
620
+  #endif
621
+  #ifndef MSG_FILAMENT_CHANGE_EXTRUDE_3
622
+    #define MSG_FILAMENT_CHANGE_EXTRUDE_3       ""
623
+  #endif
624
+  #ifndef MSG_FILAMENT_CHANGE_RESUME_1
625
+    #define MSG_FILAMENT_CHANGE_RESUME_1        "Wait for print"
626
+  #endif
627
+  #ifndef MSG_FILAMENT_CHANGE_RESUME_2
628
+    #define MSG_FILAMENT_CHANGE_RESUME_2        "to resume"
629
+  #endif
630
+  #ifndef MSG_FILAMENT_CHANGE_RESUME_3
631
+    #define MSG_FILAMENT_CHANGE_RESUME_3        ""
632
+  #endif
633
+#else // LCD_HEIGHT < 4
634
+  #ifndef MSG_FILAMENT_CHANGE_INIT_1
635
+    #define MSG_FILAMENT_CHANGE_INIT_1          "Please wait..."
636
+  #endif
637
+  #ifndef MSG_FILAMENT_CHANGE_UNLOAD_1
638
+    #define MSG_FILAMENT_CHANGE_UNLOAD_1        "Ejecting..."
639
+  #endif
640
+  #ifndef MSG_FILAMENT_CHANGE_INSERT_1
641
+    #define MSG_FILAMENT_CHANGE_INSERT_1        "Insert and Click"
642
+  #endif
643
+  #ifndef MSG_FILAMENT_CHANGE_LOAD_1
644
+    #define MSG_FILAMENT_CHANGE_LOAD_1          "Loading..."
645
+  #endif
646
+  #ifndef MSG_FILAMENT_CHANGE_EXTRUDE_1
647
+    #define MSG_FILAMENT_CHANGE_EXTRUDE_1       "Extruding..."
648
+  #endif
649
+  #ifndef MSG_FILAMENT_CHANGE_RESUME_1
650
+    #define MSG_FILAMENT_CHANGE_RESUME_1        "Resuming..."
651
+  #endif
652
+#endif // LCD_HEIGHT < 4
653
+
566 654
 #endif // LANGUAGE_EN_H

+ 145
- 2
Marlin/ultralcd.cpp View File

@@ -128,7 +128,17 @@ uint8_t lcdDrawUpdate = LCDVIEW_CLEAR_CALL_REDRAW; // Set when the LCD needs to
128 128
     static void lcd_info_thermistors_menu();
129 129
     static void lcd_info_board_menu();
130 130
     static void lcd_info_menu();
131
-  #endif
131
+  #endif // LCD_INFO_MENU
132
+
133
+  #if ENABLED(FILAMENT_CHANGE_FEATURE)
134
+    static void lcd_filament_change_option_menu();
135
+    static void lcd_filament_change_init_message();
136
+    static void lcd_filament_change_unload_message();
137
+    static void lcd_filament_change_insert_message();
138
+    static void lcd_filament_change_load_message();
139
+    static void lcd_filament_change_extrude_message();
140
+    static void lcd_filament_change_resume_message();
141
+  #endif 
132 142
 
133 143
   #if HAS_LCD_CONTRAST
134 144
     static void lcd_set_contrast();
@@ -791,7 +801,7 @@ static void lcd_status_screen() {
791 801
     //
792 802
     // Change filament
793 803
     //
794
-    #if ENABLED(FILAMENTCHANGEENABLE)
804
+    #if ENABLED(FILAMENT_CHANGE_FEATURE)
795 805
        MENU_ITEM(gcode, MSG_FILAMENTCHANGE, PSTR("M600"));
796 806
     #endif
797 807
 
@@ -2036,6 +2046,139 @@ static void lcd_status_screen() {
2036 2046
     }
2037 2047
   #endif // LCD_INFO_MENU
2038 2048
 
2049
+  #if ENABLED(FILAMENT_CHANGE_FEATURE)
2050
+
2051
+    static void lcd_filament_change_resume_print() {
2052
+      filament_change_menu_response = FILAMENT_CHANGE_RESPONSE_RESUME_PRINT;
2053
+      lcdDrawUpdate = 2;
2054
+      lcd_goto_screen(lcd_status_screen);
2055
+    }
2056
+
2057
+    static void lcd_filament_change_extrude_more() {
2058
+      filament_change_menu_response = FILAMENT_CHANGE_RESPONSE_EXTRUDE_MORE;
2059
+    }
2060
+
2061
+    static void lcd_filament_change_option_menu() {
2062
+      START_MENU();
2063
+      #if LCD_HEIGHT > 2
2064
+        STATIC_ITEM(MSG_FILAMENT_CHANGE_OPTION_HEADER);
2065
+      #endif
2066
+      MENU_ITEM(function, MSG_FILAMENT_CHANGE_OPTION_RESUME, lcd_filament_change_resume_print);
2067
+      MENU_ITEM(function, MSG_FILAMENT_CHANGE_OPTION_EXTRUDE, lcd_filament_change_extrude_more);
2068
+      END_MENU();
2069
+    }
2070
+
2071
+    static void lcd_filament_change_init_message() {
2072
+      START_MENU();
2073
+      STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER);
2074
+      STATIC_ITEM(MSG_FILAMENT_CHANGE_INIT_1);
2075
+      #ifdef MSG_FILAMENT_CHANGE_INIT_2
2076
+        STATIC_ITEM(MSG_FILAMENT_CHANGE_INIT_2);
2077
+      #endif
2078
+      #ifdef MSG_FILAMENT_CHANGE_INIT_3
2079
+        STATIC_ITEM(MSG_FILAMENT_CHANGE_INIT_3);
2080
+      #endif
2081
+      END_MENU();
2082
+    }
2083
+
2084
+    static void lcd_filament_change_unload_message() {
2085
+      START_MENU();
2086
+      STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER);
2087
+      STATIC_ITEM(MSG_FILAMENT_CHANGE_UNLOAD_1);
2088
+      #ifdef MSG_FILAMENT_CHANGE_UNLOAD_2
2089
+        STATIC_ITEM(MSG_FILAMENT_CHANGE_UNLOAD_2);
2090
+      #endif
2091
+      #ifdef MSG_FILAMENT_CHANGE_UNLOAD_3
2092
+        STATIC_ITEM(MSG_FILAMENT_CHANGE_UNLOAD_3);
2093
+      #endif
2094
+      END_MENU();
2095
+    }
2096
+
2097
+    static void lcd_filament_change_insert_message() {
2098
+      START_MENU();
2099
+      STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER);
2100
+      STATIC_ITEM(MSG_FILAMENT_CHANGE_INSERT_1);
2101
+      #ifdef MSG_FILAMENT_CHANGE_INSERT_2
2102
+        STATIC_ITEM(MSG_FILAMENT_CHANGE_INSERT_2);
2103
+      #endif
2104
+      #ifdef MSG_FILAMENT_CHANGE_INSERT_3
2105
+        STATIC_ITEM(MSG_FILAMENT_CHANGE_INSERT_3);
2106
+      #endif
2107
+      END_MENU();
2108
+    }
2109
+
2110
+    static void lcd_filament_change_load_message() {
2111
+      START_MENU();
2112
+      STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER);
2113
+      STATIC_ITEM(MSG_FILAMENT_CHANGE_LOAD_1);
2114
+      #ifdef MSG_FILAMENT_CHANGE_LOAD_2
2115
+        STATIC_ITEM(MSG_FILAMENT_CHANGE_LOAD_2);
2116
+      #endif
2117
+      #ifdef MSG_FILAMENT_CHANGE_LOAD_3
2118
+        STATIC_ITEM(MSG_FILAMENT_CHANGE_LOAD_3);
2119
+      #endif
2120
+      END_MENU();
2121
+    }
2122
+
2123
+    static void lcd_filament_change_extrude_message() {
2124
+      START_MENU();
2125
+      STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER);
2126
+      STATIC_ITEM(MSG_FILAMENT_CHANGE_EXTRUDE_1);
2127
+      #ifdef MSG_FILAMENT_CHANGE_EXTRUDE_2
2128
+        STATIC_ITEM(MSG_FILAMENT_CHANGE_EXTRUDE_2);
2129
+      #endif
2130
+      #ifdef MSG_FILAMENT_CHANGE_EXTRUDE_3
2131
+        STATIC_ITEM(MSG_FILAMENT_CHANGE_EXTRUDE_3);
2132
+      #endif
2133
+      END_MENU();
2134
+    }
2135
+
2136
+    static void lcd_filament_change_resume_message() {
2137
+      START_MENU();
2138
+      STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER);
2139
+      STATIC_ITEM(MSG_FILAMENT_CHANGE_RESUME_1);
2140
+      #ifdef MSG_FILAMENT_CHANGE_RESUME_2
2141
+        STATIC_ITEM(MSG_FILAMENT_CHANGE_RESUME_2);
2142
+      #endif
2143
+      #ifdef MSG_FILAMENT_CHANGE_RESUME_3
2144
+        STATIC_ITEM(MSG_FILAMENT_CHANGE_RESUME_3);
2145
+      #endif
2146
+      END_MENU();
2147
+    }
2148
+  
2149
+    void lcd_filament_change_show_message(FilamentChangeMessage message) {
2150
+      switch (message) {
2151
+        case FILAMENT_CHANGE_MESSAGE_INIT:
2152
+          defer_return_to_status = true;
2153
+          lcd_goto_screen(lcd_filament_change_init_message);
2154
+          break;
2155
+        case FILAMENT_CHANGE_MESSAGE_UNLOAD:
2156
+          lcd_goto_screen(lcd_filament_change_unload_message);
2157
+          break;
2158
+        case FILAMENT_CHANGE_MESSAGE_INSERT:
2159
+          lcd_goto_screen(lcd_filament_change_insert_message);
2160
+          break;
2161
+        case FILAMENT_CHANGE_MESSAGE_LOAD:
2162
+          lcd_goto_screen(lcd_filament_change_load_message);
2163
+          break;
2164
+        case FILAMENT_CHANGE_MESSAGE_EXTRUDE:
2165
+          lcd_goto_screen(lcd_filament_change_extrude_message);
2166
+          break;
2167
+        case FILAMENT_CHANGE_MESSAGE_OPTION:
2168
+          filament_change_menu_response = FILAMENT_CHANGE_RESPONSE_WAIT_FOR;
2169
+          lcd_goto_screen(lcd_filament_change_option_menu);
2170
+          break;
2171
+        case FILAMENT_CHANGE_MESSAGE_RESUME:
2172
+          lcd_goto_screen(lcd_filament_change_resume_message);
2173
+          break;
2174
+        case FILAMENT_CHANGE_MESSAGE_STATUS:
2175
+          lcd_return_to_status();
2176
+          break;
2177
+      }
2178
+    }
2179
+
2180
+  #endif // FILAMENT_CHANGE_FEATURE
2181
+
2039 2182
   /**
2040 2183
    *
2041 2184
    * Functions for editing single values

+ 15
- 0
Marlin/ultralcd.h View File

@@ -69,6 +69,21 @@
69 69
     void lcd_quick_feedback(); // Audible feedback for a button click - could also be visual
70 70
     bool lcd_clicked();
71 71
     void lcd_ignore_click(bool b=true);
72
+
73
+    #if ENABLED(FILAMENT_CHANGE_FEATURE)
74
+      enum FilamentChangeMessage {
75
+        FILAMENT_CHANGE_MESSAGE_INIT,
76
+        FILAMENT_CHANGE_MESSAGE_UNLOAD,
77
+        FILAMENT_CHANGE_MESSAGE_INSERT,
78
+        FILAMENT_CHANGE_MESSAGE_LOAD,
79
+        FILAMENT_CHANGE_MESSAGE_EXTRUDE,
80
+        FILAMENT_CHANGE_MESSAGE_OPTION,
81
+        FILAMENT_CHANGE_MESSAGE_RESUME,
82
+        FILAMENT_CHANGE_MESSAGE_STATUS
83
+      };
84
+      void lcd_filament_change_show_message(FilamentChangeMessage message);
85
+    #endif // FILAMENT_CHANGE_FEATURE
86
+
72 87
   #else
73 88
     FORCE_INLINE void lcd_buttons_update() {}
74 89
   #endif

+ 3
- 3
Marlin/ultralcd_implementation_hitachi_HD44780.h View File

@@ -815,13 +815,13 @@ static void lcd_implementation_status_screen() {
815 815
   lcd_print(lcd_status_message);
816 816
 }
817 817
 
818
-#if ENABLED(LCD_INFO_MENU)
818
+#if ENABLED(LCD_INFO_MENU) || ENABLED(FILAMENT_CHANGE_FEATURE)
819 819
 
820 820
   static void lcd_implementation_drawmenu_static(uint8_t row, const char* pstr, const char *valstr=NULL, bool center=true) {
821 821
     char c;
822 822
     int8_t n = LCD_WIDTH;
823 823
     lcd.setCursor(0, row);
824
-    if (center) {
824
+    if (center && !valstr) {
825 825
       int8_t pad = (LCD_WIDTH - lcd_strlen_P(pstr)) / 2;
826 826
       while (--pad >= 0) { lcd.print(' '); n--; }
827 827
     }
@@ -836,7 +836,7 @@ static void lcd_implementation_status_screen() {
836 836
     while (n-- > 0) lcd.print(' ');
837 837
   }
838 838
 
839
-#endif // LCD_INFO_MENU
839
+#endif // LCD_INFO_MENU || FILAMENT_CHANGE_FEATURE
840 840
 
841 841
 static void lcd_implementation_drawmenu_generic(bool sel, uint8_t row, const char* pstr, char pre_char, char post_char) {
842 842
   char c;

Loading…
Cancel
Save