En este programa se presenta un PID con entrada y salida analogica

Dependencies:   TextLCD mbed

/media/uploads/amarincan/pid-button.jpg

Committer:
amarincan
Date:
Wed Nov 13 02:55:38 2013 +0000
Revision:
0:4ba2d502801f
se cambio una funcion privada a publica

Who changed what in which revision?

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