Priliminary

Dependencies:   DS1307 MAX17048 MODSERIAL SSD1308_128x64_I2C WatchDog mbed-rpc mbed

Fork of ECGAFE_copy by Zainul Charbiwala

Committer:
zainulcharbiwala
Date:
Wed Sep 30 11:30:56 2015 +0000
Revision:
0:ee0649a9025a
Priliminary

Who changed what in which revision?

UserRevisionLine numberNew 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