Git Product home page Git Product logo

button's Introduction

New & Improved Arduino Button Library

by Ted Hayes, from code originally by Alexander Brevig & Tom Igoe

The Arduino Button library makes it easy to do some very common but rather tedious tasks. Usually when you interact with a button (such as a momentary switch), you mainly want to detect the state change, not just the current state. You have to do something like:

int lastState = 0;

void loop(){
	int currentState = digitalRead(11);
	if(currentState != lastState){
		// do something
	}
	lastState = currentState;
}

It's not hard, just tedious. This new and improved Button library makes this much simpler but adds so much more. Now you can do it this way:

Button button = Button(12);

void onPress(Button& b){
	Serial.print("onPress: ");
	Serial.println(b.pin);
	// will print out "onPress: 12"
}

void setup(){
  Serial.begin(9600);
  // Assign callback function
  button.pressHandler(onPress);
}

void loop(){
  // update the buttons' internals
  button.process();
}

Features

  • Instance-based design

    Button myButton(11);

  • Automatic pull-up setting

    Button myButton(11, BUTTON_PULLUP_INTERNAL);

  • Simplified state-change detection:

    if(button.isPressed()) ...

  • Callback model

    button.pressHandler(onPress)

  • Built-in debouncing

    // Sets 50ms debounce duration

    Button button = Button(12, BUTTON_PULLUP_INTERNAL, true, 50);

Installing

To install, download the library, extract it to ~/Documents/Arduino/libraries and rename the folder "Button." (Github generates a different name for the zip link.) Restart Arduino if it was already open.

I hope you find this useful! Please report any bugs using the Github issue tracker.

button's People

Contributors

jernejcic avatar t3db0t avatar tigoe avatar umar14 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

button's Issues

DoubleClick example does not initialize the double click threshold time

The DoubleClick example, the setup() function is missing a call to the Button::setdoubleclickThreshold(time) member. Therefore double clicks are never detected.

void setup(){
Serial.begin(9600);
Serial.println("Started");
pinMode(ledPin,OUTPUT); //LED on pin 12
Button1.setdoubleclickThreshold(500) ; //---- missing this
}

In Button.cpp, the doubleclickFound flag is not cleared

In Button.cpp, the doubleclickFound flag is not cleared until the next time the button is pressed. The Button::isDoubleClicked() member will return true every time it is called until the button is pressed again. The Button::isDoubleClicked() member could be used to clear the flag once it is read.

bool Button::isDoubleClicked(bool proc)
{
bool currentFlagState ;
if(proc) process();
currentFlagState = doubleclickFound; //-------- remember the current flag state
doubleclickFound = false; //-------- clear the doubleclickFound flag
return currentFlagState; //------------ return the actual dooubleclick state
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.