#include // Reference the ESP32 built-in serial port library #include "WS_Bluetooth.h" #include "WS_GPIO.h" #include "Arduino_DebugUtils.h" /******************************************************** Data Analysis ********************************************************/ unsigned long timers[6] = { 0, 0, 0, 0, 0, 0 }; bool isOverride = false; void SetRelay(int relay, char status) { if (status == '+') { DEBUG_INFO("Closing relay %d to HIGH for 10s", relay); TriggerRelay(relay,true); timers[relay] = millis() + 10000; } else if (status == '*') { DEBUG_INFO("Closing relay %d permanently", relay); TriggerRelay(relay,true); timers[relay] = 0; } else if (status == '-') { DEBUG_INFO("Opening Relay %d", relay); TriggerRelay(relay,false); timers[relay] = 0; } } void SetRelays(std::string value) { DEBUG_INFO("Received Command: %s",value); for (int relay=0; relay<6; relay++) { SetRelay(relay, value.length() > relay ? value[relay] : '-'); } } std::string GetRelays() { std::string result; result.reserve(6); // Reserve space for efficiency for (int relay=0; relay<6; relay++) result += RelayStatus(relay) ? '1' : '0'; return result; } int i = 0; /******************************************************** Initializing ********************************************************/ void setup() { Serial.begin(9600); Debug.timestampOn(); GPIO_Init(); Bluetooth_Init(); } /********************************************************** While **********************************************************/ void loop() { bool override = IsOverride(); if (override && !isOverride) { isOverride = true; RGB_Light(0, 60, 60); SetRelays("******"); } else if (!override && isOverride) { isOverride = false; RGB_Light(0, 0, 0); SetRelays("------"); } unsigned long ms = millis(); for (int relay=0; relay<6; relay++) { if ((timers[relay] > 0) && (timers[relay] <= ms)) SetRelay(relay,'-'); } }