You've already forked M5StickCPlus2-UserDemo
mirror of
https://github.com/m5stack/M5StickCPlus2-UserDemo.git
synced 2026-05-20 11:06:31 -07:00
76 lines
1.3 KiB
C++
76 lines
1.3 KiB
C++
/*
|
|
Button - a small library for Arduino to handle button debouncing
|
|
|
|
MIT licensed.
|
|
*/
|
|
|
|
#include "Button.h"
|
|
#include <Arduino.h>
|
|
|
|
Button::Button(uint8_t pin, uint16_t debounce_ms)
|
|
: _pin(pin)
|
|
, _delay(debounce_ms)
|
|
, _state(HIGH)
|
|
, _ignore_until(0)
|
|
, _has_changed(false)
|
|
{
|
|
}
|
|
|
|
void Button::begin()
|
|
{
|
|
pinMode(_pin, INPUT_PULLUP);
|
|
}
|
|
|
|
//
|
|
// public methods
|
|
//
|
|
|
|
bool Button::read()
|
|
{
|
|
// ignore pin changes until after this delay time
|
|
if (_ignore_until > millis())
|
|
{
|
|
// ignore any changes during this period
|
|
}
|
|
|
|
// pin has changed
|
|
else if (digitalRead(_pin) != _state)
|
|
{
|
|
_ignore_until = millis() + _delay;
|
|
_state = !_state;
|
|
_has_changed = true;
|
|
}
|
|
|
|
return _state;
|
|
}
|
|
|
|
// has the button been toggled from on -> off, or vice versa
|
|
bool Button::toggled()
|
|
{
|
|
read();
|
|
return has_changed();
|
|
}
|
|
|
|
// mostly internal, tells you if a button has changed after calling the read() function
|
|
bool Button::has_changed()
|
|
{
|
|
if (_has_changed)
|
|
{
|
|
_has_changed = false;
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// has the button gone from off -> on
|
|
bool Button::pressed()
|
|
{
|
|
return (read() == PRESSED && has_changed());
|
|
}
|
|
|
|
// has the button gone from on -> off
|
|
bool Button::released()
|
|
{
|
|
return (read() == RELEASED && has_changed());
|
|
}
|