diff --git a/Marlin/Marlin.pde b/Marlin/Marlin.pde index c9cff67de..6d8a7b4dc 100644 --- a/Marlin/Marlin.pde +++ b/Marlin/Marlin.pde @@ -107,6 +107,7 @@ // M302 - Allow cold extrudes // M303 - PID relay autotune S 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(); diff --git a/Marlin/language.h b/Marlin/language.h index 6fdf14995..5dfb06c2e 100644 --- a/Marlin/language.h +++ b/Marlin/language.h @@ -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. " diff --git a/Marlin/ultralcd.h b/Marlin/ultralcd.h index b01368bc1..c3bc94b73 100644 --- a/Marlin/ultralcd.h +++ b/Marlin/ultralcd.h @@ -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<