Browse Source

M600: wait for user before unloading filament

PavelSindler 7 years ago
parent
commit
c0112f05e1
5 changed files with 60 additions and 30 deletions
  1. 48 29
      Firmware/Marlin_main.cpp
  2. 7 0
      Firmware/language_all.cpp
  3. 2 0
      Firmware/language_all.h
  4. 2 1
      Firmware/language_cz.h
  5. 1 0
      Firmware/language_en.h

+ 48 - 29
Firmware/Marlin_main.cpp

@@ -293,7 +293,7 @@ unsigned long pause_time = 0;
 unsigned long start_pause_print = millis();
 unsigned long t_fan_rising_edge = millis();
 
-unsigned long load_filament_time;
+//unsigned long load_filament_time;
 
 bool mesh_bed_leveling_flag = false;
 bool mesh_bed_run_from_menu = false;
@@ -5386,6 +5386,50 @@ case 404:  //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp
         }
         plan_buffer_line(target[X_AXIS], target[Y_AXIS], target[Z_AXIS], target[E_AXIS], FILAMENTCHANGE_XYFEED, active_extruder);
 		st_synchronize();
+		KEEPALIVE_STATE(PAUSED_FOR_USER);
+
+		uint8_t cnt = 0;
+		int counterBeep = 0;
+		lcd_display_message_fullscreen_P(MSG_PRESS_TO_UNLOAD);
+		while (!lcd_clicked()) {
+
+			cnt++;
+			manage_heater();
+			manage_inactivity(true);
+
+			/*#ifdef SNMM
+			target[E_AXIS] += 0.002;
+			plan_buffer_line(target[X_AXIS], target[Y_AXIS], target[Z_AXIS], target[E_AXIS], 500, active_extruder);
+
+			#endif // SNMM*/
+
+			if (cnt == 0)
+			{
+#if BEEPER > 0
+				if (counterBeep == 500) {
+					counterBeep = 0;
+				}
+				SET_OUTPUT(BEEPER);
+				if (counterBeep == 0) {
+					WRITE(BEEPER, HIGH);
+				}
+				if (counterBeep == 20) {
+					WRITE(BEEPER, LOW);
+				}
+				counterBeep++;
+#else
+#if !defined(LCD_FEEDBACK_FREQUENCY_HZ) || !defined(LCD_FEEDBACK_FREQUENCY_DURATION_MS)
+				lcd_buzz(1000 / 6, 100);
+#else
+				lcd_buzz(LCD_FEEDBACK_FREQUENCY_DURATION_MS, LCD_FEEDBACK_FREQUENCY_HZ);
+#endif
+#endif
+			}
+
+		}
+		WRITE(BEEPER, LOW);
+		KEEPALIVE_STATE(IN_HANDLER);
+
 		custom_message = true;
 		lcd_setstatuspgm(MSG_UNLOADING_FILAMENT);
 
@@ -5436,14 +5480,12 @@ case 404:  //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp
         delay(100);
         
         //Wait for user to insert filament
-        uint8_t cnt=0;
-        int counterBeep = 0;
         lcd_wait_interact();
-		load_filament_time = millis();
+		//load_filament_time = millis();
 		KEEPALIVE_STATE(PAUSED_FOR_USER);
         while(!lcd_clicked()){
 
-		  cnt++;
+
           manage_heater();
           manage_inactivity(true);
 
@@ -5453,31 +5495,8 @@ case 404:  //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or disp
 
 #endif // SNMM*/
 
-          if(cnt==0)
-          {
-          #if BEEPER > 0
-            if (counterBeep== 500){
-              counterBeep = 0;  
-            }
-            SET_OUTPUT(BEEPER);
-            if (counterBeep== 0){
-              WRITE(BEEPER,HIGH);
-            }			
-            if (counterBeep== 20){
-              WRITE(BEEPER,LOW);
-            }
-            counterBeep++;
-          #else
-			   #if !defined(LCD_FEEDBACK_FREQUENCY_HZ) || !defined(LCD_FEEDBACK_FREQUENCY_DURATION_MS)
-              lcd_buzz(1000/6,100);
-			   #else
-			     lcd_buzz(LCD_FEEDBACK_FREQUENCY_DURATION_MS,LCD_FEEDBACK_FREQUENCY_HZ);
-			   #endif
-          #endif
-          }
-
         }
