Reaktionstester mit Pointer

Dependencies:   C12832_lcd mbed

Committer:
philipp19961
Date:
Wed Nov 05 07:40:38 2014 +0000
Revision:
0:1081f9802d9d
ReaktionsTester mit Pointer like WedlMethode

Who changed what in which revision?

UserRevisionLine numberNew contents of line
philipp19961 0:1081f9802d9d 1 #include "DebouncedIn.h"
philipp19961 0:1081f9802d9d 2 #include "mbed.h"
philipp19961 0:1081f9802d9d 3
philipp19961 0:1081f9802d9d 4 /*
philipp19961 0:1081f9802d9d 5 * Constructor
philipp19961 0:1081f9802d9d 6 */
philipp19961 0:1081f9802d9d 7 DebouncedIn::DebouncedIn(PinName in)
philipp19961 0:1081f9802d9d 8 : _in(in) {
philipp19961 0:1081f9802d9d 9
philipp19961 0:1081f9802d9d 10 // reset all the flags and counters
philipp19961 0:1081f9802d9d 11 _samples = 0;
philipp19961 0:1081f9802d9d 12 _output = 0;
philipp19961 0:1081f9802d9d 13 _output_last = 0;
philipp19961 0:1081f9802d9d 14 _rising_flag = 0;
philipp19961 0:1081f9802d9d 15 _falling_flag = 0;
philipp19961 0:1081f9802d9d 16 _state_counter = 0;
philipp19961 0:1081f9802d9d 17
philipp19961 0:1081f9802d9d 18 // Attach ticker
philipp19961 0:1081f9802d9d 19 _ticker.attach(this, &DebouncedIn::_sample, 0.005);
philipp19961 0:1081f9802d9d 20 }
philipp19961 0:1081f9802d9d 21
philipp19961 0:1081f9802d9d 22 void DebouncedIn::_sample() {
philipp19961 0:1081f9802d9d 23
philipp19961 0:1081f9802d9d 24 // take a sample
philipp19961 0:1081f9802d9d 25 _samples = _samples >> 1; // shift left
philipp19961 0:1081f9802d9d 26
philipp19961 0:1081f9802d9d 27 if (_in) {
philipp19961 0:1081f9802d9d 28 _samples |= 0x80;
philipp19961 0:1081f9802d9d 29 }
philipp19961 0:1081f9802d9d 30
philipp19961 0:1081f9802d9d 31 // examine the sample window, look for steady state
philipp19961 0:1081f9802d9d 32 if (_samples == 0x00) {
philipp19961 0:1081f9802d9d 33 _output = 0;
philipp19961 0:1081f9802d9d 34 }
philipp19961 0:1081f9802d9d 35 else if (_samples == 0xFF) {
philipp19961 0:1081f9802d9d 36 _output = 1;
philipp19961 0:1081f9802d9d 37 }
philipp19961 0:1081f9802d9d 38
philipp19961 0:1081f9802d9d 39
philipp19961 0:1081f9802d9d 40 // Rising edge detection
philipp19961 0:1081f9802d9d 41 if ((_output == 1) && (_output_last == 0)) {
philipp19961 0:1081f9802d9d 42 _rising_flag++;
philipp19961 0:1081f9802d9d 43 _state_counter = 0;
philipp19961 0:1081f9802d9d 44 }
philipp19961 0:1081f9802d9d 45
philipp19961 0:1081f9802d9d 46 // Falling edge detection
philipp19961 0:1081f9802d9d 47 else if ((_output == 0) && (_output_last == 1)) {
philipp19961 0:1081f9802d9d 48 _falling_flag++;
philipp19961 0:1081f9802d9d 49 _state_counter = 0;
philipp19961 0:1081f9802d9d 50 }
philipp19961 0:1081f9802d9d 51
philipp19961 0:1081f9802d9d 52 // steady state
philipp19961 0:1081f9802d9d 53 else {
philipp19961 0:1081f9802d9d 54 _state_counter++;
philipp19961 0:1081f9802d9d 55 }
philipp19961 0:1081f9802d9d 56
philipp19961 0:1081f9802d9d 57 // update the output
philipp19961 0:1081f9802d9d 58 _output_last = _output;
philipp19961 0:1081f9802d9d 59
philipp19961 0:1081f9802d9d 60 }
philipp19961 0:1081f9802d9d 61
philipp19961 0:1081f9802d9d 62
philipp19961 0:1081f9802d9d 63
philipp19961 0:1081f9802d9d 64 // return number of rising edges
philipp19961 0:1081f9802d9d 65 int DebouncedIn::rising(void) {
philipp19961 0:1081f9802d9d 66 int return_value = _rising_flag;
philipp19961 0:1081f9802d9d 67 _rising_flag = 0;
philipp19961 0:1081f9802d9d 68 return(return_value);
philipp19961 0:1081f9802d9d 69 }
philipp19961 0:1081f9802d9d 70
philipp19961 0:1081f9802d9d 71 // return number of falling edges
philipp19961 0:1081f9802d9d 72 int DebouncedIn::falling(void) {
philipp19961 0:1081f9802d9d 73 int return_value = _falling_flag;
philipp19961 0:1081f9802d9d 74 _falling_flag = 0;
philipp19961 0:1081f9802d9d 75 return(return_value);
philipp19961 0:1081f9802d9d 76 }
philipp19961 0:1081f9802d9d 77
philipp19961 0:1081f9802d9d 78 // return number of ticsk we've bene steady for
philipp19961 0:1081f9802d9d 79 int DebouncedIn::steady(void) {
philipp19961 0:1081f9802d9d 80 return(_state_counter);
philipp19961 0:1081f9802d9d 81 }
philipp19961 0:1081f9802d9d 82
philipp19961 0:1081f9802d9d 83 // return the debounced status
philipp19961 0:1081f9802d9d 84 int DebouncedIn::read(void) {
philipp19961 0:1081f9802d9d 85 return(_output);
philipp19961 0:1081f9802d9d 86 }
philipp19961 0:1081f9802d9d 87
philipp19961 0:1081f9802d9d 88 // shorthand for read()
philipp19961 0:1081f9802d9d 89 DebouncedIn::operator int() {
philipp19961 0:1081f9802d9d 90 return read();
philipp19961 0:1081f9802d9d 91 }
philipp19961 0:1081f9802d9d 92
philipp19961 0:1081f9802d9d 93