2
0
Fork 0

update debounce

This commit is contained in:
Siwat Sirichai 2024-06-21 23:36:28 +07:00
parent f0aa1b8d8e
commit 0713974488
4 changed files with 45 additions and 69 deletions

View File

@ -12,6 +12,6 @@
platform = espressif32 platform = espressif32
board = wt32-eth01 board = wt32-eth01
framework = arduino framework = arduino
lib_deps = siwats/ESPMegaPROR3@^2.9.0 lib_deps = siwats/ESPMegaPROR3@^2.9.3
monitor_speed = 115200 monitor_speed = 115200
build_flags = -DCORE_DEBUG_LEVEL=0 -DSW_VERSION='"cudgym-1.0.0"' -DBOARD_MODEL='"ESPMegaPRO R3.3c"' build_flags = -DCORE_DEBUG_LEVEL=0 -DSW_VERSION='"cudgym-1.0.0"' -DBOARD_MODEL='"ESPMegaPRO R3.3c"'

View File

@ -19,6 +19,8 @@ void Button::begin()
{ {
auto bindedCallback = std::bind(&Button::buttonChangedCallback, this, std::placeholders::_1, std::placeholders::_2); auto bindedCallback = std::bind(&Button::buttonChangedCallback, this, std::placeholders::_1, std::placeholders::_2);
this->input_handler_id = this->inputCard->registerCallback(bindedCallback); this->input_handler_id = this->inputCard->registerCallback(bindedCallback);
// Disable Hardware Debounce
this->inputCard->setDebounceTime(this->inputPin, 0);
} }
void Button::setMinLongPressTime(uint32_t time) void Button::setMinLongPressTime(uint32_t time)
@ -68,7 +70,7 @@ void Button::buttonChangedCallback(uint8_t pin, uint8_t value)
void Button::loop() void Button::loop()
{ {
if (this->buttonState) { if (this->buttonState) {
if (millis() - this->pressedTime > this->longPressTime) { if (millis() - this->pressedTime > this->longPressTime && !this->longPressTriggered) {
if (this->longPressCallback) { if (this->longPressCallback) {
this->longPressCallback(); this->longPressCallback();
this->longPressTriggered = true; this->longPressTriggered = true;

View File

@ -3,6 +3,8 @@
/*********************************************** /***********************************************
* Pin Definitions * * Pin Definitions *
***********************************************/ ***********************************************/
// Buttons
#define RIGHT_ON_BUTTON_PIN 0 #define RIGHT_ON_BUTTON_PIN 0
#define RIGHT_OFF_BUTTON_PIN 1 #define RIGHT_OFF_BUTTON_PIN 1
#define LEFT_ON_BUTTON_PIN 2 #define LEFT_ON_BUTTON_PIN 2
@ -10,25 +12,23 @@
#define BUTTON_SHORT_PRESS_TIME_MS 75 #define BUTTON_SHORT_PRESS_TIME_MS 75
#define BUTTON_LONG_PRESS_TIME_MS 600 #define BUTTON_LONG_PRESS_TIME_MS 600
#define FAN1_BUTTON_PIN 4 // Switches
#define FAN2_BUTTON_PIN 5 #define RIGHT_STADIUM_LIGHT_SWITCH_PIN 4
#define FAN3_BUTTON_PIN 6 #define LEFT_STADIUM_LIGHT_SWITCH_PIN 5
#define FAN4_BUTTON_PIN 7 #define GIRLS_TOILET_LIGHT_SWITCH_PIN 6
#define FAN5_BUTTON_PIN 8 #define BOYS_TOILET_LIGHT_SWITCH_PIN 7
#define PUMP_BUTTON_PIN 9 #define SWITCH_DEBOUNCE_TIME_MS 75
#define STADIUM_RIGHT_BUTTON_PIN 10
#define STADIUM_LEFT_BUTTON_PIN 11
// Output Pins
#define RIGHT_LIGHT_RELAY_PIN 0 #define RIGHT_LIGHT_RELAY_PIN 0
#define LEFT_LIGHT_RELAY_PIN 1 #define LEFT_LIGHT_RELAY_PIN 1
#define FAN1_RELAY_PIN 2 #define RIGHT_STADIUM_LIGHT_RELAY_PIN 2
#define FAN2_RELAY_PIN 3 #define LEFT_STADIUM_LIGHT_RELAY_PIN 3
#define FAN3_RELAY_PIN 4 #define RIGHT_FAN_RELAY_PIN 4
#define FAN4_RELAY_PIN 5 #define LEFT_FAN_RELAY_PIN 5
#define FAN5_RELAY_PIN 6 #define GIRLS_TOILET_LIGHT_RELAY_PIN 6
#define PUMP_RELAY_PIN 7 #define BOYS_TOILET_LIGHT_RELAY_PIN 7
#define STADIUM_RIGHT_LIGHT_RELAY_PIN 8
#define STADIUM_LEFT_LIGHT_RELAY_PIN 9
/*********************************************** /***********************************************
* Display Configuration * * Display Configuration *

View File

@ -26,6 +26,11 @@ void setup()
// Initialize the ESPMegaPRO // Initialize the ESPMegaPRO
ESP_LOGV("CUD IoT OS", "Initializing ESPMegaPRO"); ESP_LOGV("CUD IoT OS", "Initializing ESPMegaPRO");
espmega.begin(); 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 // Initialize IoT Modules
ESP_LOGV("CUD IoT OS", "Initializing IoT Modules"); ESP_LOGV("CUD IoT OS", "Initializing IoT Modules");
espmega.setTimezone("ICT-7"); espmega.setTimezone("ICT-7");
@ -74,14 +79,12 @@ void button_init()
rightOnButton.setShortPressCallback([]() rightOnButton.setShortPressCallback([]()
{ {
// Turn on right light // Turn on right light
espmega.outputs.digitalWrite(RIGHT_LIGHT_RELAY_PIN, HIGH); espmega.outputs.digitalWrite(RIGHT_LIGHT_RELAY_PIN, HIGH); });
});
rightOnButton.setLongPressCallback([]() rightOnButton.setLongPressCallback([]()
{ {
// Turn on both lights // Turn on both lights
espmega.outputs.digitalWrite(RIGHT_LIGHT_RELAY_PIN, HIGH); 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(); rightOnButton.begin();
// Right Off Button // Right Off Button
@ -90,14 +93,12 @@ void button_init()
rightOffButton.setShortPressCallback([]() rightOffButton.setShortPressCallback([]()
{ {
// Turn off right light // Turn off right light
espmega.outputs.digitalWrite(RIGHT_LIGHT_RELAY_PIN, LOW); espmega.outputs.digitalWrite(RIGHT_LIGHT_RELAY_PIN, LOW); });
});
rightOffButton.setLongPressCallback([]() rightOffButton.setLongPressCallback([]()
{ {
// Turn off both lights // Turn off both lights
espmega.outputs.digitalWrite(RIGHT_LIGHT_RELAY_PIN, LOW); 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(); rightOffButton.begin();
// Left On Button // Left On Button
@ -106,14 +107,12 @@ void button_init()
leftOnButton.setShortPressCallback([]() leftOnButton.setShortPressCallback([]()
{ {
// Turn on left light // Turn on left light
espmega.outputs.digitalWrite(LEFT_LIGHT_RELAY_PIN, HIGH); espmega.outputs.digitalWrite(LEFT_LIGHT_RELAY_PIN, HIGH); });
});
leftOnButton.setLongPressCallback([]() leftOnButton.setLongPressCallback([]()
{ {
// Turn on both lights // Turn on both lights
espmega.outputs.digitalWrite(RIGHT_LIGHT_RELAY_PIN, HIGH); 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(); leftOnButton.begin();
// Left Off Button // Left Off Button
@ -122,14 +121,12 @@ void button_init()
leftOffButton.setShortPressCallback([]() leftOffButton.setShortPressCallback([]()
{ {
// Turn off left light // Turn off left light
espmega.outputs.digitalWrite(LEFT_LIGHT_RELAY_PIN, LOW); espmega.outputs.digitalWrite(LEFT_LIGHT_RELAY_PIN, LOW); });
});
leftOffButton.setLongPressCallback([]() leftOffButton.setLongPressCallback([]()
{ {
// Turn off both lights // Turn off both lights
espmega.outputs.digitalWrite(RIGHT_LIGHT_RELAY_PIN, LOW); 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(); leftOffButton.begin();
} }
@ -140,21 +137,6 @@ void loop()
rightOnButton.loop(); rightOnButton.loop();
rightOffButton.loop(); rightOffButton.loop();
espmega.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) void send_stop_bytes(HardwareSerial &uart)
@ -168,29 +150,21 @@ void handle_input_change(uint8_t pin, bool state)
{ {
switch (pin) switch (pin)
{ {
case FAN1_BUTTON_PIN: case RIGHT_STADIUM_LIGHT_SWITCH_PIN:
espmega.outputs.digitalWrite(FAN1_RELAY_PIN, !espmega.outputs.getState(FAN1_RELAY_PIN)); espmega.outputs.digitalWrite(RIGHT_STADIUM_LIGHT_RELAY_PIN,
!espmega.outputs.getState(RIGHT_STADIUM_LIGHT_RELAY_PIN));
break; break;
case FAN2_BUTTON_PIN: case LEFT_STADIUM_LIGHT_SWITCH_PIN:
espmega.outputs.digitalWrite(FAN2_RELAY_PIN, !espmega.outputs.getState(FAN2_RELAY_PIN)); espmega.outputs.digitalWrite(LEFT_STADIUM_LIGHT_RELAY_PIN,
!espmega.outputs.getState(LEFT_STADIUM_LIGHT_RELAY_PIN));
break; break;
case FAN3_BUTTON_PIN: case GIRLS_TOILET_LIGHT_SWITCH_PIN:
espmega.outputs.digitalWrite(FAN3_RELAY_PIN, !espmega.outputs.getState(FAN3_RELAY_PIN)); espmega.outputs.digitalWrite(GIRLS_TOILET_LIGHT_RELAY_PIN,
!espmega.outputs.getState(GIRLS_TOILET_LIGHT_RELAY_PIN));
break; break;
case FAN4_BUTTON_PIN: case BOYS_TOILET_LIGHT_SWITCH_PIN:
espmega.outputs.digitalWrite(FAN4_RELAY_PIN, !espmega.outputs.getState(FAN4_RELAY_PIN)); espmega.outputs.digitalWrite(BOYS_TOILET_LIGHT_RELAY_PIN,
break; !espmega.outputs.getState(BOYS_TOILET_LIGHT_RELAY_PIN));
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));
break; break;
default: default:
break; break;