A debouncing InterruptIn wrapper
ButtonIn.cpp@0:2e999fcd4c7b, 2012-02-06 (annotated)
- Committer:
- evwijk
- Date:
- Mon Feb 06 19:53:40 2012 +0000
- Revision:
- 0:2e999fcd4c7b
- Child:
- 1:e806603f0088
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
evwijk | 0:2e999fcd4c7b | 1 | #include "ButtonIn.h" |
evwijk | 0:2e999fcd4c7b | 2 | |
evwijk | 0:2e999fcd4c7b | 3 | ButtonIn::ButtonIn(PinName buttonPin) : |
evwijk | 0:2e999fcd4c7b | 4 | _button(buttonPin) { |
evwijk | 0:2e999fcd4c7b | 5 | _buttonCanPress = true; |
evwijk | 0:2e999fcd4c7b | 6 | _callback = NULL; |
evwijk | 0:2e999fcd4c7b | 7 | _callbackInstance = NULL; |
evwijk | 0:2e999fcd4c7b | 8 | _callbackMethod = NULL; |
evwijk | 0:2e999fcd4c7b | 9 | _button.rise(this, &ButtonIn::click); |
evwijk | 0:2e999fcd4c7b | 10 | } |
evwijk | 0:2e999fcd4c7b | 11 | |
evwijk | 0:2e999fcd4c7b | 12 | void ButtonIn::attach(void (*method)(void)) { |
evwijk | 0:2e999fcd4c7b | 13 | _callback = method; |
evwijk | 0:2e999fcd4c7b | 14 | } |
evwijk | 0:2e999fcd4c7b | 15 | |
evwijk | 0:2e999fcd4c7b | 16 | template<class T> |
evwijk | 0:2e999fcd4c7b | 17 | void attach(T* instance, void (T::*method)(void)) { |
evwijk | 0:2e999fcd4c7b | 18 | _callbackInstance = (ButtonInCallbackInstance *)instance; |
evwijk | 0:2e999fcd4c7b | 19 | _callbackMethod = (void (ButtonInCallbackInstance::*)(void))method; |
evwijk | 0:2e999fcd4c7b | 20 | } |
evwijk | 0:2e999fcd4c7b | 21 | |
evwijk | 0:2e999fcd4c7b | 22 | void ButtonIn::click() { |
evwijk | 0:2e999fcd4c7b | 23 | if (_buttonCanPress) { |
evwijk | 0:2e999fcd4c7b | 24 | _buttonCanPress = false; |
evwijk | 0:2e999fcd4c7b | 25 | _buttonDownTimeout.attach(this, &ButtonIn::reset, 0.5); |
evwijk | 0:2e999fcd4c7b | 26 | } |
evwijk | 0:2e999fcd4c7b | 27 | } |
evwijk | 0:2e999fcd4c7b | 28 | |
evwijk | 0:2e999fcd4c7b | 29 | void ButtonIn::call() { |
evwijk | 0:2e999fcd4c7b | 30 | if (_callback != NULL) |
evwijk | 0:2e999fcd4c7b | 31 | (*_callback)(); |
evwijk | 0:2e999fcd4c7b | 32 | else |
evwijk | 0:2e999fcd4c7b | 33 | (_callbackInstance->*_callbackMethod)(); |
evwijk | 0:2e999fcd4c7b | 34 | } |
evwijk | 0:2e999fcd4c7b | 35 | |
evwijk | 0:2e999fcd4c7b | 36 | void ButtonIn::reset() { |
evwijk | 0:2e999fcd4c7b | 37 | _buttonCanPress = true; |
evwijk | 0:2e999fcd4c7b | 38 | } |