Added Debouncer
This commit is contained in:
parent
d6b84bae70
commit
bb86029452
|
@ -16,3 +16,4 @@ lib_deps =
|
||||||
bblanchon/ArduinoJson@^6.17.2
|
bblanchon/ArduinoJson@^6.17.2
|
||||||
knolleary/PubSubClient@^2.8
|
knolleary/PubSubClient@^2.8
|
||||||
paulstoffregen/Ethernet@0.0.0-alpha+sha.9f41e8231b
|
paulstoffregen/Ethernet@0.0.0-alpha+sha.9f41e8231b
|
||||||
|
Bounce2
|
||||||
|
|
24
src/main.cpp
24
src/main.cpp
|
@ -32,6 +32,7 @@
|
||||||
#include <Ethernet.h>
|
#include <Ethernet.h>
|
||||||
#include <PubSubClient.h>
|
#include <PubSubClient.h>
|
||||||
#include <ArduinoJson.h>
|
#include <ArduinoJson.h>
|
||||||
|
#include <Bounce2.h>
|
||||||
|
|
||||||
// Update these with values suitable for your network.
|
// Update these with values suitable for your network.
|
||||||
byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xEA };
|
byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xEA };
|
||||||
|
@ -62,6 +63,12 @@ PubSubClient mqttClient(ethClient);
|
||||||
#define LIGHT_REQUEST_BUTTON_PIN 8
|
#define LIGHT_REQUEST_BUTTON_PIN 8
|
||||||
#define POSTBOX_FLAP_PIN 7
|
#define POSTBOX_FLAP_PIN 7
|
||||||
#define POSTBOX_DOOR_PIN 6
|
#define POSTBOX_DOOR_PIN 6
|
||||||
|
// Debounce intervals (ms)
|
||||||
|
#define DOOR_BELL_DEBOUNCE_ms 200
|
||||||
|
#define LIGHT_REQUEST_DEBOUNCE_ms 200
|
||||||
|
#define POSTBOX_FLAP_DEBOUNCE_ms 200
|
||||||
|
#define POSTBOX_DOOR_DEBOUNCE_ms 500
|
||||||
|
|
||||||
// Output pins
|
// Output pins
|
||||||
#define LED_PIN 13
|
#define LED_PIN 13
|
||||||
#define DOOR_BELL_BUZZER_PIN 14
|
#define DOOR_BELL_BUZZER_PIN 14
|
||||||
|
@ -76,11 +83,13 @@ struct {
|
||||||
bool isTriggered;
|
bool isTriggered;
|
||||||
const char *topic; // sends changes: trigger / re-trigger, / release
|
const char *topic; // sends changes: trigger / re-trigger, / release
|
||||||
const uint8_t triggerOutputPin;
|
const uint8_t triggerOutputPin;
|
||||||
|
Bounce debouncer;
|
||||||
|
uint16_t debounceInterval_ms;
|
||||||
} myInputs[] = {
|
} myInputs[] = {
|
||||||
{ DOOR_BELL_BUTTON_PIN, 500, 0 , false, doorBellTopic, DOOR_BELL_BUZZER_PIN },
|
{ DOOR_BELL_BUTTON_PIN, 500, 0 , false, doorBellTopic, DOOR_BELL_BUZZER_PIN, Bounce(), DOOR_BELL_DEBOUNCE_ms },
|
||||||
{ LIGHT_REQUEST_BUTTON_PIN, 500, 0 , false, doorLightRequestTopic, POSTBOX_LIGHT_PIN },
|
{ LIGHT_REQUEST_BUTTON_PIN, 500, 0 , false, doorLightRequestTopic, POSTBOX_LIGHT_PIN, Bounce(), LIGHT_REQUEST_DEBOUNCE_ms },
|
||||||
{ POSTBOX_FLAP_PIN, 1000, 0, false, postboxFlapTopic, OUTPUT_NONE },
|
{ POSTBOX_FLAP_PIN, 1000, 0, false, postboxFlapTopic, OUTPUT_NONE, Bounce(), POSTBOX_FLAP_DEBOUNCE_ms },
|
||||||
{ POSTBOX_DOOR_PIN, 1000, 0, false, postboxDoorTopic, OUTPUT_NONE }
|
{ POSTBOX_DOOR_PIN, 1000, 0, false, postboxDoorTopic, OUTPUT_NONE, Bounce(), POSTBOX_DOOR_DEBOUNCE_ms }
|
||||||
};
|
};
|
||||||
#define NUM_INPUTS (sizeof(myInputs) / sizeof(myInputs[0]))
|
#define NUM_INPUTS (sizeof(myInputs) / sizeof(myInputs[0]))
|
||||||
int ledState = LOW;
|
int ledState = LOW;
|
||||||
|
@ -247,6 +256,8 @@ void setup()
|
||||||
// setup the input and output pins
|
// setup the input and output pins
|
||||||
for (unsigned int i = 0; i < NUM_INPUTS; i++) {
|
for (unsigned int i = 0; i < NUM_INPUTS; i++) {
|
||||||
pinMode(myInputs[i].pin, INPUT_PULLUP);
|
pinMode(myInputs[i].pin, INPUT_PULLUP);
|
||||||
|
myInputs[i].debouncer.attach(myInputs[i].pin);
|
||||||
|
myInputs[i].debouncer.interval(myInputs[i].debounceInterval_ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Setup the output pins :
|
// Setup the output pins :
|
||||||
|
@ -285,8 +296,10 @@ void checkInputSignals() {
|
||||||
|
|
||||||
|
|
||||||
for (unsigned int i = 0; i < NUM_INPUTS; i++) {
|
for (unsigned int i = 0; i < NUM_INPUTS; i++) {
|
||||||
|
myInputs[i].debouncer.update();
|
||||||
if (millis()-myInputs[i].lastTrigger_ts > myInputs[i].quietAfterTriggerFor_ms) {
|
if (millis()-myInputs[i].lastTrigger_ts > myInputs[i].quietAfterTriggerFor_ms) {
|
||||||
if (!digitalRead(myInputs[i].pin)) {
|
int readValue = myInputs[i].debouncer.read();
|
||||||
|
if (!readValue) {
|
||||||
// input is triggered, compare with existing state
|
// input is triggered, compare with existing state
|
||||||
if (myInputs[i].isTriggered) {
|
if (myInputs[i].isTriggered) {
|
||||||
// was triggered as well, could send a retrigger now
|
// was triggered as well, could send a retrigger now
|
||||||
|
@ -392,4 +405,3 @@ void loop() {
|
||||||
checkOutputAutoOff();
|
checkOutputAutoOff();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue