chiark / gitweb /
Add M401 - Wait for user on LCD button press
authorDaid <daid303@gmail.com>
Sat, 19 May 2012 15:54:07 +0000 (17:54 +0200)
committerDaid <daid303@gmail.com>
Sat, 19 May 2012 15:54:07 +0000 (17:54 +0200)
Marlin/Marlin.pde
Marlin/language.h
Marlin/ultralcd.h

index c9cff67de0009032f61d43d6210436b6dcaa70d0..6d8a7b4dc8d7ed028478589f5f57985578ddc949 100644 (file)
 // M302 - Allow cold extrudes
 // M303 - PID relay autotune S<temperature> sets the target temperature. (default target temperature = 150C)
 // M400 - Finish all moves
+// M401 - Wait for user to press a button on the LCD (Only if ULTRA_LCD is enabled)
 // M500 - stores paramters in EEPROM
 // M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily).  
 // M502 - reverts to the default "factory settings".  You still need to store them in EEPROM afterwards if you want to.
@@ -596,6 +597,7 @@ void process_commands()
       while(millis()  < codenum ){
         manage_heater();
         manage_inactivity(1);
+               LCD_STATUS;
       }
       break;
     case 28: //G28 Home all Axis one at a time
@@ -1259,11 +1261,37 @@ void process_commands()
       PID_autotune(temp);
     }
     break;
-    case 400: // finish all moves
+    case 400: // M400 finish all moves
     {
       st_synchronize();
     }
     break;
+#ifdef ULTRA_LCD
+    case 401: // M401 - Wait for user button press on LCD
+    {
+      LCD_MESSAGEPGM(MSG_USERWAIT);
+      codenum = 0;
+      if(code_seen('P')) codenum = code_value(); // milliseconds to wait
+      if(code_seen('S')) codenum = code_value() * 1000; // seconds to wait
+      
+      st_synchronize();
+      previous_millis_cmd = millis();
+         if (codenum > 0)
+         {
+        codenum += millis();  // keep track of when we started waiting
+        while(millis()  < codenum && buttons == 0){
+          manage_heater();
+          manage_inactivity(1);
+               }
+      }else{
+        while(buttons == 0) {
+          manage_heater();
+          manage_inactivity(1);
+               }
+         }
+    }
+    break;
+#endif
     case 500: // Store settings in EEPROM
     {
         EEPROM_StoreSettings();
index 6fdf14995cb6b3da042e09255dd95e7639841c6d..5dfb06c2e3449665dcd1e31f2d060f99ec800f18 100644 (file)
@@ -86,6 +86,7 @@
        #define MSG_NO_CARD " No Card"
        #define MSG_SERIAL_ERROR_MENU_STRUCTURE "Something is wrong in the MenuStructure."
        #define MSG_DWELL "Sleep..."
+       #define MSG_USERWAIT "Wait for user..."
        #define MSG_NO_MOVE "No move."
        #define MSG_PART_RELEASE "Partial Release"
        #define MSG_KILLED "KILLED. "
index b01368bc14d843cab116b6f8345199a8e83470c3..c3bc94b7306ce9864f948840180007c7c00b0b29 100644 (file)
@@ -13,6 +13,7 @@
   #define LCD_UPDATE_INTERVAL 100
   #define STATUSTIMEOUT 15000
   extern LiquidCrystal lcd;
+  extern volatile char buttons=0;  //the last checked buttons in a bit array.
   
   #ifdef NEWPANEL
     #define EN_C (1<<BLEN_C)