Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of OneButton by
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 + + +