diff --git a/platformio.ini b/platformio.ini index d8b0115..8b9702c 100644 --- a/platformio.ini +++ b/platformio.ini @@ -12,6 +12,6 @@ platform = espressif32 board = wt32-eth01 framework = arduino -lib_deps = siwats/ESPMegaPROR3@^2.9.0 +lib_deps = siwats/ESPMegaPROR3@^2.9.3 monitor_speed = 115200 build_flags = -DCORE_DEBUG_LEVEL=0 -DSW_VERSION='"cudgym-1.0.0"' -DBOARD_MODEL='"ESPMegaPRO R3.3c"' \ No newline at end of file diff --git a/src/button.cpp b/src/button.cpp index 6f1374a..5f92f11 100644 --- a/src/button.cpp +++ b/src/button.cpp @@ -19,6 +19,8 @@ void Button::begin() { auto bindedCallback = std::bind(&Button::buttonChangedCallback, this, std::placeholders::_1, std::placeholders::_2); this->input_handler_id = this->inputCard->registerCallback(bindedCallback); + // Disable Hardware Debounce + this->inputCard->setDebounceTime(this->inputPin, 0); } void Button::setMinLongPressTime(uint32_t time) @@ -68,7 +70,7 @@ void Button::buttonChangedCallback(uint8_t pin, uint8_t value) void Button::loop() { if (this->buttonState) { - if (millis() - this->pressedTime > this->longPressTime) { + if (millis() - this->pressedTime > this->longPressTime && !this->longPressTriggered) { if (this->longPressCallback) { this->longPressCallback(); this->longPressTriggered = true; diff --git a/src/config.hpp b/src/config.hpp index 1f74113..ff8f991 100644 --- a/src/config.hpp +++ b/src/config.hpp @@ -3,6 +3,8 @@ /*********************************************** * Pin Definitions * ***********************************************/ + +// Buttons #define RIGHT_ON_BUTTON_PIN 0 #define RIGHT_OFF_BUTTON_PIN 1 #define LEFT_ON_BUTTON_PIN 2 @@ -10,25 +12,23 @@ #define BUTTON_SHORT_PRESS_TIME_MS 75 #define BUTTON_LONG_PRESS_TIME_MS 600 -#define FAN1_BUTTON_PIN 4 -#define FAN2_BUTTON_PIN 5 -#define FAN3_BUTTON_PIN 6 -#define FAN4_BUTTON_PIN 7 -#define FAN5_BUTTON_PIN 8 -#define PUMP_BUTTON_PIN 9 -#define STADIUM_RIGHT_BUTTON_PIN 10 -#define STADIUM_LEFT_BUTTON_PIN 11 +// Switches +#define RIGHT_STADIUM_LIGHT_SWITCH_PIN 4 +#define LEFT_STADIUM_LIGHT_SWITCH_PIN 5 +#define GIRLS_TOILET_LIGHT_SWITCH_PIN 6 +#define BOYS_TOILET_LIGHT_SWITCH_PIN 7 +#define SWITCH_DEBOUNCE_TIME_MS 75 +// Output Pins #define RIGHT_LIGHT_RELAY_PIN 0 #define LEFT_LIGHT_RELAY_PIN 1 -#define FAN1_RELAY_PIN 2 -#define FAN2_RELAY_PIN 3 -#define FAN3_RELAY_PIN 4 -#define FAN4_RELAY_PIN 5 -#define FAN5_RELAY_PIN 6 -#define PUMP_RELAY_PIN 7 -#define STADIUM_RIGHT_LIGHT_RELAY_PIN 8 -#define STADIUM_LEFT_LIGHT_RELAY_PIN 9 +#define RIGHT_STADIUM_LIGHT_RELAY_PIN 2 +#define LEFT_STADIUM_LIGHT_RELAY_PIN 3 +#define RIGHT_FAN_RELAY_PIN 4 +#define LEFT_FAN_RELAY_PIN 5 +#define GIRLS_TOILET_LIGHT_RELAY_PIN 6 +#define BOYS_TOILET_LIGHT_RELAY_PIN 7 + /*********************************************** * Display Configuration * diff --git a/src/main.cpp b/src/main.cpp index a58a4d4..6ff7173 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -26,6 +26,11 @@ void setup() // Initialize the ESPMegaPRO ESP_LOGV("CUD IoT OS", "Initializing ESPMegaPRO"); espmega.begin(); + espmega.inputs.preloadInputBuffer(); + espmega.inputs.setDebounceTime(RIGHT_STADIUM_LIGHT_SWITCH_PIN, SWITCH_DEBOUNCE_TIME_MS); + espmega.inputs.setDebounceTime(LEFT_STADIUM_LIGHT_SWITCH_PIN, SWITCH_DEBOUNCE_TIME_MS); + espmega.inputs.setDebounceTime(GIRLS_TOILET_LIGHT_SWITCH_PIN, SWITCH_DEBOUNCE_TIME_MS); + espmega.inputs.setDebounceTime(BOYS_TOILET_LIGHT_SWITCH_PIN, SWITCH_DEBOUNCE_TIME_MS); // Initialize IoT Modules ESP_LOGV("CUD IoT OS", "Initializing IoT Modules"); espmega.setTimezone("ICT-7"); @@ -74,14 +79,12 @@ void button_init() rightOnButton.setShortPressCallback([]() { // Turn on right light - espmega.outputs.digitalWrite(RIGHT_LIGHT_RELAY_PIN, HIGH); - }); + espmega.outputs.digitalWrite(RIGHT_LIGHT_RELAY_PIN, HIGH); }); rightOnButton.setLongPressCallback([]() { // Turn on both lights espmega.outputs.digitalWrite(RIGHT_LIGHT_RELAY_PIN, HIGH); - espmega.outputs.digitalWrite(LEFT_LIGHT_RELAY_PIN, HIGH); - }); + espmega.outputs.digitalWrite(LEFT_LIGHT_RELAY_PIN, HIGH); }); rightOnButton.begin(); // Right Off Button @@ -90,14 +93,12 @@ void button_init() rightOffButton.setShortPressCallback([]() { // Turn off right light - espmega.outputs.digitalWrite(RIGHT_LIGHT_RELAY_PIN, LOW); - }); + espmega.outputs.digitalWrite(RIGHT_LIGHT_RELAY_PIN, LOW); }); rightOffButton.setLongPressCallback([]() { // Turn off both lights espmega.outputs.digitalWrite(RIGHT_LIGHT_RELAY_PIN, LOW); - espmega.outputs.digitalWrite(LEFT_LIGHT_RELAY_PIN, LOW); - }); + espmega.outputs.digitalWrite(LEFT_LIGHT_RELAY_PIN, LOW); }); rightOffButton.begin(); // Left On Button @@ -106,14 +107,12 @@ void button_init() leftOnButton.setShortPressCallback([]() { // Turn on left light - espmega.outputs.digitalWrite(LEFT_LIGHT_RELAY_PIN, HIGH); - }); + espmega.outputs.digitalWrite(LEFT_LIGHT_RELAY_PIN, HIGH); }); leftOnButton.setLongPressCallback([]() { // Turn on both lights espmega.outputs.digitalWrite(RIGHT_LIGHT_RELAY_PIN, HIGH); - espmega.outputs.digitalWrite(LEFT_LIGHT_RELAY_PIN, HIGH); - }); + espmega.outputs.digitalWrite(LEFT_LIGHT_RELAY_PIN, HIGH); }); leftOnButton.begin(); // Left Off Button @@ -122,14 +121,12 @@ void button_init() leftOffButton.setShortPressCallback([]() { // Turn off left light - espmega.outputs.digitalWrite(LEFT_LIGHT_RELAY_PIN, LOW); - }); + espmega.outputs.digitalWrite(LEFT_LIGHT_RELAY_PIN, LOW); }); leftOffButton.setLongPressCallback([]() { // Turn off both lights espmega.outputs.digitalWrite(RIGHT_LIGHT_RELAY_PIN, LOW); - espmega.outputs.digitalWrite(LEFT_LIGHT_RELAY_PIN, LOW); - }); + espmega.outputs.digitalWrite(LEFT_LIGHT_RELAY_PIN, LOW); }); leftOffButton.begin(); } @@ -140,21 +137,6 @@ void loop() rightOnButton.loop(); rightOffButton.loop(); espmega.loop(); - - // If pump is on and all fans are off, turn off pump - // Because pump pumps water to the radiator in front of the fans - // Without the fans, no cooling effect will be achieved - if (espmega.outputs.getState(PUMP_RELAY_PIN) == HIGH) - { - if (espmega.outputs.getState(FAN1_RELAY_PIN) == LOW && - espmega.outputs.getState(FAN2_RELAY_PIN) == LOW && - espmega.outputs.getState(FAN3_RELAY_PIN) == LOW && - espmega.outputs.getState(FAN4_RELAY_PIN) == LOW && - espmega.outputs.getState(FAN5_RELAY_PIN) == LOW) - { - espmega.outputs.digitalWrite(PUMP_RELAY_PIN, LOW); - } - } } void send_stop_bytes(HardwareSerial &uart) @@ -168,29 +150,21 @@ void handle_input_change(uint8_t pin, bool state) { switch (pin) { - case FAN1_BUTTON_PIN: - espmega.outputs.digitalWrite(FAN1_RELAY_PIN, !espmega.outputs.getState(FAN1_RELAY_PIN)); + case RIGHT_STADIUM_LIGHT_SWITCH_PIN: + espmega.outputs.digitalWrite(RIGHT_STADIUM_LIGHT_RELAY_PIN, + !espmega.outputs.getState(RIGHT_STADIUM_LIGHT_RELAY_PIN)); break; - case FAN2_BUTTON_PIN: - espmega.outputs.digitalWrite(FAN2_RELAY_PIN, !espmega.outputs.getState(FAN2_RELAY_PIN)); + case LEFT_STADIUM_LIGHT_SWITCH_PIN: + espmega.outputs.digitalWrite(LEFT_STADIUM_LIGHT_RELAY_PIN, + !espmega.outputs.getState(LEFT_STADIUM_LIGHT_RELAY_PIN)); break; - case FAN3_BUTTON_PIN: - espmega.outputs.digitalWrite(FAN3_RELAY_PIN, !espmega.outputs.getState(FAN3_RELAY_PIN)); + case GIRLS_TOILET_LIGHT_SWITCH_PIN: + espmega.outputs.digitalWrite(GIRLS_TOILET_LIGHT_RELAY_PIN, + !espmega.outputs.getState(GIRLS_TOILET_LIGHT_RELAY_PIN)); break; - case FAN4_BUTTON_PIN: - espmega.outputs.digitalWrite(FAN4_RELAY_PIN, !espmega.outputs.getState(FAN4_RELAY_PIN)); - break; - case FAN5_BUTTON_PIN: - espmega.outputs.digitalWrite(FAN5_RELAY_PIN, !espmega.outputs.getState(FAN5_RELAY_PIN)); - break; - case PUMP_BUTTON_PIN: - espmega.outputs.digitalWrite(PUMP_RELAY_PIN, !espmega.outputs.getState(FAN5_RELAY_PIN)); - break; - case STADIUM_RIGHT_BUTTON_PIN: - espmega.outputs.digitalWrite(STADIUM_RIGHT_LIGHT_RELAY_PIN, !espmega.outputs.getState(STADIUM_RIGHT_LIGHT_RELAY_PIN)); - break; - case STADIUM_LEFT_BUTTON_PIN: - espmega.outputs.digitalWrite(STADIUM_LEFT_LIGHT_RELAY_PIN, !espmega.outputs.getState(STADIUM_LEFT_LIGHT_RELAY_PIN)); + case BOYS_TOILET_LIGHT_SWITCH_PIN: + espmega.outputs.digitalWrite(BOYS_TOILET_LIGHT_RELAY_PIN, + !espmega.outputs.getState(BOYS_TOILET_LIGHT_RELAY_PIN)); break; default: break;