Library for detecting button clicks, doubleclicks and long press pattern on a single button.
Dependents: OneButton_Example ABBlind
OneButton.h
- Committer:
- jaup
- Date:
- 2016-09-01
- Revision:
- 1:fdf67f893a5c
- Parent:
- 0:62d614796022
File content as of revision 1:fdf67f893a5c:
// Modifyed to support mbed environment, rewrite the state machine. // by Zibin Zheng <znbin@qq.com> // ----- // 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 // ----- #ifndef OneButton_h #define OneButton_h #include "mbed.h" /** * Example: * @code #include "mbed.h" #include "OneButton.h" Serial pc(SERIAL_TX, SERIAL_RX); OneButton btn1(PC_13); void pressed() { pc.printf("pressed\r\n"); } void click() { pc.printf("click\r\n"); } void double_click() { pc.printf("double_click\r\n"); } void long_start() { pc.printf("long_start\r\n"); } void long_hold() { pc.printf("long_hold\r\n"); } void long_stop() { pc.printf("long_stop\r\n"); } int main() { btn1.attachClick(&click); btn1.attachPress(&pressed); btn1.attachDoubleClick(&double_click); btn1.attachLongPressStart(&long_start); btn1.attachDuringLongPress(&long_hold); btn1.attachLongPressStop(&long_stop); while(1) { btn1.tick(); //loop } } */ // ----- Callback function types ----- extern "C" { typedef void (*callbackFunction)(void); } class OneButton { public: // ----- Constructor ----- OneButton(PinName pin, bool active_level = 0); // ----- 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 _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 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. uint16_t ticks; uint8_t _state; uint8_t _debounce_cnt; uint8_t _debounceTicks; // number of ticks for debounce times. bool button_level; bool active; DigitalIn* btn_pin; Timer *timer; }; #endif