99#include " Arduino.h"
1010#include " ArduinoButton.h"
1111
12- ArduinoButton::ArduinoButton (int buttonPin) {
12+ ArduinoButton::ArduinoButton (int buttonPin, bool isActiveLow ) {
1313 setButtonPin (buttonPin);
1414 keyUpCallback = NULL ;
1515 keyDownCallback = NULL ;
@@ -19,6 +19,7 @@ ArduinoButton::ArduinoButton(int buttonPin) {
1919 setDoubleClickDelay (0 );
2020 setDebounceDelay (20 );
2121 setLastDebounceTime (millis ());
22+ setIsActiveLow (isActiveLow);
2223}
2324
2425void ArduinoButton::loop () {
@@ -32,10 +33,10 @@ void ArduinoButton::loop() {
3233 }
3334
3435 if (val == lastReading && millis () - lastDebounceTime >= debounceDelay) {
35- if (keyUpCallback != NULL && val == LOW && prevState == HIGH) keyUpCallback ();
36- if (keyDownCallback != NULL && val == HIGH && prevState == LOW) keyDownCallback ();
37- if (doubleClickCallback != NULL && val == HIGH && prevState == LOW && millis () - lastKeyDown <= doubleClickDelay) doubleClickCallback ();
38- else if (doubleClickCallback != NULL && val == HIGH && prevState == LOW) lastKeyDown = millis ();
36+ if (keyUpCallback != NULL && val == normalizeButtonState ( LOW) && prevState == normalizeButtonState ( HIGH) ) keyUpCallback ();
37+ if (keyDownCallback != NULL && val == normalizeButtonState ( HIGH) && prevState == normalizeButtonState ( LOW) ) keyDownCallback ();
38+ if (doubleClickCallback != NULL && val == normalizeButtonState ( HIGH) && prevState == normalizeButtonState ( LOW) && millis () - lastKeyDown <= doubleClickDelay) doubleClickCallback ();
39+ else if (doubleClickCallback != NULL && val == normalizeButtonState ( HIGH) && prevState == normalizeButtonState ( LOW) ) lastKeyDown = millis ();
3940 prevState = val;
4041 }
4142 else return ;
@@ -73,3 +74,11 @@ void ArduinoButton::setDebounceDelay(int delay) {
7374void ArduinoButton::setLastDebounceTime (unsigned long time) {
7475 lastDebounceTime = time;
7576}
77+
78+ void ArduinoButton::setIsActiveLow (bool activeLow) {
79+ isActiveLow = activeLow;
80+ }
81+
82+ bool ArduinoButton::normalizeButtonState (bool state) {
83+ return isActiveLow ? (state == HIGH ? LOW : HIGH) : state;
84+ }
0 commit comments