Merge pull request #5854 from thinkyhead/rc_fixup_m600
M600 cleanup and bugfix
This commit is contained in:
		
						commit
						4da8b1494b
					
				@ -710,23 +710,23 @@
 | 
				
			|||||||
  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
					  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
				
			||||||
  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
					  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
				
			||||||
  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
					  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
				
			||||||
 | 
					  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
 | 
					  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
 | 
				
			||||||
                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
					                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
					  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
 | 
					  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
					                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
				
			||||||
                                              // shorter lenght for printers without bowden to unload filament from extruder only,
 | 
					                                              // shorter length for printers without bowden to unload filament from extruder only,
 | 
				
			||||||
                                              // 0 to disable unloading for manual unloading
 | 
					                                              // 0 to disable unloading for manual unloading
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
					  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
					  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
					                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
				
			||||||
                                              // Short or zero length for printers without bowden where loading is not used
 | 
					                                              // Short or zero length for printers without bowden where loading is not used
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
 | 
				
			||||||
                                              // 0 to disable for manual extrusion
 | 
					                                              // 0 to disable for manual extrusion
 | 
				
			||||||
                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
					                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
				
			||||||
                                              // or until outcoming filament color is not clear for filament color change
 | 
					                                              // or until outcoming filament color is not clear for filament color change
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
					 | 
				
			||||||
  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
					  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
				
			||||||
  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
					  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
				
			||||||
  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
					  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
				
			||||||
 | 
				
			|||||||
@ -7347,10 +7347,11 @@ inline void gcode_M503() {
 | 
				
			|||||||
    #endif
 | 
					    #endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Initial retract before move to filament change position
 | 
					    // Initial retract before move to filament change position
 | 
				
			||||||
    if (code_seen('E')) destination[E_AXIS] += code_value_axis_units(E_AXIS);
 | 
					    destination[E_AXIS] += code_seen('E') ? code_value_axis_units(E_AXIS) : 0
 | 
				
			||||||
      #if defined(FILAMENT_CHANGE_RETRACT_LENGTH) && FILAMENT_CHANGE_RETRACT_LENGTH > 0
 | 
					      #if defined(FILAMENT_CHANGE_RETRACT_LENGTH) && FILAMENT_CHANGE_RETRACT_LENGTH > 0
 | 
				
			||||||
      else destination[E_AXIS] -= FILAMENT_CHANGE_RETRACT_LENGTH;
 | 
					        - (FILAMENT_CHANGE_RETRACT_LENGTH)
 | 
				
			||||||
      #endif
 | 
					      #endif
 | 
				
			||||||
 | 
					    ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    RUNPLAN(FILAMENT_CHANGE_RETRACT_FEEDRATE);
 | 
					    RUNPLAN(FILAMENT_CHANGE_RETRACT_FEEDRATE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -7387,10 +7388,11 @@ inline void gcode_M503() {
 | 
				
			|||||||
    idle();
 | 
					    idle();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Unload filament
 | 
					    // Unload filament
 | 
				
			||||||
    if (code_seen('L')) destination[E_AXIS] += code_value_axis_units(E_AXIS);
 | 
					    destination[E_AXIS] += code_seen('L') ? code_value_axis_units(E_AXIS) : 0
 | 
				
			||||||
    #if defined(FILAMENT_CHANGE_UNLOAD_LENGTH) && FILAMENT_CHANGE_UNLOAD_LENGTH > 0
 | 
					      #if FILAMENT_CHANGE_UNLOAD_LENGTH > 0
 | 
				
			||||||
      else destination[E_AXIS] -= FILAMENT_CHANGE_UNLOAD_LENGTH;
 | 
					        - (FILAMENT_CHANGE_UNLOAD_LENGTH)
 | 
				
			||||||
      #endif
 | 
					      #endif
 | 
				
			||||||
 | 
					    ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    RUNPLAN(FILAMENT_CHANGE_UNLOAD_FEEDRATE);
 | 
					    RUNPLAN(FILAMENT_CHANGE_UNLOAD_FEEDRATE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -7471,29 +7473,39 @@ inline void gcode_M503() {
 | 
				
			|||||||
    lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_LOAD);
 | 
					    lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_LOAD);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Load filament
 | 
					    // Load filament
 | 
				
			||||||
    if (code_seen('L')) destination[E_AXIS] -= code_value_axis_units(E_AXIS);
 | 
					    destination[E_AXIS] += code_seen('L') ? -code_value_axis_units(E_AXIS) : 0
 | 
				
			||||||
    #if defined(FILAMENT_CHANGE_LOAD_LENGTH) && FILAMENT_CHANGE_LOAD_LENGTH > 0
 | 
					      #if FILAMENT_CHANGE_LOAD_LENGTH > 0
 | 
				
			||||||
      else destination[E_AXIS] += FILAMENT_CHANGE_LOAD_LENGTH;
 | 
					        + FILAMENT_CHANGE_LOAD_LENGTH
 | 
				
			||||||
      #endif
 | 
					      #endif
 | 
				
			||||||
 | 
					    ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    RUNPLAN(FILAMENT_CHANGE_LOAD_FEEDRATE);
 | 
					    RUNPLAN(FILAMENT_CHANGE_LOAD_FEEDRATE);
 | 
				
			||||||
    stepper.synchronize();
 | 
					    stepper.synchronize();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #if defined(FILAMENT_CHANGE_EXTRUDE_LENGTH) && FILAMENT_CHANGE_EXTRUDE_LENGTH > 0
 | 
					    #if defined(FILAMENT_CHANGE_EXTRUDE_LENGTH) && FILAMENT_CHANGE_EXTRUDE_LENGTH > 0
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
      do {
 | 
					      do {
 | 
				
			||||||
        // Extrude filament to get into hotend
 | 
					        // "Wait for filament extrude"
 | 
				
			||||||
        lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_EXTRUDE);
 | 
					        lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_EXTRUDE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Extrude filament to get into hotend
 | 
				
			||||||
        destination[E_AXIS] += FILAMENT_CHANGE_EXTRUDE_LENGTH;
 | 
					        destination[E_AXIS] += FILAMENT_CHANGE_EXTRUDE_LENGTH;
 | 
				
			||||||
        RUNPLAN(FILAMENT_CHANGE_EXTRUDE_FEEDRATE);
 | 
					        RUNPLAN(FILAMENT_CHANGE_EXTRUDE_FEEDRATE);
 | 
				
			||||||
        stepper.synchronize();
 | 
					        stepper.synchronize();
 | 
				
			||||||
        // Ask user if more filament should be extruded
 | 
					
 | 
				
			||||||
 | 
					        // Show "Extrude More" / "Resume" menu and wait for reply
 | 
				
			||||||
        KEEPALIVE_STATE(PAUSED_FOR_USER);
 | 
					        KEEPALIVE_STATE(PAUSED_FOR_USER);
 | 
				
			||||||
 | 
					        wait_for_user = false;
 | 
				
			||||||
        lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_OPTION);
 | 
					        lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_OPTION);
 | 
				
			||||||
        while (filament_change_menu_response == FILAMENT_CHANGE_RESPONSE_WAIT_FOR) idle(true);
 | 
					        while (filament_change_menu_response == FILAMENT_CHANGE_RESPONSE_WAIT_FOR) idle(true);
 | 
				
			||||||
        KEEPALIVE_STATE(IN_HANDLER);
 | 
					        KEEPALIVE_STATE(IN_HANDLER);
 | 
				
			||||||
      } while (filament_change_menu_response != FILAMENT_CHANGE_RESPONSE_RESUME_PRINT);
 | 
					
 | 
				
			||||||
 | 
					        // Keep looping if "Extrude More" was selected
 | 
				
			||||||
 | 
					      } while (filament_change_menu_response == FILAMENT_CHANGE_RESPONSE_EXTRUDE_MORE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #endif
 | 
					    #endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // "Wait for print to resume"
 | 
				
			||||||
    lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_RESUME);
 | 
					    lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_RESUME);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Set extruder to saved position
 | 
					    // Set extruder to saved position
 | 
				
			||||||
 | 
				
			|||||||
