pid control android

Dependencies:   QEI TextLCD mbed

Committer:
deiwidricaurte
Date:
Fri Oct 07 16:28:53 2016 +0000
Revision:
0:5a12b85e8aa4
control pid con encoder y arduino;

Who changed what in which revision?

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