Librería para un control PID simple

Dependents:   BackupPIDSimple Tarea_PID TareaPID PID ... more

Committer:
cmorab
Date:
Tue Nov 05 19:29:03 2013 +0000
Revision:
0:dc1131de43e8
Esta librer?a es usada para la programaci?n de un Control PID Simple

Who changed what in which revision?

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