Documentation updates and formatting.

Arduino 1.0 compatibility.
This commit is contained in:
Jack Christensen
2012-03-21 20:44:33 -04:00
parent baff7a8076
commit a10684701b
3 changed files with 100 additions and 75 deletions

View File

@@ -1,11 +1,11 @@
/*----------------------------------------------------------------------*
* Button.cpp -- Library for reading momentary contact switches like *
* tactile button switches. Intended for use in state machine *
* constructs. Use the read() function to read all buttons in the *
* main loop, which should execute as fast as possible, or at least *
* very frequently. *
* Arduino Button Library v1.0 *
* Jack Christensen Mar 2012 *
* *
* Jack Christensen 11May2011 *
* Library for reading momentary contact switches like tactile button *
* switches. Intended for use in state machine constructs. *
* Use the read() function to read all buttons in the main loop, *
* which should execute as fast as possible. *
* *
* This work is licensed under the Creative Commons Attribution- *
* ShareAlike 3.0 Unported License. To view a copy of this license, *
@@ -13,23 +13,30 @@
* letter to Creative Commons, 171 Second Street, Suite 300, *
* San Francisco, California, 94105, USA. *
*----------------------------------------------------------------------*/
#include "button.h"
//the constructor button(pin, puEnabled, invert, dbTime) instantiates a button object.
//pin is the Arduino pin the button is connected to.
//puEnabled enables the AVR internal pullup resistor if != 0 (can use true or false).
//invert = 0 interprets a high state as pressed, low as released.
//invert != 0 interprets a high state as released, low as pressed (can use true or false).
//dbTime is the debounce time in milliseconds.
//note that invert cannot be implied from puEnabled since an external pullup could be used.
button::button(uint8_t pin, uint8_t puEnabled, uint8_t invert, uint32_t dbTime)
#include "Button.h"
/*----------------------------------------------------------------------*
* Button(pin, puEnable, invert, dbTime) instantiates a button object. *
* pin Is the Arduino pin the button is connected to. *
* puEnable Enables the AVR internal pullup resistor if != 0 (can also *
* use true or false). *
* invert If invert == 0, interprets a high state as pressed, low as *
* released. If invert != 0, interprets a high state as *
* released, low as pressed (can also use true or false). *
* dbTime Is the debounce time in milliseconds. *
* *
* (Note that invert cannot be implied from puEnable since an external *
* pullup could be used.) *
*----------------------------------------------------------------------*/
Button::Button(uint8_t pin, uint8_t puEnable, uint8_t invert, uint32_t dbTime)
{
_pin = pin;
_puEnabled = puEnabled;
_puEnable = puEnable;
_invert = invert;
_dbTime = dbTime;
pinMode(_pin, INPUT);
if (_puEnabled != 0)
if (_puEnable != 0)
digitalWrite(_pin, HIGH); //enable pullup resistor
_state = digitalRead(_pin);
if (_invert != 0) _state = !_state;
@@ -40,9 +47,11 @@ button::button(uint8_t pin, uint8_t puEnabled, uint8_t invert, uint32_t dbTime)
_lastChange = _time;
}
//read() returns the state of the button 1 (pressed), or 0 (released),
//does debouncing, and also captures and maintains times, previous states, etc.
uint8_t button::read(void)
/*----------------------------------------------------------------------*
* read() returns the state of the button, 1==pressed, 0==released, *
* does debouncing, captures and maintains times, previous states, etc. *
*----------------------------------------------------------------------*/
uint8_t Button::read(void)
{
static uint32_t ms;
static uint8_t pinVal;
@@ -72,47 +81,58 @@ uint8_t button::read(void)
}
}
//isPressed() and isReleased() check the button state when it was last read,
//and return false (0) or true (!=0) accordingly.
//These functions do not cause the button to be read.
uint8_t button::isPressed(void)
/*----------------------------------------------------------------------*
* isPressed() and isReleased() check the button state when it was last *
* read, and return false (0) or true (!=0) accordingly. *
* These functions do not cause the button to be read. *
*----------------------------------------------------------------------*/
uint8_t Button::isPressed(void)
{
return _state == 0 ? 0 : 1;
}
uint8_t button::isReleased(void)
uint8_t Button::isReleased(void)
{
return _state == 0 ? 1 : 0;
}
//wasPressed() and wasReleased() check the button state to see if it changed
//between the last two reads and return false (0) or true (!=0) accordingly.
//These functions do not cause the button to be read.
uint8_t button::wasPressed(void)
/*----------------------------------------------------------------------*
* wasPressed() and wasReleased() check the button state to see if it *
* changed between the last two reads and return false (0) or *
* true (!=0) accordingly. *
* These functions do not cause the button to be read. *
*----------------------------------------------------------------------*/
uint8_t Button::wasPressed(void)
{
return _state && _changed;
}
uint8_t button::wasReleased(void)
uint8_t Button::wasReleased(void)
{
return !_state && _changed;
}
//pressedFor(ms) and releasedFor(ms) check to see if the button is pressed (or released),
//and has been in that state for the specified time. Returns false (0) or true (1) accordingly.
//These functions do not cause the button to be read.
uint8_t button::pressedFor(uint32_t ms)
/*----------------------------------------------------------------------*
* pressedFor(ms) and releasedFor(ms) check to see if the button is *
* pressed (or released), and has been in that state for the specified *
* time in milliseconds. Returns false (0) or true (1) accordingly. *
* These functions do not cause the button to be read. *
*----------------------------------------------------------------------*/
uint8_t Button::pressedFor(uint32_t ms)
{
return (_state == 1 && _time - _lastChange >= ms) ? 1 : 0;
}
uint8_t button::releasedFor(uint32_t ms)
uint8_t Button::releasedFor(uint32_t ms)
{
return (_state == 0 && _time - _lastChange >= ms) ? 1 : 0;
}
//lastChange() returns the time of the last state change in milliseconds.
uint32_t button::lastChange(void)
/*----------------------------------------------------------------------*
* lastChange() returns the time the button last changed state, *
* in milliseconds. *
*----------------------------------------------------------------------*/
uint32_t Button::lastChange(void)
{
return _lastChange;
}

