Victor Hugo Silva / Mbed 2 deprecated Retrovisor

Dependencies:   mbed

Committer:
victorhlvsilva
Date:
Mon May 06 20:27:21 2019 +0000
Revision:
0:d31aa980a1f9
Acionamento retrovisor;

Who changed what in which revision?

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