Skip to content

Commit 3c849d5

Browse files
committed
feat: add support for active-HIGH and active-LOW
1 parent 9ac2a7d commit 3c849d5

File tree

5 files changed

+31
-13
lines changed

5 files changed

+31
-13
lines changed

ArduinoButton.cpp

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
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

2425
void 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) {
7374
void 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+
}

ArduinoButton.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,10 @@ class ArduinoButton
2424
int debounceDelay;
2525
unsigned long lastDebounceTime;
2626
bool lastReading;
27+
bool isActiveLow;
28+
bool normalizeButtonState(bool state);
2729
public:
28-
ArduinoButton(int buttonPin);
30+
ArduinoButton(int buttonPin, bool isActiveLow);
2931
void loop();
3032
void onKeyUp(void (*cb)());
3133
void onKeyDown(void (*cb)());
@@ -35,6 +37,7 @@ class ArduinoButton
3537
void setDoubleClickDelay(int delay);
3638
void setDebounceDelay(int delay);
3739
void setLastDebounceTime(unsigned long time);
40+
void setIsActiveLow(bool aciveLow);
3841
};
3942

4043
#endif

examples/DoubleClick/DoubleClick.ino

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
#include <ArduinoButton.h>
22

3-
#define BUTTON_PIN 7
3+
#define BUTTON_PIN 6
44

5-
ArduinoButton button(BUTTON_PIN);
5+
// This example uses the internal pull-up resistor in the Arduino
6+
ArduinoButton button(BUTTON_PIN, true);
67

78
void setup() {
89
Serial.begin(9600);
10+
pinMode(BUTTON_PIN, INPUT_PULLUP);
911
button.onDoubleClick([]() {
1012
Serial.println("Button double click callback");
1113
});

examples/KeyDown/KeyDown.ino

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
#include <ArduinoButton.h>
22

3-
#define BUTTON_PIN 7
3+
#define BUTTON_PIN 6
44

5-
ArduinoButton button(BUTTON_PIN);
5+
// This example uses the internal pull-up resistor in the Arduino
6+
ArduinoButton button(BUTTON_PIN, true);
67

78
void setup() {
89
Serial.begin(9600);
10+
pinMode(BUTTON_PIN, INPUT_PULLUP);
911
button.onKeyDown([]() {
1012
Serial.println("Button key down callback");
1113
});

examples/KeyUp/KeyUp.ino

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
#include <ArduinoButton.h>
1+
#include "ArduinoButton.h"
22

3-
#define BUTTON_PIN 7
3+
#define BUTTON_PIN 6
44

5-
ArduinoButton button(BUTTON_PIN);
5+
// This example uses the internal pull-up resistor in the Arduino
6+
ArduinoButton button(BUTTON_PIN, true);
67

78
void setup() {
89
Serial.begin(9600);
10+
pinMode(BUTTON_PIN, INPUT_PULLUP);
911
button.onKeyUp([]() {
1012
Serial.println("Button key up callback");
1113
});

0 commit comments

Comments
 (0)