View File

@@ -1,8 +1,8 @@
/*----------------------------------------------------------------------*
* button.h -- Library for reading momentary contact switches like *
* tactile button switches. *
* *
* Jack Christensen 11 May 2011 *
* button.h -- Library for reading momentary contact switches like *
* tactile button switches. *
* *
* Jack Christensen 11 May 2011 *
* *
* This work is licensed under the Creative Commons Attribution- *
* ShareAlike 3.0 Unported License. To view a copy of this license, *
@@ -10,31 +10,36 @@
* letter to Creative Commons, 171 Second Street, Suite 300, *
* San Francisco, California, 94105, USA. *
*----------------------------------------------------------------------*/
#ifndef button_h
#define button_h
#include "WProgram.h"
class button
#ifndef Button_h
#define Button_h
#if ARDUINO >= 100
#include <Arduino.h>
#else
#include <WProgram.h>
#endif
class Button
{
public:
button(uint8_t pin, uint8_t puEnabled, uint8_t invert, uint32_t dbTime);
uint8_t read();
uint8_t isPressed();
uint8_t isReleased();
uint8_t wasPressed();
uint8_t wasReleased();
uint8_t pressedFor(uint32_t ms);
uint8_t releasedFor(uint32_t ms);
uint32_t lastChange();
private:
uint8_t _pin; //arduino pin number
uint8_t _puEnabled; //internal pullup resistor enabled
uint8_t _invert; //if 0, interpret high state as pressed, else interpret low state as pressed
uint8_t _state; //current button state
uint8_t _lastState; //previous button state
uint8_t _changed; //state changed since last read
uint32_t _time; //time of current state (all times are in ms)
uint32_t _lastTime; //time of previous state
uint32_t _lastChange; //time of last state change
uint32_t _dbTime; //debounce time
public:
Button(uint8_t pin, uint8_t puEnable, uint8_t invert, uint32_t dbTime);
uint8_t read();
uint8_t isPressed();
uint8_t isReleased();
uint8_t wasPressed();
uint8_t wasReleased();
uint8_t pressedFor(uint32_t ms);
uint8_t releasedFor(uint32_t ms);
uint32_t lastChange();
private:
uint8_t _pin; //arduino pin number
uint8_t _puEnable; //internal pullup resistor enabled
uint8_t _invert; //if 0, interpret high state as pressed, else interpret low state as pressed
uint8_t _state; //current button state
uint8_t _lastState; //previous button state
uint8_t _changed; //state changed since last read
uint32_t _time; //time of current state (all times are in ms)
uint32_t _lastTime; //time of previous state
uint32_t _lastChange; //time of last state change
uint32_t _dbTime; //debounce time
};
#endif

View File

@@ -1,9 +1,9 @@
button KEYWORD1
read KEYWORD2
isPressed KEYWORD2
isReleased KEYWORD2
wasPressed KEYWORD2
wasReleased KEYWORD2
pressedFor KEYWORD2
releasedFor KEYWORD2
lastChange KEYWORD2
Button KEYWORD1
read KEYWORD2
isPressed KEYWORD2
isReleased KEYWORD2
wasPressed KEYWORD2
wasReleased KEYWORD2
pressedFor KEYWORD2
releasedFor KEYWORD2
lastChange KEYWORD2