A debouncing InterruptIn wrapper
Diff: ButtonIn.cpp
- Revision:
- 0:2e999fcd4c7b
- Child:
- 1:e806603f0088
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ButtonIn.cpp Mon Feb 06 19:53:40 2012 +0000 @@ -0,0 +1,38 @@ +#include "ButtonIn.h" + +ButtonIn::ButtonIn(PinName buttonPin) : + _button(buttonPin) { + _buttonCanPress = true; + _callback = NULL; + _callbackInstance = NULL; + _callbackMethod = NULL; + _button.rise(this, &ButtonIn::click); +} + +void ButtonIn::attach(void (*method)(void)) { + _callback = method; +} + +template<class T> +void attach(T* instance, void (T::*method)(void)) { + _callbackInstance = (ButtonInCallbackInstance *)instance; + _callbackMethod = (void (ButtonInCallbackInstance::*)(void))method; +} + +void ButtonIn::click() { + if (_buttonCanPress) { + _buttonCanPress = false; + _buttonDownTimeout.attach(this, &ButtonIn::reset, 0.5); + } +} + +void ButtonIn::call() { + if (_callback != NULL) + (*_callback)(); + else + (_callbackInstance->*_callbackMethod)(); +} + +void ButtonIn::reset() { + _buttonCanPress = true; +} \ No newline at end of file