Add Continuous Purge feature to Advanced Pause
This commit is contained in:
parent
05fc3d7891
commit
dba26a6d1f
@ -144,7 +144,7 @@ script:
|
||||
# ULTIMAKERCONTROLLER, FILAMENT_LCD_DISPLAY, FILAMENT_WIDTH_SENSOR,
|
||||
# PRINTCOUNTER, NOZZLE_PARK_FEATURE, NOZZLE_CLEAN_FEATURE, PCA9632,
|
||||
# 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, M114_DETAIL
|
||||
# EEPROM_SETTINGS, EEPROM_CHITCHAT, M100_FREE_MEMORY_WATCHER,
|
||||
# INCH_MODE_SUPPORT, TEMPERATURE_UNITS_SUPPORT
|
||||
#
|
||||
@ -155,7 +155,7 @@ script:
|
||||
- opt_enable ULTIMAKERCONTROLLER SDSUPPORT
|
||||
- opt_enable PRINTCOUNTER NOZZLE_PARK_FEATURE NOZZLE_CLEAN_FEATURE PCA9632 USE_XMAX_PLUG
|
||||
- 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 I2C_SLAVE_ADDRESS 63
|
||||
- build_marlin
|
||||
|
@ -921,6 +921,7 @@
|
||||
#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_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 FILAMENT_CHANGE_ALERT_BEEPS 10 // Number of alert beeps to play when a response is needed.
|
||||
|
@ -6534,37 +6534,53 @@ inline void gcode_M17() {
|
||||
// Load filament
|
||||
if (load_length) do_pause_e_move(load_length, FILAMENT_CHANGE_LOAD_FEEDRATE);
|
||||
|
||||
do {
|
||||
if (purge_length > 0) {
|
||||
// "Wait for filament purge"
|
||||
#if ENABLED(ADVANCED_PAUSE_CONTINUOUS_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 (show_lcd)
|
||||
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_PURGE, mode);
|
||||
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
|
||||
|
||||
// Extrude filament to get into hotend
|
||||
do_pause_e_move(purge_length, ADVANCED_PAUSE_EXTRUDE_FEEDRATE);
|
||||
}
|
||||
// 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
|
||||
);
|
||||
|
||||
// Show "Purge More" / "Resume" menu and wait for reply
|
||||
#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
|
||||
);
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -135,6 +135,9 @@ enum EndstopEnum : char {
|
||||
ADVANCED_PAUSE_MESSAGE_INSERT,
|
||||
ADVANCED_PAUSE_MESSAGE_LOAD,
|
||||
ADVANCED_PAUSE_MESSAGE_PURGE,
|
||||
#if ENABLED(ADVANCED_PAUSE_CONTINUOUS_PURGE)
|
||||
ADVANCED_PAUSE_MESSAGE_CONTINUOUS_PURGE,
|
||||
#endif
|
||||
ADVANCED_PAUSE_MESSAGE_OPTION,
|
||||
ADVANCED_PAUSE_MESSAGE_RESUME,
|
||||
ADVANCED_PAUSE_MESSAGE_STATUS,
|
||||
|
@ -216,14 +216,6 @@ uint16_t max_display_update_time = 0;
|
||||
#else
|
||||
void lcd_temp_menu_e0_filament_change();
|
||||
#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
|
||||
|
||||
#if ENABLED(DAC_STEPPER_CURRENT)
|
||||
@ -4596,6 +4588,31 @@ void kill_screen(const char* lcd_msg) {
|
||||
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() {
|
||||
START_SCREEN();
|
||||
STATIC_ITEM_P(advanced_pause_header(), true, true);
|
||||
@ -4621,6 +4638,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_OPTION: advanced_pause_menu_response = ADVANCED_PAUSE_RESPONSE_WAIT_FOR;
|
||||
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:
|
||||
default: break;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user