A debouncing InterruptIn wrapper
ButtonIn.cpp
- Committer:
- evwijk
- Date:
- 2012-02-07
- Revision:
- 1:e806603f0088
- Parent:
- 0:2e999fcd4c7b
- Child:
- 2:c353357a97e4
File content as of revision 1:e806603f0088:
#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() { printf("click\r\n"); if (_buttonCanPress) { _buttonCanPress = false; printf("press\r\n"); //_buttonDownTimer.reset(); _buttonDownTimeout.attach(this, &ButtonIn::reset, 5); call(); } } void ButtonIn::call() { printf("call\r\n"); if (_callback != NULL) (*_callback)(); else (_callbackInstance->*_callbackMethod)(); } void ButtonIn::reset() { _buttonCanPress = true; }