@ -710,23 +710,23 @@
 | 
				
			|||||||
  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
					  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
				
			||||||
  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
					  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
				
			||||||
  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
					  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
				
			||||||
 | 
					  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_LENGTH 1    // Initial retract in mm
 | 
					  #define FILAMENT_CHANGE_RETRACT_LENGTH 1    // Initial retract in mm
 | 
				
			||||||
                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
					                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
					  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
				
			||||||
  //#define FILAMENT_CHANGE_UNLOAD_LENGTH 100 // Unload filament length from hotend in mm
 | 
					  //#define FILAMENT_CHANGE_UNLOAD_LENGTH 100 // Unload filament length from hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
					                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
				
			||||||
                                              // shorter lenght for printers without bowden to unload filament from extruder only,
 | 
					                                              // shorter length for printers without bowden to unload filament from extruder only,
 | 
				
			||||||
                                              // 0 to disable unloading for manual unloading
 | 
					                                              // 0 to disable unloading for manual unloading
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
					  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
					  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
					                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
				
			||||||
                                              // Short or zero length for printers without bowden where loading is not used
 | 
					                                              // Short or zero length for printers without bowden where loading is not used
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
 | 
				
			||||||
                                              // 0 to disable for manual extrusion
 | 
					                                              // 0 to disable for manual extrusion
 | 
				
			||||||
                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
					                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
				
			||||||
                                              // or until outcoming filament color is not clear for filament color change
 | 
					                                              // or until outcoming filament color is not clear for filament color change
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
					 | 
				
			||||||
  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
					  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
				
			||||||
  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
					  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
				
			||||||
  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
					  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
				
			||||||
 | 
				
			|||||||
@ -710,23 +710,23 @@
 | 
				
			|||||||
  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
					  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
				
			||||||
  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
					  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
				
			||||||
  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
					  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
				
			||||||
 | 
					  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
 | 
					  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
 | 
				
			||||||
                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
					                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
					  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
 | 
					  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
					                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
				
			||||||
                                              // shorter lenght for printers without bowden to unload filament from extruder only,
 | 
					                                              // shorter length for printers without bowden to unload filament from extruder only,
 | 
				
			||||||
                                              // 0 to disable unloading for manual unloading
 | 
					                                              // 0 to disable unloading for manual unloading
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
					  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
					  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
					                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
				
			||||||
                                              // Short or zero length for printers without bowden where loading is not used
 | 
					                                              // Short or zero length for printers without bowden where loading is not used
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
 | 
				
			||||||
                                              // 0 to disable for manual extrusion
 | 
					                                              // 0 to disable for manual extrusion
 | 
				
			||||||
                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
					                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
				
			||||||
                                              // or until outcoming filament color is not clear for filament color change
 | 
					                                              // or until outcoming filament color is not clear for filament color change
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
					 | 
				
			||||||
  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
					  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
				
			||||||
  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
					  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
				
			||||||
  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
					  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
				
			||||||
 | 
				
			|||||||
@ -710,23 +710,23 @@
 | 
				
			|||||||
  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
					  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
				
			||||||
  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
					  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
				
			||||||
  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
					  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
				
			||||||
 | 
					  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
 | 
					  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
 | 
				
			||||||
                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
					                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
					  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
 | 
					  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
					                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
				
			||||||
                                              // shorter lenght for printers without bowden to unload filament from extruder only,
 | 
					                                              // shorter length for printers without bowden to unload filament from extruder only,
 | 
				
			||||||
                                              // 0 to disable unloading for manual unloading
 | 
					                                              // 0 to disable unloading for manual unloading
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
					  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
					  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
					                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
				
			||||||
                                              // Short or zero length for printers without bowden where loading is not used
 | 
					                                              // Short or zero length for printers without bowden where loading is not used
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
 | 
				
			||||||
                                              // 0 to disable for manual extrusion
 | 
					                                              // 0 to disable for manual extrusion
 | 
				
			||||||
                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
					                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
				
			||||||
                                              // or until outcoming filament color is not clear for filament color change
 | 
					                                              // or until outcoming filament color is not clear for filament color change
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
					 | 
				
			||||||
  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
					  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
				
			||||||
  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
					  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
				
			||||||
  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
					  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
				
			||||||
 | 
				
			|||||||
@ -693,23 +693,23 @@
 | 
				
			|||||||
  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
					  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
				
			||||||
  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
					  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
				
			||||||
  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
					  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
				
			||||||
 | 
					  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
 | 
					  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
 | 
				
			||||||
                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
					                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
					  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
 | 
					  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
					                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
				
			||||||
                                              // shorter lenght for printers without bowden to unload filament from extruder only,
 | 
					                                              // shorter length for printers without bowden to unload filament from extruder only,
 | 
				
			||||||
                                              // 0 to disable unloading for manual unloading
 | 
					                                              // 0 to disable unloading for manual unloading
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
					  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
					  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
					                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
				
			||||||
                                              // Short or zero length for printers without bowden where loading is not used
 | 
					                                              // Short or zero length for printers without bowden where loading is not used
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
 | 
				
			||||||
                                              // 0 to disable for manual extrusion
 | 
					                                              // 0 to disable for manual extrusion
 | 
				
			||||||
                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
					                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
				
			||||||
                                              // or until outcoming filament color is not clear for filament color change
 | 
					                                              // or until outcoming filament color is not clear for filament color change
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
					 | 
				
			||||||
  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
					  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
				
			||||||
  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
					  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
				
			||||||
  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
					  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
				
			||||||
 | 
				
			|||||||
@ -723,23 +723,23 @@
 | 
				
			|||||||
  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
					  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
				
			||||||
  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
					  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
				
			||||||
  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
					  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
				
			||||||
 | 
					  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
 | 
					  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
 | 
				
			||||||
                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
					                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
					  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
 | 
					  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
					                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
				
			||||||
                                              // shorter lenght for printers without bowden to unload filament from extruder only,
 | 
					                                              // shorter length for printers without bowden to unload filament from extruder only,
 | 
				
			||||||
                                              // 0 to disable unloading for manual unloading
 | 
					                                              // 0 to disable unloading for manual unloading
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
					  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
					  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
					                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
				
			||||||
                                              // Short or zero length for printers without bowden where loading is not used
 | 
					                                              // Short or zero length for printers without bowden where loading is not used
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
 | 
				
			||||||
                                              // 0 to disable for manual extrusion
 | 
					                                              // 0 to disable for manual extrusion
 | 
				
			||||||
                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
					                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
				
			||||||
                                              // or until outcoming filament color is not clear for filament color change
 | 
					                                              // or until outcoming filament color is not clear for filament color change
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
					 | 
				
			||||||
  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
					  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
				
			||||||
  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
					  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
				
			||||||
  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
					  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
				
			||||||
 | 
				
			|||||||
@ -710,23 +710,23 @@
 | 
				
			|||||||
  #define FILAMENT_CHANGE_Z_ADD 20            // Z addition of hotend (lift)
 | 
					  #define FILAMENT_CHANGE_Z_ADD 20            // Z addition of hotend (lift)
 | 
				
			||||||
  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
					  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
				
			||||||
  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
					  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
				
			||||||
 | 
					  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_LENGTH 5    // Initial retract in mm
 | 
					  #define FILAMENT_CHANGE_RETRACT_LENGTH 5    // Initial retract in mm
 | 
				
			||||||
                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
					                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
					  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_LENGTH 600   // Unload filament length from hotend in mm
 | 
					  #define FILAMENT_CHANGE_UNLOAD_LENGTH 600   // Unload filament length from hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
					                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
				
			||||||
                                              // shorter lenght for printers without bowden to unload filament from extruder only,
 | 
					                                              // shorter length for printers without bowden to unload filament from extruder only,
 | 
				
			||||||
                                              // 0 to disable unloading for manual unloading
 | 
					                                              // 0 to disable unloading for manual unloading
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
					  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
					  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
					                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
				
			||||||
                                              // Short or zero length for printers without bowden where loading is not used
 | 
					                                              // Short or zero length for printers without bowden where loading is not used
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 100  // Extrude filament length in mm after filament is load over the hotend,
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 100  // Extrude filament length in mm after filament is loaded over the hotend,
 | 
				
			||||||
                                              // 0 to disable for manual extrusion
 | 
					                                              // 0 to disable for manual extrusion
 | 
				
			||||||
                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
					                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
				
			||||||
                                              // or until outcoming filament color is not clear for filament color change
 | 
					                                              // or until outcoming filament color is not clear for filament color change
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
					 | 
				
			||||||
  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
					  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
				
			||||||
  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
					  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
				
			||||||
  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
					  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
				
			||||||
 | 
				
			|||||||
