Pārlūkot izejas kodu

Add MMU cut filament menu.

Marek Bel 6 gadi atpakaļ
vecāks
revīzija
815231bc26
4 mainītis faili ar 80 papildinājumiem un 0 dzēšanām
  1. 28 0
      Firmware/mmu.cpp
  2. 6 0
      Firmware/mmu.h
  3. 45 0
      Firmware/ultralcd.cpp
  4. 1 0
      Firmware/ultralcd.h

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

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

+ 45 - 0
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 <uint8_t filament>
+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
 	{

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