From: Noah Tomkins Date: Sun, 23 Aug 2026 23:41:21 +0000 (-0400) Subject: Added beeper, fixed http timeout, fixed failsafe trigger X-Git-Url: https://git.tnoah.ca/?a=commitdiff_plain;h=6173d3afea15559fe3e3a0fa3aa79212f7f0e0bd;p=garden.git Added beeper, fixed http timeout, fixed failsafe trigger --- diff --git a/src/main.cpp b/src/main.cpp index ab39463..ef823b9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -21,10 +21,16 @@ #include "secrets.h" bool safeToRun(); -bool runWater(String override); + +void httpRunWaterSet(unsigned long runtime, String override); +void httpRunWaterHandle(); + +bool runWater(unsigned long runtime, String override); void stopWater(); void handleWaterRunning(); +void buzzer(int onTime, int offTime, int repeat); + void connectToWiFi(); void setupWebServer(); void setupBME280(); @@ -46,13 +52,17 @@ unsigned long timer_setpoint = 0; unsigned long timer_current = 0; bool waterState = false; -unsigned long loopTime = 10; // Seconds +unsigned long loopTime = 5; // Seconds int maxNTPRetry = 5; int currentNTPRetry = 0; unsigned long lastCheckedTime = 0; +//Run water from HTTP response +unsigned long httpRuntime = 0; +String httpOverride = ""; + void setup() { Serial.begin(115200); Serial.println(); @@ -62,16 +72,21 @@ void setup() { setupBME280(); timeClient.begin(); + delay(1000); timeClient.update(); last_ran = timeClient.getEpochTime(); Serial.printf("\nCurrent Time (s): %ld", last_ran); pinMode(SOAKER, OUTPUT); digitalWrite(SOAKER, LOW); + + pinMode(BUZZER, OUTPUT); + digitalWrite(BUZZER, HIGH); } void loop() { + httpRunWaterHandle(); handleWaterRunning(); delay(loopTime * 1000); @@ -106,11 +121,13 @@ bool runWater(unsigned long runtime, String override = "") { // Reset Fallback timer_current = 0; - timer_setpoint = runtime; + timer_setpoint = runtime + 20; waterState = true; digitalWrite(SOAKER, HIGH); + buzzer(100, 900, 3); + return true; } @@ -140,7 +157,8 @@ void handleWaterRunning() { if (cTime >= end_time) { stopWater(); - Serial.print("Water Finished!"); + Serial.print("\nWater Finished!"); + return; } // Fallback Timer @@ -148,9 +166,10 @@ void handleWaterRunning() { if (timer_current > timer_setpoint) { stopWater(); Serial.print("\nFAILSAFE TRIGGERED!"); + buzzer(100, 100, 10); } } else { - stopWater(); + digitalWrite(SOAKER, LOW); } } @@ -165,6 +184,36 @@ void stopWater() { end_time = 0; Serial.print("\n\nWater Stopped."); + buzzer(100, 400, 2); +} + +void buzzer(int onTime = 100, int offTime = 250, int repeat = 3) { + + for (int i = 0; i < repeat; i++) { + if (i != 0) + delay(offTime); + + digitalWrite(BUZZER, LOW); + delay(onTime); + digitalWrite(BUZZER, HIGH); + } + + digitalWrite(BUZZER, HIGH); +} + +void httpRunWaterSet(unsigned long runtime, String override) { + httpRuntime = runtime; + httpOverride = override; +} + +void httpRunWaterHandle() { + if (httpRuntime != 0) { + runWater(httpRuntime, httpOverride); + + // Reset + httpRuntime = 0; + httpOverride = ""; + } } void connectToWiFi() { @@ -241,7 +290,8 @@ void setupWebServer() { } Serial.printf("\nHTTP request to run water for %d mins.", time); - runWater(time * 60, override_pass); + request->send(201, "text/plain", "Water will run for provided mins."); + httpRunWaterSet(time * 60, override_pass); } else { request->send(400, "text/plain", "No Time Provided."); diff --git a/src/main.h b/src/main.h index f9e0023..c3de3be 100644 --- a/src/main.h +++ b/src/main.h @@ -1,11 +1,14 @@ -\// Soaker Hose Solenoid +// Soaker Hose Solenoid #define SOAKER D3 // Buttons #define BUTTON_A D0 #define BUTTON_B D5 +// Buzzer +#define BUZZER D6 + // BME280 I2C #define BME_SCL D1 #define BME_SDA D2