Priliminary
Dependencies: DS1307 MAX17048 MODSERIAL SSD1308_128x64_I2C mbed-rpc mbed
Fork of ECGAFE_copy by
DebouncedIn.cpp@0:ee0649a9025a, 2015-09-30 (annotated)
- Committer:
- zainulcharbiwala
- Date:
- Wed Sep 30 11:30:56 2015 +0000
- Revision:
- 0:ee0649a9025a
Priliminary
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
zainulcharbiwala | 0:ee0649a9025a | 1 | #include "DebouncedIn.h" |
zainulcharbiwala | 0:ee0649a9025a | 2 | #include "mbed.h" |
zainulcharbiwala | 0:ee0649a9025a | 3 | |
zainulcharbiwala | 0:ee0649a9025a | 4 | /* |
zainulcharbiwala | 0:ee0649a9025a | 5 | * Constructor |
zainulcharbiwala | 0:ee0649a9025a | 6 | */ |
zainulcharbiwala | 0:ee0649a9025a | 7 | DebouncedIn::DebouncedIn(PinName in) |
zainulcharbiwala | 0:ee0649a9025a | 8 | : _in(in) { |
zainulcharbiwala | 0:ee0649a9025a | 9 | |
zainulcharbiwala | 0:ee0649a9025a | 10 | // reset all the flags and counters |
zainulcharbiwala | 0:ee0649a9025a | 11 | _samples = 0; |
zainulcharbiwala | 0:ee0649a9025a | 12 | _output = 0; |
zainulcharbiwala | 0:ee0649a9025a | 13 | _output_last = 0; |
zainulcharbiwala | 0:ee0649a9025a | 14 | _releasing_flag = 0; |
zainulcharbiwala | 0:ee0649a9025a | 15 | _pressing_flag = 0; |
zainulcharbiwala | 0:ee0649a9025a | 16 | _press_counter = 0; |
zainulcharbiwala | 0:ee0649a9025a | 17 | |
zainulcharbiwala | 0:ee0649a9025a | 18 | // Switch is assumed to go to ground |
zainulcharbiwala | 0:ee0649a9025a | 19 | _in.mode(PullUp); |
zainulcharbiwala | 0:ee0649a9025a | 20 | |
zainulcharbiwala | 0:ee0649a9025a | 21 | // Attach ticker |
zainulcharbiwala | 0:ee0649a9025a | 22 | _ticker.attach(this, &DebouncedIn::_sample, 0.005); |
zainulcharbiwala | 0:ee0649a9025a | 23 | } |
zainulcharbiwala | 0:ee0649a9025a | 24 | |
zainulcharbiwala | 0:ee0649a9025a | 25 | void DebouncedIn::_sample() { |
zainulcharbiwala | 0:ee0649a9025a | 26 | |
zainulcharbiwala | 0:ee0649a9025a | 27 | // take a sample |
zainulcharbiwala | 0:ee0649a9025a | 28 | _samples = _samples >> 1; // shift left |
zainulcharbiwala | 0:ee0649a9025a | 29 | |
zainulcharbiwala | 0:ee0649a9025a | 30 | if (_in) { |
zainulcharbiwala | 0:ee0649a9025a | 31 | _samples |= 0x80; |
zainulcharbiwala | 0:ee0649a9025a | 32 | } |
zainulcharbiwala | 0:ee0649a9025a | 33 | |
zainulcharbiwala | 0:ee0649a9025a | 34 | // examine the sample window, look for steady state |
zainulcharbiwala | 0:ee0649a9025a | 35 | if (_samples == 0x00) { |
zainulcharbiwala | 0:ee0649a9025a | 36 | _output = 0; |
zainulcharbiwala | 0:ee0649a9025a | 37 | } |
zainulcharbiwala | 0:ee0649a9025a | 38 | else if (_samples == 0xFF) { |
zainulcharbiwala | 0:ee0649a9025a | 39 | _output = 1; |
zainulcharbiwala | 0:ee0649a9025a | 40 | } |
zainulcharbiwala | 0:ee0649a9025a | 41 | |
zainulcharbiwala | 0:ee0649a9025a | 42 | |
zainulcharbiwala | 0:ee0649a9025a | 43 | // Release detection |
zainulcharbiwala | 0:ee0649a9025a | 44 | if ((_output == 1) && (_output_last == 0)) { |
zainulcharbiwala | 0:ee0649a9025a | 45 | _releasing_flag++; |
zainulcharbiwala | 0:ee0649a9025a | 46 | } |
zainulcharbiwala | 0:ee0649a9025a | 47 | |
zainulcharbiwala | 0:ee0649a9025a | 48 | // Press detection |
zainulcharbiwala | 0:ee0649a9025a | 49 | else if ((_output == 0) && (_output_last == 1)) { |
zainulcharbiwala | 0:ee0649a9025a | 50 | _pressing_flag++; |
zainulcharbiwala | 0:ee0649a9025a | 51 | _press_counter = 0; |
zainulcharbiwala | 0:ee0649a9025a | 52 | } |
zainulcharbiwala | 0:ee0649a9025a | 53 | |
zainulcharbiwala | 0:ee0649a9025a | 54 | // pressed state |
zainulcharbiwala | 0:ee0649a9025a | 55 | else if (_output == 0) { |
zainulcharbiwala | 0:ee0649a9025a | 56 | _press_counter++; |
zainulcharbiwala | 0:ee0649a9025a | 57 | } |
zainulcharbiwala | 0:ee0649a9025a | 58 | |
zainulcharbiwala | 0:ee0649a9025a | 59 | // update the output |
zainulcharbiwala | 0:ee0649a9025a | 60 | _output_last = _output; |
zainulcharbiwala | 0:ee0649a9025a | 61 | |
zainulcharbiwala | 0:ee0649a9025a | 62 | //printf("%d %d\n", _press_counter, _releasing_flag); |
zainulcharbiwala | 0:ee0649a9025a | 63 | } |
zainulcharbiwala | 0:ee0649a9025a | 64 | |
zainulcharbiwala | 0:ee0649a9025a | 65 | |
zainulcharbiwala | 0:ee0649a9025a | 66 | |
zainulcharbiwala | 0:ee0649a9025a | 67 | // return number of releasing events |
zainulcharbiwala | 0:ee0649a9025a | 68 | int DebouncedIn::releasing(void) { |
zainulcharbiwala | 0:ee0649a9025a | 69 | int return_value = _releasing_flag; |
zainulcharbiwala | 0:ee0649a9025a | 70 | _releasing_flag = 0; |
zainulcharbiwala | 0:ee0649a9025a | 71 | return(return_value); |
zainulcharbiwala | 0:ee0649a9025a | 72 | } |
zainulcharbiwala | 0:ee0649a9025a | 73 | |
zainulcharbiwala | 0:ee0649a9025a | 74 | // return number of pressing events |
zainulcharbiwala | 0:ee0649a9025a | 75 | int DebouncedIn::pressing(void) { |
zainulcharbiwala | 0:ee0649a9025a | 76 | int return_value = _pressing_flag; |
zainulcharbiwala | 0:ee0649a9025a | 77 | _pressing_flag = 0; |
zainulcharbiwala | 0:ee0649a9025a | 78 | return(return_value); |
zainulcharbiwala | 0:ee0649a9025a | 79 | } |
zainulcharbiwala | 0:ee0649a9025a | 80 | |
zainulcharbiwala | 0:ee0649a9025a | 81 | // return number of ticks we've bene steady for |
zainulcharbiwala | 0:ee0649a9025a | 82 | int DebouncedIn::pressed(void) { |
zainulcharbiwala | 0:ee0649a9025a | 83 | return(_press_counter); |
zainulcharbiwala | 0:ee0649a9025a | 84 | } |
zainulcharbiwala | 0:ee0649a9025a | 85 | |
zainulcharbiwala | 0:ee0649a9025a | 86 | // return the debounced status |
zainulcharbiwala | 0:ee0649a9025a | 87 | int DebouncedIn::read(void) { |
zainulcharbiwala | 0:ee0649a9025a | 88 | return(_output); |
zainulcharbiwala | 0:ee0649a9025a | 89 | } |
zainulcharbiwala | 0:ee0649a9025a | 90 | |
zainulcharbiwala | 0:ee0649a9025a | 91 | // shorthand for read() |
zainulcharbiwala | 0:ee0649a9025a | 92 | DebouncedIn::operator int() { |
zainulcharbiwala | 0:ee0649a9025a | 93 | return read(); |
zainulcharbiwala | 0:ee0649a9025a | 94 | } |
zainulcharbiwala | 0:ee0649a9025a | 95 | |
zainulcharbiwala | 0:ee0649a9025a | 96 |