25 #ifndef ACE_BUTTON_ACE_BUTTON_H
26 #define ACE_BUTTON_ACE_BUTTON_H
29 #include "ButtonConfig.h"
31 namespace ace_button {
138 explicit AceButton(uint8_t pin = 0, uint8_t defaultReleasedState = HIGH,
151 uint8_t defaultReleasedState = HIGH, uint8_t
id = 0);
158 void init(uint8_t pin = 0, uint8_t defaultReleasedState = HIGH,
168 uint8_t defaultReleasedState = HIGH, uint8_t
id = 0);
172 return mButtonConfig;
181 mButtonConfig = buttonConfig;
222 uint8_t
getId()
const {
return mId; }
241 return mLastButtonState;
301 void setPin(uint8_t pin) { mPin = pin; }
310 void setDefaultReleasedState(uint8_t state);
313 void setId(uint8_t
id) { mId = id; }
318 static const uint8_t kFlagDefaultReleasedState = 0x01;
319 static const uint8_t kFlagDebouncing = 0x02;
320 static const uint8_t kFlagPressed = 0x04;
321 static const uint8_t kFlagClicked = 0x08;
322 static const uint8_t kFlagDoubleClicked = 0x10;
323 static const uint8_t kFlagLongPressed = 0x20;
324 static const uint8_t kFlagRepeatPressed = 0x40;
325 static const uint8_t kFlagClickPostponed = 0x80;
331 bool isDebouncing()
const {
332 return mFlags & kFlagDebouncing;
335 void setDebouncing() {
336 mFlags |= kFlagDebouncing;
339 void clearDebouncing() {
340 mFlags &= ~kFlagDebouncing;
344 bool isPressed()
const {
345 return mFlags & kFlagPressed;
349 mFlags |= kFlagPressed;
352 void clearPressed() {
353 mFlags &= ~kFlagPressed;
357 bool isClicked()
const {
358 return mFlags & kFlagClicked;
362 mFlags |= kFlagClicked;
365 void clearClicked() {
366 mFlags &= ~kFlagClicked;
371 bool isDoubleClicked()
const {
372 return mFlags & kFlagDoubleClicked;
375 void setDoubleClicked() {
376 mFlags |= kFlagDoubleClicked;
379 void clearDoubleClicked() {
380 mFlags &= ~kFlagDoubleClicked;
385 bool isLongPressed()
const {
386 return mFlags & kFlagLongPressed;
389 void setLongPressed() {
390 mFlags |= kFlagLongPressed;
393 void clearLongPressed() {
394 mFlags &= ~kFlagLongPressed;
398 bool isRepeatPressed()
const {
399 return mFlags & kFlagRepeatPressed;
402 void setRepeatPressed() {
403 mFlags |= kFlagRepeatPressed;
406 void clearRepeatPressed() {
407 mFlags &= ~kFlagRepeatPressed;
410 bool isClickPostponed()
const {
411 return mFlags & kFlagClickPostponed;
414 void setClickPostponed() {
415 mFlags |= kFlagClickPostponed;
418 void clearClickPostponed() {
419 mFlags &= ~kFlagClickPostponed;
427 bool checkDebounced(uint16_t now, uint8_t buttonState);
435 bool checkInitialized(uint16_t buttonState);
438 void checkEvent(uint16_t now, uint8_t buttonState);
441 void checkLongPress(uint16_t now, uint8_t buttonState);
444 void checkRepeatPress(uint16_t now, uint8_t buttonState);
447 void checkChanged(uint16_t now, uint8_t buttonState);
453 void checkReleased(uint16_t now, uint8_t buttonState);
456 void checkPressed(uint16_t now, uint8_t buttonState);
459 void checkClicked(uint16_t now);
465 void checkDoubleClicked(uint16_t now);
475 void checkOrphanedClick(uint16_t now);
481 void checkPostponedClick(uint16_t now);
535 void handleEvent(uint8_t eventType);
538 ButtonConfig* mButtonConfig;
553 uint8_t mLastButtonState;
558 uint16_t mLastDebounceTime;
559 uint16_t mLastClickTime;
560 uint16_t mLastPressTime;
561 uint16_t mLastRepeatPressTime;