mirror of
https://github.com/KevinMidboe/Arduino.git
synced 2025-10-29 17:40:11 +00:00
63 lines
1.3 KiB
C++
Executable File
63 lines
1.3 KiB
C++
Executable File
#include "Arduino.h"
|
|
#include "PLab_PushButton.h"
|
|
|
|
#define DEBOUNCE 20 // button debouncer, how many ms to debounce, 5+ ms is usually plenty
|
|
|
|
PLab_PushButton::PLab_PushButton(int pin)
|
|
{
|
|
_pin = pin;
|
|
_pressed = 0;
|
|
justpressed = 0;
|
|
justreleased = 0;
|
|
previousstate = 0;
|
|
currentstate = 0;
|
|
lasttime = millis();
|
|
pinMode(_pin, INPUT);
|
|
}
|
|
|
|
void PLab_PushButton::update()
|
|
{
|
|
justreleased = 0;
|
|
justpressed = 0;
|
|
|
|
if ((lasttime + DEBOUNCE) > millis()) {
|
|
// not enough time has passed to debounce
|
|
return;
|
|
}
|
|
// ok we have waited DEBOUNCE milliseconds, lets reset the timer
|
|
lasttime = millis();
|
|
|
|
currentstate = digitalRead(_pin); // read the button
|
|
|
|
if (currentstate == previousstate) {
|
|
if ((_pressed == LOW) && (currentstate == LOW)) {
|
|
// just pressed
|
|
justpressed = 1;
|
|
}
|
|
else if ((_pressed == HIGH) && (currentstate == HIGH)) {
|
|
// just released
|
|
justreleased = 1;
|
|
}
|
|
_pressed = !currentstate; // remember, digital HIGH means NOT pressed
|
|
}
|
|
//Serial.println(pressed[index], DEC);
|
|
previousstate = currentstate; // keep a running tally of the buttons
|
|
}
|
|
|
|
|
|
boolean PLab_PushButton::isDown()
|
|
{
|
|
return _pressed;
|
|
}
|
|
|
|
boolean PLab_PushButton::pressed()
|
|
{
|
|
return justpressed;
|
|
}
|
|
|
|
boolean PLab_PushButton::released()
|
|
{
|
|
return justreleased;
|
|
}
|
|
|