@ -710,23 +710,23 @@
 | 
				
			|||||||
  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
					  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
				
			||||||
  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
					  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
				
			||||||
  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
					  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
				
			||||||
 | 
					  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
 | 
					  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
 | 
				
			||||||
                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
					                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
					  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
 | 
					  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
					                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
				
			||||||
                                              // shorter lenght for printers without bowden to unload filament from extruder only,
 | 
					                                              // shorter length for printers without bowden to unload filament from extruder only,
 | 
				
			||||||
                                              // 0 to disable unloading for manual unloading
 | 
					                                              // 0 to disable unloading for manual unloading
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
					  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
					  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
					                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
				
			||||||
                                              // Short or zero length for printers without bowden where loading is not used
 | 
					                                              // Short or zero length for printers without bowden where loading is not used
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
 | 
				
			||||||
                                              // 0 to disable for manual extrusion
 | 
					                                              // 0 to disable for manual extrusion
 | 
				
			||||||
                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
					                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
				
			||||||
                                              // or until outcoming filament color is not clear for filament color change
 | 
					                                              // or until outcoming filament color is not clear for filament color change
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
					 | 
				
			||||||
  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
					  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
				
			||||||
  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
					  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
				
			||||||
  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
					  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
				
			||||||
 | 
				
			|||||||
@ -710,23 +710,23 @@
 | 
				
			|||||||
  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
					  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
				
			||||||
  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
					  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
				
			||||||
  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
					  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
				
			||||||
 | 
					  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
 | 
					  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
 | 
				
			||||||
                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
					                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
					  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
 | 
					  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
					                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
				
			||||||
                                              // shorter lenght for printers without bowden to unload filament from extruder only,
 | 
					                                              // shorter length for printers without bowden to unload filament from extruder only,
 | 
				
			||||||
                                              // 0 to disable unloading for manual unloading
 | 
					                                              // 0 to disable unloading for manual unloading
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
					  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
					  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
					                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
				
			||||||
                                              // Short or zero length for printers without bowden where loading is not used
 | 
					                                              // Short or zero length for printers without bowden where loading is not used
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
 | 
				
			||||||
                                              // 0 to disable for manual extrusion
 | 
					                                              // 0 to disable for manual extrusion
 | 
				
			||||||
                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
					                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
				
			||||||
                                              // or until outcoming filament color is not clear for filament color change
 | 
					                                              // or until outcoming filament color is not clear for filament color change
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
					 | 
				
			||||||
  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
					  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
				
			||||||
  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
					  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
				
			||||||
  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
					  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
				
			||||||
 | 
				
			|||||||
@ -718,23 +718,23 @@
 | 
				
			|||||||
  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
					  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
				
			||||||
  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
					  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
				
			||||||
  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
					  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
				
			||||||
 | 
					  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
 | 
					  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
 | 
				
			||||||
                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
					                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
					  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
 | 
					  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
					                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
				
			||||||
                                              // shorter lenght for printers without bowden to unload filament from extruder only,
 | 
					                                              // shorter length for printers without bowden to unload filament from extruder only,
 | 
				
			||||||
                                              // 0 to disable unloading for manual unloading
 | 
					                                              // 0 to disable unloading for manual unloading
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
					  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
					  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
					                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
				
			||||||
                                              // Short or zero length for printers without bowden where loading is not used
 | 
					                                              // Short or zero length for printers without bowden where loading is not used
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
 | 
				
			||||||
                                              // 0 to disable for manual extrusion
 | 
					                                              // 0 to disable for manual extrusion
 | 
				
			||||||
                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
					                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
				
			||||||
                                              // or until outcoming filament color is not clear for filament color change
 | 
					                                              // or until outcoming filament color is not clear for filament color change
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
					 | 
				
			||||||
  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
					  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
				
			||||||
  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
					  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
				
			||||||
  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
					  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
				
			||||||
 | 
				
			|||||||
@ -710,23 +710,23 @@
 | 
				
			|||||||
  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
					  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
				
			||||||
  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
					  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
				
			||||||
  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
					  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
				
			||||||
 | 
					  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
 | 
					  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
 | 
				
			||||||
                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
					                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
					  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
 | 
					  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
					                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
				
			||||||
                                              // shorter lenght for printers without bowden to unload filament from extruder only,
 | 
					                                              // shorter length for printers without bowden to unload filament from extruder only,
 | 
				
			||||||
                                              // 0 to disable unloading for manual unloading
 | 
					                                              // 0 to disable unloading for manual unloading
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
					  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
					  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
					                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
				
			||||||
                                              // Short or zero length for printers without bowden where loading is not used
 | 
					                                              // Short or zero length for printers without bowden where loading is not used
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
 | 
				
			||||||
                                              // 0 to disable for manual extrusion
 | 
					                                              // 0 to disable for manual extrusion
 | 
				
			||||||
                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
					                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
				
			||||||
                                              // or until outcoming filament color is not clear for filament color change
 | 
					                                              // or until outcoming filament color is not clear for filament color change
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
					 | 
				
			||||||
  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
					  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
				
			||||||
  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
					  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
				
			||||||
  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
					  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
				
			||||||
 | 
				
			|||||||
@ -712,23 +712,23 @@
 | 
				
			|||||||
  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
					  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
				
			||||||
  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
					  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
				
			||||||
  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
					  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
				
			||||||
 | 
					  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
 | 
					  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
 | 
				
			||||||
                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
					                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
					  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
 | 
					  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
					                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
				
			||||||
                                              // shorter lenght for printers without bowden to unload filament from extruder only,
 | 
					                                              // shorter length for printers without bowden to unload filament from extruder only,
 | 
				
			||||||
                                              // 0 to disable unloading for manual unloading
 | 
					                                              // 0 to disable unloading for manual unloading
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
					  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
					  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
					                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
				
			||||||
                                              // Short or zero length for printers without bowden where loading is not used
 | 
					                                              // Short or zero length for printers without bowden where loading is not used
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
 | 
				
			||||||
                                              // 0 to disable for manual extrusion
 | 
					                                              // 0 to disable for manual extrusion
 | 
				
			||||||
                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
					                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
				
			||||||
                                              // or until outcoming filament color is not clear for filament color change
 | 
					                                              // or until outcoming filament color is not clear for filament color change
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
					 | 
				
			||||||
  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
					  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
				
			||||||
  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
					  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
				
			||||||
  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
					  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
				
			||||||
 | 
				
			|||||||
@ -712,23 +712,23 @@
 | 
				
			|||||||
  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
					  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
				
			||||||
  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
					  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
				
			||||||
  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
					  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
				
			||||||
 | 
					  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
 | 
					  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
 | 
				
			||||||
                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
					                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
					  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
 | 
					  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
					                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
				
			||||||
                                              // shorter lenght for printers without bowden to unload filament from extruder only,
 | 
					                                              // shorter length for printers without bowden to unload filament from extruder only,
 | 
				
			||||||
                                              // 0 to disable unloading for manual unloading
 | 
					                                              // 0 to disable unloading for manual unloading
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
					  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
					  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
					                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
				
			||||||
                                              // Short or zero length for printers without bowden where loading is not used
 | 
					                                              // Short or zero length for printers without bowden where loading is not used
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
 | 
				
			||||||
                                              // 0 to disable for manual extrusion
 | 
					                                              // 0 to disable for manual extrusion
 | 
				
			||||||
                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
					                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
				
			||||||
                                              // or until outcoming filament color is not clear for filament color change
 | 
					                                              // or until outcoming filament color is not clear for filament color change
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
					 | 
				
			||||||
  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
					  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
				
			||||||
  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
					  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
				
			||||||
  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
					  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
				
			||||||
 | 
				
			|||||||
@ -717,23 +717,23 @@
 | 
				
			|||||||
  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
					  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
				
			||||||
  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
					  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
				
			||||||
  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
					  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
				
			||||||
 | 
					  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
 | 
					  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
 | 
				
			||||||
                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
					                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
					  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
 | 
					  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
					                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
				
			||||||
                                              // shorter lenght for printers without bowden to unload filament from extruder only,
 | 
					                                              // shorter length for printers without bowden to unload filament from extruder only,
 | 
				
			||||||
                                              // 0 to disable unloading for manual unloading
 | 
					                                              // 0 to disable unloading for manual unloading
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
					  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
					  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
					                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
				
			||||||
                                              // Short or zero length for printers without bowden where loading is not used
 | 
					                                              // Short or zero length for printers without bowden where loading is not used
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
 | 
				
			||||||
                                              // 0 to disable for manual extrusion
 | 
					                                              // 0 to disable for manual extrusion
 | 
				
			||||||
                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
					                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
				
			||||||
                                              // or until outcoming filament color is not clear for filament color change
 | 
					                                              // or until outcoming filament color is not clear for filament color change
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
					 | 
				
			||||||
  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
					  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
				
			||||||
  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
					  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
				
			||||||
  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
					  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
				
			||||||
 | 
				
			|||||||
