diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 8511a83f1..fc53b2049 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -7507,7 +7507,7 @@ void manage_inactivity(bool ignore_stepper_queue/*=false*/) //default argument s if(target_temperature[0]>=EXTRUDE_MINTEMP) { bFilamentPreheatState=true; - mFilamentItem(target_temperature[0]); + mFilamentItem(target_temperature[0],target_temperature_bed); } else { diff --git a/Firmware/menu.cpp b/Firmware/menu.cpp index eef792952..f6bc6055b 100644 --- a/Firmware/menu.cpp +++ b/Firmware/menu.cpp @@ -85,6 +85,19 @@ void menu_end(void) } } +//-// +void menu_back(uint8_t nLevel) +{ + menu_depth = ((menu_depth > nLevel) ? (menu_depth - nLevel) : 0); + menu_goto(menu_stack[menu_depth].menu, menu_stack[menu_depth].position, true, true); +} + +void menu_back(void) +{ +menu_back(1); +} + +/* void menu_back(void) { if (menu_depth > 0) @@ -93,6 +106,7 @@ void menu_back(void) menu_goto(menu_stack[menu_depth].menu, menu_stack[menu_depth].position, true, true); } } +*/ static void menu_back_no_reset(void) { diff --git a/Firmware/menu.h b/Firmware/menu.h index 73e4925a6..efe2220c4 100644 --- a/Firmware/menu.h +++ b/Firmware/menu.h @@ -54,6 +54,7 @@ void menu_start(void); extern void menu_end(void); extern void menu_back(void); +extern void menu_back(uint8_t nLevel); extern void menu_back_if_clicked(void); diff --git a/Firmware/mmu.cpp b/Firmware/mmu.cpp index 8dfef148e..5e1e5471a 100644 --- a/Firmware/mmu.cpp +++ b/Firmware/mmu.cpp @@ -1030,8 +1030,11 @@ void extr_unload() uint8_t SilentMode = eeprom_read_byte((uint8_t*)EEPROM_SILENT); #endif - if (degHotend0() > EXTRUDE_MINTEMP) +//-// if (degHotend0() > EXTRUDE_MINTEMP) +//if(current_temperature[0]>(target_temperature[0]*0.95)) +if(bFilamentAction) { +bFilamentAction=false; #ifndef SNMM st_synchronize(); @@ -1109,7 +1112,7 @@ void extr_unload() bFilamentFirstRun=false; if(target_temperature[0]>=EXTRUDE_MINTEMP) { bFilamentPreheatState=true; - mFilamentItem(target_temperature[0]); + mFilamentItem(target_temperature[0],target_temperature_bed); } else menu_submenu(mFilamentMenu); } @@ -1340,6 +1343,8 @@ void mmu_show_warning() void lcd_mmu_load_to_nozzle(uint8_t filament_nr) { +//-// +bFilamentAction=false; if (degHotend0() > EXTRUDE_MINTEMP) { tmp_extruder = filament_nr; @@ -1371,6 +1376,8 @@ void lcd_mmu_load_to_nozzle(uint8_t filament_nr) void mmu_eject_filament(uint8_t filament, bool recover) { +//-// +bFilamentAction=false; if (filament < 5) { diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index c7df6b66d..93651434e 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -2306,6 +2306,7 @@ void lcd_set_filament_oq_meass() eFILAMENT_ACTION eFilamentAction=e_FILAMENT_ACTION_none; // must be initialized as 'non-autoLoad' bool bFilamentFirstRun; bool bFilamentPreheatState; +bool bFilamentAction=false; static void mFilamentPrompt() { @@ -2331,8 +2332,9 @@ switch(eFilamentAction) } if(lcd_clicked()) { - menu_back(); - menu_back(); +//./ menu_back(); +//./ menu_back(); +menu_back(2); if(!bFilamentPreheatState) { menu_back(); @@ -2349,12 +2351,17 @@ if(lcd_clicked()) enquecommand_P(PSTR("M702")); // unload filament break; case e_FILAMENT_ACTION_mmuLoad: + MYSERIAL.println("mFilamentPrompt - mmuLoad"); +bFilamentAction=true; menu_submenu(mmu_load_to_nozzle_menu); break; case e_FILAMENT_ACTION_mmuUnLoad: +bFilamentAction=true; extr_unload(); break; case e_FILAMENT_ACTION_mmuEject: + MYSERIAL.println("mFilamentPrompt - mmuEject"); +bFilamentAction=true; menu_submenu(mmu_fil_eject_menu); break; } @@ -2363,13 +2370,15 @@ if(lcd_clicked()) } } -void mFilamentItem(uint16_t nTemp) +void mFilamentItem(uint16_t nTemp,uint16_t nTempBed) { -static int nTargetOld; +static int nTargetOld,nTargetBedOld; //if(bPreheatState) // not necessary nTargetOld=target_temperature[0]; + nTargetBedOld=target_temperature_bed; setTargetHotend0((float)nTemp); +setTargetBed((float)nTempBed); lcd_timeoutToStatus.stop(); lcd_set_cursor(0,0); lcdui_print_temp(LCD_STR_THERMOMETER[0],(int)degHotend(0),(int)degTargetHotend(0)); @@ -2396,14 +2405,19 @@ if(lcd_clicked()) if(!bFilamentPreheatState) { setTargetHotend0(0.0); + setTargetBed(0.0); menu_back(); } - else setTargetHotend0((float)nTargetOld); + else { + setTargetHotend0((float)nTargetOld); + setTargetBed((float)nTargetBedOld); + } menu_back(); if(eFilamentAction==e_FILAMENT_ACTION_autoLoad) eFilamentAction=e_FILAMENT_ACTION_none; // i.e. non-autoLoad } -else if(!isHeatingHotend0()) +//./else if(!isHeatingHotend0()) +else if(current_temperature[0]>(target_temperature[0]*0.95)) { menu_submenu(mFilamentPrompt); Sound_MakeSound(e_SOUND_TYPE_StandardPrompt); @@ -2413,37 +2427,37 @@ else if(!isHeatingHotend0()) static void mFilamentItem_PLA() { bFilamentPreheatState=false; -mFilamentItem(PLA_PREHEAT_HOTEND_TEMP); +mFilamentItem(PLA_PREHEAT_HOTEND_TEMP,PLA_PREHEAT_HPB_TEMP); } static void mFilamentItem_PET() { bFilamentPreheatState=false; -mFilamentItem(PET_PREHEAT_HOTEND_TEMP); +mFilamentItem(PET_PREHEAT_HOTEND_TEMP,PET_PREHEAT_HPB_TEMP); } static void mFilamentItem_ABS() { bFilamentPreheatState=false; -mFilamentItem(ABS_PREHEAT_HOTEND_TEMP); +mFilamentItem(ABS_PREHEAT_HOTEND_TEMP,ABS_PREHEAT_HPB_TEMP); } static void mFilamentItem_HIPS() { bFilamentPreheatState=false; -mFilamentItem(HIPS_PREHEAT_HOTEND_TEMP); +mFilamentItem(HIPS_PREHEAT_HOTEND_TEMP,HIPS_PREHEAT_HPB_TEMP); } static void mFilamentItem_PP() { bFilamentPreheatState=false; -mFilamentItem(PP_PREHEAT_HOTEND_TEMP); +mFilamentItem(PP_PREHEAT_HOTEND_TEMP,PP_PREHEAT_HPB_TEMP); } static void mFilamentItem_FLEX() { bFilamentPreheatState=false; -mFilamentItem(FLEX_PREHEAT_HOTEND_TEMP); +mFilamentItem(FLEX_PREHEAT_HOTEND_TEMP,FLEX_PREHEAT_HPB_TEMP); } @@ -2458,19 +2472,20 @@ void mFilamentMenu() { MENU_BEGIN(); MENU_ITEM_FUNCTION_P(_T(MSG_MAIN),mFilamentBack); -MENU_ITEM_SUBMENU_P(PSTR("PLA - " STRINGIFY(PLA_PREHEAT_HOTEND_TEMP)),mFilamentItem_PLA); -MENU_ITEM_SUBMENU_P(PSTR("PET - " STRINGIFY(PET_PREHEAT_HOTEND_TEMP)),mFilamentItem_PET); -MENU_ITEM_SUBMENU_P(PSTR("ABS - " STRINGIFY(ABS_PREHEAT_HOTEND_TEMP)),mFilamentItem_ABS); -MENU_ITEM_SUBMENU_P(PSTR("HIPS - " STRINGIFY(HIPS_PREHEAT_HOTEND_TEMP)),mFilamentItem_HIPS); -MENU_ITEM_SUBMENU_P(PSTR("PP - " STRINGIFY(PP_PREHEAT_HOTEND_TEMP)),mFilamentItem_PP); -MENU_ITEM_SUBMENU_P(PSTR("FLEX - " STRINGIFY(FLEX_PREHEAT_HOTEND_TEMP)),mFilamentItem_FLEX); +MENU_ITEM_SUBMENU_P(PSTR("PLA - " STRINGIFY(PLA_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PLA_PREHEAT_HPB_TEMP)),mFilamentItem_PLA); +MENU_ITEM_SUBMENU_P(PSTR("PET - " STRINGIFY(PET_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PET_PREHEAT_HPB_TEMP)),mFilamentItem_PET); +MENU_ITEM_SUBMENU_P(PSTR("ABS - " STRINGIFY(ABS_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(ABS_PREHEAT_HPB_TEMP)),mFilamentItem_ABS); +MENU_ITEM_SUBMENU_P(PSTR("HIPS - " STRINGIFY(HIPS_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(HIPS_PREHEAT_HPB_TEMP)),mFilamentItem_HIPS); +MENU_ITEM_SUBMENU_P(PSTR("PP - " STRINGIFY(PP_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(PP_PREHEAT_HPB_TEMP)),mFilamentItem_PP); +MENU_ITEM_SUBMENU_P(PSTR("FLEX - " STRINGIFY(FLEX_PREHEAT_HOTEND_TEMP) "/" STRINGIFY(FLEX_PREHEAT_HPB_TEMP)),mFilamentItem_FLEX); MENU_END(); } void lcd_unLoadFilament() { -if((degHotend0()>EXTRUDE_MINTEMP)&&bFilamentFirstRun) +//./if((degHotend0()>EXTRUDE_MINTEMP)&&bFilamentFirstRun) +if(0) { menu_back(); enquecommand_P(PSTR("M702")); // unload filament @@ -2481,7 +2496,7 @@ else { if(target_temperature[0]>=EXTRUDE_MINTEMP) { bFilamentPreheatState=true; - mFilamentItem(target_temperature[0]); + mFilamentItem(target_temperature[0],target_temperature_bed); } else mFilamentMenu(); } @@ -2699,7 +2714,8 @@ static void lcd_menu_AutoLoadFilament() static void lcd_LoadFilament() { - if (degHotend0() > EXTRUDE_MINTEMP) +//-// if (degHotend0() > EXTRUDE_MINTEMP) +if(0) { // menu_back(); // not necessary (see "lcd_return_to_status()" below) custom_message_type = CUSTOM_MSG_TYPE_F_LOAD; @@ -2715,7 +2731,7 @@ static void lcd_LoadFilament() if(target_temperature[0]>=EXTRUDE_MINTEMP) { bFilamentPreheatState=true; - mFilamentItem(target_temperature[0]); + mFilamentItem(target_temperature[0],target_temperature_bed); } else mFilamentMenu(); } @@ -5626,8 +5642,11 @@ static void fil_load_menu() static void mmu_load_to_nozzle_menu() { -if (degHotend0() > EXTRUDE_MINTEMP) +//-//if (degHotend0() > EXTRUDE_MINTEMP) +//if(current_temperature[0]>(target_temperature[0]*0.95)) +if(bFilamentAction) { +//../bFilamentAction=false; MENU_BEGIN(); MENU_ITEM_BACK_P(_T(MSG_MAIN)); MENU_ITEM_FUNCTION_P(_i("Load filament 1"), mmu_load_to_nozzle_0); @@ -5643,7 +5662,7 @@ else { if(target_temperature[0]>=EXTRUDE_MINTEMP) { bFilamentPreheatState=true; - mFilamentItem(target_temperature[0]); + mFilamentItem(target_temperature[0],target_temperature_bed); } else mFilamentMenu(); } @@ -5651,8 +5670,11 @@ else { static void mmu_fil_eject_menu() { -if (degHotend0() > EXTRUDE_MINTEMP) +//-//if (degHotend0() > EXTRUDE_MINTEMP) +//if(current_temperature[0]>(target_temperature[0]*0.95)) +if(bFilamentAction) { +//../bFilamentAction=false; MENU_BEGIN(); MENU_ITEM_BACK_P(_T(MSG_MAIN)); MENU_ITEM_FUNCTION_P(_i("Eject filament 1"), mmu_eject_fil_0); @@ -5663,12 +5685,13 @@ if (degHotend0() > EXTRUDE_MINTEMP) MENU_END(); } else { + MYSERIAL.println(" eject - else"); eFilamentAction=e_FILAMENT_ACTION_mmuEject; bFilamentFirstRun=false; if(target_temperature[0]>=EXTRUDE_MINTEMP) { bFilamentPreheatState=true; - mFilamentItem(target_temperature[0]); + mFilamentItem(target_temperature[0],target_temperature_bed); } else mFilamentMenu(); } @@ -6142,7 +6165,8 @@ static void lcd_main_menu() { MENU_ITEM_SUBMENU_P(_T(MSG_LOAD_FILAMENT), fil_load_menu); MENU_ITEM_SUBMENU_P(_i("Load to nozzle"), mmu_load_to_nozzle_menu); - MENU_ITEM_FUNCTION_P(_T(MSG_UNLOAD_FILAMENT), extr_unload); +//-// MENU_ITEM_FUNCTION_P(_T(MSG_UNLOAD_FILAMENT), extr_unload); + MENU_ITEM_SUBMENU_P(_T(MSG_UNLOAD_FILAMENT), extr_unload); MENU_ITEM_SUBMENU_P(_i("Eject filament"), mmu_fil_eject_menu); } else diff --git a/Firmware/ultralcd.h b/Firmware/ultralcd.h index bf3e4697b..dd1132f86 100644 --- a/Firmware/ultralcd.h +++ b/Firmware/ultralcd.h @@ -138,7 +138,8 @@ typedef enum extern eFILAMENT_ACTION eFilamentAction; extern bool bFilamentFirstRun; extern bool bFilamentPreheatState; -void mFilamentItem(uint16_t nTemp); +extern bool bFilamentAction; +void mFilamentItem(uint16_t nTemp,uint16_t nTempBed); void mFilamentMenu(); void unload_filament();