25 #ifndef ACE_BUTTON_ACE_BUTTON_H
26 #define ACE_BUTTON_ACE_BUTTON_H
29 #include "ButtonConfig.h"
31 namespace ace_button {
126 explicit AceButton(uint8_t pin = 0, uint8_t defaultReleasedState = HIGH,
139 uint8_t defaultReleasedState = HIGH, uint8_t
id = 0);
146 void init(uint8_t pin = 0, uint8_t defaultReleasedState = HIGH,
156 uint8_t defaultReleasedState = HIGH, uint8_t
id = 0);
160 return mButtonConfig;
169 mButtonConfig = buttonConfig;
210 uint8_t
getId()
const {
return mId; }
229 return mLastButtonState;
289 void setPin(uint8_t pin) { mPin = pin; }
298 void setDefaultReleasedState(uint8_t state);
301 void setId(uint8_t
id) { mId = id; }
306 static const uint8_t kFlagDefaultReleasedState = 0x01;
307 static const uint8_t kFlagDebouncing = 0x02;
308 static const uint8_t kFlagPressed = 0x04;
309 static const uint8_t kFlagClicked = 0x08;
310 static const uint8_t kFlagDoubleClicked = 0x10;
311 static const uint8_t kFlagLongPressed = 0x20;
312 static const uint8_t kFlagRepeatPressed = 0x40;
313 static const uint8_t kFlagClickPostponed = 0x80;
319 bool isDebouncing()
const {
320 return mFlags & kFlagDebouncing;
323 void setDebouncing() {
324 mFlags |= kFlagDebouncing;
327 void clearDebouncing() {
328 mFlags &= ~kFlagDebouncing;
332 bool isPressed()
const {
333 return mFlags & kFlagPressed;
337 mFlags |= kFlagPressed;
340 void clearPressed() {
341 mFlags &= ~kFlagPressed;
345 bool isClicked()
const {
346 return mFlags & kFlagClicked;
350 mFlags |= kFlagClicked;
353 void clearClicked() {
354 mFlags &= ~kFlagClicked;
359 bool isDoubleClicked()
const {
360 return mFlags & kFlagDoubleClicked;
363 void setDoubleClicked() {
364 mFlags |= kFlagDoubleClicked;
367 void clearDoubleClicked() {
368 mFlags &= ~kFlagDoubleClicked;
373 bool isLongPressed()
const {
374 return mFlags & kFlagLongPressed;
377 void setLongPressed() {
378 mFlags |= kFlagLongPressed;
381 void clearLongPressed() {
382 mFlags &= ~kFlagLongPressed;
386 bool isRepeatPressed()
const {
387 return mFlags & kFlagRepeatPressed;
390 void setRepeatPressed() {
391 mFlags |= kFlagRepeatPressed;
394 void clearRepeatPressed() {
395 mFlags &= ~kFlagRepeatPressed;
398 bool isClickPostponed()
const {
399 return mFlags & kFlagClickPostponed;
402 void setClickPostponed() {
403 mFlags |= kFlagClickPostponed;
406 void clearClickPostponed() {
407 mFlags &= ~kFlagClickPostponed;
415 bool checkDebounced(uint16_t now, uint8_t buttonState);
423 bool checkInitialized(uint16_t buttonState);
426 void checkEvent(uint16_t now, uint8_t buttonState);
429 void checkLongPress(uint16_t now, uint8_t buttonState);
432 void checkRepeatPress(uint16_t now, uint8_t buttonState);
435 void checkChanged(uint16_t now, uint8_t buttonState);
441 void checkReleased(uint16_t now, uint8_t buttonState);
444 void checkPressed(uint16_t now, uint8_t buttonState);
447 void checkClicked(uint16_t now);
453 void checkDoubleClicked(uint16_t now);
463 void checkOrphanedClick(uint16_t now);
469 void checkPostponedClick(uint16_t now);
523 void handleEvent(uint8_t eventType);
526 ButtonConfig* mButtonConfig;
541 uint8_t mLastButtonState;
546 uint16_t mLastDebounceTime;
547 uint16_t mLastClickTime;
548 uint16_t mLastPressTime;
549 uint16_t mLastRepeatPressTime;