]> git.tnoah.ca Git - garden.git/commitdiff
Added beeper, fixed http timeout, fixed failsafe trigger
authorNoah Tomkins <noah@tnoah.ca>
Sun, 23 Aug 2026 23:41:21 +0000 (19:41 -0400)
committerNoah Tomkins <noah@tnoah.ca>
Sun, 23 Aug 2026 23:41:21 +0000 (19:41 -0400)
src/main.cpp
src/main.h

index ab394633985c9f3c1eb12ee3ae9f92c67b97ffa1..ef823b96b276a728cef79949a22b95ebb866be51 100644 (file)
 #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.");
index f9e00236caba183dea92897ad366a92e6f2ea2ff..c3de3be68cd588452ef0300cfe47e457204c1ce3 100644 (file)
@@ -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