From de55ad790ea253bfcff7fa2ef2c97adfba49b274 Mon Sep 17 00:00:00 2001 From: Noah Tomkins Date: Fri, 28 Aug 2026 15:58:09 -0400 Subject: [PATCH] Added Button Control --- src/main.cpp | 46 +++++++++++++++++++++++++++++++++++++++++++++- src/main.h | 6 ++++-- 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index ef823b9..2acdd21 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -31,6 +31,8 @@ void handleWaterRunning(); void buzzer(int onTime, int offTime, int repeat); +void checkButtons(); + void connectToWiFi(); void setupWebServer(); void setupBME280(); @@ -52,7 +54,7 @@ unsigned long timer_setpoint = 0; unsigned long timer_current = 0; bool waterState = false; -unsigned long loopTime = 5; // Seconds +unsigned long loopTime = 1; // Seconds int maxNTPRetry = 5; int currentNTPRetry = 0; @@ -63,6 +65,11 @@ unsigned long lastCheckedTime = 0; unsigned long httpRuntime = 0; String httpOverride = ""; +// Buttons +int button_a_state = LOW; +unsigned long button_a_time_pressed = 0; +unsigned long button_a_time_released = 0; + void setup() { Serial.begin(115200); Serial.println(); @@ -86,12 +93,47 @@ void setup() { void loop() { + checkButtons(); httpRunWaterHandle(); handleWaterRunning(); delay(loopTime * 1000); } +void checkButtons() { + int button_a = digitalRead(BUTTON_A); + int button_b = digitalRead(BUTTON_B); + + // Check state changes + if (button_a_state == HIGH && button_a == LOW) + button_a_time_pressed = millis(); + else if (button_a_state == LOW && button_a == HIGH) + button_a_time_released = millis(); + + // Duration of press + long press_a = button_a_time_pressed - button_a_time_released; + + if (press_a > PRESS_TIME) { + + if (waterState) { + stopWater(); + return; + } + + if (button_b == HIGH) { + runWater(DEFAULT_WATER_TIME, water_override); + } else { + runWater(DEFAULT_WATER_TIME, ""); + } + + button_a_time_pressed = 0; + button_a_time_released = 0; + } + + // Save State + button_a_state = button_a; +} + bool safeToRun() { timeClient.update(); unsigned long ctime = timeClient.getEpochTime(); @@ -107,6 +149,8 @@ bool runWater(unsigned long runtime, String override = "") { if (override != water_override) { Serial.print("Water Not Safe to Run. Cannot Start Water."); return false; + } else { + Serial.print("Water to start with override!"); } } diff --git a/src/main.h b/src/main.h index c3de3be..79ac788 100644 --- a/src/main.h +++ b/src/main.h @@ -1,10 +1,12 @@ // Soaker Hose Solenoid #define SOAKER D3 +#define DEFAULT_WATER_TIME 900 // seconds, 15 mins. // Buttons -#define BUTTON_A D0 -#define BUTTON_B D5 +#define BUTTON_A D5 +#define BUTTON_B D0 +#define PRESS_TIME 5000 // 5 seconds // Buzzer #define BUZZER D6 -- 2.25.1