Library for detecting button clicks, doubleclicks and long press pattern on a single button.
Dependents: OneButton_Example ABBlind
Diff: OneButton.h
- Revision:
- 0:62d614796022
- Child:
- 1:fdf67f893a5c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OneButton.h Wed Aug 31 10:09:43 2016 +0000 @@ -0,0 +1,90 @@ +// ----- +// OneButton.h - Library for detecting button clicks, doubleclicks and long press pattern on a single button. +// This class is implemented for use with the Arduino environment. +// Copyright (c) by Matthias Hertel, http://www.mathertel.de +// This work is licensed under a BSD style license. See http://www.mathertel.de/License.aspx +// More information on: http://www.mathertel.de/Arduino +// ----- +// 02.10.2010 created by Matthias Hertel +// 21.04.2011 transformed into a library +// 01.12.2011 include file changed to work with the Arduino 1.0 environment +// 23.03.2014 Enhanced long press functionalities by adding longPressStart and longPressStop callbacks +// 21.09.2015 A simple way for debounce detection added. +// ----- + +#ifndef OneButton_h +#define OneButton_h + +#include "mbed.h" +#include "millis.h" + +#define HIGH 1 +#define LOW 0 + +// ----- Callback function types ----- + +extern "C" { + typedef void (*callbackFunction)(void); +} + + +class OneButton +{ +public: + // ----- Constructor ----- + OneButton(PinName pin, int active = 1); + + // ----- Set runtime parameters ----- + + // set # millisec after single click is assumed. + void setClickTicks(int ticks); + + // set # millisec after press is assumed. + void setPressTicks(int ticks); + + // attach functions that will be called when button was pressed in the specified way. + void attachClick(callbackFunction newFunction); + void attachDoubleClick(callbackFunction newFunction); + void attachPress(callbackFunction newFunction); // DEPRECATED, replaced by longPressStart, longPressStop and duringLongPress + void attachLongPressStart(callbackFunction newFunction); + void attachLongPressStop(callbackFunction newFunction); + void attachDuringLongPress(callbackFunction newFunction); + + // ----- State machine functions ----- + + // call this function every some milliseconds for handling button events. + void tick(void); + bool isLongPressed(); + +private: + int _pin; // hardware pin number. + int _clickTicks; // number of ticks that have to pass by before a click is detected + int _pressTicks; // number of ticks that have to pass by before a long button press is detected + static + const int _debounceTicks = 10; // number of ticks for debounce times. + + int _buttonReleased; + int _buttonPressed; + + bool _isLongPressed; + + // These variables will hold functions acting as event source. + callbackFunction _clickFunc; + callbackFunction _doubleClickFunc; + callbackFunction _pressFunc; + callbackFunction _longPressStartFunc; + callbackFunction _longPressStopFunc; + callbackFunction _duringLongPressFunc; + + // These variables that hold information across the upcoming tick calls. + // They are initialized once on program start and are updated every time the tick function is called. + int _state; + unsigned long _startTime; // will be set in state 1 + + DigitalIn* btn_pin; +}; + +#endif + + +