]> git.tnoah.ca Git - garden.git/commitdiff
Added Button Control microcontroller
authorNoah Tomkins <noah@tnoah.ca>
Fri, 28 Aug 2026 19:58:09 +0000 (15:58 -0400)
committerNoah Tomkins <noah@tnoah.ca>
Fri, 28 Aug 2026 19:58:09 +0000 (15:58 -0400)
src/main.cpp
src/main.h

index ef823b96b276a728cef79949a22b95ebb866be51..2acdd21c49ba03ad978f04bb0c3ffee5e78c3219 100644 (file)
@@ -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!");
                }
        }
 
index c3de3be68cd588452ef0300cfe47e457204c1ce3..79ac788d19af0a8e93c79221deedc356f11a2b87 100644 (file)
@@ -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