Debouncing library (not mine)
Dependents: ElecPneuShifter_4 tarea1 tarea_miercoles Rampa ... more
Revision 0:8992c13bbb9b, committed 2010-11-28
- Comitter:
- WarwickRacing
- Date:
- Sun Nov 28 14:19:52 2010 +0000
- Commit message:
Changed in this revision
DebouncedIn.cpp | Show annotated file Show diff for this revision Revisions of this file |
DebouncedIn.h | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r 8992c13bbb9b DebouncedIn.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DebouncedIn.cpp Sun Nov 28 14:19:52 2010 +0000 @@ -0,0 +1,91 @@ +#include "DebouncedIn.h" +#include "mbed.h" + + /* + * Constructor + */ + DebouncedIn::DebouncedIn(PinName in) + : _in(in) { + + // reset all the flags and counters + _samples = 0; + _output = 0; + _output_last = 0; + _rising_flag = 0; + _falling_flag = 0; + _state_counter = 0; + + // Attach ticker + _ticker.attach(this, &DebouncedIn::_sample, 0.005); + } + + void DebouncedIn::_sample() { + + // take a sample + _samples = _samples >> 1; // shift left + + if (_in) { + _samples |= 0x80; + } + + // examine the sample window, look for steady state + if (_samples == 0x00) { + _output = 0; + } + else if (_samples == 0xFF) { + _output = 1; + } + + + // Rising edge detection + if ((_output == 1) && (_output_last == 0)) { + _rising_flag++; + _state_counter = 0; + } + + // Falling edge detection + else if ((_output == 0) && (_output_last == 1)) { + _falling_flag++; + _state_counter = 0; + } + + // steady state + else { + _state_counter++; + } + + // update the output + _output_last = _output; + + } + + + + // return number of rising edges + int DebouncedIn::rising(void) { + int return_value = _rising_flag; + _rising_flag = 0; + return(return_value); + } + + // return number of falling edges + int DebouncedIn::falling(void) { + int return_value = _falling_flag; + _falling_flag = 0; + return(return_value); + } + + // return number of ticsk we've bene steady for + int DebouncedIn::steady(void) { + return(_state_counter); + } + + // return the debounced status + int DebouncedIn::read(void) { + return(_output); + } + + // shorthand for read() + DebouncedIn::operator int() { + return read(); + } \ No newline at end of file
diff -r 000000000000 -r 8992c13bbb9b DebouncedIn.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DebouncedIn.h Sun Nov 28 14:19:52 2010 +0000 @@ -0,0 +1,29 @@ +#include "mbed.h" + + class DebouncedIn { + public: + DebouncedIn(PinName in); + + int read (void); + operator int(); + + int rising(void); + int falling(void); + int steady(void); + + private : + // objects + DigitalIn _in; + Ticker _ticker; + + // function to take a sample, and update flags + void _sample(void); + + // counters and flags + int _samples; + int _output; + int _output_last; + int _rising_flag; + int _falling_flag; + int _state_counter; + }; \ No newline at end of file