-		WRITE(BEEPER, LOW);
+		//WRITE(BEEPER, LOW);
 		KEEPALIVE_STATE(IN_HANDLER);
 
 #ifdef SNMM

+ 7 - 0
Firmware/language_all.cpp

@@ -1281,6 +1281,13 @@ const char * const MSG_PRESS_LANG_TABLE[LANG_NUM] PROGMEM = {
 	MSG_PRESS_CZ
 };
 
+const char MSG_PRESS_TO_UNLOAD_EN[] PROGMEM = "Please press the knob to unload filament";
+const char MSG_PRESS_TO_UNLOAD_CZ[] PROGMEM = "Pro vysunuti filamentu stisknete prosim tlacitko";
+const char * const MSG_PRESS_TO_UNLOAD_LANG_TABLE[LANG_NUM] PROGMEM = {
+	MSG_PRESS_TO_UNLOAD_EN,
+	MSG_PRESS_TO_UNLOAD_CZ
+};
+
 const char MSG_PRINTER_DISCONNECTED_EN[] PROGMEM = "Printer disconnected";
 const char * const MSG_PRINTER_DISCONNECTED_LANG_TABLE[1] PROGMEM = {
 	MSG_PRINTER_DISCONNECTED_EN

+ 2 - 0
Firmware/language_all.h

@@ -436,6 +436,8 @@ extern const char* const MSG_PREPARE_FILAMENT_LANG_TABLE[LANG_NUM];
 #define MSG_PREPARE_FILAMENT LANG_TABLE_SELECT(MSG_PREPARE_FILAMENT_LANG_TABLE)
 extern const char* const MSG_PRESS_LANG_TABLE[LANG_NUM];
 #define MSG_PRESS LANG_TABLE_SELECT(MSG_PRESS_LANG_TABLE)
+extern const char* const MSG_PRESS_TO_UNLOAD_LANG_TABLE[LANG_NUM];
+#define MSG_PRESS_TO_UNLOAD LANG_TABLE_SELECT(MSG_PRESS_TO_UNLOAD_LANG_TABLE)
 extern const char* const MSG_PRINTER_DISCONNECTED_LANG_TABLE[1];
 #define MSG_PRINTER_DISCONNECTED LANG_TABLE_SELECT_EXPLICIT(MSG_PRINTER_DISCONNECTED_LANG_TABLE, 0)
 extern const char* const MSG_PRINT_ABORTED_LANG_TABLE[LANG_NUM];

+ 2 - 1
Firmware/language_cz.h

@@ -349,4 +349,5 @@
 #define MSG_STEEL_SHEET_CHECK				"Je tiskovy plat na heatbed?"
 #define MSG_REMOVE_STEEL_SHEET				"Odstrante tiskovy plat z heatbed prosim."
 #define MSG_PLACE_STEEL_SHEET				"Umistete prosim tiskovy plat na heatbed"
-#define MSG_RECOVER_PRINT					"Detekovan vypadek proudu.Obnovit tisk?"
+#define MSG_RECOVER_PRINT					"Detekovan vypadek proudu.Obnovit tisk?"
+#define MSG_PRESS_TO_UNLOAD					"Pro vysunuti filamentu stisknete prosim tlacitko"	

+ 1 - 0
Firmware/language_en.h

@@ -366,3 +366,4 @@
 #define(length=11, lines=1) MSG_INFO_FILAMENT_YDIFF				"Fil. Ydiff:"
 #define(length=17, lines=1) MSG_FANS_CHECK_ON					"Fans check   [on]"
 #define(length=17, lines=1) MSG_FANS_CHECK_OFF					"Fans check  [off]"
+#define(length=20, lines=4) MSG_PRESS_TO_UNLOAD					"Please press the knob to unload filament"