@ -712,23 +712,23 @@
 | 
				
			|||||||
  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
					  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
				
			||||||
  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
					  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
				
			||||||
  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
					  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
				
			||||||
 | 
					  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
 | 
					  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
 | 
				
			||||||
                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
					                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
					  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
 | 
					  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
					                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
				
			||||||
                                              // shorter lenght for printers without bowden to unload filament from extruder only,
 | 
					                                              // shorter length for printers without bowden to unload filament from extruder only,
 | 
				
			||||||
                                              // 0 to disable unloading for manual unloading
 | 
					                                              // 0 to disable unloading for manual unloading
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
					  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
					  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
					                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
				
			||||||
                                              // Short or zero length for printers without bowden where loading is not used
 | 
					                                              // Short or zero length for printers without bowden where loading is not used
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
 | 
				
			||||||
                                              // 0 to disable for manual extrusion
 | 
					                                              // 0 to disable for manual extrusion
 | 
				
			||||||
                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
					                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
				
			||||||
                                              // or until outcoming filament color is not clear for filament color change
 | 
					                                              // or until outcoming filament color is not clear for filament color change
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
					 | 
				
			||||||
  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
					  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
				
			||||||
  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
					  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
				
			||||||
  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
					  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
				
			||||||
 | 
				
			|||||||
@ -710,23 +710,23 @@
 | 
				
			|||||||
  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
					  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
				
			||||||
  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
					  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
				
			||||||
  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
					  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
				
			||||||
 | 
					  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
 | 
					  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
 | 
				
			||||||
                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
					                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
					  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
 | 
					  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
					                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
				
			||||||
                                              // shorter lenght for printers without bowden to unload filament from extruder only,
 | 
					                                              // shorter length for printers without bowden to unload filament from extruder only,
 | 
				
			||||||
                                              // 0 to disable unloading for manual unloading
 | 
					                                              // 0 to disable unloading for manual unloading
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
					  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
					  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
					                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
				
			||||||
                                              // Short or zero length for printers without bowden where loading is not used
 | 
					                                              // Short or zero length for printers without bowden where loading is not used
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
 | 
				
			||||||
                                              // 0 to disable for manual extrusion
 | 
					                                              // 0 to disable for manual extrusion
 | 
				
			||||||
                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
					                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
				
			||||||
                                              // or until outcoming filament color is not clear for filament color change
 | 
					                                              // or until outcoming filament color is not clear for filament color change
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
					 | 
				
			||||||
  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
					  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
				
			||||||
  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
					  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
				
			||||||
  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
					  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
				
			||||||
 | 
				
			|||||||
@ -710,23 +710,23 @@
 | 
				
			|||||||
  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
					  #define FILAMENT_CHANGE_Z_ADD 10            // Z addition of hotend (lift)
 | 
				
			||||||
  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
					  #define FILAMENT_CHANGE_XY_FEEDRATE 100     // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
 | 
				
			||||||
  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
					  #define FILAMENT_CHANGE_Z_FEEDRATE 5        // Z axis feedrate in mm/s (not used for delta printers)
 | 
				
			||||||
 | 
					  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
 | 
					  #define FILAMENT_CHANGE_RETRACT_LENGTH 2    // Initial retract in mm
 | 
				
			||||||
                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
					                                              // It is a short retract used immediately after print interrupt before move to filament exchange position
 | 
				
			||||||
  #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
 | 
					  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
 | 
					  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // Unload filament length from hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
					                                              // Longer length for bowden printers to unload filament from whole bowden tube,
 | 
				
			||||||
                                              // shorter lenght for printers without bowden to unload filament from extruder only,
 | 
					                                              // shorter length for printers without bowden to unload filament from extruder only,
 | 
				
			||||||
                                              // 0 to disable unloading for manual unloading
 | 
					                                              // 0 to disable unloading for manual unloading
 | 
				
			||||||
  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // Unload filament feedrate in mm/s - filament unloading can be fast
 | 
					  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
					  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // Load filament length over hotend in mm
 | 
				
			||||||
                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
					                                              // Longer length for bowden printers to fast load filament into whole bowden tube over the hotend,
 | 
				
			||||||
                                              // Short or zero length for printers without bowden where loading is not used
 | 
					                                              // Short or zero length for printers without bowden where loading is not used
 | 
				
			||||||
  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is load over the hotend,
 | 
					  #define FILAMENT_CHANGE_EXTRUDE_LENGTH 50   // Extrude filament length in mm after filament is loaded over the hotend,
 | 
				
			||||||
                                              // 0 to disable for manual extrusion
 | 
					                                              // 0 to disable for manual extrusion
 | 
				
			||||||
                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
					                                              // Filament can be extruded repeatedly from the filament exchange menu to fill the hotend,
 | 
				
			||||||
                                              // or until outcoming filament color is not clear for filament color change
 | 
					                                              // or until outcoming filament color is not clear for filament color change
 | 
				
			||||||
  #define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3  // Extrude filament feedrate in mm/s - must be slower than load feedrate
 | 
					 | 
				
			||||||
  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
					  #define FILAMENT_CHANGE_NOZZLE_TIMEOUT 45L  // Turn off nozzle if user doesn't change filament within this time limit in seconds
 | 
				
			||||||
  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
					  #define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS  5L  // Number of alert beeps before printer goes quiet
 | 
				
			||||||
  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
					  #define FILAMENT_CHANGE_NO_STEPPER_TIMEOUT         // Enable to have stepper motors hold position during filament change
 | 
				
			||||||
 | 
				
			|||||||
@ -69,6 +69,9 @@ uint16_t max_display_update_time = 0;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#if ENABLED(DOGLCD)
 | 
					#if ENABLED(DOGLCD)
 | 
				
			||||||
  bool drawing_screen = false;
 | 
					  bool drawing_screen = false;
 | 
				
			||||||
 | 
					  #define LCDVIEW_KEEP_REDRAWING LCDVIEW_CALL_REDRAW_NEXT
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					  #define LCDVIEW_KEEP_REDRAWING LCDVIEW_REDRAW_NOW
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if ENABLED(DAC_STEPPER_CURRENT)
 | 
					#if ENABLED(DAC_STEPPER_CURRENT)
 | 
				
			||||||
