diff --git a/Button.cpp b/JC_Button.cpp similarity index 99% rename from Button.cpp rename to JC_Button.cpp index 81457e5..3c3666f 100644 --- a/Button.cpp +++ b/JC_Button.cpp @@ -14,7 +14,7 @@ * San Francisco, California, 94105, USA. * *----------------------------------------------------------------------*/ -#include "Button.h" +#include "JC_Button.h" /*----------------------------------------------------------------------* * Button(pin, puEnable, invert, dbTime) instantiates a button object. * diff --git a/Button.h b/JC_Button.h similarity index 99% rename from Button.h rename to JC_Button.h index 33704bb..b6ce55e 100644 --- a/Button.h +++ b/JC_Button.h @@ -39,4 +39,4 @@ class Button uint32_t _lastChange; //time of last state change uint32_t _dbTime; //debounce time }; -#endif \ No newline at end of file +#endif diff --git a/README.md b/README.md index d5e97cb..357ac93 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,12 @@ -# Arduino Button Library v1.0 -https://github.com/JChristensen/Button -ReadMe file -Jack Christensen Mar 2012 +# Arduino Button Library +https://github.com/JChristensen/JC_Button +README file ![CC BY-SA](http://mirrors.creativecommons.org/presskit/buttons/80x15/png/by-sa.png) ## Introduction The Button library is for debouncing and reading momentary contact switches like tactile button switches. "Long presses" of arbitrary length can be detected. Works well in state machine constructs. Use the read() function to read each button in the main loop, which should execute as fast as possible. -## Installation -To use the **Button** library: -- Go to https://github.com/JChristensen/Button, click the **Download ZIP** button and save the ZIP file to a convenient location on your PC. -- Uncompress the downloaded file. This will result in a folder containing all the files for the library, that has a name that includes the branch name, usually **Button-master**. -- Rename the folder to just **Button**. -- Copy the renamed folder to the Arduino sketchbook\libraries folder. - ## Examples The following example sketches are included with the **Button** library: @@ -22,7 +14,7 @@ The following example sketches are included with the **Button** library: - **LongPress**: Demonstrates detecting long and short button presses. - **UpDown**: Counts up or down, one number at a time or rapidly by holding the button down. -## Button library methods +## Button library functions ### Button(pin, puEnable, invert, dbTime) ##### Description @@ -41,7 +33,7 @@ None. Button myButton = Button(2, true, true, 25); //25 ms debounce ``` -### read(void) +### read() ##### Description Reads the button and returns a *boolean* value (*true* or *false*) to indicate whether the button is pressed. The read() function needs to execute very frequently in order for the sketch to be responsive. A good place for read() is at the top of loop(). Often, the return value from read() will not be needed if the other functions below are used. ##### Syntax @@ -55,12 +47,12 @@ None. myButton.read(); ``` -### isPressed(void) -### isReleased(void) +### isPressed() +### isReleased() ##### Description These methods check the button state at the point in time when it was last read, and return false or true accordingly. These functions **do not** cause the button to be read. ##### Syntax -`myButton.isPressed();` +`myButton.isPressed();` `myButton.isReleased();` ##### Parameters None. @@ -76,12 +68,12 @@ else { } ``` -### wasPressed(void) -### wasReleased(void) +### wasPressed() +### wasReleased() ##### Description These methods check the button state to see if it changed between the last two reads and return false or true accordingly. These functions **do not** cause the button to be read. Note that these functions may be more useful than `isPressed()` and `isReleased()` since they actually detect a **change** in the state of the button, which is usually what we want in order to cause some action. ##### Syntax -`myButton.wasPressed();` +`myButton.wasPressed();` `myButton.wasReleased();` ##### Parameters None. @@ -97,7 +89,7 @@ if ( myButton.wasPressed() ) { ... ##### Description These methods check to see if the button is pressed (or released), and has been in that state for the specified time in milliseconds. Returns false or true accordingly. These functions are useful to detect "long presses". Note that these functions **do not** cause the button to be read. ##### Syntax -`myButton.pressedFor(ms);` +`myButton.pressedFor(ms);` `myButton.releasedFor(ms);` ##### Parameters **ms:** The number of milliseconds *(unsigned long)* @@ -108,7 +100,7 @@ These methods check to see if the button is pressed (or released), and has been if ( myButton.pressedFor(1000) ) { //has the button been pressed for one second? ``` -### lastChange(void) +### lastChange() ##### Description Under certain circumstances, it may be useful to know when a button last changed state. lastChange() returns the time the button last changed state, in milliseconds (the value is derived from the Arduino millis() function). ##### Syntax diff --git a/examples/LongPress/LongPress.ino b/examples/LongPress/LongPress.ino index 1f51b56..45114d1 100644 --- a/examples/LongPress/LongPress.ino +++ b/examples/LongPress/LongPress.ino @@ -15,21 +15,20 @@ * San Francisco, California, 94105, USA. * *----------------------------------------------------------------------*/ -#include //https://github.com/JChristensen/Button +#include //https://github.com/JChristensen/JC_Button -#define BUTTON_PIN 2 //Connect a tactile button switch (or something similar) - //from Arduino pin 2 to ground. +#define BUTTON_PIN 7 //Connect a tactile button switch (or something similar) from this pin to ground. #define PULLUP true //To keep things simple, we use the Arduino's internal pullup resistor. #define INVERT true //Since the pullup resistor will keep the pin high unless the //switch is closed, this is negative logic, i.e. a high state //means the button is NOT pressed. (Assuming a normally open switch.) -#define DEBOUNCE_MS 20 //A debounce time of 20 milliseconds usually works well for tactile button switches. +#define DEBOUNCE_MS 25 //A debounce time of 20 milliseconds usually works well for tactile button switches. #define LED_PIN 13 //The standard Arduino "Pin 13" LED. #define LONG_PRESS 1000 //We define a "long press" to be 1000 milliseconds. #define BLINK_INTERVAL 100 //In the BLINK state, switch the LED every 100 milliseconds. -Button myBtn(BUTTON_PIN, PULLUP, INVERT, DEBOUNCE_MS); //Declare the button +Button myBtn(BUTTON_PIN, PULLUP, INVERT, DEBOUNCE_MS); //Define the button //The list of possible states for the state machine. This state machine has a fixed //sequence of states, i.e. ONOFF --> TO_BLINK --> BLINK --> TO_ONOFF --> ONOFF @@ -41,12 +40,12 @@ boolean ledState; //The current LED status unsigned long ms; //The current time from millis() unsigned long msLast; //The last time the LED was switched -void setup(void) +void setup() { pinMode(LED_PIN, OUTPUT); //Set the LED pin as an output } -void loop(void) +void loop() { ms = millis(); //record the current time myBtn.read(); //Read the button diff --git a/examples/SimpleOnOff/SimpleOnOff.ino b/examples/SimpleOnOff/SimpleOnOff.ino index 81547bf..c99bfd2 100644 --- a/examples/SimpleOnOff/SimpleOnOff.ino +++ b/examples/SimpleOnOff/SimpleOnOff.ino @@ -12,26 +12,25 @@ * San Francisco, California, 94105, USA. * *----------------------------------------------------------------------*/ -#include //https://github.com/JChristensen/Button +#include //https://github.com/JChristensen/JC_Button -#define BUTTON_PIN 2 //Connect a tactile button switch (or something similar) - //from Arduino pin 2 to ground. +#define BUTTON_PIN 7 //Connect a tactile button switch (or something similar) from this pin to ground. #define PULLUP true //To keep things simple, we use the Arduino's internal pullup resistor. #define INVERT true //Since the pullup resistor will keep the pin high unless the //switch is closed, this is negative logic, i.e. a high state //means the button is NOT pressed. (Assuming a normally open switch.) -#define DEBOUNCE_MS 20 //A debounce time of 20 milliseconds usually works well for tactile button switches. +#define DEBOUNCE_MS 25 //A debounce time of 25 milliseconds usually works well for tactile button switches. #define LED_PIN 13 //The standard Arduino "Pin 13" LED -Button myBtn(BUTTON_PIN, PULLUP, INVERT, DEBOUNCE_MS); //Declare the button +Button myBtn(BUTTON_PIN, PULLUP, INVERT, DEBOUNCE_MS); //Define the button boolean ledState; //A variable that keeps the current LED status -void setup(void) +void setup() { pinMode(LED_PIN, OUTPUT); //Set the LED pin as an output } -void loop(void) +void loop() { myBtn.read(); //Read the button diff --git a/examples/UpDown/UpDown.ino b/examples/UpDown/UpDown.ino index 80cf4b7..4565bfd 100644 --- a/examples/UpDown/UpDown.ino +++ b/examples/UpDown/UpDown.ino @@ -13,22 +13,22 @@ * San Francisco, California, 94105, USA. * *----------------------------------------------------------------------*/ -#include //https://github.com/JChristensen/Button +#include //https://github.com/JChristensen/JC_Button -#define DN_PIN 2 //Connect two tactile button switches (or something similar) -#define UP_PIN 3 //from Arduino pin 2 to ground and from pin 3 to ground. +#define DN_PIN 7 //Connect two tactile button switches (or something similar) +#define UP_PIN 8 //from Arduino pin 7 to ground and from pin 8 to ground. #define PULLUP true //To keep things simple, we use the Arduino's internal pullup resistor. #define INVERT true //Since the pullup resistor will keep the pin high unless the //switch is closed, this is negative logic, i.e. a high state //means the button is NOT pressed. (Assuming a normally open switch.) -#define DEBOUNCE_MS 20 //A debounce time of 20 milliseconds usually works well for tactile button switches. +#define DEBOUNCE_MS 25 //A debounce time of 20 milliseconds usually works well for tactile button switches. #define REPEAT_FIRST 500 //ms required before repeating on long press #define REPEAT_INCR 100 //repeat interval for long press #define MIN_COUNT 0 #define MAX_COUNT 59 -Button btnUP(UP_PIN, PULLUP, INVERT, DEBOUNCE_MS); //Declare the buttons +Button btnUP(UP_PIN, PULLUP, INVERT, DEBOUNCE_MS); //Define the buttons Button btnDN(DN_PIN, PULLUP, INVERT, DEBOUNCE_MS); enum {WAIT, INCR, DECR}; //The possible states for the state machine @@ -37,12 +37,12 @@ int count; //The number that is adjusted int lastCount = -1; //Previous value of count (initialized to ensure it's different when the sketch starts) unsigned long rpt = REPEAT_FIRST; //A variable time that is used to drive the repeats for long presses -void setup(void) +void setup() { Serial.begin(115200); } -void loop(void) +void loop() { btnUP.read(); //read the buttons btnDN.read(); diff --git a/library.properties b/library.properties index 99efd11..8ce3126 100644 --- a/library.properties +++ b/library.properties @@ -1,9 +1,9 @@ -name=Button -version=1.0.1 +name=JC_Button +version=1.0.2 author=Jack Christensen maintainer=Jack Christensen sentence=Arduino library to debounce button switches, detect presses, releases, and long presses. paragraph=The Button library is for debouncing and reading momentary contact switches like tactile button switches. "Long presses" of arbitrary length can be detected. Works well in state machine constructs. Use the read() function to read each button in the main loop, which should execute as fast as possible. category=Signal Input/Output -url=https://github.com/JChristensen/Button +url=https://github.com/JChristensen/JC_Button architectures=avr