#define BED_CHECK_INTERVAL 5000 //ms
-//// Experimental watchdog and minimal temp
-// The watchdog waits for the watchperiod in milliseconds whenever an M104 or M109 increases the target temperature
-// If the temperature has not increased at the end of that period, the target temperature is set to zero. It can be reset with another M104/M109
-/// CURRENTLY NOT IMPLEMENTED AND UNUSEABLE
-//#define WATCHPERIOD 5000 //5 seconds
+//// Heating sanity check:
+// This waits for the watchperiod in milliseconds whenever an M104 or M109 increases the target temperature
+// If the temperature has not increased at the end of that period, the target temperature is set to zero.
+// It can be reset with another M104/M109
+//#define WATCHPERIOD 20000 //20 seconds
// Actual temperature must be close to target for this long before M109 returns success
//#define TEMP_RESIDENCY_TIME 20 // (seconds)
#endif //PIDTEMP
#ifdef WATCHPERIOD
- static int watch_raw[3] = {-1000,-1000,-1000};
+ static int watch_oldtemp[3] = {0,0,0};
static unsigned long watchmillis = 0;
#endif //WATCHPERIOD
WRITE(HEATER_0_PIN,LOW);
}
#endif
-
+
+ #ifdef WATCHPERIOD
+ if(watchmillis && millis() - watchmillis > WATCHPERIOD){
+ if(watch_oldtemp[TEMPSENSOR_HOTEND_0] >= degHotend(active_extruder)){
+ setTargetHotend(0,active_extruder);
+ LCD_MESSAGEPGM("Heating failed");
+ SERIAL_ECHO_START;
+ SERIAL_ECHOLN("Heating failed");
+ }else{
+ watchmillis = 0;
+ }
+ }
+ #endif
+
if(millis() - previous_millis_bed_heater < BED_CHECK_INTERVAL)
return;
previous_millis_bed_heater = millis();
if(isHeatingHotend0())
{
watchmillis = max(1,millis());
- watch_raw[TEMPSENSOR_HOTEND_0] = current_raw[TEMPSENSOR_HOTEND_0];
+ watch_oldtemp[TEMPSENSOR_HOTEND_0] = degHotend(0);
}
else
{
extern float pid_setpoint ;\r
#endif\r
\r
-#ifdef WATCHPERIOD\r
- extern int watch_raw[3] ;\r
- extern unsigned long watchmillis;\r
-#endif\r
+// #ifdef WATCHPERIOD\r
+// extern int watch_raw[3] ;\r
+// extern unsigned long watchmillis;\r
+// #endif\r
\r
\r
\r