@ -1155,13 +1158,7 @@ void kill_screen(const char* lcd_msg) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    void _lcd_level_bed_done() {
 | 
					    void _lcd_level_bed_done() {
 | 
				
			||||||
      if (lcdDrawUpdate) lcd_implementation_drawedit(PSTR(MSG_LEVEL_BED_DONE));
 | 
					      if (lcdDrawUpdate) lcd_implementation_drawedit(PSTR(MSG_LEVEL_BED_DONE));
 | 
				
			||||||
      lcdDrawUpdate =
 | 
					      lcdDrawUpdate = LCDVIEW_KEEP_REDRAWING;
 | 
				
			||||||
        #if ENABLED(DOGLCD)
 | 
					 | 
				
			||||||
          LCDVIEW_CALL_REDRAW_NEXT
 | 
					 | 
				
			||||||
        #else
 | 
					 | 
				
			||||||
          LCDVIEW_CALL_NO_REDRAW
 | 
					 | 
				
			||||||
        #endif
 | 
					 | 
				
			||||||
      ;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@ -1179,13 +1176,7 @@ void kill_screen(const char* lcd_msg) {
 | 
				
			|||||||
        NOLESS(current_position[Z_AXIS], 0);
 | 
					        NOLESS(current_position[Z_AXIS], 0);
 | 
				
			||||||
        NOMORE(current_position[Z_AXIS], MESH_HOME_SEARCH_Z * 2);
 | 
					        NOMORE(current_position[Z_AXIS], MESH_HOME_SEARCH_Z * 2);
 | 
				
			||||||
        line_to_current(Z_AXIS);
 | 
					        line_to_current(Z_AXIS);
 | 
				
			||||||
        lcdDrawUpdate =
 | 
					        lcdDrawUpdate = LCDVIEW_KEEP_REDRAWING;
 | 
				
			||||||
          #if ENABLED(DOGLCD)
 | 
					 | 
				
			||||||
            LCDVIEW_CALL_REDRAW_NEXT
 | 
					 | 
				
			||||||
          #else
 | 
					 | 
				
			||||||
            LCDVIEW_REDRAW_NOW
 | 
					 | 
				
			||||||
          #endif
 | 
					 | 
				
			||||||
        ;
 | 
					 | 
				
			||||||
        encoderPosition = 0;
 | 
					        encoderPosition = 0;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1239,13 +1230,7 @@ KeepDrawing:
 | 
				
			|||||||
        lcd_implementation_drawedit(PSTR(MSG_LEVEL_BED_NEXT_POINT), msg);
 | 
					        lcd_implementation_drawedit(PSTR(MSG_LEVEL_BED_NEXT_POINT), msg);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      lcdDrawUpdate =
 | 
					      lcdDrawUpdate = LCDVIEW_KEEP_REDRAWING;
 | 
				
			||||||
        #if ENABLED(DOGLCD)
 | 
					 | 
				
			||||||
          LCDVIEW_CALL_REDRAW_NEXT
 | 
					 | 
				
			||||||
        #else
 | 
					 | 
				
			||||||
          LCDVIEW_CALL_NO_REDRAW
 | 
					 | 
				
			||||||
        #endif
 | 
					 | 
				
			||||||
      ;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@ -1287,13 +1272,7 @@ KeepDrawing:
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    void _lcd_level_bed_homing() {
 | 
					    void _lcd_level_bed_homing() {
 | 
				
			||||||
      if (lcdDrawUpdate) lcd_implementation_drawedit(PSTR(MSG_LEVEL_BED_HOMING), NULL);
 | 
					      if (lcdDrawUpdate) lcd_implementation_drawedit(PSTR(MSG_LEVEL_BED_HOMING), NULL);
 | 
				
			||||||
      lcdDrawUpdate =
 | 
					      lcdDrawUpdate = LCDVIEW_KEEP_REDRAWING;
 | 
				
			||||||
        #if ENABLED(DOGLCD)
 | 
					 | 
				
			||||||
          LCDVIEW_CALL_REDRAW_NEXT
 | 
					 | 
				
			||||||
        #else
 | 
					 | 
				
			||||||
          LCDVIEW_CALL_NO_REDRAW
 | 
					 | 
				
			||||||
        #endif
 | 
					 | 
				
			||||||
      ;
 | 
					 | 
				
			||||||
      if (axis_homed[X_AXIS] && axis_homed[Y_AXIS] && axis_homed[Z_AXIS])
 | 
					      if (axis_homed[X_AXIS] && axis_homed[Y_AXIS] && axis_homed[Z_AXIS])
 | 
				
			||||||
        lcd_goto_screen(_lcd_level_bed_homing_done);
 | 
					        lcd_goto_screen(_lcd_level_bed_homing_done);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -1380,6 +1359,7 @@ KeepDrawing:
 | 
				
			|||||||
    // Preheat ABS
 | 
					    // Preheat ABS
 | 
				
			||||||
    //
 | 
					    //
 | 
				
			||||||
    #if TEMP_SENSOR_0 != 0
 | 
					    #if TEMP_SENSOR_0 != 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      #if TEMP_SENSOR_1 != 0 || TEMP_SENSOR_2 != 0 || TEMP_SENSOR_3 != 0 || TEMP_SENSOR_BED != 0
 | 
					      #if TEMP_SENSOR_1 != 0 || TEMP_SENSOR_2 != 0 || TEMP_SENSOR_3 != 0 || TEMP_SENSOR_BED != 0
 | 
				
			||||||
        MENU_ITEM(submenu, MSG_PREHEAT_1, lcd_preheat_material1_menu);
 | 
					        MENU_ITEM(submenu, MSG_PREHEAT_1, lcd_preheat_material1_menu);
 | 
				
			||||||
        MENU_ITEM(submenu, MSG_PREHEAT_2, lcd_preheat_material2_menu);
 | 
					        MENU_ITEM(submenu, MSG_PREHEAT_2, lcd_preheat_material2_menu);
 | 
				
			||||||
@ -1395,7 +1375,8 @@ KeepDrawing:
 | 
				
			|||||||
        if (!thermalManager.tooColdToExtrude(active_extruder))
 | 
					        if (!thermalManager.tooColdToExtrude(active_extruder))
 | 
				
			||||||
          MENU_ITEM(function, MSG_FILAMENTCHANGE, lcd_enqueue_filament_change);
 | 
					          MENU_ITEM(function, MSG_FILAMENTCHANGE, lcd_enqueue_filament_change);
 | 
				
			||||||
      #endif
 | 
					      #endif
 | 
				
			||||||
    #endif
 | 
					
 | 
				
			||||||
 | 
					    #endif // TEMP_SENSOR_0 != 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //
 | 
					    //
 | 
				
			||||||
    // Cooldown
 | 
					    // Cooldown
 | 
				
			||||||
@ -1445,13 +1426,7 @@ KeepDrawing:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    void _lcd_calibrate_homing() {
 | 
					    void _lcd_calibrate_homing() {
 | 
				
			||||||
      if (lcdDrawUpdate) lcd_implementation_drawmenu_static(LCD_HEIGHT >= 4 ? 1 : 0, PSTR(MSG_LEVEL_BED_HOMING));
 | 
					      if (lcdDrawUpdate) lcd_implementation_drawmenu_static(LCD_HEIGHT >= 4 ? 1 : 0, PSTR(MSG_LEVEL_BED_HOMING));
 | 
				
			||||||
      lcdDrawUpdate =
 | 
					      lcdDrawUpdate = LCDVIEW_KEEP_REDRAWING;
 | 
				
			||||||
        #if ENABLED(DOGLCD)
 | 
					 | 
				
			||||||
          LCDVIEW_CALL_REDRAW_NEXT
 | 
					 | 
				
			||||||
        #else
 | 
					 | 
				
			||||||
          LCDVIEW_CALL_NO_REDRAW
 | 
					 | 
				
			||||||
        #endif
 | 
					 | 
				
			||||||
      ;
 | 
					 | 
				
			||||||
      if (axis_homed[X_AXIS] && axis_homed[Y_AXIS] && axis_homed[Z_AXIS])
 | 
					      if (axis_homed[X_AXIS] && axis_homed[Y_AXIS] && axis_homed[Z_AXIS])
 | 
				
			||||||
        lcd_goto_previous_menu();
 | 
					        lcd_goto_previous_menu();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -2453,20 +2428,36 @@ KeepDrawing:
 | 
				
			|||||||
   */
 | 
					   */
 | 
				
			||||||
  #if ENABLED(FILAMENT_CHANGE_FEATURE)
 | 
					  #if ENABLED(FILAMENT_CHANGE_FEATURE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Portions from STATIC_ITEM...
 | 
				
			||||||
 | 
					    #define HOTEND_STATUS_ITEM() do { \
 | 
				
			||||||
 | 
					      if (_menuLineNr == _thisItemNr) { \
 | 
				
			||||||
 | 
					        if (lcdDrawUpdate) \
 | 
				
			||||||
 | 
					          lcd_implementation_drawmenu_static(_lcdLineNr, PSTR(MSG_FILAMENT_CHANGE_NOZZLE), false, true); \
 | 
				
			||||||
 | 
					        lcd_implementation_hotend_status(_lcdLineNr); \
 | 
				
			||||||
 | 
					        if (_skipStatic && encoderLine <= _thisItemNr) { \
 | 
				
			||||||
 | 
					          encoderPosition += ENCODER_STEPS_PER_MENU_ITEM; \
 | 
				
			||||||
 | 
					          lcdDrawUpdate = LCDVIEW_CALL_REDRAW_NEXT; \
 | 
				
			||||||
 | 
					        } \
 | 
				
			||||||
 | 
					        else \
 | 
				
			||||||
 | 
					          lcdDrawUpdate = LCDVIEW_CALL_NO_REDRAW; \
 | 
				
			||||||
 | 
					      } \
 | 
				
			||||||
 | 
					      ++_thisItemNr; \
 | 
				
			||||||
 | 
					    } while(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void lcd_filament_change_toocold_menu() {
 | 
					    void lcd_filament_change_toocold_menu() {
 | 
				
			||||||
      START_MENU();
 | 
					      START_MENU();
 | 
				
			||||||
      STATIC_ITEM(MSG_HEATING_FAILED_LCD, true, true);
 | 
					      STATIC_ITEM(MSG_HEATING_FAILED_LCD, true, true);
 | 
				
			||||||
      STATIC_ITEM(MSG_FILAMENT_CHANGE_MINTEMP STRINGIFY(EXTRUDE_MINTEMP) ".", false, false);
 | 
					      STATIC_ITEM(MSG_FILAMENT_CHANGE_MINTEMP STRINGIFY(EXTRUDE_MINTEMP) ".", false, false);
 | 
				
			||||||
      MENU_BACK(MSG_BACK);
 | 
					      MENU_BACK(MSG_BACK);
 | 
				
			||||||
 | 
					      #if LCD_HEIGHT > 4
 | 
				
			||||||
        STATIC_ITEM(" ");
 | 
					        STATIC_ITEM(" ");
 | 
				
			||||||
      STATIC_ITEM(MSG_FILAMENT_CHANGE_NOZZLE, false, true);
 | 
					      #endif
 | 
				
			||||||
      lcd_implementation_hotend_status();
 | 
					      HOTEND_STATUS_ITEM();
 | 
				
			||||||
      END_MENU();
 | 
					      END_MENU();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void lcd_filament_change_resume_print() {
 | 
					    void lcd_filament_change_resume_print() {
 | 
				
			||||||
      filament_change_menu_response = FILAMENT_CHANGE_RESPONSE_RESUME_PRINT;
 | 
					      filament_change_menu_response = FILAMENT_CHANGE_RESPONSE_RESUME_PRINT;
 | 
				
			||||||
      lcd_goto_screen(lcd_status_screen);
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void lcd_filament_change_extrude_more() {
 | 
					    void lcd_filament_change_extrude_more() {
 | 
				
			||||||
@ -2489,12 +2480,20 @@ KeepDrawing:
 | 
				
			|||||||
      STATIC_ITEM(MSG_FILAMENT_CHANGE_INIT_1);
 | 
					      STATIC_ITEM(MSG_FILAMENT_CHANGE_INIT_1);
 | 
				
			||||||
      #ifdef MSG_FILAMENT_CHANGE_INIT_2
 | 
					      #ifdef MSG_FILAMENT_CHANGE_INIT_2
 | 
				
			||||||
        STATIC_ITEM(MSG_FILAMENT_CHANGE_INIT_2);
 | 
					        STATIC_ITEM(MSG_FILAMENT_CHANGE_INIT_2);
 | 
				
			||||||
 | 
					        #define __FC_LINES_A 3
 | 
				
			||||||
 | 
					      #else
 | 
				
			||||||
 | 
					        #define __FC_LINES_A 2
 | 
				
			||||||
      #endif
 | 
					      #endif
 | 
				
			||||||
      #ifdef MSG_FILAMENT_CHANGE_INIT_3
 | 
					      #ifdef MSG_FILAMENT_CHANGE_INIT_3
 | 
				
			||||||
        STATIC_ITEM(MSG_FILAMENT_CHANGE_INIT_3);
 | 
					        STATIC_ITEM(MSG_FILAMENT_CHANGE_INIT_3);
 | 
				
			||||||
 | 
					        #define _FC_LINES_A (__FC_LINES_A + 1)
 | 
				
			||||||
 | 
					      #else
 | 
				
			||||||
 | 
					        #define _FC_LINES_A __FC_LINES_A
 | 
				
			||||||
      #endif
 | 
					      #endif
 | 
				
			||||||
      STATIC_ITEM(MSG_FILAMENT_CHANGE_NOZZLE, false, true);
 | 
					      #if LCD_HEIGHT > _FC_LINES_A + 1
 | 
				
			||||||
      lcd_implementation_hotend_status();
 | 
					        STATIC_ITEM(" ");
 | 
				
			||||||
 | 
					      #endif
 | 
				
			||||||
 | 
					      HOTEND_STATUS_ITEM();
 | 
				
			||||||
      END_SCREEN();
 | 
					      END_SCREEN();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2504,13 +2503,20 @@ KeepDrawing:
 | 
				
			|||||||
      STATIC_ITEM(MSG_FILAMENT_CHANGE_UNLOAD_1);
 | 
					      STATIC_ITEM(MSG_FILAMENT_CHANGE_UNLOAD_1);
 | 
				
			||||||
      #ifdef MSG_FILAMENT_CHANGE_UNLOAD_2
 | 
					      #ifdef MSG_FILAMENT_CHANGE_UNLOAD_2
 | 
				
			||||||
        STATIC_ITEM(MSG_FILAMENT_CHANGE_UNLOAD_2);
 | 
					        STATIC_ITEM(MSG_FILAMENT_CHANGE_UNLOAD_2);
 | 
				
			||||||
 | 
					        #define __FC_LINES_B 3
 | 
				
			||||||
 | 
					      #else
 | 
				
			||||||
 | 
					        #define __FC_LINES_B 2
 | 
				
			||||||
      #endif
 | 
					      #endif
 | 
				
			||||||
      #ifdef MSG_FILAMENT_CHANGE_UNLOAD_3
 | 
					      #ifdef MSG_FILAMENT_CHANGE_UNLOAD_3
 | 
				
			||||||
        STATIC_ITEM(MSG_FILAMENT_CHANGE_UNLOAD_3);
 | 
					        STATIC_ITEM(MSG_FILAMENT_CHANGE_UNLOAD_3);
 | 
				
			||||||
 | 
					        #define _FC_LINES_B (__FC_LINES_B + 1)
 | 
				
			||||||
 | 
					      #else
 | 
				
			||||||
 | 
					        #define _FC_LINES_B __FC_LINES_B
 | 
				
			||||||
      #endif
 | 
					      #endif
 | 
				
			||||||
 | 
					      #if LCD_HEIGHT > _FC_LINES_B + 1
 | 
				
			||||||
        STATIC_ITEM(" ");
 | 
					        STATIC_ITEM(" ");
 | 
				
			||||||
      STATIC_ITEM(MSG_FILAMENT_CHANGE_NOZZLE, false, true);
 | 
					      #endif
 | 
				
			||||||
      lcd_implementation_hotend_status();
 | 
					      HOTEND_STATUS_ITEM();
 | 
				
			||||||
      END_SCREEN();
 | 
					      END_SCREEN();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2520,10 +2526,14 @@ KeepDrawing:
 | 
				
			|||||||
      STATIC_ITEM(MSG_FILAMENT_CHANGE_HEATING_1);
 | 
					      STATIC_ITEM(MSG_FILAMENT_CHANGE_HEATING_1);
 | 
				
			||||||
      #ifdef MSG_FILAMENT_CHANGE_HEATING_2
 | 
					      #ifdef MSG_FILAMENT_CHANGE_HEATING_2
 | 
				
			||||||
        STATIC_ITEM(MSG_FILAMENT_CHANGE_HEATING_2);
 | 
					        STATIC_ITEM(MSG_FILAMENT_CHANGE_HEATING_2);
 | 
				
			||||||
 | 
					        #define _FC_LINES_C 3
 | 
				
			||||||
 | 
					      #else
 | 
				
			||||||
 | 
					        #define _FC_LINES_C 2
 | 
				
			||||||
      #endif
 | 
					      #endif
 | 
				
			||||||
 | 
					      #if LCD_HEIGHT > _FC_LINES_C + 1
 | 
				
			||||||
        STATIC_ITEM(" ");
 | 
					        STATIC_ITEM(" ");
 | 
				
			||||||
      STATIC_ITEM(MSG_FILAMENT_CHANGE_NOZZLE, false, true);
 | 
					      #endif
 | 
				
			||||||
      lcd_implementation_hotend_status();
 | 
					      HOTEND_STATUS_ITEM();
 | 
				
			||||||
      END_SCREEN();
 | 
					      END_SCREEN();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2533,10 +2543,14 @@ KeepDrawing:
 | 
				
			|||||||
      STATIC_ITEM(MSG_FILAMENT_CHANGE_HEAT_1);
 | 
					      STATIC_ITEM(MSG_FILAMENT_CHANGE_HEAT_1);
 | 
				
			||||||
      #ifdef MSG_FILAMENT_CHANGE_INSERT_2
 | 
					      #ifdef MSG_FILAMENT_CHANGE_INSERT_2
 | 
				
			||||||
        STATIC_ITEM(MSG_FILAMENT_CHANGE_HEAT_2);
 | 
					        STATIC_ITEM(MSG_FILAMENT_CHANGE_HEAT_2);
 | 
				
			||||||
 | 
					        #define _FC_LINES_D 3
 | 
				
			||||||
 | 
					      #else
 | 
				
			||||||
 | 
					        #define _FC_LINES_D 2
 | 
				
			||||||
      #endif
 | 
					      #endif
 | 
				
			||||||
 | 
					      #if LCD_HEIGHT > _FC_LINES_D + 1
 | 
				
			||||||
        STATIC_ITEM(" ");
 | 
					        STATIC_ITEM(" ");
 | 
				
			||||||
      STATIC_ITEM(MSG_FILAMENT_CHANGE_NOZZLE, false, true);
 | 
					      #endif
 | 
				
			||||||
      lcd_implementation_hotend_status();
 | 
					      HOTEND_STATUS_ITEM();
 | 
				
			||||||
      END_SCREEN();
 | 
					      END_SCREEN();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2546,12 +2560,20 @@ KeepDrawing:
 | 
				
			|||||||
      STATIC_ITEM(MSG_FILAMENT_CHANGE_INSERT_1);
 | 
					      STATIC_ITEM(MSG_FILAMENT_CHANGE_INSERT_1);
 | 
				
			||||||
      #ifdef MSG_FILAMENT_CHANGE_INSERT_2
 | 
					      #ifdef MSG_FILAMENT_CHANGE_INSERT_2
 | 
				
			||||||
        STATIC_ITEM(MSG_FILAMENT_CHANGE_INSERT_2);
 | 
					        STATIC_ITEM(MSG_FILAMENT_CHANGE_INSERT_2);
 | 
				
			||||||
 | 
					        #define __FC_LINES_E 3
 | 
				
			||||||
 | 
					      #else
 | 
				
			||||||
 | 
					        #define __FC_LINES_E 2
 | 
				
			||||||
      #endif
 | 
					      #endif
 | 
				
			||||||
      #ifdef MSG_FILAMENT_CHANGE_INSERT_3
 | 
					      #ifdef MSG_FILAMENT_CHANGE_INSERT_3
 | 
				
			||||||
        STATIC_ITEM(MSG_FILAMENT_CHANGE_INSERT_3);
 | 
					        STATIC_ITEM(MSG_FILAMENT_CHANGE_INSERT_3);
 | 
				
			||||||
 | 
					        #define _FC_LINES_E (__FC_LINES_E + 1)
 | 
				
			||||||
 | 
					      #else
 | 
				
			||||||
 | 
					        #define _FC_LINES_E __FC_LINES_E
 | 
				
			||||||
      #endif
 | 
					      #endif
 | 
				
			||||||
      STATIC_ITEM(MSG_FILAMENT_CHANGE_NOZZLE, false, true);
 | 
					      #if LCD_HEIGHT > _FC_LINES_E + 1
 | 
				
			||||||
      lcd_implementation_hotend_status();
 | 
					        STATIC_ITEM(" ");
 | 
				
			||||||
 | 
					      #endif
 | 
				
			||||||
 | 
					      HOTEND_STATUS_ITEM();
 | 
				
			||||||
      END_SCREEN();
 | 
					      END_SCREEN();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2561,13 +2583,20 @@ KeepDrawing:
 | 
				
			|||||||
      STATIC_ITEM(MSG_FILAMENT_CHANGE_LOAD_1);
 | 
					      STATIC_ITEM(MSG_FILAMENT_CHANGE_LOAD_1);
 | 
				
			||||||
      #ifdef MSG_FILAMENT_CHANGE_LOAD_2
 | 
					      #ifdef MSG_FILAMENT_CHANGE_LOAD_2
 | 
				
			||||||
        STATIC_ITEM(MSG_FILAMENT_CHANGE_LOAD_2);
 | 
					        STATIC_ITEM(MSG_FILAMENT_CHANGE_LOAD_2);
 | 
				
			||||||
 | 
					        #define __FC_LINES_F 3
 | 
				
			||||||
 | 
					      #else
 | 
				
			||||||
 | 
					        #define __FC_LINES_F 2
 | 
				
			||||||
      #endif
 | 
					      #endif
 | 
				
			||||||
      #ifdef MSG_FILAMENT_CHANGE_LOAD_3
 | 
					      #ifdef MSG_FILAMENT_CHANGE_LOAD_3
 | 
				
			||||||
        STATIC_ITEM(MSG_FILAMENT_CHANGE_LOAD_3);
 | 
					        STATIC_ITEM(MSG_FILAMENT_CHANGE_LOAD_3);
 | 
				
			||||||
 | 
					        #define _FC_LINES_F (__FC_LINES_F + 1)
 | 
				
			||||||
 | 
					      #else
 | 
				
			||||||
 | 
					        #define _FC_LINES_F __FC_LINES_F
 | 
				
			||||||
      #endif
 | 
					      #endif
 | 
				
			||||||
 | 
					      #if LCD_HEIGHT > _FC_LINES_F + 1
 | 
				
			||||||
        STATIC_ITEM(" ");
 | 
					        STATIC_ITEM(" ");
 | 
				
			||||||
      STATIC_ITEM(MSG_FILAMENT_CHANGE_NOZZLE, false, true);
 | 
					      #endif
 | 
				
			||||||
      lcd_implementation_hotend_status();
 | 
					      HOTEND_STATUS_ITEM();
 | 
				
			||||||
      END_SCREEN();
 | 
					      END_SCREEN();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2577,13 +2606,20 @@ KeepDrawing:
 | 
				
			|||||||
      STATIC_ITEM(MSG_FILAMENT_CHANGE_EXTRUDE_1);
 | 
					      STATIC_ITEM(MSG_FILAMENT_CHANGE_EXTRUDE_1);
 | 
				
			||||||
      #ifdef MSG_FILAMENT_CHANGE_EXTRUDE_2
 | 
					      #ifdef MSG_FILAMENT_CHANGE_EXTRUDE_2
 | 
				
			||||||
        STATIC_ITEM(MSG_FILAMENT_CHANGE_EXTRUDE_2);
 | 
					        STATIC_ITEM(MSG_FILAMENT_CHANGE_EXTRUDE_2);
 | 
				
			||||||
 | 
					        #define __FC_LINES_G 3
 | 
				
			||||||
 | 
					      #else
 | 
				
			||||||
 | 
					        #define __FC_LINES_G 2
 | 
				
			||||||
      #endif
 | 
					      #endif
 | 
				
			||||||
      #ifdef MSG_FILAMENT_CHANGE_EXTRUDE_3
 | 
					      #ifdef MSG_FILAMENT_CHANGE_EXTRUDE_3
 | 
				
			||||||
        STATIC_ITEM(MSG_FILAMENT_CHANGE_EXTRUDE_3);
 | 
					        STATIC_ITEM(MSG_FILAMENT_CHANGE_EXTRUDE_3);
 | 
				
			||||||
 | 
					        #define _FC_LINES_G (__FC_LINES_G + 1)
 | 
				
			||||||
 | 
					      #else
 | 
				
			||||||
 | 
					        #define _FC_LINES_G __FC_LINES_G
 | 
				
			||||||
      #endif
 | 
					      #endif
 | 
				
			||||||
 | 
					      #if LCD_HEIGHT > _FC_LINES_G + 1
 | 
				
			||||||
        STATIC_ITEM(" ");
 | 
					        STATIC_ITEM(" ");
 | 
				
			||||||
      STATIC_ITEM(MSG_FILAMENT_CHANGE_NOZZLE, false, true);
 | 
					      #endif
 | 
				
			||||||
      lcd_implementation_hotend_status();
 | 
					      HOTEND_STATUS_ITEM();
 | 
				
			||||||
      END_SCREEN();
 | 
					      END_SCREEN();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2967,7 +3003,7 @@ bool lcd_blink() {
 | 
				
			|||||||
 *     - if (lcdDrawUpdate) { redraw }
 | 
					 *     - if (lcdDrawUpdate) { redraw }
 | 
				
			||||||
 *     - Before exiting the handler set lcdDrawUpdate to:
 | 
					 *     - Before exiting the handler set lcdDrawUpdate to:
 | 
				
			||||||
 *       - LCDVIEW_CLEAR_CALL_REDRAW to clear screen and set LCDVIEW_CALL_REDRAW_NEXT.
 | 
					 *       - LCDVIEW_CLEAR_CALL_REDRAW to clear screen and set LCDVIEW_CALL_REDRAW_NEXT.
 | 
				
			||||||
 *       - LCDVIEW_REDRAW_NOW or LCDVIEW_NONE to keep drawingm but only in this loop.
 | 
					 *       - LCDVIEW_REDRAW_NOW or LCDVIEW_NONE to keep drawing, but only in this loop.
 | 
				
			||||||
 *       - LCDVIEW_CALL_REDRAW_NEXT to keep drawing and draw on the next loop also.
 | 
					 *       - LCDVIEW_CALL_REDRAW_NEXT to keep drawing and draw on the next loop also.
 | 
				
			||||||
 *       - LCDVIEW_CALL_NO_REDRAW to keep drawing (or start drawing) with no redraw on the next loop.
 | 
					 *       - LCDVIEW_CALL_NO_REDRAW to keep drawing (or start drawing) with no redraw on the next loop.
 | 
				
			||||||
 *     - NOTE: For graphical displays menu handlers may be called 2 or more times per loop,
 | 
					 *     - NOTE: For graphical displays menu handlers may be called 2 or more times per loop,
 | 
				
			||||||
@ -3083,13 +3119,7 @@ void lcd_update() {
 | 
				
			|||||||
          encoderDiff = 0;
 | 
					          encoderDiff = 0;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return_to_status_ms = ms + LCD_TIMEOUT_TO_STATUS;
 | 
					        return_to_status_ms = ms + LCD_TIMEOUT_TO_STATUS;
 | 
				
			||||||
        lcdDrawUpdate =
 | 
					        lcdDrawUpdate = LCDVIEW_KEEP_REDRAWING;
 | 
				
			||||||
          #if ENABLED(DOGLCD)
 | 
					 | 
				
			||||||
            LCDVIEW_CALL_REDRAW_NEXT
 | 
					 | 
				
			||||||
          #else
 | 
					 | 
				
			||||||
            LCDVIEW_REDRAW_NOW
 | 
					 | 
				
			||||||
          #endif
 | 
					 | 
				
			||||||
        ;
 | 
					 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    #endif // ULTIPANEL
 | 
					    #endif // ULTIPANEL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -379,17 +379,6 @@ FORCE_INLINE void _draw_axis_label(const AxisEnum axis, const char* const pstr,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
//#define DOGM_SD_PERCENT
 | 
					//#define DOGM_SD_PERCENT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
static void lcd_implementation_hotend_status() {
 | 
					 | 
				
			||||||
  u8g.setPrintPos(58, 60);
 | 
					 | 
				
			||||||
  lcd_print((char)('0' + active_extruder));
 | 
					 | 
				
			||||||
  lcd_print(' ');
 | 
					 | 
				
			||||||
  lcd_print(' ');
 | 
					 | 
				
			||||||
  lcd_print(itostr3(thermalManager.degHotend(active_extruder)));
 | 
					 | 
				
			||||||
  lcd_print('/');
 | 
					 | 
				
			||||||
  lcd_print(itostr3(thermalManager.degTargetHotend(active_extruder)));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static void lcd_implementation_status_screen() {
 | 
					static void lcd_implementation_status_screen() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  bool blink = lcd_blink();
 | 
					  bool blink = lcd_blink();
 | 
				
			||||||
@ -633,22 +622,41 @@ static void lcd_implementation_status_screen() {
 | 
				
			|||||||
#if ENABLED(ULTIPANEL)
 | 
					#if ENABLED(ULTIPANEL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  uint8_t row_y1, row_y2;
 | 
					  uint8_t row_y1, row_y2;
 | 
				
			||||||
 | 
					  uint8_t constexpr row_height = DOG_CHAR_HEIGHT + 2 * (TALL_FONT_CORRECTION);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  #if ENABLED(FILAMENT_CHANGE_FEATURE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    static void lcd_implementation_hotend_status(const uint8_t row) {
 | 
				
			||||||
 | 
					      row_y1 = row * row_height + 1;
 | 
				
			||||||
 | 
					      row_y2 = row_y1 + row_height - 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if (!PAGE_CONTAINS(row_y1 + 1, row_y2 + 2)) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      u8g.setPrintPos(LCD_PIXEL_WIDTH - 11 * (DOG_CHAR_WIDTH), row_y2);
 | 
				
			||||||
 | 
					      lcd_print('E');
 | 
				
			||||||
 | 
					      lcd_print((char)('0' + active_extruder));
 | 
				
			||||||
 | 
					      lcd_print(' ');
 | 
				
			||||||
 | 
					      lcd_print(itostr3(thermalManager.degHotend(active_extruder)));
 | 
				
			||||||
 | 
					      lcd_print('/');
 | 
				
			||||||
 | 
					      lcd_print(itostr3(thermalManager.degTargetHotend(active_extruder)));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  #endif // FILAMENT_CHANGE_FEATURE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Set the colors for a menu item based on whether it is selected
 | 
					  // Set the colors for a menu item based on whether it is selected
 | 
				
			||||||
  static void lcd_implementation_mark_as_selected(const uint8_t row, const bool isSelected) {
 | 
					  static void lcd_implementation_mark_as_selected(const uint8_t row, const bool isSelected) {
 | 
				
			||||||
 | 
					    row_y1 = row * row_height + 1;
 | 
				
			||||||
 | 
					    row_y2 = row_y1 + row_height - 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    row_y1 = row * (DOG_CHAR_HEIGHT + 2 * (TALL_FONT_CORRECTION)) + 1;
 | 
					    if (!PAGE_CONTAINS(row_y1 + 1, row_y2 + 2)) return;
 | 
				
			||||||
    row_y2 = row_y1 + (DOG_CHAR_HEIGHT + 2 * (TALL_FONT_CORRECTION)) - 1;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (!PAGE_CONTAINS(row_y1 + 1, row_y1 + 1 + DOG_CHAR_HEIGHT + 2 * (TALL_FONT_CORRECTION))) return;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (isSelected) {
 | 
					    if (isSelected) {
 | 
				
			||||||
      #if ENABLED(MENU_HOLLOW_FRAME)
 | 
					      #if ENABLED(MENU_HOLLOW_FRAME)
 | 
				
			||||||
        u8g.drawHLine(0, row_y1 + 1, LCD_PIXEL_WIDTH);
 | 
					        u8g.drawHLine(0, row_y1 + 1, LCD_PIXEL_WIDTH);
 | 
				
			||||||
        u8g.drawHLine(0, row_y1 + 1 + DOG_CHAR_HEIGHT + 2 * (TALL_FONT_CORRECTION), LCD_PIXEL_WIDTH);
 | 
					        u8g.drawHLine(0, row_y2 + 2, LCD_PIXEL_WIDTH);
 | 
				
			||||||
      #else
 | 
					      #else
 | 
				
			||||||
        u8g.setColorIndex(1); // black on white
 | 
					        u8g.setColorIndex(1); // black on white
 | 
				
			||||||
        u8g.drawBox(0, row_y1 + 2, LCD_PIXEL_WIDTH, DOG_CHAR_HEIGHT - 1 + 2 * (TALL_FONT_CORRECTION));
 | 
					        u8g.drawBox(0, row_y1 + 2, LCD_PIXEL_WIDTH, row_height - 1);
 | 
				
			||||||
        u8g.setColorIndex(0); // white on black
 | 
					        u8g.setColorIndex(0); // white on black
 | 
				
			||||||
      #endif
 | 
					      #endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -592,14 +592,6 @@ FORCE_INLINE void _draw_axis_label(const AxisEnum axis, const char* const pstr,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#endif // LCD_PROGRESS_BAR
 | 
					#endif // LCD_PROGRESS_BAR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void lcd_implementation_hotend_status() {
 | 
					 | 
				
			||||||
  lcd.setCursor(10, 3);
 | 
					 | 
				
			||||||
  lcd.print(LCD_STR_THERMOMETER[active_extruder]);
 | 
					 | 
				
			||||||
  lcd.print(itostr3(thermalManager.degHotend(active_extruder)));
 | 
					 | 
				
			||||||
  lcd.print('/');
 | 
					 | 
				
			||||||
  lcd.print(itostr3(thermalManager.degTargetHotend(active_extruder)));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
Possible status screens:
 | 
					Possible status screens:
 | 
				
			||||||
16x2   |000/000 B000/000|
 | 
					16x2   |000/000 B000/000|
 | 
				
			||||||
@ -810,6 +802,20 @@ static void lcd_implementation_status_screen() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#if ENABLED(ULTIPANEL)
 | 
					#if ENABLED(ULTIPANEL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  #if ENABLED(FILAMENT_CHANGE_FEATURE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    static void lcd_implementation_hotend_status(const uint8_t row) {
 | 
				
			||||||
 | 
					      if (row < LCD_HEIGHT) {
 | 
				
			||||||
 | 
					        lcd.setCursor(LCD_WIDTH - 9, row);
 | 
				
			||||||
 | 
					        lcd.print(LCD_STR_THERMOMETER[active_extruder]);
 | 
				
			||||||
 | 
					        lcd.print(itostr3(thermalManager.degHotend(active_extruder)));
 | 
				
			||||||
 | 
					        lcd.print('/');
 | 
				
			||||||
 | 
					        lcd.print(itostr3(thermalManager.degTargetHotend(active_extruder)));
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  #endif // FILAMENT_CHANGE_FEATURE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static void lcd_implementation_drawmenu_static(const uint8_t row, const char* pstr, const bool center=true, const bool invert=false, const char *valstr=NULL) {
 | 
					  static void lcd_implementation_drawmenu_static(const uint8_t row, const char* pstr, const bool center=true, const bool invert=false, const char *valstr=NULL) {
 | 
				
			||||||
    UNUSED(invert);
 | 
					    UNUSED(invert);
 | 
				
			||||||
    char c;
 | 
					    char c;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user