|
@@ -7350,10 +7350,11 @@ inline void gcode_M503() {
|
7350
|
7350
|
#endif
|
7351
|
7351
|
|
7352
|
7352
|
// Initial retract before move to filament change position
|
7353
|
|
- if (code_seen('E')) destination[E_AXIS] += code_value_axis_units(E_AXIS);
|
7354
|
|
- #if defined(FILAMENT_CHANGE_RETRACT_LENGTH) && FILAMENT_CHANGE_RETRACT_LENGTH > 0
|
7355
|
|
- else destination[E_AXIS] -= FILAMENT_CHANGE_RETRACT_LENGTH;
|
7356
|
|
- #endif
|
|
7353
|
+ destination[E_AXIS] += code_seen('E') ? code_value_axis_units(E_AXIS) : 0
|
|
7354
|
+ #if defined(FILAMENT_CHANGE_RETRACT_LENGTH) && FILAMENT_CHANGE_RETRACT_LENGTH > 0
|
|
7355
|
+ - (FILAMENT_CHANGE_RETRACT_LENGTH)
|
|
7356
|
+ #endif
|
|
7357
|
+ ;
|
7357
|
7358
|
|
7358
|
7359
|
RUNPLAN(FILAMENT_CHANGE_RETRACT_FEEDRATE);
|
7359
|
7360
|
|
|
@@ -7390,10 +7391,11 @@ inline void gcode_M503() {
|
7390
|
7391
|
idle();
|
7391
|
7392
|
|
7392
|
7393
|
// Unload filament
|
7393
|
|
- if (code_seen('L')) destination[E_AXIS] += code_value_axis_units(E_AXIS);
|
7394
|
|
- #if defined(FILAMENT_CHANGE_UNLOAD_LENGTH) && FILAMENT_CHANGE_UNLOAD_LENGTH > 0
|
7395
|
|
- else destination[E_AXIS] -= FILAMENT_CHANGE_UNLOAD_LENGTH;
|
7396
|
|
- #endif
|
|
7394
|
+ destination[E_AXIS] += code_seen('L') ? code_value_axis_units(E_AXIS) : 0
|
|
7395
|
+ #if FILAMENT_CHANGE_UNLOAD_LENGTH > 0
|
|
7396
|
+ - (FILAMENT_CHANGE_UNLOAD_LENGTH)
|
|
7397
|
+ #endif
|
|
7398
|
+ ;
|
7397
|
7399
|
|
7398
|
7400
|
RUNPLAN(FILAMENT_CHANGE_UNLOAD_FEEDRATE);
|
7399
|
7401
|
|
|
@@ -7474,29 +7476,39 @@ inline void gcode_M503() {
|
7474
|
7476
|
lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_LOAD);
|
7475
|
7477
|
|
7476
|
7478
|
// Load filament
|
7477
|
|
- if (code_seen('L')) destination[E_AXIS] -= code_value_axis_units(E_AXIS);
|
7478
|
|
- #if defined(FILAMENT_CHANGE_LOAD_LENGTH) && FILAMENT_CHANGE_LOAD_LENGTH > 0
|
7479
|
|
- else destination[E_AXIS] += FILAMENT_CHANGE_LOAD_LENGTH;
|
7480
|
|
- #endif
|
|
7479
|
+ destination[E_AXIS] += code_seen('L') ? -code_value_axis_units(E_AXIS) : 0
|
|
7480
|
+ #if FILAMENT_CHANGE_LOAD_LENGTH > 0
|
|
7481
|
+ + FILAMENT_CHANGE_LOAD_LENGTH
|
|
7482
|
+ #endif
|
|
7483
|
+ ;
|
7481
|
7484
|
|
7482
|
7485
|
RUNPLAN(FILAMENT_CHANGE_LOAD_FEEDRATE);
|
7483
|
7486
|
stepper.synchronize();
|
7484
|
7487
|
|
7485
|
7488
|
#if defined(FILAMENT_CHANGE_EXTRUDE_LENGTH) && FILAMENT_CHANGE_EXTRUDE_LENGTH > 0
|
|
7489
|
+
|
7486
|
7490
|
do {
|
7487
|
|
- // Extrude filament to get into hotend
|
|
7491
|
+ // "Wait for filament extrude"
|
7488
|
7492
|
lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_EXTRUDE);
|
|
7493
|
+
|
|
7494
|
+ // Extrude filament to get into hotend
|
7489
|
7495
|
destination[E_AXIS] += FILAMENT_CHANGE_EXTRUDE_LENGTH;
|
7490
|
7496
|
RUNPLAN(FILAMENT_CHANGE_EXTRUDE_FEEDRATE);
|
7491
|
7497
|
stepper.synchronize();
|
7492
|
|
- // Ask user if more filament should be extruded
|
|
7498
|
+
|
|
7499
|
+ // Show "Extrude More" / "Resume" menu and wait for reply
|
7493
|
7500
|
KEEPALIVE_STATE(PAUSED_FOR_USER);
|
|
7501
|
+ wait_for_user = false;
|
7494
|
7502
|
lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_OPTION);
|
7495
|
7503
|
while (filament_change_menu_response == FILAMENT_CHANGE_RESPONSE_WAIT_FOR) idle(true);
|
7496
|
7504
|
KEEPALIVE_STATE(IN_HANDLER);
|
7497
|
|
- } while (filament_change_menu_response != FILAMENT_CHANGE_RESPONSE_RESUME_PRINT);
|
|
7505
|
+
|
|
7506
|
+ // Keep looping if "Extrude More" was selected
|
|
7507
|
+ } while (filament_change_menu_response == FILAMENT_CHANGE_RESPONSE_EXTRUDE_MORE);
|
|
7508
|
+
|
7498
|
7509
|
#endif
|
7499
|
7510
|
|
|
7511
|
+ // "Wait for print to resume"
|
7500
|
7512
|
lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_RESUME);
|
7501
|
7513
|
|
7502
|
7514
|
// Set extruder to saved position
|