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