Browse Source

Merge pull request #1557 from prusa3d/PFW-795

preHeat @ filament management
PavelSindler 5 years ago
parent
commit
fcfcce5be5
6 changed files with 78 additions and 31 deletions
  1. 1 1
      Firmware/Marlin_main.cpp
  2. 14 0
      Firmware/menu.cpp
  3. 1 0
      Firmware/menu.h
  4. 9 2
      Firmware/mmu.cpp
  5. 51 27
      Firmware/ultralcd.cpp
  6. 2 1
      Firmware/ultralcd.h

+ 1 - 1
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
                               {

+ 14 - 0
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)
 {

+ 1 - 0
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);
 

+ 9 - 2
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) 
 	{
 

+ 51 - 27
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

+ 2 - 1
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();