Merge pull request #3662 from thinkyhead/rc_fixup_auto_filament_change

Rewritten FILAMENT_CHANGE_ENABLE feature
This commit is contained in:
Scott Lahteine 2016-07-02 16:20:20 -07:00 committed by GitHub
commit b37e727072
26 changed files with 796 additions and 258 deletions

View file

@ -161,11 +161,11 @@ script:
- opt_set MOTHERBOARD BOARD_MINIRAMBO - opt_set MOTHERBOARD BOARD_MINIRAMBO
- build_marlin - build_marlin
# #
# Test FILAMENTCHANGEENABLE and LCD_INFO_MENU # Test FILAMENT_CHANGE_FEATURE and LCD_INFO_MENU
# #
- restore_configs - restore_configs
- opt_enable ULTIMAKERCONTROLLER - opt_enable ULTIMAKERCONTROLLER
- opt_enable_adv FILAMENTCHANGEENABLE LCD_INFO_MENU - opt_enable_adv FILAMENT_CHANGE_FEATURE LCD_INFO_MENU
- build_marlin - build_marlin
# #
# Enable filament sensor # Enable filament sensor

View file

@ -551,16 +551,30 @@ const unsigned int dropsegments = 5; //everything with less than this number of
// Add support for experimental filament exchange support M600; requires display // Add support for experimental filament exchange support M600; requires display
#if ENABLED(ULTIPANEL) #if ENABLED(ULTIPANEL)
//#define FILAMENTCHANGEENABLE // #define FILAMENT_CHANGE_FEATURE // Enable filament exchange menu and M600 g-code (used for runout sensor too)
#if ENABLED(FILAMENTCHANGEENABLE) #if ENABLED(FILAMENT_CHANGE_FEATURE)
#define FILAMENTCHANGE_XPOS 3 #define FILAMENT_CHANGE_X_POS 3 // X position of hotend
#define FILAMENTCHANGE_YPOS 3 #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend
#define FILAMENTCHANGE_ZADD 10 #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift)
#define FILAMENTCHANGE_FIRSTRETRACT -2 #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
#define FILAMENTCHANGE_FINALRETRACT -100 #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers)
#define AUTO_FILAMENT_CHANGE //This extrude filament until you press the button on LCD #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm
#define AUTO_FILAMENT_CHANGE_LENGTH 0.04 //Extrusion length on automatic extrusion loop // It is a short retract used immediately after print interrupt before move to filament exchange position
#define AUTO_FILAMENT_CHANGE_FEEDRATE 300 //Extrusion feedrate (mm/min) on automatic extrusion loop #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#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,
// shorter lenght for printers without bowden to unload filament from extruder only,
// 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_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,
// Short or zero length for printers without bowden where loading is not used
#define FILAMENT_CHANGE_LOAD_FEEDRATE 10 // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is load over the hotend,
// 0 to disable for manual extrusion
// 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
#define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#endif #endif
#endif #endif

View file

@ -123,8 +123,8 @@ FORCE_INLINE void serialprintPGM(const char* str) {
} }
void idle( void idle(
#if ENABLED(FILAMENTCHANGEENABLE) #if ENABLED(FILAMENT_CHANGE_FEATURE)
bool no_stepper_sleep=false // pass true to keep steppers from disabling on timeout bool no_stepper_sleep = false // pass true to keep steppers from disabling on timeout
#endif #endif
); );
@ -346,6 +346,15 @@ float code_value_temp_diff();
extern int meas_delay_cm; //delay distance extern int meas_delay_cm; //delay distance
#endif #endif
#if ENABLED(FILAMENT_CHANGE_FEATURE)
enum FilamentChangeMenuResponse {
FILAMENT_CHANGE_RESPONSE_WAIT_FOR,
FILAMENT_CHANGE_RESPONSE_EXTRUDE_MORE,
FILAMENT_CHANGE_RESPONSE_RESUME_PRINT
};
extern FilamentChangeMenuResponse filament_change_menu_response;
#endif
#if ENABLED(PID_ADD_EXTRUSION_RATE) #if ENABLED(PID_ADD_EXTRUSION_RATE)
extern int lpq_len; extern int lpq_len;
#endif #endif

View file

