1
0
mirror of https://github.com/MarlinFirmware/Marlin.git synced 2024-12-03 01:05:19 +00:00

Multi extruder support for M600 and LCD (FR #8672)

This commit is contained in:
Marcio Teixeira 2017-12-26 15:25:41 -07:00 committed by Scott Lahteine
parent ecba9b6738
commit 6195f7810a
2 changed files with 104 additions and 9 deletions

View File

@ -10008,6 +10008,7 @@ inline void gcode_M502() {
* U[distance] - Retract distance for removal (negative value) (manual reload) * U[distance] - Retract distance for removal (negative value) (manual reload)
* L[distance] - Extrude distance for insertion (positive value) (manual reload) * L[distance] - Extrude distance for insertion (positive value) (manual reload)
* B[count] - Number of times to beep, -1 for indefinite (if equipped with a buzzer) * B[count] - Number of times to beep, -1 for indefinite (if equipped with a buzzer)
* T[toolhead] - Select extruder for filament change
* *
* Default values are used for omitted arguments. * Default values are used for omitted arguments.
* *
@ -10020,6 +10021,18 @@ inline void gcode_M502() {
if (axis_unhomed_error()) home_all_axes(); if (axis_unhomed_error()) home_all_axes();
#endif #endif
#if EXTRUDERS > 1
// Change toolhead if specified
uint8_t active_extruder_before_filament_change = -1;
if (parser.seen('T')) {
const uint8_t extruder = parser.value_byte();
if (active_extruder != extruder) {
active_extruder_before_filament_change = active_extruder;
tool_change(extruder, 0, true);
}
}
#endif
// Initial retract before move to filament change position // Initial retract before move to filament change position
const float retract = parser.seen('E') ? parser.value_axis_units(E_AXIS) : 0 const float retract = parser.seen('E') ? parser.value_axis_units(E_AXIS) : 0
#ifdef PAUSE_PARK_RETRACT_LENGTH #ifdef PAUSE_PARK_RETRACT_LENGTH
@ -10072,6 +10085,12 @@ inline void gcode_M502() {
resume_print(load_length, ADVANCED_PAUSE_EXTRUDE_LENGTH, beep_count); resume_print(load_length, ADVANCED_PAUSE_EXTRUDE_LENGTH, beep_count);
} }
#if EXTRUDERS > 1
// Restore toolhead if it was changed
if (active_extruder_before_filament_change >= 0)
tool_change(active_extruder_before_filament_change, 0, true);
#endif
// Resume the print job timer if it was running // Resume the print job timer if it was running
if (job_running) print_job_timer.start(); if (job_running) print_job_timer.start();
} }

View File

@ -1240,11 +1240,14 @@ void kill_screen(const char* lcd_msg) {
#if ENABLED(ADVANCED_PAUSE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
void lcd_enqueue_filament_change() { void lcd_enqueue_filament_change(
#if EXTRUDERS > 1
const uint8_t extruder
#endif
) {
#if ENABLED(PREVENT_COLD_EXTRUSION) #if ENABLED(PREVENT_COLD_EXTRUSION)
if (!DEBUGGING(DRYRUN) && !thermalManager.allow_cold_extrude && if (!DEBUGGING(DRYRUN) && thermalManager.tooColdToExtrude(active_extruder)) {
thermalManager.degTargetHotend(active_extruder) < thermalManager.extrude_min_temp) {
lcd_save_previous_screen(); lcd_save_previous_screen();
lcd_goto_screen(lcd_advanced_pause_toocold_menu); lcd_goto_screen(lcd_advanced_pause_toocold_menu);
return; return;
@ -1252,9 +1255,42 @@ void kill_screen(const char* lcd_msg) {
#endif #endif
lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INIT); lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INIT);
enqueue_and_echo_commands_P(PSTR("M600 B0"));
#if EXTRUDERS <= 1
enqueue_and_echo_commands_P(PSTR("M600 B0"));
#else
char *command_M600;
switch (extruder) {
case 0: command_M600 = PSTR("M600 B0 T0"); break;
case 1: command_M600 = PSTR("M600 B0 T1"); break;
#if EXTRUDERS > 2
case 2: command_M600 = PSTR("M600 B0 T2"); break;
#if EXTRUDERS > 3
case 3: command_M600 = PSTR("M600 B0 T3"); break;
#if EXTRUDERS > 4
case 4: command_M600 = PSTR("M600 B0 T4"); break;
#endif
#endif
#endif
}
enqueue_and_echo_commands_P(command_M600);
#endif
} }
#if EXTRUDERS > 1
void lcd_enqueue_filament_change_e0() { lcd_enqueue_filament_change(0); }
void lcd_enqueue_filament_change_e1() { lcd_enqueue_filament_change(1); }
#if EXTRUDERS > 2
void lcd_enqueue_filament_change_e2() { lcd_enqueue_filament_change(2); }
#if EXTRUDERS > 3
void lcd_enqueue_filament_change_e3() { lcd_enqueue_filament_change(3); }
#if EXTRUDERS > 4
void lcd_enqueue_filament_change_e4() { lcd_enqueue_filament_change(4); }
#endif
#endif
#endif
#endif
#endif // ADVANCED_PAUSE_FEATURE #endif // ADVANCED_PAUSE_FEATURE
// First Fan Speed title in "Tune" and "Control>Temperature" menus // First Fan Speed title in "Tune" and "Control>Temperature" menus
@ -1398,8 +1434,27 @@ void kill_screen(const char* lcd_msg) {
// Change filament // Change filament
// //
#if ENABLED(ADVANCED_PAUSE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
if (!thermalManager.tooColdToExtrude(active_extruder)) #if EXTRUDERS > 1
MENU_ITEM(function, MSG_FILAMENTCHANGE, lcd_enqueue_filament_change); if (!thermalManager.tooColdToExtrude(0))
MENU_ITEM(function, MSG_FILAMENTCHANGE " " MSG_E1, lcd_enqueue_filament_change_e0);
if (!thermalManager.tooColdToExtrude(1))
MENU_ITEM(function, MSG_FILAMENTCHANGE " " MSG_E2, lcd_enqueue_filament_change_e1);
#if EXTRUDERS > 2
if (!thermalManager.tooColdToExtrude(2))
MENU_ITEM(function, MSG_FILAMENTCHANGE " " MSG_E3, lcd_enqueue_filament_change_e2);
#if EXTRUDERS > 3
if (!thermalManager.tooColdToExtrude(3))
MENU_ITEM(function, MSG_FILAMENTCHANGE " " MSG_E4, lcd_enqueue_filament_change_e3);
#if EXTRUDERS > 4
if (!thermalManager.tooColdToExtrude(4))
MENU_ITEM(function, MSG_FILAMENTCHANGE " " MSG_E5, lcd_enqueue_filament_change_e4);
#endif
#endif
#endif
#else
if (!thermalManager.tooColdToExtrude(active_extruder))
MENU_ITEM(function, MSG_FILAMENTCHANGE, lcd_enqueue_filament_change);
#endif
#endif #endif
END_MENU(); END_MENU();
@ -2588,9 +2643,30 @@ void kill_screen(const char* lcd_msg) {
// Change filament // Change filament
// //
#if ENABLED(ADVANCED_PAUSE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
if (!thermalManager.tooColdToExtrude(active_extruder) && !IS_SD_FILE_OPEN) if (!IS_SD_FILE_OPEN) {
MENU_ITEM(function, MSG_FILAMENTCHANGE, lcd_enqueue_filament_change); #if EXTRUDERS > 1
#endif if (!thermalManager.tooColdToExtrude(0))
MENU_ITEM(function, MSG_FILAMENTCHANGE " " MSG_E1, lcd_enqueue_filament_change_e0);
if (!thermalManager.tooColdToExtrude(1))
MENU_ITEM(function, MSG_FILAMENTCHANGE " " MSG_E2, lcd_enqueue_filament_change_e1);
#if EXTRUDERS > 2
if (!thermalManager.tooColdToExtrude(2))
MENU_ITEM(function, MSG_FILAMENTCHANGE " " MSG_E3, lcd_enqueue_filament_change_e2);
#if EXTRUDERS > 3
if (!thermalManager.tooColdToExtrude(3))
MENU_ITEM(function, MSG_FILAMENTCHANGE " " MSG_E4, lcd_enqueue_filament_change_e3);
#if EXTRUDERS > 4
if (!thermalManager.tooColdToExtrude(4))
MENU_ITEM(function, MSG_FILAMENTCHANGE " " MSG_E5, lcd_enqueue_filament_change_e4);
#endif
#endif
#endif
#else
if (!thermalManager.tooColdToExtrude(active_extruder))
MENU_ITEM(function, MSG_FILAMENTCHANGE, lcd_enqueue_filament_change);
#endif
}
#endif // ADVANCED_PAUSE_FEATURE
#if TEMP_SENSOR_0 != 0 #if TEMP_SENSOR_0 != 0