Merge pull request #2423 from Panayiotis-git/MK3_M600_Issue-2415

LCD option to unload new filament on M600 (issue #2415)
This commit is contained in:
3d-gussner 2023-12-04 17:03:38 +01:00 committed by GitHub
commit 18daa5a62e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 143 additions and 136 deletions

View File

@ -446,7 +446,7 @@ void gcode_M701(float fastLoadLength, uint8_t mmuSlotIndex);
void M600_load_filament();
void M600_load_filament_movements();
void M600_wait_for_user();
void M600_check_state();
bool M600_check_state_and_repeat();
void load_filament_final_feed();
void marlin_wait_for_click();
float raise_z(float delta);

View File

@ -3427,17 +3427,19 @@ static void gcode_M600(const bool automatic, const float x_position, const float
plan_buffer_line_curposXYZE(FILAMENTCHANGE_XYFEED);
st_synchronize();
// Unload filament
if (MMU2::mmu2.Enabled()) {
eject_slot = MMU2::mmu2.get_current_tool();
mmu_M600_unload_filament();
} else {
// Beep, manage nozzle heater and wait for user to start unload filament
M600_wait_for_user();
unload_filament(e_shift_late);
}
st_synchronize(); // finish moves
{
bool repeat = false;
do {
// Unload filament
if (MMU2::mmu2.Enabled()) {
eject_slot = MMU2::mmu2.get_current_tool();
mmu_M600_unload_filament();
} else {
// Beep, manage nozzle heater and wait for user to start unload filament
M600_wait_for_user();
unload_filament(e_shift_late);
}
st_synchronize(); // finish moves
FSensorBlockRunout fsBlockRunout;
if (!MMU2::mmu2.Enabled())
@ -3445,10 +3447,11 @@ static void gcode_M600(const bool automatic, const float x_position, const float
KEEPALIVE_STATE(PAUSED_FOR_USER);
uint8_t choice =
lcd_show_fullscreen_message_yes_no_and_wait_P(_i("Was filament unload successful?"), false, LCD_LEFT_BUTTON_CHOICE); ////MSG_UNLOAD_SUCCESSFUL c=20 r=3
lcd_update_enable(false);
if (choice == LCD_MIDDLE_BUTTON_CHOICE) {
lcd_clear();
lcd_puts_at_P(0, 2, _T(MSG_PLEASE_WAIT));
current_position[X_AXIS] -= 100;
current_position[X_AXIS] = 100;
plan_buffer_line_curposXYZE(FILAMENTCHANGE_XYFEED);
st_synchronize();
lcd_show_fullscreen_message_and_wait_P(_i("Please open idler and remove filament manually.")); ////MSG_CHECK_IDLER c=20 r=4
@ -3461,51 +3464,53 @@ static void gcode_M600(const bool automatic, const float x_position, const float
mmu_M600_load_filament(automatic);
}
if (!automatic)
M600_check_state();
lcd_update_enable(true);
// Not let's go back to print
fanSpeed = saved_fan_speed;
// Feed a little of filament to stabilize pressure
if (!automatic) {
if (print_job_timer.isPaused())
{
// Return to retracted state during a pause
// @todo is retraction really needed? E-position is reverted a few lines below
current_position[E_AXIS] -= default_retraction;
plan_buffer_line_curposXYZE(FILAMENTCHANGE_RFEED);
// Cooldown the extruder again
setTargetHotend(0);
}
else
{
// Feed a little of filament to stabilize pressure
current_position[E_AXIS] += FILAMENTCHANGE_RECFEED;
plan_buffer_line_curposXYZE(FILAMENTCHANGE_EXFEED);
}
}
// Move XY back
plan_buffer_line(saved_pos[X_AXIS], saved_pos[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], FILAMENTCHANGE_XYFEED);
st_synchronize();
// Move Z back
plan_buffer_line(saved_pos[X_AXIS], saved_pos[Y_AXIS], saved_pos[Z_AXIS], current_position[E_AXIS], FILAMENTCHANGE_ZFEED);
st_synchronize();
// Set E position to original
plan_set_e_position(saved_pos[E_AXIS]);
memcpy(current_position, saved_pos, sizeof(saved_pos));
set_destination_to_current();
// Recover feed rate
feedmultiply = saved_feedmultiply2;
enquecommandf_P(MSG_M220, saved_feedmultiply2);
repeat = M600_check_state_and_repeat();
}
while (repeat);
lcd_update_enable(true);
// Not let's go back to print
fanSpeed = saved_fan_speed;
// Feed a little of filament to stabilize pressure
if (!automatic) {
if (print_job_timer.isPaused())
{
// Return to retracted state during a pause
// @todo is retraction really needed? E-position is reverted a few lines below
current_position[E_AXIS] -= default_retraction;
plan_buffer_line_curposXYZE(FILAMENTCHANGE_RFEED);
// Cooldown the extruder again
setTargetHotend(0);
}
else
{
// Feed a little of filament to stabilize pressure
current_position[E_AXIS] += FILAMENTCHANGE_RECFEED;
plan_buffer_line_curposXYZE(FILAMENTCHANGE_EXFEED);
}
}
// Move XY back
plan_buffer_line(saved_pos[X_AXIS], saved_pos[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], FILAMENTCHANGE_XYFEED);
st_synchronize();
// Move Z back
plan_buffer_line(saved_pos[X_AXIS], saved_pos[Y_AXIS], saved_pos[Z_AXIS], current_position[E_AXIS], FILAMENTCHANGE_ZFEED);
st_synchronize();
// Set E position to original
plan_set_e_position(saved_pos[E_AXIS]);
memcpy(current_position, saved_pos, sizeof(saved_pos));
set_destination_to_current();
// Recover feed rate
feedmultiply = saved_feedmultiply2;
enquecommandf_P(MSG_M220, saved_feedmultiply2);
if (print_job_timer.isPaused()) lcd_setstatuspgm(_T(MSG_PRINT_PAUSED));
else lcd_setstatuspgm(MSG_WELCOME);
custom_message_type = CustomMsg::Status;
@ -10991,10 +10996,10 @@ void load_filament_final_feed()
}
//! @brief Wait for user to check the state
void M600_check_state()
bool M600_check_state_and_repeat()
{
uint8_t lcd_change_filament_state = 0;
while (lcd_change_filament_state != 1)
uint8_t lcd_change_filament_state = 10;
while (lcd_change_filament_state != 0 && lcd_change_filament_state != 3)
{
KEEPALIVE_STATE(PAUSED_FOR_USER);
lcd_change_filament_state = lcd_alright();
@ -11002,7 +11007,7 @@ void M600_check_state()
switch(lcd_change_filament_state)
{
// Filament failed to load so load it again
case 2:
case 1:
if (MMU2::mmu2.Enabled()) {
uint8_t eject_slot = MMU2::mmu2.get_current_tool();
@ -11020,19 +11025,24 @@ void M600_check_state()
break;
// Filament loaded properly but color is not clear
case 3:
case 2:
st_synchronize();
load_filament_final_feed();
lcd_loading_color();
st_synchronize();
break;
// Unload filament
case 3:
return true;
// Everything good
default:
lcd_change_success();
break;
}
}
return false;
}
//! @brief Wait for user action
@ -11120,8 +11130,6 @@ void M600_load_filament() {
M600_load_filament_movements();
Sound_MakeCustom(50,1000,false);
lcd_update_enable(false);
}

View File

@ -122,7 +122,7 @@ const char MSG_STOP_PRINT[] PROGMEM_I1 = ISTR("Stop print"); ////MSG_STOP_PRINT
const char MSG_STOPPED[] PROGMEM_I1 = ISTR("STOPPED."); ////MSG_STOPPED c=20
const char MSG_PINDA_CALIBRATION[] PROGMEM_I1 = ISTR("PINDA cal."); ////MSG_PINDA_CALIBRATION c=13
const char MSG_PINDA_CALIBRATION_DONE[] PROGMEM_I1 = ISTR("PINDA calibration is finished and active. It can be disabled in menu Settings->PINDA cal."); ////MSG_PINDA_CALIBRATION_DONE c=20 r=8
const char MSG_UNLOAD_FILAMENT[] PROGMEM_I1 = ISTR("Unload filament"); ////MSG_UNLOAD_FILAMENT c=16
const char MSG_UNLOAD_FILAMENT[] PROGMEM_I1 = ISTR("Unload filament"); ////MSG_UNLOAD_FILAMENT c=18
const char MSG_UNLOADING_FILAMENT[] PROGMEM_I1 = ISTR("Unloading filament"); ////MSG_UNLOADING_FILAMENT c=20
const char MSG_INFO_SCREEN[] PROGMEM_I1 = ISTR("Info screen"); ////MSG_INFO_SCREEN c=18
const char MSG_WIZARD_CALIBRATION_FAILED[] PROGMEM_I1 = ISTR("Please check our handbook and fix the problem. Then resume the Wizard by rebooting the printer."); ////MSG_WIZARD_CALIBRATION_FAILED c=20 r=8

View File

@ -2179,14 +2179,14 @@ void lcd_loading_filament() {
uint8_t lcd_alright() {
uint8_t cursor_pos = 1;
uint8_t cursor_pos = 0;
lcd_clear();
lcd_puts_at_P(0, 0, _i("Changed correctly?"));////MSG_CORRECTLY c=20
lcd_puts_at_P(1, 1, _T(MSG_YES));
lcd_puts_at_P(1, 2, _i("Filament not loaded"));////MSG_NOT_LOADED c=19
lcd_puts_at_P(1, 3, _i("Color not correct"));////MSG_NOT_COLOR c=19
lcd_putc_at(0, 1, '>');
lcd_puts_at_P(1, 0, _i("Changed correctly"));////MSG_CORRECTLY c=19
lcd_puts_at_P(1, 1, _i("Filament not loaded"));////MSG_NOT_LOADED c=19
lcd_puts_at_P(1, 2, _i("Color not correct"));////MSG_NOT_COLOR c=19
lcd_puts_at_P(1, 3, _T(MSG_UNLOAD_FILAMENT));
lcd_putc_at(0, cursor_pos, '>');
lcd_consume_click();
while (1)
@ -2199,21 +2199,20 @@ uint8_t lcd_alright() {
if (lcd_encoder < 0 ) {
// Rotating knob counter clockwise
cursor_pos--;
if (cursor_pos > 0)
cursor_pos--;
else
Sound_MakeSound(e_SOUND_TYPE_BlindAlert);
} else if (lcd_encoder > 0) {
// Rotating knob clockwise
cursor_pos++;
}
if (cursor_pos > 3) {
cursor_pos = 3;
Sound_MakeSound(e_SOUND_TYPE_BlindAlert);
} else if (cursor_pos < 1) {
cursor_pos = 1;
Sound_MakeSound(e_SOUND_TYPE_BlindAlert);
if (cursor_pos < 3)
cursor_pos++;
else
Sound_MakeSound(e_SOUND_TYPE_BlindAlert);
}
// Update '>' render only
lcd_puts_at_P(0, 1, PSTR(" \n \n "));
lcd_puts_at_P(0, 0, PSTR(" \n \n \n "));
lcd_putc_at(0, cursor_pos, '>');
// Consume rotation event and make feedback sound

View File

@ -269,9 +269,9 @@ msgstr ""
msgid "Change success!"
msgstr ""
#. MSG_CORRECTLY c=20
#. MSG_CORRECTLY c=19
#: ../../Firmware/ultralcd.cpp:2179
msgid "Changed correctly?"
msgid "Changed correctly"
msgstr ""
#. MSG_CHECKING_X c=20
@ -2240,7 +2240,7 @@ msgstr ""
msgid "Unload"
msgstr ""
#. MSG_UNLOAD_FILAMENT c=16
#. MSG_UNLOAD_FILAMENT c=18
#: ../../Firmware/messages.cpp:118 ../../Firmware/ultralcd.cpp:5282
#: ../../Firmware/ultralcd.cpp:5299
msgid "Unload filament"

View File

@ -285,10 +285,10 @@ msgstr "Vyměnit filament"
msgid "Change success!"
msgstr "Změna úspěšná!"
#. MSG_CORRECTLY c=20
#. MSG_CORRECTLY c=19
#: ../../Firmware/ultralcd.cpp:2179
msgid "Changed correctly?"
msgstr "Výměna ok?"
msgid "Changed correctly"
msgstr "Výměna ok"
#. MSG_CHECKING_X c=20
#: ../../Firmware/messages.cpp:21 ../../Firmware/ultralcd.cpp:5838
@ -2189,7 +2189,7 @@ msgstr "MANUÁLNÍ VYJMUTÍ"
msgid "Unload"
msgstr "Vyjmout"
#. MSG_UNLOAD_FILAMENT c=16
#. MSG_UNLOAD_FILAMENT c=18
#: ../../Firmware/messages.cpp:118 ../../Firmware/ultralcd.cpp:5282
#: ../../Firmware/ultralcd.cpp:5299
msgid "Unload filament"

View File

@ -288,10 +288,10 @@ msgstr "Filament-Wechsel"
msgid "Change success!"
msgstr "Wechsel erfolgreich!"
#. MSG_CORRECTLY c=20
#. MSG_CORRECTLY c=19
#: ../../Firmware/ultralcd.cpp:2179
msgid "Changed correctly?"
msgstr "Wechsel ok?"
msgid "Changed correctly"
msgstr "Wechsel ok"
#. MSG_CHECKING_X c=20
#: ../../Firmware/messages.cpp:21 ../../Firmware/ultralcd.cpp:5838
@ -2211,7 +2211,7 @@ msgstr "ENTLADE MANUELL"
msgid "Unload"
msgstr "Entla."
#. MSG_UNLOAD_FILAMENT c=16
#. MSG_UNLOAD_FILAMENT c=18
#: ../../Firmware/messages.cpp:118 ../../Firmware/ultralcd.cpp:5282
#: ../../Firmware/ultralcd.cpp:5299
msgid "Unload filament"

View File

@ -285,10 +285,10 @@ msgstr "Cambiar filamento"
msgid "Change success!"
msgstr "Cambio correcto!"
#. MSG_CORRECTLY c=20
#. MSG_CORRECTLY c=19
#: ../../Firmware/ultralcd.cpp:2179
msgid "Changed correctly?"
msgstr "¿Cambio correcto?"
msgid "Changed correctly"
msgstr "Cambio correcto"
#. MSG_CHECKING_X c=20
#: ../../Firmware/messages.cpp:21 ../../Firmware/ultralcd.cpp:5838
@ -2216,7 +2216,7 @@ msgstr "DESCARGA MANUAL"
msgid "Unload"
msgstr "Desc."
#. MSG_UNLOAD_FILAMENT c=16
#. MSG_UNLOAD_FILAMENT c=18
#: ../../Firmware/messages.cpp:118 ../../Firmware/ultralcd.cpp:5282
#: ../../Firmware/ultralcd.cpp:5299
msgid "Unload filament"

View File

@ -287,10 +287,10 @@ msgstr "Changer filament"
msgid "Change success!"
msgstr "Changement réussi!"
#. MSG_CORRECTLY c=20
#. MSG_CORRECTLY c=19
#: ../../Firmware/ultralcd.cpp:2179
msgid "Changed correctly?"
msgstr "Change correctement?"
msgid "Changed correctly"
msgstr "Change correctement"
#. MSG_CHECKING_X c=20
#: ../../Firmware/messages.cpp:21 ../../Firmware/ultralcd.cpp:5838
@ -2217,7 +2217,7 @@ msgstr "DÉCHARGER MANUEL.T"
msgid "Unload"
msgstr "Déch."
#. MSG_UNLOAD_FILAMENT c=16
#. MSG_UNLOAD_FILAMENT c=18
#: ../../Firmware/messages.cpp:118 ../../Firmware/ultralcd.cpp:5282
#: ../../Firmware/ultralcd.cpp:5299
msgid "Unload filament"

View File

@ -285,10 +285,10 @@ msgstr "Promijeni filament"
msgid "Change success!"
msgstr "Promijena uspjesna!"
#. MSG_CORRECTLY c=20
#. MSG_CORRECTLY c=19
#: ../../Firmware/ultralcd.cpp:2179
msgid "Changed correctly?"
msgstr "Ispravno izmjenjeno?"
msgid "Changed correctly"
msgstr "Ispravno izmjenjeno"
#. MSG_CHECKING_X c=20
#: ../../Firmware/messages.cpp:21 ../../Firmware/ultralcd.cpp:5838
@ -2212,7 +2212,7 @@ msgstr "ISPRAZNI RUCNO"
msgid "Unload"
msgstr "Prazni"
#. MSG_UNLOAD_FILAMENT c=16
#. MSG_UNLOAD_FILAMENT c=18
#: ../../Firmware/messages.cpp:118 ../../Firmware/ultralcd.cpp:5282
#: ../../Firmware/ultralcd.cpp:5299
msgid "Unload filament"

View File

@ -285,10 +285,10 @@ msgstr "Filament csere"
msgid "Change success!"
msgstr "Csere sikerult!"
#. MSG_CORRECTLY c=20
#. MSG_CORRECTLY c=19
#: ../../Firmware/ultralcd.cpp:2179
msgid "Changed correctly?"
msgstr "Sikerult a csere?"
msgid "Changed correctly"
msgstr "Sikerult a csere"
#. MSG_CHECKING_X c=20
#: ../../Firmware/messages.cpp:21 ../../Firmware/ultralcd.cpp:5838
@ -2212,7 +2212,7 @@ msgstr "VEDD KI KEZZEL"
msgid "Unload"
msgstr "Kiadas"
#. MSG_UNLOAD_FILAMENT c=16
#. MSG_UNLOAD_FILAMENT c=18
#: ../../Firmware/messages.cpp:118 ../../Firmware/ultralcd.cpp:5282
#: ../../Firmware/ultralcd.cpp:5299
msgid "Unload filament"

View File

@ -287,10 +287,10 @@ msgstr "Cambia filamento"
msgid "Change success!"
msgstr "Cambio riuscito!"
#. MSG_CORRECTLY c=20
#. MSG_CORRECTLY c=19
#: ../../Firmware/ultralcd.cpp:2179
msgid "Changed correctly?"
msgstr "Cambio corretto?"
msgid "Changed correctly"
msgstr "Cambio corretto"
#. MSG_CHECKING_X c=20
#: ../../Firmware/messages.cpp:21 ../../Firmware/ultralcd.cpp:5838
@ -2215,7 +2215,7 @@ msgstr "SCARICA MANUALMENTE"
msgid "Unload"
msgstr "Scarica"
#. MSG_UNLOAD_FILAMENT c=16
#. MSG_UNLOAD_FILAMENT c=18
#: ../../Firmware/messages.cpp:118 ../../Firmware/ultralcd.cpp:5282
#: ../../Firmware/ultralcd.cpp:5299
msgid "Unload filament"

View File

@ -287,10 +287,10 @@ msgstr "Wissel filament"
msgid "Change success!"
msgstr "Wissel geslaagd!"
#. MSG_CORRECTLY c=20
#. MSG_CORRECTLY c=19
#: ../../Firmware/ultralcd.cpp:2179
msgid "Changed correctly?"
msgstr "Wissel ok?"
msgid "Changed correctly"
msgstr "Wissel ok"
#. MSG_CHECKING_X c=20
#: ../../Firmware/messages.cpp:21 ../../Firmware/ultralcd.cpp:5838
@ -2221,7 +2221,7 @@ msgstr "ONTLAAD MANUEEL"
msgid "Unload"
msgstr "Ontla."
#. MSG_UNLOAD_FILAMENT c=16
#. MSG_UNLOAD_FILAMENT c=18
#: ../../Firmware/messages.cpp:118 ../../Firmware/ultralcd.cpp:5282
#: ../../Firmware/ultralcd.cpp:5299
msgid "Unload filament"

View File

@ -286,10 +286,10 @@ msgstr "Bytt filament"
msgid "Change success!"
msgstr "Bytte vellykket!"
#. MSG_CORRECTLY c=20
#. MSG_CORRECTLY c=19
#: ../../Firmware/ultralcd.cpp:2179
msgid "Changed correctly?"
msgstr "Byttet riktig?"
msgid "Changed correctly"
msgstr "Byttet riktig"
#. MSG_CHECKING_X c=20
#: ../../Firmware/messages.cpp:21 ../../Firmware/ultralcd.cpp:5838
@ -2196,7 +2196,7 @@ msgstr "LAST UT MANUELT"
msgid "Unload"
msgstr "Last ut"
#. MSG_UNLOAD_FILAMENT c=16
#. MSG_UNLOAD_FILAMENT c=18
#: ../../Firmware/messages.cpp:118 ../../Firmware/ultralcd.cpp:5282
#: ../../Firmware/ultralcd.cpp:5299
msgid "Unload filament"

View File

@ -286,10 +286,10 @@ msgstr "Wymiana filamentu"
msgid "Change success!"
msgstr "Wymiana udana!"
#. MSG_CORRECTLY c=20
#. MSG_CORRECTLY c=19
#: ../../Firmware/ultralcd.cpp:2179
msgid "Changed correctly?"
msgstr "Wymiana udała się?"
msgid "Changed correctly"
msgstr "Wymiana udała się"
#. MSG_CHECKING_X c=20
#: ../../Firmware/messages.cpp:21 ../../Firmware/ultralcd.cpp:5838
@ -2212,7 +2212,7 @@ msgstr "WYŁADUJ RĘCZNIE"
msgid "Unload"
msgstr "Wyładuj"
#. MSG_UNLOAD_FILAMENT c=16
#. MSG_UNLOAD_FILAMENT c=18
#: ../../Firmware/messages.cpp:118 ../../Firmware/ultralcd.cpp:5282
#: ../../Firmware/ultralcd.cpp:5299
msgid "Unload filament"

View File

@ -288,10 +288,10 @@ msgstr "Schimbă filamentul"
msgid "Change success!"
msgstr "Schimbare cu succes!"
#. MSG_CORRECTLY c=20
#. MSG_CORRECTLY c=19
#: ../../Firmware/ultralcd.cpp:2179
msgid "Changed correctly?"
msgstr "Schimbat corect?"
msgid "Changed correctly"
msgstr "Schimbat corect"
#. MSG_CHECKING_X c=20
#: ../../Firmware/messages.cpp:21 ../../Firmware/ultralcd.cpp:5838
@ -2212,7 +2212,7 @@ msgstr "DESCĂRCARE MANUALĂ"
msgid "Unload"
msgstr "Descărc."
#. MSG_UNLOAD_FILAMENT c=16
#. MSG_UNLOAD_FILAMENT c=18
#: ../../Firmware/messages.cpp:118 ../../Firmware/ultralcd.cpp:5282
#: ../../Firmware/ultralcd.cpp:5299
msgid "Unload filament"

View File

@ -285,10 +285,10 @@ msgstr "Vymeniť filament"
msgid "Change success!"
msgstr "Výmena úspešná!"
#. MSG_CORRECTLY c=20
#. MSG_CORRECTLY c=19
#: ../../Firmware/ultralcd.cpp:2179
msgid "Changed correctly?"
msgstr "Výmena ok?"
msgid "Changed correctly"
msgstr "Výmena ok"
#. MSG_CHECKING_X c=20
#: ../../Firmware/messages.cpp:21 ../../Firmware/ultralcd.cpp:5838
@ -2202,7 +2202,7 @@ msgstr "UNLOAD MANUALLY"
msgid "Unload"
msgstr "Výsuv"
#. MSG_UNLOAD_FILAMENT c=16
#. MSG_UNLOAD_FILAMENT c=18
#: ../../Firmware/messages.cpp:118 ../../Firmware/ultralcd.cpp:5282
#: ../../Firmware/ultralcd.cpp:5299
msgid "Unload filament"

View File

@ -286,10 +286,10 @@ msgstr "Ändra filament"
msgid "Change success!"
msgstr "Ändring utförd!"
#. MSG_CORRECTLY c=20
#. MSG_CORRECTLY c=19
#: ../../Firmware/ultralcd.cpp:2179
msgid "Changed correctly?"
msgstr "Ändring korrekt?"
msgid "Changed correctly"
msgstr "Ändring korrekt"
#. MSG_CHECKING_X c=20
#: ../../Firmware/messages.cpp:21 ../../Firmware/ultralcd.cpp:5838
@ -2210,7 +2210,7 @@ msgstr "LADDA UR MANUELLT"
msgid "Unload"
msgstr "Ladda ur"
#. MSG_UNLOAD_FILAMENT c=16
#. MSG_UNLOAD_FILAMENT c=18
#: ../../Firmware/messages.cpp:118 ../../Firmware/ultralcd.cpp:5282
#: ../../Firmware/ultralcd.cpp:5299
msgid "Unload filament"