| 
									
										
										
										
											2017-12-14 21:13:42 +01:00
										 |  |  | #include "esp_system.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const int button = 0;         //gpio to use to trigger delay
 | 
					
						
							|  |  |  | const int wdtTimeout = 3000;  //time in ms to trigger the watchdog
 | 
					
						
							|  |  |  | hw_timer_t *timer = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void IRAM_ATTR resetModule() { | 
					
						
							|  |  |  |   ets_printf("reboot\n"); | 
					
						
							| 
									
										
										
										
											2018-09-21 08:39:36 +02:00
										 |  |  |   esp_restart(); | 
					
						
							| 
									
										
										
										
											2017-12-14 21:13:42 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void setup() { | 
					
						
							|  |  |  |   Serial.begin(115200); | 
					
						
							|  |  |  |   Serial.println(); | 
					
						
							|  |  |  |   Serial.println("running setup"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   pinMode(button, INPUT_PULLUP);                    //init control pin
 | 
					
						
							|  |  |  |   timer = timerBegin(0, 80, true);                  //timer 0, div 80
 | 
					
						
							|  |  |  |   timerAttachInterrupt(timer, &resetModule, true);  //attach callback
 | 
					
						
							|  |  |  |   timerAlarmWrite(timer, wdtTimeout * 1000, false); //set time in us
 | 
					
						
							|  |  |  |   timerAlarmEnable(timer);                          //enable interrupt
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void loop() { | 
					
						
							|  |  |  |   Serial.println("running main loop"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   timerWrite(timer, 0); //reset timer (feed watchdog)
 | 
					
						
							|  |  |  |   long loopTime = millis(); | 
					
						
							|  |  |  |   //while button is pressed, delay up to 3 seconds to trigger the timer
 | 
					
						
							|  |  |  |   while (!digitalRead(button)) { | 
					
						
							|  |  |  |     Serial.println("button pressed"); | 
					
						
							|  |  |  |     delay(500); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   delay(1000); //simulate work
 | 
					
						
							|  |  |  |   loopTime = millis() - loopTime; | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |   Serial.print("loop time is = "); | 
					
						
							|  |  |  |   Serial.println(loopTime); //should be under 3000
 | 
					
						
							|  |  |  | } |