Implement filament change continuous purge
This commit is contained in:
parent
d133ad61f3
commit
2fa0a73c2c
|
@ -116,7 +116,7 @@ script:
|
||||||
# ULTIMAKERCONTROLLER, FILAMENT_LCD_DISPLAY, FILAMENT_WIDTH_SENSOR,
|
# ULTIMAKERCONTROLLER, FILAMENT_LCD_DISPLAY, FILAMENT_WIDTH_SENSOR,
|
||||||
# PRINTCOUNTER, NOZZLE_PARK_FEATURE, NOZZLE_CLEAN_FEATURE, PCA9632,
|
# PRINTCOUNTER, NOZZLE_PARK_FEATURE, NOZZLE_CLEAN_FEATURE, PCA9632,
|
||||||
# Z_DUAL_STEPPER_DRIVERS, Z_DUAL_ENDSTOPS, BEZIER_CURVE_SUPPORT, EXPERIMENTAL_I2CBUS,
|
# Z_DUAL_STEPPER_DRIVERS, Z_DUAL_ENDSTOPS, BEZIER_CURVE_SUPPORT, EXPERIMENTAL_I2CBUS,
|
||||||
# ADVANCED_PAUSE_FEATURE, PARK_HEAD_ON_PAUSE, LCD_INFO_MENU,
|
# ADVANCED_PAUSE_FEATURE, ADVANCED_PAUSE_CONTINUOUS_PURGE, PARK_HEAD_ON_PAUSE, LCD_INFO_MENU,
|
||||||
# EEPROM_SETTINGS, EEPROM_CHITCHAT, M100_FREE_MEMORY_WATCHER,
|
# EEPROM_SETTINGS, EEPROM_CHITCHAT, M100_FREE_MEMORY_WATCHER,
|
||||||
# INCH_MODE_SUPPORT, TEMPERATURE_UNITS_SUPPORT
|
# INCH_MODE_SUPPORT, TEMPERATURE_UNITS_SUPPORT
|
||||||
#
|
#
|
||||||
|
@ -127,7 +127,7 @@ script:
|
||||||
- opt_enable ULTIMAKERCONTROLLER SDSUPPORT
|
- opt_enable ULTIMAKERCONTROLLER SDSUPPORT
|
||||||
- opt_enable PRINTCOUNTER NOZZLE_PARK_FEATURE NOZZLE_CLEAN_FEATURE PCA9632 USE_XMAX_PLUG
|
- opt_enable PRINTCOUNTER NOZZLE_PARK_FEATURE NOZZLE_CLEAN_FEATURE PCA9632 USE_XMAX_PLUG
|
||||||
- opt_enable_adv BEZIER_CURVE_SUPPORT EXPERIMENTAL_I2CBUS
|
- opt_enable_adv BEZIER_CURVE_SUPPORT EXPERIMENTAL_I2CBUS
|
||||||
- opt_enable_adv ADVANCED_PAUSE_FEATURE FILAMENT_LOAD_UNLOAD_GCODES PARK_HEAD_ON_PAUSE LCD_INFO_MENU M114_DETAIL
|
- opt_enable_adv ADVANCED_PAUSE_FEATURE ADVANCED_PAUSE_CONTINUOUS_PURGE FILAMENT_LOAD_UNLOAD_GCODES PARK_HEAD_ON_PAUSE LCD_INFO_MENU M114_DETAIL
|
||||||
- opt_set_adv PWM_MOTOR_CURRENT {1300,1300,1250}
|
- opt_set_adv PWM_MOTOR_CURRENT {1300,1300,1250}
|
||||||
- opt_set_adv I2C_SLAVE_ADDRESS 63
|
- opt_set_adv I2C_SLAVE_ADDRESS 63
|
||||||
- build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
|
- build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
|
||||||
|
|
|
@ -921,6 +921,7 @@
|
||||||
#define FILAMENT_UNLOAD_RETRACT_LENGTH 13 // (mm) Unload initial retract length.
|
#define FILAMENT_UNLOAD_RETRACT_LENGTH 13 // (mm) Unload initial retract length.
|
||||||
#define FILAMENT_UNLOAD_DELAY 5000 // (ms) Delay for the filament to cool after retract.
|
#define FILAMENT_UNLOAD_DELAY 5000 // (ms) Delay for the filament to cool after retract.
|
||||||
#define FILAMENT_UNLOAD_PURGE_LENGTH 8 // (mm) An unretract is done, then this length is purged.
|
#define FILAMENT_UNLOAD_PURGE_LENGTH 8 // (mm) An unretract is done, then this length is purged.
|
||||||
|
//#define ADVANCED_PAUSE_CONTINUOUS_PURGE // Purge continuously up to the purge length until interrupted.
|
||||||
|
|
||||||
#define PAUSE_PARK_NOZZLE_TIMEOUT 45 // (seconds) Time limit before the nozzle is turned off for safety.
|
#define PAUSE_PARK_NOZZLE_TIMEOUT 45 // (seconds) Time limit before the nozzle is turned off for safety.
|
||||||
#define FILAMENT_CHANGE_ALERT_BEEPS 10 // Number of alert beeps to play when a response is needed.
|
#define FILAMENT_CHANGE_ALERT_BEEPS 10 // Number of alert beeps to play when a response is needed.
|
||||||
|
|
|
@ -187,37 +187,53 @@ bool load_filament(const float &load_length/*=0*/, const float &purge_length/*=0
|
||||||
// Load filament
|
// Load filament
|
||||||
if (load_length) do_pause_e_move(load_length, FILAMENT_CHANGE_LOAD_FEEDRATE);
|
if (load_length) do_pause_e_move(load_length, FILAMENT_CHANGE_LOAD_FEEDRATE);
|
||||||
|
|
||||||
do {
|
#if ENABLED(ADVANCED_PAUSE_CONTINUOUS_PURGE)
|
||||||
if (purge_length > 0) {
|
|
||||||
// "Wait for filament purge"
|
#if ENABLED(ULTIPANEL)
|
||||||
|
if (show_lcd)
|
||||||
|
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_CONTINUOUS_PURGE);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
wait_for_user = true;
|
||||||
|
for (float purge_count = purge_length; purge_count > 0 && wait_for_user; --purge_count)
|
||||||
|
do_pause_e_move(1, ADVANCED_PAUSE_EXTRUDE_FEEDRATE);
|
||||||
|
wait_for_user = false;
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
do {
|
||||||
|
if (purge_length > 0) {
|
||||||
|
// "Wait for filament purge"
|
||||||
|
#if ENABLED(ULTIPANEL)
|
||||||
|
if (show_lcd)
|
||||||
|
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_PURGE, mode);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Extrude filament to get into hotend
|
||||||
|
do_pause_e_move(purge_length, ADVANCED_PAUSE_EXTRUDE_FEEDRATE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Show "Purge More" / "Resume" menu and wait for reply
|
||||||
#if ENABLED(ULTIPANEL)
|
#if ENABLED(ULTIPANEL)
|
||||||
if (show_lcd)
|
if (show_lcd) {
|
||||||
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_PURGE, mode);
|
KEEPALIVE_STATE(PAUSED_FOR_USER);
|
||||||
|
wait_for_user = false;
|
||||||
|
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_OPTION, mode);
|
||||||
|
while (advanced_pause_menu_response == ADVANCED_PAUSE_RESPONSE_WAIT_FOR) idle(true);
|
||||||
|
KEEPALIVE_STATE(IN_HANDLER);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Extrude filament to get into hotend
|
// Keep looping if "Purge More" was selected
|
||||||
do_pause_e_move(purge_length, ADVANCED_PAUSE_EXTRUDE_FEEDRATE);
|
} while (
|
||||||
}
|
#if ENABLED(ULTIPANEL)
|
||||||
|
show_lcd && advanced_pause_menu_response == ADVANCED_PAUSE_RESPONSE_EXTRUDE_MORE
|
||||||
|
#else
|
||||||
|
0
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
// Show "Purge More" / "Resume" menu and wait for reply
|
#endif
|
||||||
#if ENABLED(ULTIPANEL)
|
|
||||||
if (show_lcd) {
|
|
||||||
KEEPALIVE_STATE(PAUSED_FOR_USER);
|
|
||||||
wait_for_user = false;
|
|
||||||
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_OPTION, mode);
|
|
||||||
while (advanced_pause_menu_response == ADVANCED_PAUSE_RESPONSE_WAIT_FOR) idle(true);
|
|
||||||
KEEPALIVE_STATE(IN_HANDLER);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Keep looping if "Purge More" was selected
|
|
||||||
} while (
|
|
||||||
#if ENABLED(ULTIPANEL)
|
|
||||||
show_lcd && advanced_pause_menu_response == ADVANCED_PAUSE_RESPONSE_EXTRUDE_MORE
|
|
||||||
#else
|
|
||||||
0
|
|
||||||
#endif
|
|
||||||
);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,6 +44,9 @@ enum AdvancedPauseMessage : char {
|
||||||
ADVANCED_PAUSE_MESSAGE_INSERT,
|
ADVANCED_PAUSE_MESSAGE_INSERT,
|
||||||
ADVANCED_PAUSE_MESSAGE_LOAD,
|
ADVANCED_PAUSE_MESSAGE_LOAD,
|
||||||
ADVANCED_PAUSE_MESSAGE_PURGE,
|
ADVANCED_PAUSE_MESSAGE_PURGE,
|
||||||
|
#if ENABLED(ADVANCED_PAUSE_CONTINUOUS_PURGE)
|
||||||
|
ADVANCED_PAUSE_MESSAGE_CONTINUOUS_PURGE,
|
||||||
|
#endif
|
||||||
ADVANCED_PAUSE_MESSAGE_OPTION,
|
ADVANCED_PAUSE_MESSAGE_OPTION,
|
||||||
ADVANCED_PAUSE_MESSAGE_RESUME,
|
ADVANCED_PAUSE_MESSAGE_RESUME,
|
||||||
ADVANCED_PAUSE_MESSAGE_STATUS,
|
ADVANCED_PAUSE_MESSAGE_STATUS,
|
||||||
|
|
|
@ -218,14 +218,6 @@ uint16_t max_display_update_time = 0;
|
||||||
#else
|
#else
|
||||||
void lcd_temp_menu_e0_filament_change();
|
void lcd_temp_menu_e0_filament_change();
|
||||||
#endif
|
#endif
|
||||||
void lcd_advanced_pause_option_menu();
|
|
||||||
void lcd_advanced_pause_init_message();
|
|
||||||
void lcd_advanced_pause_unload_message();
|
|
||||||
void lcd_advanced_pause_insert_message();
|
|
||||||
void lcd_advanced_pause_load_message();
|
|
||||||
void lcd_advanced_pause_heat_nozzle();
|
|
||||||
void lcd_advanced_pause_purge_message();
|
|
||||||
void lcd_advanced_pause_resume_message();
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(DAC_STEPPER_CURRENT)
|
#if ENABLED(DAC_STEPPER_CURRENT)
|
||||||
|
@ -4598,10 +4590,35 @@ void kill_screen(const char* lcd_msg) {
|
||||||
#if LCD_HEIGHT > _FC_LINES_G + 1
|
#if LCD_HEIGHT > _FC_LINES_G + 1
|
||||||
STATIC_ITEM(" ");
|
STATIC_ITEM(" ");
|
||||||
#endif
|
#endif
|
||||||
HOTEND_STATUS_ITEM();
|
HOTEND_STATUS_ITEM();
|
||||||
END_SCREEN();
|
END_SCREEN();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if ENABLED(ADVANCED_PAUSE_CONTINUOUS_PURGE)
|
||||||
|
void lcd_advanced_pause_continuous_purge_menu() {
|
||||||
|
START_SCREEN();
|
||||||
|
STATIC_ITEM(MSG_FILAMENT_CHANGE_PURGE_1);
|
||||||
|
#ifdef MSG_FILAMENT_CHANGE_PURGE_2
|
||||||
|
STATIC_ITEM(MSG_FILAMENT_CHANGE_PURGE_2);
|
||||||
|
#define __FC_LINES_G 3
|
||||||
|
#else
|
||||||
|
#define __FC_LINES_G 2
|
||||||
|
#endif
|
||||||
|
#ifdef MSG_FILAMENT_CHANGE_PURGE_3
|
||||||
|
STATIC_ITEM(MSG_FILAMENT_CHANGE_PURGE_3);
|
||||||
|
#define _FC_LINES_G (__FC_LINES_G + 1)
|
||||||
|
#else
|
||||||
|
#define _FC_LINES_G __FC_LINES_G
|
||||||
|
#endif
|
||||||
|
#if LCD_HEIGHT > _FC_LINES_G + 1
|
||||||
|
STATIC_ITEM(" ");
|
||||||
|
#endif
|
||||||
|
HOTEND_STATUS_ITEM();
|
||||||
|
STATIC_ITEM(MSG_USERWAIT);
|
||||||
|
END_SCREEN();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void lcd_advanced_pause_resume_message() {
|
void lcd_advanced_pause_resume_message() {
|
||||||
START_SCREEN();
|
START_SCREEN();
|
||||||
STATIC_ITEM_P(advanced_pause_header(), true, true);
|
STATIC_ITEM_P(advanced_pause_header(), true, true);
|
||||||
|
@ -4627,6 +4644,9 @@ void kill_screen(const char* lcd_msg) {
|
||||||
case ADVANCED_PAUSE_MESSAGE_WAIT_FOR_NOZZLES_TO_HEAT: return lcd_advanced_pause_wait_for_nozzles_to_heat;
|
case ADVANCED_PAUSE_MESSAGE_WAIT_FOR_NOZZLES_TO_HEAT: return lcd_advanced_pause_wait_for_nozzles_to_heat;
|
||||||
case ADVANCED_PAUSE_MESSAGE_OPTION: advanced_pause_menu_response = ADVANCED_PAUSE_RESPONSE_WAIT_FOR;
|
case ADVANCED_PAUSE_MESSAGE_OPTION: advanced_pause_menu_response = ADVANCED_PAUSE_RESPONSE_WAIT_FOR;
|
||||||
return lcd_advanced_pause_option_menu;
|
return lcd_advanced_pause_option_menu;
|
||||||
|
#if ENABLED(ADVANCED_PAUSE_CONTINUOUS_PURGE)
|
||||||
|
case ADVANCED_PAUSE_MESSAGE_CONTINUOUS_PURGE: return lcd_advanced_pause_continuous_purge_menu;
|
||||||
|
#endif
|
||||||
case ADVANCED_PAUSE_MESSAGE_STATUS:
|
case ADVANCED_PAUSE_MESSAGE_STATUS:
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue