From 815231bc26ea89c720df0a5bedbfd99d99793df3 Mon Sep 17 00:00:00 2001 From: Marek Bel Date: Tue, 26 Feb 2019 17:58:00 +0100 Subject: [PATCH] Add MMU cut filament menu. --- Firmware/mmu.cpp | 28 +++++++++++++++++++++++++++ Firmware/mmu.h | 6 ++++++ Firmware/ultralcd.cpp | 45 +++++++++++++++++++++++++++++++++++++++++++ Firmware/ultralcd.h | 1 + 4 files changed, 80 insertions(+) diff --git a/Firmware/mmu.cpp b/Firmware/mmu.cpp index c77276be1..53e7458a6 100644 --- a/Firmware/mmu.cpp +++ b/Firmware/mmu.cpp @@ -297,6 +297,14 @@ void mmu_loop(void) mmu_fil_loaded = false; mmu_state = S::WaitCmd; } + else if ((mmu_cmd >= MmuCmd::K0) && (mmu_cmd <= MmuCmd::K4)) + { + const uint8_t filament = mmu_cmd - MmuCmd::K0; + DEBUG_PRINTF_P(PSTR("MMU <= 'K%d'\n"), filament); + mmu_printf_P(PSTR("K%d\n"), filament); //send eject filament + mmu_fil_loaded = false; + mmu_state = S::WaitCmd; + } else if (mmu_cmd == MmuCmd::R0) { DEBUG_PRINTF_P(PSTR("MMU <= 'R0'\n")); @@ -1337,6 +1345,26 @@ bFilamentAction=false; // NOT in "mmu_load_to_nozzle_ } } +void mmu_cut_filament(uint8_t filament_nr) +{ +bFilamentAction=false; // NOT in "mmu_load_to_nozzle_menu()" + if (degHotend0() > EXTRUDE_MINTEMP) + { + LcdUpdateDisabler disableLcdUpdate; + lcd_clear(); + lcd_set_cursor(0, 1); lcd_puts_P(_i("Cutting filament")); //// c=18 r=1 + lcd_print(" "); + lcd_print(filament_nr + 1); + mmu_filament_ramming(); + mmu_command(MmuCmd::K0 + filament_nr); + manage_response(false, false, MMU_UNLOAD_MOVE); + } + else + { + show_preheat_nozzle_warning(); + } +} + void mmu_eject_filament(uint8_t filament, bool recover) { //-// diff --git a/Firmware/mmu.h b/Firmware/mmu.h index 3b0d41860..b498a3749 100644 --- a/Firmware/mmu.h +++ b/Firmware/mmu.h @@ -52,6 +52,11 @@ enum class MmuCmd : uint_least8_t E2, E3, E4, + K0, + K1, + K2, + K3, + K4, R0, S3, W0, @@ -127,6 +132,7 @@ extern bool mmu_check_version(); extern void mmu_show_warning(); extern void lcd_mmu_load_to_nozzle(uint8_t filament_nr); extern void mmu_eject_filament(uint8_t filament, bool recover); +extern void mmu_cut_filament(uint8_t filament_nr); extern void mmu_continue_loading(); extern void mmu_filament_ramming(); extern void mmu_wait_for_heater_blocking(); diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 00c939bb6..46dd1a3ce 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -144,6 +144,7 @@ static void lcd_menu_show_sensors_state(); static void mmu_fil_eject_menu(); static void mmu_load_to_nozzle_menu(); +static void mmu_cut_filament_menu(); #if defined(TMC2130) || defined(FILAMENT_SENSOR) static void lcd_menu_fails_stats(); @@ -2407,6 +2408,9 @@ switch(eFilamentAction) case e_FILAMENT_ACTION_mmuEject: lcd_puts_P(_i("Preheating to eject")); ////MSG_ c=20 r=1 break; + case e_FILAMENT_ACTION_mmuCut: + lcd_puts_P(_i("Preheating to cut")); ////MSG_ c=20 r=1 + break; } lcd_set_cursor(0,3); lcd_puts_P(_i(">Cancel")); ////MSG_ c=20 r=1 @@ -2460,6 +2464,14 @@ else { menu_back(nLevel); menu_submenu(mmu_fil_eject_menu); break; + case e_FILAMENT_ACTION_mmuCut: + nLevel=1; + if(!bFilamentPreheatState) + nLevel++; + bFilamentAction=true; + menu_back(nLevel); + menu_submenu(mmu_cut_filament_menu); + break; } if(bBeep) Sound_MakeSound(e_SOUND_TYPE_StandardPrompt); @@ -5750,6 +5762,38 @@ static void mmu_fil_eject_menu() } } +template +static void mmu_cut_filament() +{ + menu_back(); + mmu_cut_filament(filament); +} + +static void mmu_cut_filament_menu() +{ +if(bFilamentAction) +{ + MENU_BEGIN(); + MENU_ITEM_BACK_P(_T(MSG_MAIN)); + MENU_ITEM_FUNCTION_P(_i("Cut filament 1"), mmu_cut_filament<0>); + MENU_ITEM_FUNCTION_P(_i("Cut filament 2"), mmu_cut_filament<1>); + MENU_ITEM_FUNCTION_P(_i("Cut filament 3"), mmu_cut_filament<2>); + MENU_ITEM_FUNCTION_P(_i("Cut filament 4"), mmu_cut_filament<3>); + MENU_ITEM_FUNCTION_P(_i("Cut filament 5"), mmu_cut_filament<4>); + MENU_END(); +} +else { + eFilamentAction=e_FILAMENT_ACTION_mmuCut; + bFilamentFirstRun=false; + if(target_temperature[0]>=EXTRUDE_MINTEMP) + { + bFilamentPreheatState=true; + mFilamentItem(target_temperature[0],target_temperature_bed); + } + else mFilamentMenu(); + } +} + #ifdef SNMM static void fil_unload_menu() { @@ -6222,6 +6266,7 @@ static void lcd_main_menu() //bFilamentFirstRun=true; MENU_ITEM_SUBMENU_P(_T(MSG_UNLOAD_FILAMENT), extr_unload_); MENU_ITEM_SUBMENU_P(_i("Eject filament"), mmu_fil_eject_menu); + MENU_ITEM_SUBMENU_P(_i("Cut filament"), mmu_cut_filament_menu); } else { diff --git a/Firmware/ultralcd.h b/Firmware/ultralcd.h index 4bf514d9b..c947a346d 100644 --- a/Firmware/ultralcd.h +++ b/Firmware/ultralcd.h @@ -142,6 +142,7 @@ typedef enum e_FILAMENT_ACTION_mmuLoad, e_FILAMENT_ACTION_mmuUnLoad, e_FILAMENT_ACTION_mmuEject, + e_FILAMENT_ACTION_mmuCut, } eFILAMENT_ACTION; extern eFILAMENT_ACTION eFilamentAction; extern bool bFilamentFirstRun;