AceButton
1.4.2
An adjustable, compact, event-driven button library for Arduino.
|
Class that defines the timing parameters and event handler of an AceButton or a group of AceButton instances. More...
#include <ButtonConfig.h>
Public Types | |
typedef uint16_t | FeatureFlagType |
Type of the feature flag. More... | |
typedef void(* | EventHandler) (AceButton *button, uint8_t eventType, uint8_t buttonState) |
The event handler signature. More... | |
Public Member Functions | |
ButtonConfig () | |
Constructor. More... | |
uint16_t | getDebounceDelay () |
Milliseconds to wait for debouncing. More... | |
uint16_t | getClickDelay () |
Milliseconds to wait for a possible click. More... | |
uint16_t | getDoubleClickDelay () |
Milliseconds between the first and second click to register as a double-click. | |
uint16_t | getLongPressDelay () |
Milliseconds for a long press event. More... | |
uint16_t | getRepeatPressDelay () |
Milliseconds that a button needs to be Pressed down before the start of the sequence of RepeatPressed events. More... | |
uint16_t | getRepeatPressInterval () |
Milliseconds between two successive RepeatPressed events. | |
void | setDebounceDelay (uint16_t debounceDelay) |
Set the debounceDelay. More... | |
void | setClickDelay (uint16_t clickDelay) |
Set the clickDelay. More... | |
void | setDoubleClickDelay (uint16_t doubleClickDelay) |
Set the doubleClickDelay. More... | |
void | setLongPressDelay (uint16_t longPressDelay) |
Set the longPressDelay. More... | |
void | setRepeatPressDelay (uint16_t repeatPressDelay) |
Set the repeatPressDelay. More... | |
void | setRepeatPressInterval (uint16_t repeatPressInterval) |
Set the repeatPressInterval. More... | |
virtual unsigned long | getClock () |
Return the milliseconds of the internal clock. More... | |
virtual unsigned long | getClockMicros () |
Return the microseconds of the internal clock. More... | |
virtual int | readButton (uint8_t pin) |
Return the HIGH or LOW state of the button. More... | |
bool | isFeature (FeatureFlagType features) |
Check if the given features are enabled. More... | |
void | setFeature (FeatureFlagType features) |
Enable the given features. More... | |
void | clearFeature (FeatureFlagType features) |
Disable the given features. More... | |
EventHandler | getEventHandler () |
Return the eventHandler. More... | |
void | setEventHandler (EventHandler eventHandler) |
Install the event handler. More... | |
void | setTimingStats (TimingStats *timingStats) |
Set the timing stats object. More... | |
TimingStats * | getTimingStats () |
Get the timing stats. More... | |
Static Public Member Functions | |
static ButtonConfig * | getSystemButtonConfig () |
Return a pointer to the singleton instance of the ButtonConfig which is attached to all AceButton instances by default. | |
Static Public Attributes | |
static const uint16_t | kDebounceDelay = 20 |
Default value returned by getDebounceDelay(). More... | |
static const uint16_t | kClickDelay = 200 |
Default value returned by getClickDelay(). More... | |
static const uint16_t | kDoubleClickDelay = 400 |
Default value returned by getDoubleClickDelay(). More... | |
static const uint16_t | kLongPressDelay = 1000 |
Default value returned by getLongPressDelay(). More... | |
static const uint16_t | kRepeatPressDelay = 1000 |
Default value returned by getRepeatPressDelay(). More... | |
static const uint16_t | kRepeatPressInterval = 200 |
Default value returned by getRepeatPressInterval(). More... | |
static const FeatureFlagType | kFeatureClick = 0x01 |
Flag to activate the AceButton::kEventClicked event. More... | |
static const FeatureFlagType | kFeatureDoubleClick = 0x02 |
Flag to activate the AceButton::kEventDoubleClicked event. More... | |
static const FeatureFlagType | kFeatureLongPress = 0x04 |
Flag to activate the AceButton::kEventLongPress event. More... | |
static const FeatureFlagType | kFeatureRepeatPress = 0x08 |
Flag to activate the AceButton::kEventRepeatPressed event. More... | |
static const FeatureFlagType | kFeatureSuppressAfterClick = 0x10 |
Flag to suppress kEventReleased after a kEventClicked. More... | |
static const FeatureFlagType | kFeatureSuppressAfterDoubleClick = 0x20 |
Flag to suppress kEventReleased after a kEventDoubleClicked. More... | |
static const FeatureFlagType | kFeatureSuppressAfterLongPress = 0x40 |
Flag to suppress kEventReleased after a kEventLongPressed. More... | |
static const FeatureFlagType | kFeatureSuppressAfterRepeatPress = 0x80 |
Flag to suppress kEventReleased after a kEventRepeatPressed. More... | |
static const FeatureFlagType | kFeatureSuppressClickBeforeDoubleClick = 0x100 |
Flag to suppress kEventClicked before a kEventDoubleClicked. More... | |
static const FeatureFlagType | kFeatureSuppressAll |
Convenience flag to suppress all suppressions. More... | |
Protected Member Functions | |
virtual void | init () |
Initialize to its pristine state, except for the EventHandler which is unchanged. More... | |
Class that defines the timing parameters and event handler of an AceButton or a group of AceButton instances.
It is assumed that in many cases, a group of multiple buttons will need to be assigned the same configuration parameters. For example, various timing delays and the EventHandler. Instead of storing these parameters in each instance of AceButton (which consumes static memory), we save space by collecting them into a separate ButtonConfig class. Each AceButton instance contains a pointer to an instance of ButtonConfig, and an instance of ButtonConfig will be shared among multiple AceButtons.
Various timing parameters are given default values. They can be overridden by the user.
A single default "System" ButtonConfig instance is created automatically and can be accessed using the ButtConfig::getSystemButtonConfig() static method. For convenience and ease of use, every instance of AceButton is attached to this "System" ButtonConfig by default. The client code can override this association by attaching another ButtonConfig instance using the AceButton(ButtonConfig*) constuctor (the recommended solution) or the AceButton::setButtonConfig() method.
Definition at line 56 of file ButtonConfig.h.
typedef void(* ace_button::ButtonConfig::EventHandler) (AceButton *button, uint8_t eventType, uint8_t buttonState) |
The event handler signature.
button | pointer to the AceButton that generated the event |
eventType | the event type which trigger the call |
buttonState | the state of the button that triggered the event |
Definition at line 160 of file ButtonConfig.h.
typedef uint16_t ace_button::ButtonConfig::FeatureFlagType |
Type of the feature flag.
It used to be a uint8_t but got changed to a uint16_t when more than 8 flags were needed. Let's define a typedef to make it easier to change this in the future.
Definition at line 97 of file ButtonConfig.h.
|
inline |
Constructor.
Definition at line 164 of file ButtonConfig.h.
|
inline |
Disable the given features.
Definition at line 277 of file ButtonConfig.h.
|
inline |
Milliseconds to wait for a possible click.
Definition at line 175 of file ButtonConfig.h.
|
inlinevirtual |
Return the milliseconds of the internal clock.
Override to use something other than millis(). The return type is 'unsigned long' instead of uint16_t because that's the return type of millis().
Definition at line 246 of file ButtonConfig.h.
|
inlinevirtual |
Return the microseconds of the internal clock.
Can be overridden for testing purposes.
Definition at line 252 of file ButtonConfig.h.
|
inline |
Milliseconds to wait for debouncing.
Definition at line 172 of file ButtonConfig.h.
|
inline |
Return the eventHandler.
Definition at line 284 of file ButtonConfig.h.
|
inline |
Milliseconds for a long press event.
Definition at line 186 of file ButtonConfig.h.
|
inline |
Milliseconds that a button needs to be Pressed down before the start of the sequence of RepeatPressed events.
The first event will fire as soon as this delay has passed. Subsequent events will fire after getRepeatPressInterval() time.
Definition at line 196 of file ButtonConfig.h.
|
inline |
|
inlineprotectedvirtual |
Initialize to its pristine state, except for the EventHandler which is unchanged.
This is intended mostly for testing purposes.
Definition at line 319 of file ButtonConfig.h.
|
inline |
Check if the given features are enabled.
Definition at line 267 of file ButtonConfig.h.
|
inlinevirtual |
Return the HIGH or LOW state of the button.
Override to use something other than digitalRead(). The return type is 'int' instead of uint16_t because that's the return type of digitalRead().
Reimplemented in ace_button::EncodedButtonConfig, ace_button::Encoded8To3ButtonConfig, and ace_button::Encoded4To2ButtonConfig.
Definition at line 259 of file ButtonConfig.h.
|
inline |
Set the clickDelay.
Definition at line 213 of file ButtonConfig.h.
|
inline |
Set the debounceDelay.
Definition at line 208 of file ButtonConfig.h.
|
inline |
Set the doubleClickDelay.
Definition at line 218 of file ButtonConfig.h.
|
inline |
Install the event handler.
The event handler must be defined for the AceButton to be useful.
Definition at line 292 of file ButtonConfig.h.
|
inline |
Enable the given features.
Definition at line 272 of file ButtonConfig.h.
|
inline |
Set the longPressDelay.
Definition at line 223 of file ButtonConfig.h.
|
inline |
Set the repeatPressDelay.
Definition at line 228 of file ButtonConfig.h.
|
inline |
Set the repeatPressInterval.
Definition at line 233 of file ButtonConfig.h.
|
inline |
Set the timing stats object.
The timingStats can be nullptr.
Definition at line 299 of file ButtonConfig.h.
|
static |
Default value returned by getClickDelay().
Definition at line 76 of file ButtonConfig.h.
|
static |
Default value returned by getDebounceDelay().
Definition at line 73 of file ButtonConfig.h.
|
static |
Default value returned by getDoubleClickDelay().
Definition at line 79 of file ButtonConfig.h.
|
static |
Flag to activate the AceButton::kEventClicked event.
Definition at line 100 of file ButtonConfig.h.
|
static |
Flag to activate the AceButton::kEventDoubleClicked event.
Activating this automatically activates kEventClicked since there is no double-click without a click.
Definition at line 107 of file ButtonConfig.h.
|
static |
Flag to activate the AceButton::kEventLongPress event.
Definition at line 110 of file ButtonConfig.h.
|
static |
Flag to activate the AceButton::kEventRepeatPressed event.
Definition at line 113 of file ButtonConfig.h.
|
static |
Flag to suppress kEventReleased after a kEventClicked.
Definition at line 116 of file ButtonConfig.h.
|
static |
Flag to suppress kEventReleased after a kEventDoubleClicked.
A kEventClicked is always suppressed after a kEventDoubleClicked to prevent generating 2 double-clicks if the user performed a triple-click.
Definition at line 123 of file ButtonConfig.h.
|
static |
Flag to suppress kEventReleased after a kEventLongPressed.
Definition at line 126 of file ButtonConfig.h.
|
static |
Flag to suppress kEventReleased after a kEventRepeatPressed.
Definition at line 129 of file ButtonConfig.h.
|
static |
Convenience flag to suppress all suppressions.
Calling setFeature(kFeatureSuppressAll) suppresses all and clearFeature(kFeatureSuppressAll) clears all suppression. Note however that isFeature(kFeatureSuppressAll) currently means "is ANY feature enabled?" not "are ALL features enabled?".
Definition at line 146 of file ButtonConfig.h.
|
static |
Flag to suppress kEventClicked before a kEventDoubleClicked.
This causes the notification of a kEventClicked to be delayed until the delay time of getDoubleClickDelay() has passed so that we can determine if there was a kEventDoubleClicked.
Definition at line 137 of file ButtonConfig.h.
|
static |
Default value returned by getLongPressDelay().
Definition at line 82 of file ButtonConfig.h.
|
static |
Default value returned by getRepeatPressDelay().
Definition at line 85 of file ButtonConfig.h.
|
static |
Default value returned by getRepeatPressInterval().
Definition at line 88 of file ButtonConfig.h.