// https://www.instructables.com/id/IoT-Water-Alarm/ #include #include #include // Watchdog timer prescaler definitions for deep_sleep #define WDT_16ms 0 #define WDT_32ms 1 #define WDT_64ms 2 #define WDT_125ms 3 #define WDT_250ms 4 #define WDT_500ms 5 #define WDT_1s 6 #define WDT_2s 7 #define WDT_4s 32 #define WDT_8s 33 #define BATT_THRESHOLD 932 // battery threshold ~ 2.30 V = 932/1024*2.56*0.987(correction) #define SENSOR_THRESHOLD 102 // water sensor threshold ~10% of Vcc #define BATT_LED_PIN PB4 // battery LED pin #define ESP_EN_PIN PB1 // ESP8266 module power pin #define BUZZ_PIN PB0 // buzzer power pin #define BATT_CHECK 1< BATT_THRESHOLD) { // measure PB2 against internal ref 2.56V (page 135), blink LED blink_led(); } else { low_batt_notification(); // batteries too low, send notification armed_flag = 0; // disarm alarm } if (read_volt(SENSOR_CHECK) > SENSOR_THRESHOLD) { // measure PB3 against Vcc activate_alarm(); // activate alarm armed_flag = 0; // disarm alarm } } } return 0; // never reached } // dummy ADC interrupt routine EMPTY_INTERRUPT(ADC_vect); // dummy watchdog timer interrupt routine EMPTY_INTERRUPT(WDT_vect);