Skip to content

Commit

Permalink
Rename library & repository from Button to JC_Button.
Browse files Browse the repository at this point in the history
  • Loading branch information
JChristensen committed May 10, 2018
1 parent 3b10b31 commit beb7a91
Show file tree
Hide file tree
Showing 7 changed files with 37 additions and 47 deletions.
2 changes: 1 addition & 1 deletion Button.cpp → JC_Button.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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. *
Expand Down
2 changes: 1 addition & 1 deletion Button.h → JC_Button.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,4 @@ class Button
uint32_t _lastChange; //time of last state change
uint32_t _dbTime; //debounce time
};
#endif
#endif
34 changes: 13 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,28 +1,20 @@
# 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:

- **SimpleOnOff**: Just turns the Arduino's pin 13 LED on and off.
- **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
Expand All @@ -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
Expand All @@ -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.
Expand All @@ -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.
Expand All @@ -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)*
Expand All @@ -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
Expand Down
13 changes: 6 additions & 7 deletions examples/LongPress/LongPress.ino
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,20 @@
* San Francisco, California, 94105, USA. *
*----------------------------------------------------------------------*/

#include <Button.h> //https://github.com/JChristensen/Button
#include <JC_Button.h> //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
Expand All @@ -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
Expand Down
13 changes: 6 additions & 7 deletions examples/SimpleOnOff/SimpleOnOff.ino
Original file line number Diff line number Diff line change
Expand Up @@ -12,26 +12,25 @@
* San Francisco, California, 94105, USA. *
*----------------------------------------------------------------------*/

#include <Button.h> //https://github.com/JChristensen/Button
#include <JC_Button.h> //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

Expand Down
14 changes: 7 additions & 7 deletions examples/UpDown/UpDown.ino
Original file line number Diff line number Diff line change
Expand Up @@ -13,22 +13,22 @@
* San Francisco, California, 94105, USA. *
*----------------------------------------------------------------------*/

#include <Button.h> //https://github.com/JChristensen/Button
#include <JC_Button.h> //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
Expand All @@ -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();
Expand Down
6 changes: 3 additions & 3 deletions library.properties
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
name=Button
version=1.0.1
name=JC_Button
version=1.0.2
author=Jack Christensen <[email protected]>
maintainer=Jack Christensen <[email protected]>
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

0 comments on commit beb7a91

Please sign in to comment.