Control Surface main
MIDI Control Surface library for Arduino
Classes | Public Types | Public Member Functions | Static Public Member Functions | Private Attributes | Static Private Attributes | List of all members
Button Class Reference

#include <AH/Hardware/Button.hpp>

Detailed Description

A class for reading and debouncing buttons and switches.

Examples
Custom-MIDI-Output-Element-Bankable.ino, and Custom-MIDI-Output-Element.ino.

Definition at line 18 of file Button.hpp.

+ Collaboration diagram for Button:

Classes

struct  InternalState
 

Public Types

enum  State { Pressed = 0b00 , Released = 0b11 , Falling = 0b10 , Rising = 0b01 }
 An enumeration of the different states a button can be in. More...
 

Public Member Functions

 Button ()
 Construct a new Button object. More...
 
 Button (pin_t pin)
 Construct a new Button object. More...
 
void begin ()
 Initialize (enable the internal pull-up resistor). More...
 
void invert ()
 Invert the input state of this button (button pressed is HIGH instead of LOW). More...
 
State update ()
 Read the button and return its new state. More...
 
State getState () const
 Get the state of the button, without updating it. More...
 
unsigned long previousBounceTime () const
 Return the time point (in milliseconds) when the button last bounced. More...
 
unsigned long stableTime (unsigned long now) const
 Return the time (in milliseconds) that the button has been stable for, compared to the given time point. More...
 
unsigned long stableTime () const
 Return the time (in milliseconds) that the button has been stable for. More...
 

Static Public Member Functions

static FlashString_t getName (State state)
 Return the name of the state as a string. More...
 
static void setDebounceTime (unsigned long debounceTime=BUTTON_DEBOUNCE_TIME)
 Set the debounce time for all Buttons. More...
 
static unsigned long getDebounceTime ()
 Get the debounce time. More...
 

Private Attributes

pin_t pin
 
struct AH::Button::InternalState state
 

Static Private Attributes

static unsigned long debounceTime = BUTTON_DEBOUNCE_TIME
 Edit this in Settings.hpp. More...
 

Member Enumeration Documentation

◆ State

enum State

An enumeration of the different states a button can be in.

Enumerator
Pressed 

Input went from low to low (0,0)

Released 

Input went from high to high (1,1)

Falling 

Input went from high to low (1,0)

Rising 

Input went from low to high (0,1)

Definition at line 48 of file Button.hpp.

Constructor & Destructor Documentation

◆ Button() [1/2]

Button ( )
inline

Construct a new Button object.

This constructor should not be used.
It is just a way to easily create arrays of buttons, and initializing them later.

Definition at line 27 of file Button.hpp.

◆ Button() [2/2]

Button ( pin_t  pin)

Construct a new Button object.

Parameters
pinThe digital pin to read from. The internal pull-up resistor will be enabled when begin is called.

Definition at line 7 of file Button.cpp.

Member Function Documentation

◆ begin()

void begin ( )

Initialize (enable the internal pull-up resistor).

Definition at line 9 of file Button.cpp.

◆ invert()

void invert ( )

Invert the input state of this button (button pressed is HIGH instead of LOW).

Definition at line 11 of file Button.cpp.

◆ update()

Button::State update ( )

Read the button and return its new state.

The button is debounced, the debounce time can be set in Settings.hpp: BUTTON_DEBOUNCE_TIME.

Debounce time: ├────┤
Raw input:
HIGH ──────┐ ┌──────┐ ┌─┐ ┌─┐ ┌──────┐ ┌────────
LOW └──────┘ └─┘ └──────┘ └─┘ └─┘
├────┤ ├────┤ ├─┼─┼────┤ ├─┼─┼────┤ ├─┼────┤
Debounced output:
HIGH ──────┐ ┌──────┐ ┌──────────┐ ┌───
LOW └──────┘ └──────────┘ └──────┘
States:
HIGH ────────────────┐ ┌─────────────────
LOW └──────────────────┘
constexpr PinStatus_t LOW
constexpr PinStatus_t HIGH
@ Pressed
Input went from low to low (0,0)
Definition: Button.hpp:49
@ Rising
Input went from low to high (0,1)
Definition: Button.hpp:52
@ Falling
Input went from high to low (1,0)
Definition: Button.hpp:51
@ Released
Input went from high to high (1,1)
Definition: Button.hpp:50
Returns
The state of the button, either Button::Pressed, Button::Released, Button::Falling or Button::Rising.

Definition at line 13 of file Button.cpp.

◆ getState()

Button::State getState ( ) const

Get the state of the button, without updating it.

Returns the same value as the last call to update.

Returns
The state of the button, either Button::Pressed, Button::Released, Button::Falling or Button::Rising.

Definition at line 34 of file Button.cpp.

◆ getName()

FlashString_t getName ( Button::State  state)
static

Return the name of the state as a string.

Definition at line 38 of file Button.cpp.

◆ previousBounceTime()

unsigned long previousBounceTime ( ) const

Return the time point (in milliseconds) when the button last bounced.

Definition at line 48 of file Button.cpp.

◆ stableTime() [1/2]

unsigned long stableTime ( unsigned long  now) const

Return the time (in milliseconds) that the button has been stable for, compared to the given time point.

Definition at line 52 of file Button.cpp.

◆ stableTime() [2/2]

unsigned long stableTime ( ) const

Return the time (in milliseconds) that the button has been stable for.

Definition at line 56 of file Button.cpp.

◆ setDebounceTime()

void setDebounceTime ( unsigned long  debounceTime = BUTTON_DEBOUNCE_TIME)
static

Set the debounce time for all Buttons.

Note
This function affects all Button objects.
Parameters
debounceTimeThe new debounce time in milliseconds.

Definition at line 58 of file Button.cpp.

◆ getDebounceTime()

unsigned long getDebounceTime ( )
static

Get the debounce time.

Returns
The debounce time in milliseconds.
See also
setDebounceTime

Definition at line 62 of file Button.cpp.

Member Data Documentation

◆ pin

pin_t pin
private

Definition at line 125 of file Button.hpp.

◆ state

struct AH::Button::InternalState state
private

◆ debounceTime

unsigned long debounceTime = BUTTON_DEBOUNCE_TIME
staticprivate

Edit this in Settings.hpp.

See also
BUTTON_DEBOUNCE_TIME

Definition at line 140 of file Button.hpp.


The documentation for this class was generated from the following files: