Merge pull request #1086 from PavelSindler/M600_change_extruder
Multimaterial v2: Eject filament feature, M600 modified
This commit is contained in:
commit
8de767c1fa
4 changed files with 110 additions and 9 deletions
|
@ -3120,7 +3120,20 @@ void gcode_M600(bool automatic, float x_position, float y_position, float z_shif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mmu_enabled)
|
if (mmu_enabled)
|
||||||
|
{
|
||||||
|
if (saved_printing) mmu_eject_filament(mmu_extruder, false); //if M600 was invoked by filament senzor (FINDA) eject filament so user can easily remove it
|
||||||
|
if (!automatic) mmu_M600_wait_and_beep();
|
||||||
|
if (saved_printing) {
|
||||||
|
|
||||||
|
lcd_clear();
|
||||||
|
lcd_set_cursor(0, 2);
|
||||||
|
lcd_puts_P(_T(MSG_PLEASE_WAIT));
|
||||||
|
|
||||||
|
mmu_command(MMU_CMD_R0);
|
||||||
|
manage_response(false, false);
|
||||||
|
}
|
||||||
mmu_M600_load_filament(automatic);
|
mmu_M600_load_filament(automatic);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
M600_load_filament();
|
M600_load_filament();
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
#define MMU_HWRESET
|
#define MMU_HWRESET
|
||||||
#define MMU_RST_PIN 76
|
#define MMU_RST_PIN 76
|
||||||
|
|
||||||
#define MMU_REQUIRED_FW_BUILDNR 81
|
#define MMU_REQUIRED_FW_BUILDNR 83
|
||||||
|
|
||||||
bool mmu_enabled = false;
|
bool mmu_enabled = false;
|
||||||
|
|
||||||
|
@ -103,6 +103,7 @@ void mmu_init(void)
|
||||||
//mmu main loop - state machine processing
|
//mmu main loop - state machine processing
|
||||||
void mmu_loop(void)
|
void mmu_loop(void)
|
||||||
{
|
{
|
||||||
|
int filament = 0;
|
||||||
// printf_P(PSTR("MMU loop, state=%d\n"), mmu_state);
|
// printf_P(PSTR("MMU loop, state=%d\n"), mmu_state);
|
||||||
switch (mmu_state)
|
switch (mmu_state)
|
||||||
{
|
{
|
||||||
|
@ -160,14 +161,14 @@ void mmu_loop(void)
|
||||||
{
|
{
|
||||||
if ((mmu_cmd >= MMU_CMD_T0) && (mmu_cmd <= MMU_CMD_T4))
|
if ((mmu_cmd >= MMU_CMD_T0) && (mmu_cmd <= MMU_CMD_T4))
|
||||||
{
|
{
|
||||||
int extruder = mmu_cmd - MMU_CMD_T0;
|
filament = mmu_cmd - MMU_CMD_T0;
|
||||||
printf_P(PSTR("MMU <= 'T%d'\n"), extruder);
|
printf_P(PSTR("MMU <= 'T%d'\n"), filament);
|
||||||
mmu_printf_P(PSTR("T%d\n"), extruder);
|
mmu_printf_P(PSTR("T%d\n"), filament);
|
||||||
mmu_state = 3; // wait for response
|
mmu_state = 3; // wait for response
|
||||||
}
|
}
|
||||||
else if ((mmu_cmd >= MMU_CMD_L0) && (mmu_cmd <= MMU_CMD_L4))
|
else if ((mmu_cmd >= MMU_CMD_L0) && (mmu_cmd <= MMU_CMD_L4))
|
||||||
{
|
{
|
||||||
int filament = mmu_cmd - MMU_CMD_L0;
|
filament = mmu_cmd - MMU_CMD_L0;
|
||||||
printf_P(PSTR("MMU <= 'L%d'\n"), filament);
|
printf_P(PSTR("MMU <= 'L%d'\n"), filament);
|
||||||
mmu_printf_P(PSTR("L%d\n"), filament);
|
mmu_printf_P(PSTR("L%d\n"), filament);
|
||||||
mmu_state = 3; // wait for response
|
mmu_state = 3; // wait for response
|
||||||
|
@ -184,6 +185,19 @@ void mmu_loop(void)
|
||||||
mmu_puts_P(PSTR("U0\n")); //send 'unload current filament'
|
mmu_puts_P(PSTR("U0\n")); //send 'unload current filament'
|
||||||
mmu_state = 3;
|
mmu_state = 3;
|
||||||
}
|
}
|
||||||
|
else if ((mmu_cmd >= MMU_CMD_E0) && (mmu_cmd <= MMU_CMD_E4))
|
||||||
|
{
|
||||||
|
int filament = mmu_cmd - MMU_CMD_E0;
|
||||||
|
printf_P(PSTR("MMU <= 'E%d'\n"), filament);
|
||||||
|
mmu_printf_P(PSTR("E%d\n"), filament); //send eject filament
|
||||||
|
mmu_state = 3; // wait for response
|
||||||
|
}
|
||||||
|
else if (mmu_cmd == MMU_CMD_R0)
|
||||||
|
{
|
||||||
|
printf_P(PSTR("MMU <= 'R0'\n"));
|
||||||
|
mmu_puts_P(PSTR("R0\n")); //send recover after eject
|
||||||
|
mmu_state = 3; // wait for response
|
||||||
|
}
|
||||||
mmu_cmd = 0;
|
mmu_cmd = 0;
|
||||||
}
|
}
|
||||||
else if ((mmu_last_response + 300) < millis()) //request every 300ms
|
else if ((mmu_last_response + 300) < millis()) //request every 300ms
|
||||||
|
@ -214,7 +228,7 @@ void mmu_loop(void)
|
||||||
mmu_state = 1;
|
mmu_state = 1;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
case 3: //response to commands T0-T4
|
case 3: //response to mmu commands
|
||||||
if (mmu_rx_ok() > 0)
|
if (mmu_rx_ok() > 0)
|
||||||
{
|
{
|
||||||
printf_P(PSTR("MMU => 'ok'\n"));
|
printf_P(PSTR("MMU => 'ok'\n"));
|
||||||
|
@ -456,7 +470,6 @@ void mmu_M600_load_filament(bool automatic)
|
||||||
bool yes = false;
|
bool yes = false;
|
||||||
tmp_extruder = mmu_extruder;
|
tmp_extruder = mmu_extruder;
|
||||||
if (!automatic) {
|
if (!automatic) {
|
||||||
mmu_M600_wait_and_beep();
|
|
||||||
#ifdef MMU_M600_SWITCH_EXTRUDER
|
#ifdef MMU_M600_SWITCH_EXTRUDER
|
||||||
yes = lcd_show_fullscreen_message_yes_no_and_wait_P(_i("Do you want to switch extruder?"), false);
|
yes = lcd_show_fullscreen_message_yes_no_and_wait_P(_i("Do you want to switch extruder?"), false);
|
||||||
if(yes) tmp_extruder = choose_extruder_menu();
|
if(yes) tmp_extruder = choose_extruder_menu();
|
||||||
|
@ -776,6 +789,36 @@ void extr_adj_4()
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void mmu_eject_fil_0()
|
||||||
|
{
|
||||||
|
mmu_eject_filament(0, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void mmu_eject_fil_1()
|
||||||
|
{
|
||||||
|
mmu_eject_filament(1, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void mmu_eject_fil_2()
|
||||||
|
{
|
||||||
|
mmu_eject_filament(2, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void mmu_eject_fil_3()
|
||||||
|
{
|
||||||
|
mmu_eject_filament(3, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void mmu_eject_fil_4()
|
||||||
|
{
|
||||||
|
mmu_eject_filament(4, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void mmu_eject_fil_5()
|
||||||
|
{
|
||||||
|
mmu_eject_filament(5, true);
|
||||||
|
}
|
||||||
|
|
||||||
void load_all()
|
void load_all()
|
||||||
{
|
{
|
||||||
#ifndef SNMM
|
#ifndef SNMM
|
||||||
|
@ -906,3 +949,22 @@ void mmu_show_warning()
|
||||||
printf_P(PSTR("MMU2 firmware version invalid. Required version: build number %d or higher."), MMU_REQUIRED_FW_BUILDNR);
|
printf_P(PSTR("MMU2 firmware version invalid. Required version: build number %d or higher."), MMU_REQUIRED_FW_BUILDNR);
|
||||||
kill(_i("Please update firmware in your MMU2. Waiting for reset."));
|
kill(_i("Please update firmware in your MMU2. Waiting for reset."));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void mmu_eject_filament(uint8_t filament, bool recover)
|
||||||
|
{
|
||||||
|
if (filament < 5)
|
||||||
|
{
|
||||||
|
mmu_command(MMU_CMD_E0 + filament);
|
||||||
|
manage_response(false, false);
|
||||||
|
if (recover)
|
||||||
|
{
|
||||||
|
lcd_show_fullscreen_message_and_wait_P(_i("Please remove filament and then press the knob."));
|
||||||
|
mmu_command(MMU_CMD_R0);
|
||||||
|
manage_response(false, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
puts_P(PSTR("Filament nr out of range!"));
|
||||||
|
}
|
||||||
|
}
|
|
@ -30,6 +30,13 @@ extern int16_t mmu_buildnr;
|
||||||
#define MMU_CMD_L4 0x24
|
#define MMU_CMD_L4 0x24
|
||||||
#define MMU_CMD_C0 0x30
|
#define MMU_CMD_C0 0x30
|
||||||
#define MMU_CMD_U0 0x40
|
#define MMU_CMD_U0 0x40
|
||||||
|
#define MMU_CMD_E0 0x50
|
||||||
|
#define MMU_CMD_E1 0x51
|
||||||
|
#define MMU_CMD_E2 0x52
|
||||||
|
#define MMU_CMD_E3 0x53
|
||||||
|
#define MMU_CMD_E4 0x54
|
||||||
|
#define MMU_CMD_R0 0x60
|
||||||
|
|
||||||
|
|
||||||
extern int mmu_puts_P(const char* str);
|
extern int mmu_puts_P(const char* str);
|
||||||
|
|
||||||
|
@ -84,4 +91,9 @@ extern void extr_unload_4();
|
||||||
|
|
||||||
extern bool mmu_check_version();
|
extern bool mmu_check_version();
|
||||||
extern void mmu_show_warning();
|
extern void mmu_show_warning();
|
||||||
|
extern void mmu_eject_filament(uint8_t filament, bool recover);
|
||||||
|
extern void mmu_eject_fil_0();
|
||||||
|
extern void mmu_eject_fil_1();
|
||||||
|
extern void mmu_eject_fil_2();
|
||||||
|
extern void mmu_eject_fil_3();
|
||||||
|
extern void mmu_eject_fil_4();
|
||||||
|
|
|
@ -5203,6 +5203,19 @@ static void fil_load_menu()
|
||||||
MENU_END();
|
MENU_END();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void mmu_fil_eject_menu()
|
||||||
|
{
|
||||||
|
MENU_BEGIN();
|
||||||
|
MENU_ITEM_BACK_P(_T(MSG_MAIN));
|
||||||
|
MENU_ITEM_FUNCTION_P(_i("Eject filament 1"), mmu_eject_fil_0);
|
||||||
|
MENU_ITEM_FUNCTION_P(_i("Eject filament 2"), mmu_eject_fil_1);
|
||||||
|
MENU_ITEM_FUNCTION_P(_i("Eject filament 3"), mmu_eject_fil_2);
|
||||||
|
MENU_ITEM_FUNCTION_P(_i("Eject filament 4"), mmu_eject_fil_3);
|
||||||
|
MENU_ITEM_FUNCTION_P(_i("Eject filament 5"), mmu_eject_fil_4);
|
||||||
|
|
||||||
|
MENU_END();
|
||||||
|
}
|
||||||
|
|
||||||
static void fil_unload_menu()
|
static void fil_unload_menu()
|
||||||
{
|
{
|
||||||
MENU_BEGIN();
|
MENU_BEGIN();
|
||||||
|
@ -5651,6 +5664,7 @@ static void lcd_main_menu()
|
||||||
if (mmu_enabled)
|
if (mmu_enabled)
|
||||||
{
|
{
|
||||||
MENU_ITEM_SUBMENU_P(_T(MSG_LOAD_FILAMENT), fil_load_menu);
|
MENU_ITEM_SUBMENU_P(_T(MSG_LOAD_FILAMENT), fil_load_menu);
|
||||||
|
MENU_ITEM_SUBMENU_P(_i("Eject filament"), mmu_fil_eject_menu);
|
||||||
if (mmu_enabled)
|
if (mmu_enabled)
|
||||||
MENU_ITEM_GCODE_P(_T(MSG_UNLOAD_FILAMENT), PSTR("M702 C"));
|
MENU_ITEM_GCODE_P(_T(MSG_UNLOAD_FILAMENT), PSTR("M702 C"));
|
||||||
else
|
else
|
||||||
|
|
Loading…
Add table
Reference in a new issue