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
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"'

View File

@ -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;

View File

@ -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 *

View File

@ -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;