Library for detecting button clicks, doubleclicks and long press pattern on a single button.

Dependents:   OneButton_Example ABBlind

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
+
+
+