@ -294,6 +294,7 @@ static char command_queue[BUFSIZE][MAX_CMD_SIZE];
#endif #endif
const float homing_feedrate[] = HOMING_FEEDRATE; const float homing_feedrate[] = HOMING_FEEDRATE;
bool axis_relative_modes[] = AXIS_RELATIVE_MODES; bool axis_relative_modes[] = AXIS_RELATIVE_MODES;
int feedrate_multiplier = 100; //100->1 200->2 int feedrate_multiplier = 100; //100->1 200->2
int saved_feedrate_multiplier; int saved_feedrate_multiplier;
@ -490,6 +491,10 @@ static uint8_t target_extruder;
static bool filament_ran_out = false; static bool filament_ran_out = false;
#endif #endif
#if ENABLED(FILAMENT_CHANGE_FEATURE)
FilamentChangeMenuResponse filament_change_menu_response;
#endif
static bool send_ok[BUFSIZE]; static bool send_ok[BUFSIZE];
#if HAS_SERVOS #if HAS_SERVOS
@ -1564,9 +1569,8 @@ inline void line_to_z(float zPosition) {
inline void line_to_destination(float mm_m) { inline void line_to_destination(float mm_m) {
planner.buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], mm_m / 60, active_extruder); planner.buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], mm_m / 60, active_extruder);
} }
inline void line_to_destination() { inline void line_to_destination() { line_to_destination(feedrate); }
line_to_destination(feedrate);
}
/** /**
* sync_plan_position * sync_plan_position
* Set planner / stepper positions to the cartesian current_position. * Set planner / stepper positions to the cartesian current_position.
@ -3123,7 +3127,7 @@ inline void gcode_G28() {
enum MeshLevelingState { MeshReport, MeshStart, MeshNext, MeshSet, MeshSetZOffset, MeshReset }; enum MeshLevelingState { MeshReport, MeshStart, MeshNext, MeshSet, MeshSetZOffset, MeshReset };
inline void _mbl_goto_xy(float x, float y) { inline void _mbl_goto_xy(float x, float y) {
saved_feedrate = feedrate; float old_feedrate = feedrate;
feedrate = homing_feedrate[X_AXIS]; feedrate = homing_feedrate[X_AXIS];
current_position[Z_AXIS] = MESH_HOME_SEARCH_Z current_position[Z_AXIS] = MESH_HOME_SEARCH_Z
@ -3144,7 +3148,7 @@ inline void gcode_G28() {
line_to_current_position(); line_to_current_position();
#endif #endif
feedrate = saved_feedrate; feedrate = old_feedrate;
stepper.synchronize(); stepper.synchronize();
} }
@ -6131,7 +6135,7 @@ inline void gcode_M503() {
#endif // HAS_BED_PROBE #endif // HAS_BED_PROBE
#if ENABLED(FILAMENTCHANGEENABLE) #if ENABLED(FILAMENT_CHANGE_FEATURE)
/** /**
* M600: Pause for filament change * M600: Pause for filament change
@ -6153,129 +6157,160 @@ inline void gcode_M503() {
return; return;
} }
float lastpos[NUM_AXIS]; // Show initial message and wait for synchronize steppers
#if ENABLED(DELTA) lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_INIT);
float fr60 = feedrate / 60; stepper.synchronize();
#endif
for (int i = 0; i < NUM_AXIS; i++) float lastpos[NUM_AXIS];
// Save current position of all axes
for (uint8_t i = 0; i < NUM_AXIS; i++)
lastpos[i] = destination[i] = current_position[i]; lastpos[i] = destination[i] = current_position[i];
// Define runplan for move axes
#if ENABLED(DELTA) #if ENABLED(DELTA)
#define RUNPLAN calculate_delta(destination); \ #define RUNPLAN(RATE) calculate_delta(destination); \
planner.buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], destination[E_AXIS], fr60, active_extruder); planner.buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], destination[E_AXIS], RATE, active_extruder);
#else #else
#define RUNPLAN line_to_destination(); #define RUNPLAN(RATE) line_to_destination(RATE * 60);
#endif #endif
//retract by E KEEPALIVE_STATE(IN_HANDLER);
// Initial retract before move to filament change position
if (code_seen('E')) destination[E_AXIS] += code_value_axis_units(E_AXIS); if (code_seen('E')) destination[E_AXIS] += code_value_axis_units(E_AXIS);
#ifdef FILAMENTCHANGE_FIRSTRETRACT #if defined(FILAMENT_CHANGE_RETRACT_LENGTH) && FILAMENT_CHANGE_RETRACT_LENGTH > 0
else destination[E_AXIS] += FILAMENTCHANGE_FIRSTRETRACT; else destination[E_AXIS] -= FILAMENT_CHANGE_RETRACT_LENGTH;
#endif #endif
RUNPLAN; RUNPLAN(FILAMENT_CHANGE_RETRACT_FEEDRATE);
//lift Z // Lift Z axis
if (code_seen('Z')) destination[Z_AXIS] += code_value_axis_units(Z_AXIS); float z_lift = code_seen('Z') ? code_value_axis_units(Z_AXIS) :
#ifdef FILAMENTCHANGE_ZADD #if defined(FILAMENT_CHANGE_Z_ADD) && FILAMENT_CHANGE_Z_ADD > 0
else destination[Z_AXIS] += FILAMENTCHANGE_ZADD; FILAMENT_CHANGE_Z_ADD
#endif #else
0
#endif
;
RUNPLAN; if (z_lift > 0) {
destination[Z_AXIS] += z_lift;
NOMORE(destination[Z_AXIS], Z_MAX_POS);
RUNPLAN(FILAMENT_CHANGE_Z_FEEDRATE);
}
//move xy // Move XY axes to filament exchange position
if (code_seen('X')) destination[X_AXIS] = code_value_axis_units(X_AXIS); if (code_seen('X')) destination[X_AXIS] = code_value_axis_units(X_AXIS);
#ifdef FILAMENTCHANGE_XPOS #ifdef FILAMENT_CHANGE_X_POS
else destination[X_AXIS] = FILAMENTCHANGE_XPOS; else destination[X_AXIS] = FILAMENT_CHANGE_X_POS;
#endif #endif
if (code_seen('Y')) destination[Y_AXIS] = code_value_axis_units(Y_AXIS); if (code_seen('Y')) destination[Y_AXIS] = code_value_axis_units(Y_AXIS);
#ifdef FILAMENTCHANGE_YPOS #ifdef FILAMENT_CHANGE_Y_POS
else destination[Y_AXIS] = FILAMENTCHANGE_YPOS; else destination[Y_AXIS] = FILAMENT_CHANGE_Y_POS;
#endif #endif
RUNPLAN; RUNPLAN(FILAMENT_CHANGE_XY_FEEDRATE);
if (code_seen('L')) destination[E_AXIS] += code_value_axis_units(E_AXIS);
#ifdef FILAMENTCHANGE_FINALRETRACT
else destination[E_AXIS] += FILAMENTCHANGE_FINALRETRACT;
#endif
RUNPLAN;
//finish moves
stepper.synchronize(); stepper.synchronize();
//disable extruder steppers so filament can be removed lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_UNLOAD);
// Unload filament
if (code_seen('L')) destination[E_AXIS] += code_value_axis_units(E_AXIS);
#if defined(FILAMENT_CHANGE_UNLOAD_LENGTH) && FILAMENT_CHANGE_UNLOAD_LENGTH > 0
else destination[E_AXIS] -= FILAMENT_CHANGE_UNLOAD_LENGTH;
#endif
RUNPLAN(FILAMENT_CHANGE_UNLOAD_FEEDRATE);
// Synchronize steppers and then disable extruders steppers for manual filament changing
stepper.synchronize();
disable_e0(); disable_e0();
disable_e1(); disable_e1();
disable_e2(); disable_e2();
disable_e3(); disable_e3();
delay(100); delay(100);
LCD_ALERTMESSAGEPGM(MSG_FILAMENTCHANGE);
#if DISABLED(AUTO_FILAMENT_CHANGE) millis_t next_tick = 0;
millis_t next_tick = 0;
#endif // Wait for filament insert by user and press button
KEEPALIVE_STATE(PAUSED_FOR_USER); lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_INSERT);
while (!lcd_clicked()) { while (!lcd_clicked()) {
#if DISABLED(AUTO_FILAMENT_CHANGE) #if HAS_BUZZER
millis_t ms = millis(); millis_t ms = millis();
if (ELAPSED(ms, next_tick)) { if (ms >= next_tick) {
lcd_quick_feedback(); buzzer.tone(300, 2000);
next_tick = ms + 2500UL; // feedback every 2.5s while waiting next_tick = ms + 2500; // Beep every 2.5s while waiting
} }
idle(true);
#else
current_position[E_AXIS] += AUTO_FILAMENT_CHANGE_LENGTH;
destination[E_AXIS] = current_position[E_AXIS];
line_to_destination(AUTO_FILAMENT_CHANGE_FEEDRATE);
stepper.synchronize();
#endif #endif
} // while(!lcd_clicked) idle(true);
KEEPALIVE_STATE(IN_HANDLER); }
lcd_quick_feedback(); // click sound feedback delay(100);
while (lcd_clicked()) idle(true);
delay(100);
#if ENABLED(AUTO_FILAMENT_CHANGE) // Show load message
current_position[E_AXIS] = 0; lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_LOAD);
stepper.synchronize();
#endif
//return to normal // Load filament
if (code_seen('L')) destination[E_AXIS] -= code_value_axis_units(E_AXIS); if (code_seen('L')) destination[E_AXIS] -= code_value_axis_units(E_AXIS);
#ifdef FILAMENTCHANGE_FINALRETRACT #if defined(FILAMENT_CHANGE_LOAD_LENGTH) && FILAMENT_CHANGE_LOAD_LENGTH > 0
else destination[E_AXIS] -= FILAMENTCHANGE_FINALRETRACT; else destination[E_AXIS] += FILAMENT_CHANGE_LOAD_LENGTH;
#endif #endif
current_position[E_AXIS] = destination[E_AXIS]; //the long retract of L is compensated by manual filament feeding RUNPLAN(FILAMENT_CHANGE_LOAD_FEEDRATE);
sync_plan_position_e(); stepper.synchronize();
RUNPLAN; //should do nothing #if defined(FILAMENT_CHANGE_EXTRUDE_LENGTH) && FILAMENT_CHANGE_EXTRUDE_LENGTH > 0
do {
// Extrude filament to get into hotend
lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_EXTRUDE);
destination[E_AXIS] += FILAMENT_CHANGE_EXTRUDE_LENGTH;
RUNPLAN(FILAMENT_CHANGE_EXTRUDE_FEEDRATE);
stepper.synchronize();
// Ask user if more filament should be extruded
KEEPALIVE_STATE(PAUSED_FOR_USER);
lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_OPTION);
while (filament_change_menu_response == FILAMENT_CHANGE_RESPONSE_WAIT_FOR) idle(true);
KEEPALIVE_STATE(IN_HANDLER);
} while (filament_change_menu_response != FILAMENT_CHANGE_RESPONSE_RESUME_PRINT);
#endif
lcd_reset_alert_level(); lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_RESUME);
KEEPALIVE_STATE(IN_HANDLER);
// Set extruder to saved position
current_position[E_AXIS] = lastpos[E_AXIS];
destination[E_AXIS] = lastpos[E_AXIS];
planner.set_e_position_mm(current_position[E_AXIS]);
#if ENABLED(DELTA) #if ENABLED(DELTA)
// Move XYZ to starting position, then E // Move XYZ to starting position, then E
calculate_delta(lastpos); calculate_delta(lastpos);
planner.buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], destination[E_AXIS], fr60, active_extruder); planner.buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], destination[E_AXIS], FILAMENT_CHANGE_XY_FEEDRATE, active_extruder);
planner.buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], lastpos[E_AXIS], fr60, active_extruder); planner.buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], lastpos[E_AXIS], FILAMENT_CHANGE_XY_FEEDRATE, active_extruder);
#else #else
// Move XY to starting position, then Z, then E // Move XY to starting position, then Z, then E
destination[X_AXIS] = lastpos[X_AXIS]; destination[X_AXIS] = lastpos[X_AXIS];
destination[Y_AXIS] = lastpos[Y_AXIS]; destination[Y_AXIS] = lastpos[Y_AXIS];
line_to_destination(); RUNPLAN(FILAMENT_CHANGE_XY_FEEDRATE);
destination[Z_AXIS] = lastpos[Z_AXIS]; destination[Z_AXIS] = lastpos[Z_AXIS];
line_to_destination(); RUNPLAN(FILAMENT_CHANGE_Z_FEEDRATE);
destination[E_AXIS] = lastpos[E_AXIS];
line_to_destination();
#endif #endif
stepper.synchronize();
#if ENABLED(FILAMENT_RUNOUT_SENSOR) #if ENABLED(FILAMENT_RUNOUT_SENSOR)
filament_ran_out = false; filament_ran_out = false;
#endif #endif
// Show status screen
lcd_filament_change_show_message(FILAMENT_CHANGE_MESSAGE_STATUS);
} }
#endif // FILAMENTCHANGEENABLE #endif // FILAMENT_CHANGE_FEATURE
#if ENABLED(DUAL_X_CARRIAGE) #if ENABLED(DUAL_X_CARRIAGE)
@ -6464,11 +6499,11 @@ inline void gcode_T(uint8_t tmp_extruder) {
#if HOTENDS > 1 #if HOTENDS > 1
float stored_feedrate = feedrate; float old_feedrate = feedrate;
if (code_seen('F')) { if (code_seen('F')) {
float next_feedrate = code_value_axis_units(X_AXIS); float next_feedrate = code_value_axis_units(X_AXIS);
if (next_feedrate > 0.0) stored_feedrate = feedrate = next_feedrate; if (next_feedrate > 0.0) old_feedrate = feedrate = next_feedrate;
} }
else else
feedrate = XY_PROBE_FEEDRATE; feedrate = XY_PROBE_FEEDRATE;
@ -6624,7 +6659,7 @@ inline void gcode_T(uint8_t tmp_extruder) {
enable_solenoid_on_active_extruder(); enable_solenoid_on_active_extruder();
#endif // EXT_SOLENOID #endif // EXT_SOLENOID
feedrate = stored_feedrate; feedrate = old_feedrate;
#else // !HOTENDS > 1 #else // !HOTENDS > 1
@ -7232,11 +7267,11 @@ void process_next_command() {
break; break;
#endif // HAS_BED_PROBE #endif // HAS_BED_PROBE
#if ENABLED(FILAMENTCHANGEENABLE) #if ENABLED(FILAMENT_CHANGE_FEATURE)
case 600: //Pause for filament change X[pos] Y[pos] Z[relative lift] E[initial retract] L[later retract distance for removal] case 600: //Pause for filament change X[pos] Y[pos] Z[relative lift] E[initial retract] L[later retract distance for removal]
gcode_M600(); gcode_M600();
break; break;
#endif // FILAMENTCHANGEENABLE #endif // FILAMENT_CHANGE_FEATURE
#if ENABLED(DUAL_X_CARRIAGE) #if ENABLED(DUAL_X_CARRIAGE)
case 605: case 605:
@ -7993,14 +8028,14 @@ void disable_all_steppers() {
* Standard idle routine keeps the machine alive * Standard idle routine keeps the machine alive
*/ */
void idle( void idle(
#if ENABLED(FILAMENTCHANGEENABLE) #if ENABLED(FILAMENT_CHANGE_FEATURE)
bool no_stepper_sleep/*=false*/ bool no_stepper_sleep/*=false*/
#endif #endif
) { ) {
lcd_update(); lcd_update();
host_keepalive(); host_keepalive();
manage_inactivity( manage_inactivity(
#if ENABLED(FILAMENTCHANGEENABLE) #if ENABLED(FILAMENT_CHANGE_FEATURE)
no_stepper_sleep no_stepper_sleep
#endif #endif
); );

View file

@ -124,8 +124,8 @@
/** /**
* Filament Change with Extruder Runout Prevention * Filament Change with Extruder Runout Prevention
*/ */
#if ENABLED(FILAMENTCHANGEENABLE) && ENABLED(EXTRUDER_RUNOUT_PREVENT) #if ENABLED(FILAMENT_CHANGE_FEATURE) && ENABLED(EXTRUDER_RUNOUT_PREVENT)
#error "EXTRUDER_RUNOUT_PREVENT currently incompatible with FILAMENTCHANGE." #error "EXTRUDER_RUNOUT_PREVENT is incompatible with FILAMENT_CHANGE_FEATURE."
#endif #endif
/** /**
@ -623,6 +623,8 @@
#error "PROBE_SERVO_DEACTIVATION_DELAY is deprecated. Use DEACTIVATE_SERVOS_AFTER_MOVE instead." #error "PROBE_SERVO_DEACTIVATION_DELAY is deprecated. Use DEACTIVATE_SERVOS_AFTER_MOVE instead."
#elif defined(SERVO_DEACTIVATION_DELAY) #elif defined(SERVO_DEACTIVATION_DELAY)
#error "SERVO_DEACTIVATION_DELAY is deprecated. Use SERVO_DELAY instead." #error "SERVO_DEACTIVATION_DELAY is deprecated. Use SERVO_DELAY instead."
#elif ENABLED(FILAMENTCHANGEENABLE)
#error "FILAMENTCHANGEENABLE is now FILAMENT_CHANGE_FEATURE. Please update your configuration."
#endif #endif
#endif //SANITYCHECK_H #endif //SANITYCHECK_H

View file

@ -473,14 +473,14 @@ static void lcd_implementation_mark_as_selected(uint8_t row, bool isSelected) {
u8g.setPrintPos((START_ROW) * (DOG_CHAR_WIDTH), (row + 1) * (DOG_CHAR_HEIGHT)); u8g.setPrintPos((START_ROW) * (DOG_CHAR_WIDTH), (row + 1) * (DOG_CHAR_HEIGHT));
} }
#if ENABLED(LCD_INFO_MENU) #if ENABLED(LCD_INFO_MENU) || ENABLED(FILAMENT_CHANGE_FEATURE)
static void lcd_implementation_drawmenu_static(uint8_t row, const char* pstr, const char* valstr=NULL, bool center=false) { static void lcd_implementation_drawmenu_static(uint8_t row, const char* pstr, const char* valstr=NULL, bool center=true) {
char c; char c;
int8_t n = LCD_WIDTH; int8_t n = LCD_WIDTH;
u8g.setPrintPos(0, (row + 1) * (DOG_CHAR_HEIGHT)); u8g.setPrintPos(0, (row + 1) * (DOG_CHAR_HEIGHT));
u8g.setColorIndex(1); // normal text u8g.setColorIndex(1); // normal text
if (center) { if (center && !valstr) {
int8_t pad = (LCD_WIDTH - lcd_strlen_P(pstr)) / 2; int8_t pad = (LCD_WIDTH - lcd_strlen_P(pstr)) / 2;
while (--pad >= 0) { lcd_print(' '); n--; } while (--pad >= 0) { lcd_print(' '); n--; }
} }
@ -495,10 +495,9 @@ static void lcd_implementation_mark_as_selected(uint8_t row, bool isSelected) {
while (n-- > 0) lcd_print(' '); while (n-- > 0) lcd_print(' ');
} }
#endif // LCD_INFO_MENU #endif // LCD_INFO_MENU || FILAMENT_CHANGE_FEATURE
static void lcd_implementation_drawmenu_generic(bool isSelected, uint8_t row, const char* pstr, char pre_char, char post_char) { static void lcd_implementation_drawmenu_generic(bool isSelected, uint8_t row, const char* pstr, char pre_char, char post_char) {
UNUSED(pstr);
UNUSED(pre_char); UNUSED(pre_char);
char c; char c;

View file

@ -551,16 +551,30 @@ const unsigned int dropsegments = 5; //everything with less than this number of
// Add support for experimental filament exchange support M600; requires display // Add support for experimental filament exchange support M600; requires display
#if ENABLED(ULTIPANEL) #if ENABLED(ULTIPANEL)
//#define FILAMENTCHANGEENABLE // #define FILAMENT_CHANGE_FEATURE // Enable filament exchange menu and M600 g-code (used for runout sensor too)
#if ENABLED(FILAMENTCHANGEENABLE) #if ENABLED(FILAMENT_CHANGE_FEATURE)
#define FILAMENTCHANGE_XPOS 3 #define FILAMENT_CHANGE_X_POS 3 // X position of hotend
#define FILAMENTCHANGE_YPOS 3 #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend
#define FILAMENTCHANGE_ZADD 10 #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift)
#define FILAMENTCHANGE_FIRSTRETRACT -2 #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
#define FILAMENTCHANGE_FINALRETRACT -100 #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers)
#define AUTO_FILAMENT_CHANGE //This extrude filament until you press the button on LCD #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm
#define AUTO_FILAMENT_CHANGE_LENGTH 0.04 //Extrusion length on automatic extrusion loop // It is a short retract used immediately after print interrupt before move to filament exchange position
#define AUTO_FILAMENT_CHANGE_FEEDRATE 300 //Extrusion feedrate (mm/min) on automatic extrusion loop #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#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,
// shorter lenght for printers without bowden to unload filament from extruder only,
// 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_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,
// Short or zero length for printers without bowden where loading is not used
#define FILAMENT_CHANGE_LOAD_FEEDRATE 10 // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is load over the hotend,
// 0 to disable for manual extrusion
// 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
#define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#endif #endif
#endif #endif

View file

@ -551,16 +551,30 @@ const unsigned int dropsegments = 5; //everything with less than this number of
// Add support for experimental filament exchange support M600; requires display // Add support for experimental filament exchange support M600; requires display
#if ENABLED(ULTIPANEL) #if ENABLED(ULTIPANEL)
//#define FILAMENTCHANGEENABLE // #define FILAMENT_CHANGE_FEATURE // Enable filament exchange menu and M600 g-code (used for runout sensor too)
#if ENABLED(FILAMENTCHANGEENABLE) #if ENABLED(FILAMENT_CHANGE_FEATURE)
#define FILAMENTCHANGE_XPOS 3 #define FILAMENT_CHANGE_X_POS 3 // X position of hotend
#define FILAMENTCHANGE_YPOS 3 #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend
#define FILAMENTCHANGE_ZADD 10 #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift)
#define FILAMENTCHANGE_FIRSTRETRACT -2 #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
#define FILAMENTCHANGE_FINALRETRACT -100 #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers)
#define AUTO_FILAMENT_CHANGE //This extrude filament until you press the button on LCD #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm
#define AUTO_FILAMENT_CHANGE_LENGTH 0.04 //Extrusion length on automatic extrusion loop // It is a short retract used immediately after print interrupt before move to filament exchange position
#define AUTO_FILAMENT_CHANGE_FEEDRATE 300 //Extrusion feedrate (mm/min) on automatic extrusion loop #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#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,
// shorter lenght for printers without bowden to unload filament from extruder only,
// 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_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,
// Short or zero length for printers without bowden where loading is not used
#define FILAMENT_CHANGE_LOAD_FEEDRATE 10 // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is load over the hotend,
// 0 to disable for manual extrusion
// 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
#define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#endif #endif
#endif #endif

View file

@ -551,16 +551,30 @@ const unsigned int dropsegments = 5; //everything with less than this number of
// Add support for experimental filament exchange support M600; requires display // Add support for experimental filament exchange support M600; requires display
#if ENABLED(ULTIPANEL) #if ENABLED(ULTIPANEL)
//#define FILAMENTCHANGEENABLE // #define FILAMENT_CHANGE_FEATURE // Enable filament exchange menu and M600 g-code (used for runout sensor too)
#if ENABLED(FILAMENTCHANGEENABLE) #if ENABLED(FILAMENT_CHANGE_FEATURE)
#define FILAMENTCHANGE_XPOS 3 #define FILAMENT_CHANGE_X_POS 3 // X position of hotend
#define FILAMENTCHANGE_YPOS 3 #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend
#define FILAMENTCHANGE_ZADD 10 #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift)
#define FILAMENTCHANGE_FIRSTRETRACT -2 #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
#define FILAMENTCHANGE_FINALRETRACT -100 #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers)
#define AUTO_FILAMENT_CHANGE //This extrude filament until you press the button on LCD #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm
#define AUTO_FILAMENT_CHANGE_LENGTH 0.04 //Extrusion length on automatic extrusion loop // It is a short retract used immediately after print interrupt before move to filament exchange position
#define AUTO_FILAMENT_CHANGE_FEEDRATE 300 //Extrusion feedrate (mm/min) on automatic extrusion loop #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#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,
// shorter lenght for printers without bowden to unload filament from extruder only,
// 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_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,
// Short or zero length for printers without bowden where loading is not used
#define FILAMENT_CHANGE_LOAD_FEEDRATE 10 // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is load over the hotend,
// 0 to disable for manual extrusion
// 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
#define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#endif #endif
#endif #endif

View file

@ -557,16 +557,30 @@ const unsigned int dropsegments = 2; //everything with less than this number of
// Add support for experimental filament exchange support M600; requires display // Add support for experimental filament exchange support M600; requires display
#if ENABLED(ULTIPANEL) #if ENABLED(ULTIPANEL)
//#define FILAMENTCHANGEENABLE // #define FILAMENT_CHANGE_FEATURE // Enable filament exchange menu and M600 g-code (used for runout sensor too)
#if ENABLED(FILAMENTCHANGEENABLE) #if ENABLED(FILAMENT_CHANGE_FEATURE)
#define FILAMENTCHANGE_XPOS 3 #define FILAMENT_CHANGE_X_POS 3 // X position of hotend
#define FILAMENTCHANGE_YPOS 3 #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend
#define FILAMENTCHANGE_ZADD 10 #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift)
#define FILAMENTCHANGE_FIRSTRETRACT -2 #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
#define FILAMENTCHANGE_FINALRETRACT -100 #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers)
#define AUTO_FILAMENT_CHANGE //This extrude filament until you press the button on LCD #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm
#define AUTO_FILAMENT_CHANGE_LENGTH 0.04 //Extrusion length on automatic extrusion loop // It is a short retract used immediately after print interrupt before move to filament exchange position
#define AUTO_FILAMENT_CHANGE_FEEDRATE 300 //Extrusion feedrate (mm/min) on automatic extrusion loop #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#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,
// shorter lenght for printers without bowden to unload filament from extruder only,
// 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_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,
// Short or zero length for printers without bowden where loading is not used
#define FILAMENT_CHANGE_LOAD_FEEDRATE 10 // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is load over the hotend,
// 0 to disable for manual extrusion
// 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
#define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#endif #endif
#endif #endif

View file

@ -551,16 +551,30 @@ const unsigned int dropsegments = 5; //everything with less than this number of
// Add support for experimental filament exchange support M600; requires display // Add support for experimental filament exchange support M600; requires display
#if ENABLED(ULTIPANEL) #if ENABLED(ULTIPANEL)
//#define FILAMENTCHANGEENABLE // #define FILAMENT_CHANGE_FEATURE // Enable filament exchange menu and M600 g-code (used for runout sensor too)
#if ENABLED(FILAMENTCHANGEENABLE) #if ENABLED(FILAMENT_CHANGE_FEATURE)
#define FILAMENTCHANGE_XPOS 3 #define FILAMENT_CHANGE_X_POS 3 // X position of hotend
#define FILAMENTCHANGE_YPOS 3 #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend
#define FILAMENTCHANGE_ZADD 10 #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift)
#define FILAMENTCHANGE_FIRSTRETRACT -2 #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
#define FILAMENTCHANGE_FINALRETRACT -100 #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers)
#define AUTO_FILAMENT_CHANGE //This extrude filament until you press the button on LCD #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm
#define AUTO_FILAMENT_CHANGE_LENGTH 0.04 //Extrusion length on automatic extrusion loop // It is a short retract used immediately after print interrupt before move to filament exchange position
#define AUTO_FILAMENT_CHANGE_FEEDRATE 300 //Extrusion feedrate (mm/min) on automatic extrusion loop #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#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,
// shorter lenght for printers without bowden to unload filament from extruder only,
// 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_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,
// Short or zero length for printers without bowden where loading is not used
#define FILAMENT_CHANGE_LOAD_FEEDRATE 10 // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is load over the hotend,
// 0 to disable for manual extrusion
// 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
#define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#endif #endif
#endif #endif

View file

@ -551,16 +551,30 @@ const unsigned int dropsegments = 5; //everything with less than this number of
// Add support for experimental filament exchange support M600; requires display // Add support for experimental filament exchange support M600; requires display
#if ENABLED(ULTIPANEL) #if ENABLED(ULTIPANEL)
//#define FILAMENTCHANGEENABLE // #define FILAMENT_CHANGE_FEATURE // Enable filament exchange menu and M600 g-code (used for runout sensor too)
#if ENABLED(FILAMENTCHANGEENABLE) #if ENABLED(FILAMENT_CHANGE_FEATURE)
#define FILAMENTCHANGE_XPOS 3 #define FILAMENT_CHANGE_X_POS 3 // X position of hotend
#define FILAMENTCHANGE_YPOS 3 #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend
#define FILAMENTCHANGE_ZADD 10 #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift)
#define FILAMENTCHANGE_FIRSTRETRACT -2 #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
#define FILAMENTCHANGE_FINALRETRACT -100 #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers)
#define AUTO_FILAMENT_CHANGE //This extrude filament until you press the button on LCD #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm
#define AUTO_FILAMENT_CHANGE_LENGTH 0.04 //Extrusion length on automatic extrusion loop // It is a short retract used immediately after print interrupt before move to filament exchange position
#define AUTO_FILAMENT_CHANGE_FEEDRATE 300 //Extrusion feedrate (mm/min) on automatic extrusion loop #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#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,
// shorter lenght for printers without bowden to unload filament from extruder only,
// 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_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,
// Short or zero length for printers without bowden where loading is not used
#define FILAMENT_CHANGE_LOAD_FEEDRATE 10 // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is load over the hotend,
// 0 to disable for manual extrusion
// 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
#define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#endif #endif
#endif #endif

View file

@ -559,16 +559,30 @@ const unsigned int dropsegments = 5; //everything with less than this number of
// Add support for experimental filament exchange support M600; requires display // Add support for experimental filament exchange support M600; requires display
#if ENABLED(ULTIPANEL) #if ENABLED(ULTIPANEL)
#define FILAMENTCHANGEENABLE #define FILAMENT_CHANGE_FEATURE // Enable filament exchange menu and M600 g-code (used for runout sensor too)
#if ENABLED(FILAMENTCHANGEENABLE) #if ENABLED(FILAMENT_CHANGE_FEATURE)
#define FILAMENTCHANGE_XPOS 3 #define FILAMENT_CHANGE_X_POS 3 // X position of hotend
#define FILAMENTCHANGE_YPOS 3 #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend
#define FILAMENTCHANGE_ZADD 10 #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift)
#define FILAMENTCHANGE_FIRSTRETRACT -2 #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
#define FILAMENTCHANGE_FINALRETRACT -100 #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers)
//#define AUTO_FILAMENT_CHANGE //This extrude filament until you press the button on LCD #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm
//#define AUTO_FILAMENT_CHANGE_LENGTH 0.04 //Extrusion length on automatic extrusion loop // It is a short retract used immediately after print interrupt before move to filament exchange position
//#define AUTO_FILAMENT_CHANGE_FEEDRATE 300 //Extrusion feedrate (mm/min) on automatic extrusion loop #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#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,
// shorter lenght for printers without bowden to unload filament from extruder only,
// 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_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,
// Short or zero length for printers without bowden where loading is not used
#define FILAMENT_CHANGE_LOAD_FEEDRATE 10 // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is load over the hotend,
// 0 to disable for manual extrusion
// 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
#define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#endif #endif
#endif #endif

View file

@ -551,16 +551,30 @@ const unsigned int dropsegments = 5; //everything with less than this number of
// Add support for experimental filament exchange support M600; requires display // Add support for experimental filament exchange support M600; requires display
#if ENABLED(ULTIPANEL) #if ENABLED(ULTIPANEL)
//#define FILAMENTCHANGEENABLE // #define FILAMENT_CHANGE_FEATURE // Enable filament exchange menu and M600 g-code (used for runout sensor too)
#if ENABLED(FILAMENTCHANGEENABLE) #if ENABLED(FILAMENT_CHANGE_FEATURE)
#define FILAMENTCHANGE_XPOS 3 #define FILAMENT_CHANGE_X_POS 3 // X position of hotend
#define FILAMENTCHANGE_YPOS 3 #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend
#define FILAMENTCHANGE_ZADD 10 #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift)
#define FILAMENTCHANGE_FIRSTRETRACT -2 #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
#define FILAMENTCHANGE_FINALRETRACT -100 #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers)
#define AUTO_FILAMENT_CHANGE //This extrude filament until you press the button on LCD #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm
#define AUTO_FILAMENT_CHANGE_LENGTH 0.04 //Extrusion length on automatic extrusion loop // It is a short retract used immediately after print interrupt before move to filament exchange position
#define AUTO_FILAMENT_CHANGE_FEEDRATE 300 //Extrusion feedrate (mm/min) on automatic extrusion loop #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#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,
// shorter lenght for printers without bowden to unload filament from extruder only,
// 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_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,
// Short or zero length for printers without bowden where loading is not used
#define FILAMENT_CHANGE_LOAD_FEEDRATE 10 // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is load over the hotend,
// 0 to disable for manual extrusion
// 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
#define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#endif #endif
#endif #endif

View file

@ -553,16 +553,30 @@ const unsigned int dropsegments = 5; //everything with less than this number of
// Add support for experimental filament exchange support M600; requires display // Add support for experimental filament exchange support M600; requires display
#if ENABLED(ULTIPANEL) #if ENABLED(ULTIPANEL)
//#define FILAMENTCHANGEENABLE // #define FILAMENT_CHANGE_FEATURE // Enable filament exchange menu and M600 g-code (used for runout sensor too)
#if ENABLED(FILAMENTCHANGEENABLE) #if ENABLED(FILAMENT_CHANGE_FEATURE)
#define FILAMENTCHANGE_XPOS 3 #define FILAMENT_CHANGE_X_POS 3 // X position of hotend
#define FILAMENTCHANGE_YPOS 3 #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend
#define FILAMENTCHANGE_ZADD 10 #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift)
#define FILAMENTCHANGE_FIRSTRETRACT -2 #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
#define FILAMENTCHANGE_FINALRETRACT -100 #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers)
#define AUTO_FILAMENT_CHANGE //This extrude filament until you press the button on LCD #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm
#define AUTO_FILAMENT_CHANGE_LENGTH 0.04 //Extrusion length on automatic extrusion loop // It is a short retract used immediately after print interrupt before move to filament exchange position
#define AUTO_FILAMENT_CHANGE_FEEDRATE 300 //Extrusion feedrate (mm/min) on automatic extrusion loop #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#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,
// shorter lenght for printers without bowden to unload filament from extruder only,
// 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_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,
// Short or zero length for printers without bowden where loading is not used
#define FILAMENT_CHANGE_LOAD_FEEDRATE 10 // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is load over the hotend,
// 0 to disable for manual extrusion
// 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
#define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#endif #endif
#endif #endif

View file

@ -553,16 +553,30 @@ const unsigned int dropsegments = 5; //everything with less than this number of
// Add support for experimental filament exchange support M600; requires display // Add support for experimental filament exchange support M600; requires display
#if ENABLED(ULTIPANEL) #if ENABLED(ULTIPANEL)
//#define FILAMENTCHANGEENABLE // #define FILAMENT_CHANGE_FEATURE // Enable filament exchange menu and M600 g-code (used for runout sensor too)
#if ENABLED(FILAMENTCHANGEENABLE) #if ENABLED(FILAMENT_CHANGE_FEATURE)
#define FILAMENTCHANGE_XPOS 3 #define FILAMENT_CHANGE_X_POS 3 // X position of hotend
#define FILAMENTCHANGE_YPOS 3 #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend
#define FILAMENTCHANGE_ZADD 10 #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift)
#define FILAMENTCHANGE_FIRSTRETRACT -2 #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
#define FILAMENTCHANGE_FINALRETRACT -100 #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers)
#define AUTO_FILAMENT_CHANGE //This extrude filament until you press the button on LCD #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm
#define AUTO_FILAMENT_CHANGE_LENGTH 0.04 //Extrusion length on automatic extrusion loop // It is a short retract used immediately after print interrupt before move to filament exchange position
#define AUTO_FILAMENT_CHANGE_FEEDRATE 300 //Extrusion feedrate (mm/min) on automatic extrusion loop #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#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,
// shorter lenght for printers without bowden to unload filament from extruder only,
// 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_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,
// Short or zero length for printers without bowden where loading is not used
#define FILAMENT_CHANGE_LOAD_FEEDRATE 10 // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is load over the hotend,
// 0 to disable for manual extrusion
// 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
#define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#endif #endif
#endif #endif

View file

@ -552,16 +552,30 @@ const unsigned int dropsegments = 5; //everything with less than this number of
// Add support for experimental filament exchange support M600; requires display // Add support for experimental filament exchange support M600; requires display
#if ENABLED(ULTIPANEL) #if ENABLED(ULTIPANEL)
//#define FILAMENTCHANGEENABLE // #define FILAMENT_CHANGE_FEATURE // Enable filament exchange menu and M600 g-code (used for runout sensor too)
#if ENABLED(FILAMENTCHANGEENABLE) #if ENABLED(FILAMENT_CHANGE_FEATURE)
#define FILAMENTCHANGE_XPOS 3 #define FILAMENT_CHANGE_X_POS 3 // X position of hotend
#define FILAMENTCHANGE_YPOS 3 #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend
#define FILAMENTCHANGE_ZADD 10 #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift)
#define FILAMENTCHANGE_FIRSTRETRACT -2 #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
#define FILAMENTCHANGE_FINALRETRACT -100 #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers)
#define AUTO_FILAMENT_CHANGE //This extrude filament until you press the button on LCD #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm
#define AUTO_FILAMENT_CHANGE_LENGTH 0.04 //Extrusion length on automatic extrusion loop // It is a short retract used immediately after print interrupt before move to filament exchange position
#define AUTO_FILAMENT_CHANGE_FEEDRATE 300 //Extrusion feedrate (mm/min) on automatic extrusion loop #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#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,
// shorter lenght for printers without bowden to unload filament from extruder only,
// 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_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,
// Short or zero length for printers without bowden where loading is not used
#define FILAMENT_CHANGE_LOAD_FEEDRATE 10 // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is load over the hotend,
// 0 to disable for manual extrusion
// 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
#define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#endif #endif
#endif #endif

View file

@ -557,16 +557,30 @@ const unsigned int dropsegments = 5; //everything with less than this number of
// Add support for experimental filament exchange support M600; requires display // Add support for experimental filament exchange support M600; requires display
#if ENABLED(ULTIPANEL) #if ENABLED(ULTIPANEL)
//#define FILAMENTCHANGEENABLE // #define FILAMENT_CHANGE_FEATURE // Enable filament exchange menu and M600 g-code (used for runout sensor too)
#if ENABLED(FILAMENTCHANGEENABLE) #if ENABLED(FILAMENT_CHANGE_FEATURE)
#define FILAMENTCHANGE_XPOS 3 #define FILAMENT_CHANGE_X_POS 3 // X position of hotend
#define FILAMENTCHANGE_YPOS 3 #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend
#define FILAMENTCHANGE_ZADD 10 #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift)
#define FILAMENTCHANGE_FIRSTRETRACT -2 #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
#define FILAMENTCHANGE_FINALRETRACT -100 #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers)
#define AUTO_FILAMENT_CHANGE //This extrude filament until you press the button on LCD #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm
#define AUTO_FILAMENT_CHANGE_LENGTH 0.04 //Extrusion length on automatic extrusion loop // It is a short retract used immediately after print interrupt before move to filament exchange position
#define AUTO_FILAMENT_CHANGE_FEEDRATE 300 //Extrusion feedrate (mm/min) on automatic extrusion loop #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#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,
// shorter lenght for printers without bowden to unload filament from extruder only,
// 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_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,
// Short or zero length for printers without bowden where loading is not used
#define FILAMENT_CHANGE_LOAD_FEEDRATE 10 // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is load over the hotend,
// 0 to disable for manual extrusion
// 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
#define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#endif #endif
#endif #endif

View file

@ -553,16 +553,30 @@ const unsigned int dropsegments = 5; //everything with less than this number of
// Add support for experimental filament exchange support M600; requires display // Add support for experimental filament exchange support M600; requires display
#if ENABLED(ULTIPANEL) #if ENABLED(ULTIPANEL)
//#define FILAMENTCHANGEENABLE // #define FILAMENT_CHANGE_FEATURE // Enable filament exchange menu and M600 g-code (used for runout sensor too)
#if ENABLED(FILAMENTCHANGEENABLE) #if ENABLED(FILAMENT_CHANGE_FEATURE)
#define FILAMENTCHANGE_XPOS 3 #define FILAMENT_CHANGE_X_POS 3 // X position of hotend
#define FILAMENTCHANGE_YPOS 3 #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend
#define FILAMENTCHANGE_ZADD 10 #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift)
#define FILAMENTCHANGE_FIRSTRETRACT -2 #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
#define FILAMENTCHANGE_FINALRETRACT -100 #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers)
#define AUTO_FILAMENT_CHANGE //This extrude filament until you press the button on LCD #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm
#define AUTO_FILAMENT_CHANGE_LENGTH 0.04 //Extrusion length on automatic extrusion loop // It is a short retract used immediately after print interrupt before move to filament exchange position
#define AUTO_FILAMENT_CHANGE_FEEDRATE 300 //Extrusion feedrate (mm/min) on automatic extrusion loop #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#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,
// shorter lenght for printers without bowden to unload filament from extruder only,
// 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_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,
// Short or zero length for printers without bowden where loading is not used
#define FILAMENT_CHANGE_LOAD_FEEDRATE 10 // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is load over the hotend,
// 0 to disable for manual extrusion
// 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
#define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#endif #endif
#endif #endif

View file

@ -551,16 +551,30 @@ const unsigned int dropsegments = 5; //everything with less than this number of
// Add support for experimental filament exchange support M600; requires display // Add support for experimental filament exchange support M600; requires display
#if ENABLED(ULTIPANEL) #if ENABLED(ULTIPANEL)
//#define FILAMENTCHANGEENABLE // #define FILAMENT_CHANGE_FEATURE // Enable filament exchange menu and M600 g-code (used for runout sensor too)
#if ENABLED(FILAMENTCHANGEENABLE) #if ENABLED(FILAMENT_CHANGE_FEATURE)
#define FILAMENTCHANGE_XPOS 3 #define FILAMENT_CHANGE_X_POS 3 // X position of hotend
#define FILAMENTCHANGE_YPOS 3 #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend
#define FILAMENTCHANGE_ZADD 10 #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift)
#define FILAMENTCHANGE_FIRSTRETRACT -2 #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
#define FILAMENTCHANGE_FINALRETRACT -100 #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers)
#define AUTO_FILAMENT_CHANGE //This extrude filament until you press the button on LCD #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm
#define AUTO_FILAMENT_CHANGE_LENGTH 0.04 //Extrusion length on automatic extrusion loop // It is a short retract used immediately after print interrupt before move to filament exchange position
#define AUTO_FILAMENT_CHANGE_FEEDRATE 300 //Extrusion feedrate (mm/min) on automatic extrusion loop #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#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,
// shorter lenght for printers without bowden to unload filament from extruder only,
// 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_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,
// Short or zero length for printers without bowden where loading is not used
#define FILAMENT_CHANGE_LOAD_FEEDRATE 10 // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is load over the hotend,
// 0 to disable for manual extrusion
// 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
#define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#endif #endif
#endif #endif

View file

@ -551,16 +551,30 @@ const unsigned int dropsegments = 5; //everything with less than this number of
// Add support for experimental filament exchange support M600; requires display // Add support for experimental filament exchange support M600; requires display
#if ENABLED(ULTIPANEL) #if ENABLED(ULTIPANEL)
//#define FILAMENTCHANGEENABLE // #define FILAMENT_CHANGE_FEATURE // Enable filament exchange menu and M600 g-code (used for runout sensor too)
#if ENABLED(FILAMENTCHANGEENABLE) #if ENABLED(FILAMENT_CHANGE_FEATURE)
#define FILAMENTCHANGE_XPOS 3 #define FILAMENT_CHANGE_X_POS 3 // X position of hotend
#define FILAMENTCHANGE_YPOS 3 #define FILAMENT_CHANGE_Y_POS 3 // Y position of hotend
#define FILAMENTCHANGE_ZADD 10 #define FILAMENT_CHANGE_Z_ADD 10 // Z addition of hotend (lift)
#define FILAMENTCHANGE_FIRSTRETRACT -2 #define FILAMENT_CHANGE_XY_FEEDRATE 100 // X and Y axes feedrate in mm/s (also used for delta printers Z axis)
#define FILAMENTCHANGE_FINALRETRACT -100 #define FILAMENT_CHANGE_Z_FEEDRATE 5 // Z axis feedrate in mm/s (not used for delta printers)
#define AUTO_FILAMENT_CHANGE //This extrude filament until you press the button on LCD #define FILAMENT_CHANGE_RETRACT_LENGTH 2 // Initial retract in mm
#define AUTO_FILAMENT_CHANGE_LENGTH 0.04 //Extrusion length on automatic extrusion loop // It is a short retract used immediately after print interrupt before move to filament exchange position
#define AUTO_FILAMENT_CHANGE_FEEDRATE 300 //Extrusion feedrate (mm/min) on automatic extrusion loop #define FILAMENT_CHANGE_RETRACT_FEEDRATE 60 // Initial retract feedrate in mm/s
#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,
// shorter lenght for printers without bowden to unload filament from extruder only,
// 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_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,
// Short or zero length for printers without bowden where loading is not used
#define FILAMENT_CHANGE_LOAD_FEEDRATE 10 // Load filament feedrate in mm/s - filament loading into the bowden tube can be fast
#define FILAMENT_CHANGE_EXTRUDE_LENGTH 50 // Extrude filament length in mm after filament is load over the hotend,
// 0 to disable for manual extrusion
// 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
#define FILAMENT_CHANGE_EXTRUDE_FEEDRATE 3 // Extrude filament feedrate in mm/s - must be slower than load feedrate
#endif #endif
#endif #endif

View file

@ -200,4 +200,27 @@
#define MSG_DELTA_CALIBRATE_Z "Kalibrovat Z" #define MSG_DELTA_CALIBRATE_Z "Kalibrovat Z"
#define MSG_DELTA_CALIBRATE_CENTER "Kalibrovat Stred" #define MSG_DELTA_CALIBRATE_CENTER "Kalibrovat Stred"
#define MSG_FILAMENT_CHANGE_HEADER "VYMENA FILAMENTU"
#define MSG_FILAMENT_CHANGE_INIT_1 "Cekejte prosim"
#define MSG_FILAMENT_CHANGE_INIT_2 "na zahajeni"
#define MSG_FILAMENT_CHANGE_INIT_3 "vymeny filamentu"
#define MSG_FILAMENT_CHANGE_UNLOAD_1 "Cekejte prosim"
#define MSG_FILAMENT_CHANGE_UNLOAD_2 "na vysunuti"
#define MSG_FILAMENT_CHANGE_UNLOAD_3 "filamentu"
#define MSG_FILAMENT_CHANGE_INSERT_1 "Vlozte filament"
#define MSG_FILAMENT_CHANGE_INSERT_2 "a stisknete"
#define MSG_FILAMENT_CHANGE_INSERT_3 "tlacitko..."
#define MSG_FILAMENT_CHANGE_LOAD_1 "Cekejte prosim"
#define MSG_FILAMENT_CHANGE_LOAD_2 "na zavedeni"
#define MSG_FILAMENT_CHANGE_LOAD_3 "filamentu"
#define MSG_FILAMENT_CHANGE_EXTRUDE_1 "Cekejte prosim"
#define MSG_FILAMENT_CHANGE_EXTRUDE_2 "na vytlaceni"
#define MSG_FILAMENT_CHANGE_EXTRUDE_3 "filamentu"
#define MSG_FILAMENT_CHANGE_OPTION_HEADER "CO DAL?"
#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE "Jeste vytlacit"
#define MSG_FILAMENT_CHANGE_OPTION_RESUME "Obnovit tisk"
#define MSG_FILAMENT_CHANGE_RESUME_1 "Cekejte prosim"
#define MSG_FILAMENT_CHANGE_RESUME_2 "na pokracovani"
#define MSG_FILAMENT_CHANGE_RESUME_3 "tisku"
#endif // LANGUAGE_CZ_H #endif // LANGUAGE_CZ_H

View file

@ -563,4 +563,92 @@
#define MSG_INFO_PSU "Power Supply" #define MSG_INFO_PSU "Power Supply"
#endif #endif
#ifndef MSG_FILAMENT_CHANGE_HEADER
#define MSG_FILAMENT_CHANGE_HEADER "CHANGE FILAMENT"
#endif
#ifndef MSG_FILAMENT_CHANGE_OPTION_HEADER
#define MSG_FILAMENT_CHANGE_OPTION_HEADER "CHANGE OPTIONS:"
#endif
#ifndef MSG_FILAMENT_CHANGE_OPTION_EXTRUDE
#define MSG_FILAMENT_CHANGE_OPTION_EXTRUDE "Extrude more"
#endif
#ifndef MSG_FILAMENT_CHANGE_OPTION_RESUME
#define MSG_FILAMENT_CHANGE_OPTION_RESUME "Resume print"
#endif
#if LCD_HEIGHT >= 4
#ifndef MSG_FILAMENT_CHANGE_INIT_1
#define MSG_FILAMENT_CHANGE_INIT_1 "Wait for start"
#endif
#ifndef MSG_FILAMENT_CHANGE_INIT_2
#define MSG_FILAMENT_CHANGE_INIT_2 "of the filament"
#endif
#ifndef MSG_FILAMENT_CHANGE_INIT_3
#define MSG_FILAMENT_CHANGE_INIT_3 "change"
#endif
#ifndef MSG_FILAMENT_CHANGE_UNLOAD_1
#define MSG_FILAMENT_CHANGE_UNLOAD_1 "Wait for"
#endif
#ifndef MSG_FILAMENT_CHANGE_UNLOAD_2
#define MSG_FILAMENT_CHANGE_UNLOAD_2 "filament unload"
#endif
#ifndef MSG_FILAMENT_CHANGE_UNLOAD_3
#define MSG_FILAMENT_CHANGE_UNLOAD_3 ""
#endif
#ifndef MSG_FILAMENT_CHANGE_INSERT_1
#define MSG_FILAMENT_CHANGE_INSERT_1 "Insert filament"
#endif
#ifndef MSG_FILAMENT_CHANGE_INSERT_2
#define MSG_FILAMENT_CHANGE_INSERT_2 "and press button"
#endif
#ifndef MSG_FILAMENT_CHANGE_INSERT_3
#define MSG_FILAMENT_CHANGE_INSERT_3 "to continue..."
#endif
#ifndef MSG_FILAMENT_CHANGE_LOAD_1
#define MSG_FILAMENT_CHANGE_LOAD_1 "Wait for"
#endif
#ifndef MSG_FILAMENT_CHANGE_LOAD_2
#define MSG_FILAMENT_CHANGE_LOAD_2 "filament load"
#endif
#ifndef MSG_FILAMENT_CHANGE_LOAD_3
#define MSG_FILAMENT_CHANGE_LOAD_3 ""
#endif
#ifndef MSG_FILAMENT_CHANGE_EXTRUDE_1
#define MSG_FILAMENT_CHANGE_EXTRUDE_1 "Wait for"
#endif
#ifndef MSG_FILAMENT_CHANGE_EXTRUDE_2
#define MSG_FILAMENT_CHANGE_EXTRUDE_2 "filament extrude"
#endif
#ifndef MSG_FILAMENT_CHANGE_EXTRUDE_3
#define MSG_FILAMENT_CHANGE_EXTRUDE_3 ""
#endif
#ifndef MSG_FILAMENT_CHANGE_RESUME_1
#define MSG_FILAMENT_CHANGE_RESUME_1 "Wait for print"
#endif
#ifndef MSG_FILAMENT_CHANGE_RESUME_2
#define MSG_FILAMENT_CHANGE_RESUME_2 "to resume"
#endif
#ifndef MSG_FILAMENT_CHANGE_RESUME_3
#define MSG_FILAMENT_CHANGE_RESUME_3 ""
#endif
#else // LCD_HEIGHT < 4
#ifndef MSG_FILAMENT_CHANGE_INIT_1
#define MSG_FILAMENT_CHANGE_INIT_1 "Please wait..."
#endif
#ifndef MSG_FILAMENT_CHANGE_UNLOAD_1
#define MSG_FILAMENT_CHANGE_UNLOAD_1 "Ejecting..."
#endif
#ifndef MSG_FILAMENT_CHANGE_INSERT_1
#define MSG_FILAMENT_CHANGE_INSERT_1 "Insert and Click"
#endif
#ifndef MSG_FILAMENT_CHANGE_LOAD_1
#define MSG_FILAMENT_CHANGE_LOAD_1 "Loading..."
#endif
#ifndef MSG_FILAMENT_CHANGE_EXTRUDE_1
#define MSG_FILAMENT_CHANGE_EXTRUDE_1 "Extruding..."
#endif
#ifndef MSG_FILAMENT_CHANGE_RESUME_1
#define MSG_FILAMENT_CHANGE_RESUME_1 "Resuming..."
#endif
#endif // LCD_HEIGHT < 4
#endif // LANGUAGE_EN_H #endif // LANGUAGE_EN_H

View file

@ -128,7 +128,17 @@ uint8_t lcdDrawUpdate = LCDVIEW_CLEAR_CALL_REDRAW; // Set when the LCD needs to
static void lcd_info_thermistors_menu(); static void lcd_info_thermistors_menu();
static void lcd_info_board_menu(); static void lcd_info_board_menu();
static void lcd_info_menu(); static void lcd_info_menu();
#endif #endif // LCD_INFO_MENU
#if ENABLED(FILAMENT_CHANGE_FEATURE)
static void lcd_filament_change_option_menu();
static void lcd_filament_change_init_message();
static void lcd_filament_change_unload_message();
static void lcd_filament_change_insert_message();
static void lcd_filament_change_load_message();
static void lcd_filament_change_extrude_message();
static void lcd_filament_change_resume_message();
#endif
#if HAS_LCD_CONTRAST #if HAS_LCD_CONTRAST
static void lcd_set_contrast(); static void lcd_set_contrast();
@ -791,7 +801,7 @@ static void lcd_status_screen() {
// //
// Change filament // Change filament
// //
#if ENABLED(FILAMENTCHANGEENABLE) #if ENABLED(FILAMENT_CHANGE_FEATURE)
MENU_ITEM(gcode, MSG_FILAMENTCHANGE, PSTR("M600")); MENU_ITEM(gcode, MSG_FILAMENTCHANGE, PSTR("M600"));
#endif #endif
@ -2036,6 +2046,139 @@ static void lcd_status_screen() {
} }
#endif // LCD_INFO_MENU #endif // LCD_INFO_MENU
#if ENABLED(FILAMENT_CHANGE_FEATURE)
static void lcd_filament_change_resume_print() {
filament_change_menu_response = FILAMENT_CHANGE_RESPONSE_RESUME_PRINT;
lcdDrawUpdate = 2;
lcd_goto_screen(lcd_status_screen);
}
static void lcd_filament_change_extrude_more() {
filament_change_menu_response = FILAMENT_CHANGE_RESPONSE_EXTRUDE_MORE;
}
static void lcd_filament_change_option_menu() {
START_MENU();
#if LCD_HEIGHT > 2
STATIC_ITEM(MSG_FILAMENT_CHANGE_OPTION_HEADER);
#endif
MENU_ITEM(function, MSG_FILAMENT_CHANGE_OPTION_RESUME, lcd_filament_change_resume_print);
MENU_ITEM(function, MSG_FILAMENT_CHANGE_OPTION_EXTRUDE, lcd_filament_change_extrude_more);
END_MENU();
}
static void lcd_filament_change_init_message() {
START_MENU();
STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER);
STATIC_ITEM(MSG_FILAMENT_CHANGE_INIT_1);
#ifdef MSG_FILAMENT_CHANGE_INIT_2
STATIC_ITEM(MSG_FILAMENT_CHANGE_INIT_2);
#endif
#ifdef MSG_FILAMENT_CHANGE_INIT_3
STATIC_ITEM(MSG_FILAMENT_CHANGE_INIT_3);
#endif
END_MENU();
}
static void lcd_filament_change_unload_message() {
START_MENU();
STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER);
STATIC_ITEM(MSG_FILAMENT_CHANGE_UNLOAD_1);
#ifdef MSG_FILAMENT_CHANGE_UNLOAD_2
STATIC_ITEM(MSG_FILAMENT_CHANGE_UNLOAD_2);
#endif
#ifdef MSG_FILAMENT_CHANGE_UNLOAD_3
STATIC_ITEM(MSG_FILAMENT_CHANGE_UNLOAD_3);
#endif
END_MENU();
}
static void lcd_filament_change_insert_message() {
START_MENU();
STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER);
STATIC_ITEM(MSG_FILAMENT_CHANGE_INSERT_1);
#ifdef MSG_FILAMENT_CHANGE_INSERT_2
STATIC_ITEM(MSG_FILAMENT_CHANGE_INSERT_2);
#endif
#ifdef MSG_FILAMENT_CHANGE_INSERT_3
STATIC_ITEM(MSG_FILAMENT_CHANGE_INSERT_3);
#endif
END_MENU();
}
static void lcd_filament_change_load_message() {
START_MENU();
STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER);
STATIC_ITEM(MSG_FILAMENT_CHANGE_LOAD_1);
#ifdef MSG_FILAMENT_CHANGE_LOAD_2
STATIC_ITEM(MSG_FILAMENT_CHANGE_LOAD_2);
#endif
#ifdef MSG_FILAMENT_CHANGE_LOAD_3
STATIC_ITEM(MSG_FILAMENT_CHANGE_LOAD_3);
#endif
END_MENU();
}
static void lcd_filament_change_extrude_message() {
START_MENU();
STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER);
STATIC_ITEM(MSG_FILAMENT_CHANGE_EXTRUDE_1);
#ifdef MSG_FILAMENT_CHANGE_EXTRUDE_2
STATIC_ITEM(MSG_FILAMENT_CHANGE_EXTRUDE_2);
#endif
#ifdef MSG_FILAMENT_CHANGE_EXTRUDE_3
STATIC_ITEM(MSG_FILAMENT_CHANGE_EXTRUDE_3);
#endif
END_MENU();
}
static void lcd_filament_change_resume_message() {
START_MENU();
STATIC_ITEM(MSG_FILAMENT_CHANGE_HEADER);
STATIC_ITEM(MSG_FILAMENT_CHANGE_RESUME_1);
#ifdef MSG_FILAMENT_CHANGE_RESUME_2
STATIC_ITEM(MSG_FILAMENT_CHANGE_RESUME_2);
#endif
#ifdef MSG_FILAMENT_CHANGE_RESUME_3
STATIC_ITEM(MSG_FILAMENT_CHANGE_RESUME_3);
#endif
END_MENU();
}
void lcd_filament_change_show_message(FilamentChangeMessage message) {
switch (message) {
case FILAMENT_CHANGE_MESSAGE_INIT:
defer_return_to_status = true;
lcd_goto_screen(lcd_filament_change_init_message);
break;
case FILAMENT_CHANGE_MESSAGE_UNLOAD:
lcd_goto_screen(lcd_filament_change_unload_message);
break;
case FILAMENT_CHANGE_MESSAGE_INSERT:
lcd_goto_screen(lcd_filament_change_insert_message);
break;
case FILAMENT_CHANGE_MESSAGE_LOAD:
lcd_goto_screen(lcd_filament_change_load_message);
break;
case FILAMENT_CHANGE_MESSAGE_EXTRUDE:
lcd_goto_screen(lcd_filament_change_extrude_message);
break;
case FILAMENT_CHANGE_MESSAGE_OPTION:
filament_change_menu_response = FILAMENT_CHANGE_RESPONSE_WAIT_FOR;
lcd_goto_screen(lcd_filament_change_option_menu);
break;
case FILAMENT_CHANGE_MESSAGE_RESUME:
lcd_goto_screen(lcd_filament_change_resume_message);
break;
case FILAMENT_CHANGE_MESSAGE_STATUS:
lcd_return_to_status();
break;
}
}
#endif // FILAMENT_CHANGE_FEATURE
/** /**
* *
* Functions for editing single values * Functions for editing single values

View file

@ -69,6 +69,21 @@
void lcd_quick_feedback(); // Audible feedback for a button click - could also be visual void lcd_quick_feedback(); // Audible feedback for a button click - could also be visual
bool lcd_clicked(); bool lcd_clicked();
void lcd_ignore_click(bool b=true); void lcd_ignore_click(bool b=true);
#if ENABLED(FILAMENT_CHANGE_FEATURE)
enum FilamentChangeMessage {
FILAMENT_CHANGE_MESSAGE_INIT,
FILAMENT_CHANGE_MESSAGE_UNLOAD,
FILAMENT_CHANGE_MESSAGE_INSERT,
FILAMENT_CHANGE_MESSAGE_LOAD,
FILAMENT_CHANGE_MESSAGE_EXTRUDE,
FILAMENT_CHANGE_MESSAGE_OPTION,
FILAMENT_CHANGE_MESSAGE_RESUME,
FILAMENT_CHANGE_MESSAGE_STATUS
};
void lcd_filament_change_show_message(FilamentChangeMessage message);
#endif // FILAMENT_CHANGE_FEATURE
#else #else
FORCE_INLINE void lcd_buttons_update() {} FORCE_INLINE void lcd_buttons_update() {}
#endif #endif

View file

@ -815,13 +815,13 @@ static void lcd_implementation_status_screen() {
lcd_print(lcd_status_message); lcd_print(lcd_status_message);
} }
#if ENABLED(LCD_INFO_MENU) #if ENABLED(LCD_INFO_MENU) || ENABLED(FILAMENT_CHANGE_FEATURE)
static void lcd_implementation_drawmenu_static(uint8_t row, const char* pstr, const char *valstr=NULL, bool center=true) { static void lcd_implementation_drawmenu_static(uint8_t row, const char* pstr, const char *valstr=NULL, bool center=true) {
char c; char c;
int8_t n = LCD_WIDTH; int8_t n = LCD_WIDTH;
lcd.setCursor(0, row); lcd.setCursor(0, row);
if (center) { if (center && !valstr) {
int8_t pad = (LCD_WIDTH - lcd_strlen_P(pstr)) / 2; int8_t pad = (LCD_WIDTH - lcd_strlen_P(pstr)) / 2;
while (--pad >= 0) { lcd.print(' '); n--; } while (--pad >= 0) { lcd.print(' '); n--; }
} }
@ -836,7 +836,7 @@ static void lcd_implementation_status_screen() {
while (n-- > 0) lcd.print(' '); while (n-- > 0) lcd.print(' ');
} }
#endif // LCD_INFO_MENU #endif // LCD_INFO_MENU || FILAMENT_CHANGE_FEATURE
static void lcd_implementation_drawmenu_generic(bool sel, uint8_t row, const char* pstr, char pre_char, char post_char) { static void lcd_implementation_drawmenu_generic(bool sel, uint8_t row, const char* pstr, char pre_char, char post_char) {
char c; char c;