PID con botones y modo incremental

Dependencies:   Debounced TextLCD mbed

Fork of pid_teclas by Gustavo Ramirez

Committer:
Equipo2_2015_1
Date:
Thu Apr 09 10:55:35 2015 +0000
Revision:
1:0be27050f046
Parent:
0:9aa80672eb3d
Tarea PID con botones, modo incremental

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lcorralesc1 0:9aa80672eb3d 1 #include "mbed.h"
lcorralesc1 0:9aa80672eb3d 2 #include "DebouncedIn.h"
lcorralesc1 0:9aa80672eb3d 3 #include "TextLCD.h"
lcorralesc1 0:9aa80672eb3d 4
Equipo2_2015_1 1:0be27050f046 5
Equipo2_2015_1 1:0be27050f046 6 //Este código lo hicimos basado en el programa pid_teclas de TONY63
lcorralesc1 0:9aa80672eb3d 7
Equipo2_2015_1 1:0be27050f046 8 TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7 son los puertos del módulo LCD 2x16
Equipo2_2015_1 1:0be27050f046 9 AnalogIn y(PTB1); //puerto de entrada analógica
Equipo2_2015_1 1:0be27050f046 10 AnalogOut u(PTE30); //puerto de salida analógica
lcorralesc1 0:9aa80672eb3d 11 DigitalOut led1(LED1);
lcorralesc1 0:9aa80672eb3d 12 DigitalOut led2(LED2);
lcorralesc1 0:9aa80672eb3d 13 DigitalOut led3(LED3);
Equipo2_2015_1 1:0be27050f046 14 DebouncedIn button1(PTC12); //botón aumentar
Equipo2_2015_1 1:0be27050f046 15 DebouncedIn button2(PTC13); //botón disminuir
Equipo2_2015_1 1:0be27050f046 16 DebouncedIn button3(PTC16); //botón cambiar menú
Equipo2_2015_1 1:0be27050f046 17 DebouncedIn button4(PTC17); //botón enter
Equipo2_2015_1 1:0be27050f046 18
Equipo2_2015_1 1:0be27050f046 19 int C1=0x0F; //muestra el cursor
Equipo2_2015_1 1:0be27050f046 20 int C4=0x0C; // quito cursor bajo
Equipo2_2015_1 1:0be27050f046 21 int sp=0,kp=0,kd=0,ki=0,p=1;
Equipo2_2015_1 1:0be27050f046 22 int yr, ap, ai, ad, err, med, err_v, cycle, pid;
Equipo2_2015_1 1:0be27050f046 23 int b;
Equipo2_2015_1 1:0be27050f046 24 int pidn;
Equipo2_2015_1 1:0be27050f046 25 Timer t;
lcorralesc1 0:9aa80672eb3d 26
Equipo2_2015_1 1:0be27050f046 27 int incremento(int c,int f,int aux) //función auxiliar para el botón de aumentar
Equipo2_2015_1 1:0be27050f046 28 {
Equipo2_2015_1 1:0be27050f046 29 int bandera=0,i=0;
Equipo2_2015_1 1:0be27050f046 30
Equipo2_2015_1 1:0be27050f046 31 while(button1==0)
Equipo2_2015_1 1:0be27050f046 32 {
Equipo2_2015_1 1:0be27050f046 33 i=1;
Equipo2_2015_1 1:0be27050f046 34 wait (0.5);
Equipo2_2015_1 1:0be27050f046 35
Equipo2_2015_1 1:0be27050f046 36
Equipo2_2015_1 1:0be27050f046 37 if ((bandera==2)&(i==1)) // si el módulo de la constante dividido 100 es cero
Equipo2_2015_1 1:0be27050f046 38 {
Equipo2_2015_1 1:0be27050f046 39 aux = aux+100;
Equipo2_2015_1 1:0be27050f046 40 if (aux>=999)
Equipo2_2015_1 1:0be27050f046 41 {
Equipo2_2015_1 1:0be27050f046 42 aux = 999;
Equipo2_2015_1 1:0be27050f046 43 }
Equipo2_2015_1 1:0be27050f046 44
Equipo2_2015_1 1:0be27050f046 45 lcd.locate(c,f);
Equipo2_2015_1 1:0be27050f046 46 lcd.printf(" ");
Equipo2_2015_1 1:0be27050f046 47 lcd.locate(c,f);
Equipo2_2015_1 1:0be27050f046 48 lcd.printf("%d", aux);
Equipo2_2015_1 1:0be27050f046 49 i=0;
Equipo2_2015_1 1:0be27050f046 50
Equipo2_2015_1 1:0be27050f046 51 }
Equipo2_2015_1 1:0be27050f046 52 if ((bandera==1)&(i==1))
Equipo2_2015_1 1:0be27050f046 53 {
Equipo2_2015_1 1:0be27050f046 54 aux=aux+10;
Equipo2_2015_1 1:0be27050f046 55 if(aux%100==0){bandera=2;} // si el módulo de la constante dividido 100 es cero, la bandera es igual a 2
Equipo2_2015_1 1:0be27050f046 56 if (aux>= 999)
Equipo2_2015_1 1:0be27050f046 57 {
Equipo2_2015_1 1:0be27050f046 58 aux = 999;
Equipo2_2015_1 1:0be27050f046 59 }
Equipo2_2015_1 1:0be27050f046 60
Equipo2_2015_1 1:0be27050f046 61
Equipo2_2015_1 1:0be27050f046 62 lcd.locate(c,f);
Equipo2_2015_1 1:0be27050f046 63 lcd.printf(" ");
Equipo2_2015_1 1:0be27050f046 64 lcd.locate(c,f);
Equipo2_2015_1 1:0be27050f046 65 lcd.printf("%d", aux);
Equipo2_2015_1 1:0be27050f046 66 i=0; }
Equipo2_2015_1 1:0be27050f046 67
Equipo2_2015_1 1:0be27050f046 68 if ((bandera==0)&(i==1))
Equipo2_2015_1 1:0be27050f046 69 {
Equipo2_2015_1 1:0be27050f046 70 ++aux;
Equipo2_2015_1 1:0be27050f046 71 if(aux%10==0){bandera=1;}
Equipo2_2015_1 1:0be27050f046 72 if (aux>= 999)
Equipo2_2015_1 1:0be27050f046 73 {
Equipo2_2015_1 1:0be27050f046 74 aux = 999;
Equipo2_2015_1 1:0be27050f046 75 }
Equipo2_2015_1 1:0be27050f046 76
Equipo2_2015_1 1:0be27050f046 77
Equipo2_2015_1 1:0be27050f046 78 lcd.locate(c,f);
Equipo2_2015_1 1:0be27050f046 79 lcd.printf(" ");
Equipo2_2015_1 1:0be27050f046 80 lcd.locate(c,f);
Equipo2_2015_1 1:0be27050f046 81 lcd.printf("%d", aux);
Equipo2_2015_1 1:0be27050f046 82 i=0; }
Equipo2_2015_1 1:0be27050f046 83
Equipo2_2015_1 1:0be27050f046 84
Equipo2_2015_1 1:0be27050f046 85
Equipo2_2015_1 1:0be27050f046 86 }
Equipo2_2015_1 1:0be27050f046 87 bandera=0;
Equipo2_2015_1 1:0be27050f046 88 return aux;
Equipo2_2015_1 1:0be27050f046 89 }
Equipo2_2015_1 1:0be27050f046 90
Equipo2_2015_1 1:0be27050f046 91 int decremento(int c,int f,int aux) //función auxiliar para el botón disminuir
Equipo2_2015_1 1:0be27050f046 92 {
Equipo2_2015_1 1:0be27050f046 93 int bandera=0,i=0;
Equipo2_2015_1 1:0be27050f046 94
Equipo2_2015_1 1:0be27050f046 95 while(button2==0)
Equipo2_2015_1 1:0be27050f046 96 {
Equipo2_2015_1 1:0be27050f046 97
Equipo2_2015_1 1:0be27050f046 98 i=1;
Equipo2_2015_1 1:0be27050f046 99 wait (0.5);
Equipo2_2015_1 1:0be27050f046 100
Equipo2_2015_1 1:0be27050f046 101 if ((bandera==2)&(i==1))
Equipo2_2015_1 1:0be27050f046 102 {
Equipo2_2015_1 1:0be27050f046 103 aux = aux-100;
Equipo2_2015_1 1:0be27050f046 104 if (aux<=0)
Equipo2_2015_1 1:0be27050f046 105 {
Equipo2_2015_1 1:0be27050f046 106 aux = 0;
Equipo2_2015_1 1:0be27050f046 107 }
Equipo2_2015_1 1:0be27050f046 108
Equipo2_2015_1 1:0be27050f046 109 lcd.locate(c,f);
Equipo2_2015_1 1:0be27050f046 110 lcd.printf(" ");
Equipo2_2015_1 1:0be27050f046 111 lcd.locate(c,f);
Equipo2_2015_1 1:0be27050f046 112 lcd.printf("%d", aux);
Equipo2_2015_1 1:0be27050f046 113 i=0;
Equipo2_2015_1 1:0be27050f046 114
Equipo2_2015_1 1:0be27050f046 115 }
Equipo2_2015_1 1:0be27050f046 116 if ((bandera==1)&(i==1))
Equipo2_2015_1 1:0be27050f046 117 {
Equipo2_2015_1 1:0be27050f046 118 aux=aux-10;
Equipo2_2015_1 1:0be27050f046 119 if(aux%100==0){bandera=2;}
Equipo2_2015_1 1:0be27050f046 120 if (aux<=0)
Equipo2_2015_1 1:0be27050f046 121 {
Equipo2_2015_1 1:0be27050f046 122 aux = 0;
Equipo2_2015_1 1:0be27050f046 123 }
Equipo2_2015_1 1:0be27050f046 124
Equipo2_2015_1 1:0be27050f046 125 lcd.locate(c,f);
Equipo2_2015_1 1:0be27050f046 126 lcd.printf(" ");
Equipo2_2015_1 1:0be27050f046 127 lcd.locate(c,f);
Equipo2_2015_1 1:0be27050f046 128 lcd.printf("%d", aux);
Equipo2_2015_1 1:0be27050f046 129 i=0; }
Equipo2_2015_1 1:0be27050f046 130
Equipo2_2015_1 1:0be27050f046 131 if ((bandera==0)&(i==1))
Equipo2_2015_1 1:0be27050f046 132 {
Equipo2_2015_1 1:0be27050f046 133 --aux;
Equipo2_2015_1 1:0be27050f046 134 if(aux%10==0){bandera=1;}
Equipo2_2015_1 1:0be27050f046 135 if (aux<=0)
Equipo2_2015_1 1:0be27050f046 136 {
Equipo2_2015_1 1:0be27050f046 137 aux = 0;
Equipo2_2015_1 1:0be27050f046 138 }
Equipo2_2015_1 1:0be27050f046 139
Equipo2_2015_1 1:0be27050f046 140 lcd.locate(c,f);
Equipo2_2015_1 1:0be27050f046 141 lcd.printf(" ");
Equipo2_2015_1 1:0be27050f046 142 lcd.locate(c,f);
Equipo2_2015_1 1:0be27050f046 143 lcd.printf("%d", aux);
Equipo2_2015_1 1:0be27050f046 144 i=0; }
Equipo2_2015_1 1:0be27050f046 145
Equipo2_2015_1 1:0be27050f046 146
Equipo2_2015_1 1:0be27050f046 147
Equipo2_2015_1 1:0be27050f046 148 }
Equipo2_2015_1 1:0be27050f046 149
Equipo2_2015_1 1:0be27050f046 150 bandera=0;
Equipo2_2015_1 1:0be27050f046 151 return aux;
Equipo2_2015_1 1:0be27050f046 152 };
Equipo2_2015_1 1:0be27050f046 153
Equipo2_2015_1 1:0be27050f046 154
lcorralesc1 0:9aa80672eb3d 155 int main()
lcorralesc1 0:9aa80672eb3d 156 {
lcorralesc1 0:9aa80672eb3d 157 lcd.cls();
lcorralesc1 0:9aa80672eb3d 158 lcd.writeCommand(C1);//escribimos un comando segun el manual del modulo LCD
lcorralesc1 0:9aa80672eb3d 159 lcd.locate(8,0);
lcorralesc1 0:9aa80672eb3d 160 lcd.printf("kp=%d", kp);
lcorralesc1 0:9aa80672eb3d 161 lcd.locate(0,1);
lcorralesc1 0:9aa80672eb3d 162 lcd.printf("Ki=%d", ki);
lcorralesc1 0:9aa80672eb3d 163 lcd.locate(8,1);
lcorralesc1 0:9aa80672eb3d 164 lcd.printf("Kd=%d", kd);
lcorralesc1 0:9aa80672eb3d 165 lcd.locate(0,0);
lcorralesc1 0:9aa80672eb3d 166 lcd.printf("Sp=%d", sp);
lcorralesc1 0:9aa80672eb3d 167
lcorralesc1 0:9aa80672eb3d 168 while(1)
lcorralesc1 0:9aa80672eb3d 169 {
lcorralesc1 0:9aa80672eb3d 170 if (button1.falling())
lcorralesc1 0:9aa80672eb3d 171 {
lcorralesc1 0:9aa80672eb3d 172 led1 =!led1;
lcorralesc1 0:9aa80672eb3d 173 if (p==1)
lcorralesc1 0:9aa80672eb3d 174 {
lcorralesc1 0:9aa80672eb3d 175 ++sp;
Equipo2_2015_1 1:0be27050f046 176 if (sp>=999)//se limita hasta 999
Equipo2_2015_1 1:0be27050f046 177 {
Equipo2_2015_1 1:0be27050f046 178 sp= 999;
Equipo2_2015_1 1:0be27050f046 179 }
lcorralesc1 0:9aa80672eb3d 180 lcd.locate(3,0);
lcorralesc1 0:9aa80672eb3d 181 lcd.printf(" ");
lcorralesc1 0:9aa80672eb3d 182 lcd.locate(3,0);
lcorralesc1 0:9aa80672eb3d 183 lcd.printf("%d", sp);
Equipo2_2015_1 1:0be27050f046 184 wait (0.5);
Equipo2_2015_1 1:0be27050f046 185 sp=incremento(3,0,sp); //se llama la función auxiliar
lcorralesc1 0:9aa80672eb3d 186 }
lcorralesc1 0:9aa80672eb3d 187 else if (p==2)
lcorralesc1 0:9aa80672eb3d 188 {
lcorralesc1 0:9aa80672eb3d 189 ++kp;
Equipo2_2015_1 1:0be27050f046 190 if (kp>=999)//se limita hasta 999
Equipo2_2015_1 1:0be27050f046 191 {
Equipo2_2015_1 1:0be27050f046 192 kp= 999;
Equipo2_2015_1 1:0be27050f046 193 }
lcorralesc1 0:9aa80672eb3d 194 lcd.locate(11,0);
lcorralesc1 0:9aa80672eb3d 195 lcd.printf(" ");
lcorralesc1 0:9aa80672eb3d 196 lcd.locate(11,0);
lcorralesc1 0:9aa80672eb3d 197 lcd.printf("%d", kp);
Equipo2_2015_1 1:0be27050f046 198 wait (0.5);
Equipo2_2015_1 1:0be27050f046 199 kp=incremento(11,0,kp); //se llama la función auxiliar
lcorralesc1 0:9aa80672eb3d 200 }
lcorralesc1 0:9aa80672eb3d 201 else if (p==3)
lcorralesc1 0:9aa80672eb3d 202 {
lcorralesc1 0:9aa80672eb3d 203 ++ki;
Equipo2_2015_1 1:0be27050f046 204 if (ki>=999)
Equipo2_2015_1 1:0be27050f046 205 {
Equipo2_2015_1 1:0be27050f046 206 ki= 999;
Equipo2_2015_1 1:0be27050f046 207 }
lcorralesc1 0:9aa80672eb3d 208 lcd.locate(3,1);
lcorralesc1 0:9aa80672eb3d 209 lcd.printf(" ");
lcorralesc1 0:9aa80672eb3d 210 lcd.locate(3,1);
lcorralesc1 0:9aa80672eb3d 211 lcd.printf("%d", ki);
Equipo2_2015_1 1:0be27050f046 212 wait (0.5);
Equipo2_2015_1 1:0be27050f046 213 ki =incremento(3,1,ki); //se llama la función auxiliar
lcorralesc1 0:9aa80672eb3d 214 }
lcorralesc1 0:9aa80672eb3d 215 else if (p==4)
lcorralesc1 0:9aa80672eb3d 216 {
lcorralesc1 0:9aa80672eb3d 217 ++kd;
Equipo2_2015_1 1:0be27050f046 218 if (kd>=999)
Equipo2_2015_1 1:0be27050f046 219 {
Equipo2_2015_1 1:0be27050f046 220 kd = 999;
Equipo2_2015_1 1:0be27050f046 221 }
lcorralesc1 0:9aa80672eb3d 222 lcd.locate(11,1);
lcorralesc1 0:9aa80672eb3d 223 lcd.printf(" ");
lcorralesc1 0:9aa80672eb3d 224 lcd.locate(11,1);
lcorralesc1 0:9aa80672eb3d 225 lcd.printf("%d", kd);
Equipo2_2015_1 1:0be27050f046 226 wait (0.5);
Equipo2_2015_1 1:0be27050f046 227 kd =incremento(11,1,kd); //se llama la función auxiliar
lcorralesc1 0:9aa80672eb3d 228 }
lcorralesc1 0:9aa80672eb3d 229 }
lcorralesc1 0:9aa80672eb3d 230 if (button2.falling())
lcorralesc1 0:9aa80672eb3d 231 {
lcorralesc1 0:9aa80672eb3d 232 led2 =!led2;
lcorralesc1 0:9aa80672eb3d 233 if (p==1)
lcorralesc1 0:9aa80672eb3d 234 {
lcorralesc1 0:9aa80672eb3d 235 if (sp==0) // no mostrar nada
lcorralesc1 0:9aa80672eb3d 236 {
lcorralesc1 0:9aa80672eb3d 237 }
lcorralesc1 0:9aa80672eb3d 238 else
lcorralesc1 0:9aa80672eb3d 239 {
lcorralesc1 0:9aa80672eb3d 240 --sp;
lcorralesc1 0:9aa80672eb3d 241 lcd.locate(3,0);
lcorralesc1 0:9aa80672eb3d 242 lcd.printf(" ");
lcorralesc1 0:9aa80672eb3d 243 lcd.locate(3,0);
lcorralesc1 0:9aa80672eb3d 244 lcd.printf("%d", sp);
Equipo2_2015_1 1:0be27050f046 245 wait(0.5);
Equipo2_2015_1 1:0be27050f046 246 sp =decremento(3,0,sp); //se llama la función auxiliar
lcorralesc1 0:9aa80672eb3d 247 }
lcorralesc1 0:9aa80672eb3d 248 }
lcorralesc1 0:9aa80672eb3d 249 if (p==2)
lcorralesc1 0:9aa80672eb3d 250 {
lcorralesc1 0:9aa80672eb3d 251 if (kp==0) // no mostrar nada
lcorralesc1 0:9aa80672eb3d 252 {
lcorralesc1 0:9aa80672eb3d 253 }
lcorralesc1 0:9aa80672eb3d 254 else
lcorralesc1 0:9aa80672eb3d 255 {
lcorralesc1 0:9aa80672eb3d 256 --kp;
lcorralesc1 0:9aa80672eb3d 257 lcd.locate(11,0);
lcorralesc1 0:9aa80672eb3d 258 lcd.printf(" ");
lcorralesc1 0:9aa80672eb3d 259 lcd.locate(11,0);
lcorralesc1 0:9aa80672eb3d 260 lcd.printf("%d", kp);
Equipo2_2015_1 1:0be27050f046 261 wait(0.5);
Equipo2_2015_1 1:0be27050f046 262 kp =decremento(11,0,kp); //se llama la función auxiliar
lcorralesc1 0:9aa80672eb3d 263 }
lcorralesc1 0:9aa80672eb3d 264 }
lcorralesc1 0:9aa80672eb3d 265 if (p==3)
lcorralesc1 0:9aa80672eb3d 266 {
lcorralesc1 0:9aa80672eb3d 267 if (ki==0) // no mostrar nada
lcorralesc1 0:9aa80672eb3d 268 {
lcorralesc1 0:9aa80672eb3d 269 }
lcorralesc1 0:9aa80672eb3d 270 else
lcorralesc1 0:9aa80672eb3d 271 {
lcorralesc1 0:9aa80672eb3d 272 --ki;
lcorralesc1 0:9aa80672eb3d 273 lcd.locate(3,1);
lcorralesc1 0:9aa80672eb3d 274 lcd.printf(" ");
lcorralesc1 0:9aa80672eb3d 275 lcd.locate(3,1);
lcorralesc1 0:9aa80672eb3d 276 lcd.printf("%d", ki);
Equipo2_2015_1 1:0be27050f046 277 wait(0.5);
Equipo2_2015_1 1:0be27050f046 278 ki =decremento(3,1,ki); //se llama la función auxiliar
lcorralesc1 0:9aa80672eb3d 279 }
lcorralesc1 0:9aa80672eb3d 280 }
lcorralesc1 0:9aa80672eb3d 281 if (p==4)
lcorralesc1 0:9aa80672eb3d 282 {
lcorralesc1 0:9aa80672eb3d 283 if (kd==0) // no mostrar nada
lcorralesc1 0:9aa80672eb3d 284 {
lcorralesc1 0:9aa80672eb3d 285 }
lcorralesc1 0:9aa80672eb3d 286 else
lcorralesc1 0:9aa80672eb3d 287 {
lcorralesc1 0:9aa80672eb3d 288 --kd;
lcorralesc1 0:9aa80672eb3d 289 lcd.locate(11,1);
lcorralesc1 0:9aa80672eb3d 290 lcd.printf(" ");
lcorralesc1 0:9aa80672eb3d 291 lcd.locate(11,1);
lcorralesc1 0:9aa80672eb3d 292 lcd.printf("%d", kd);
Equipo2_2015_1 1:0be27050f046 293 wait(0.5);
Equipo2_2015_1 1:0be27050f046 294 kd =decremento(11,1,kd); //se llama la función auxiliar
lcorralesc1 0:9aa80672eb3d 295 }
lcorralesc1 0:9aa80672eb3d 296 }
lcorralesc1 0:9aa80672eb3d 297 }
lcorralesc1 0:9aa80672eb3d 298 if (button3.falling())
lcorralesc1 0:9aa80672eb3d 299 {
lcorralesc1 0:9aa80672eb3d 300 led3 =!led3;
lcorralesc1 0:9aa80672eb3d 301 if (p==1)
lcorralesc1 0:9aa80672eb3d 302 {
lcorralesc1 0:9aa80672eb3d 303 ++p;
lcorralesc1 0:9aa80672eb3d 304 lcd.locate(11,0);
lcorralesc1 0:9aa80672eb3d 305 lcd.printf("%d", kp);
lcorralesc1 0:9aa80672eb3d 306
lcorralesc1 0:9aa80672eb3d 307
lcorralesc1 0:9aa80672eb3d 308 }
lcorralesc1 0:9aa80672eb3d 309 else if (p==2)
lcorralesc1 0:9aa80672eb3d 310 {
lcorralesc1 0:9aa80672eb3d 311 ++p;
lcorralesc1 0:9aa80672eb3d 312 lcd.locate(3,1);
lcorralesc1 0:9aa80672eb3d 313 lcd.printf("%d", ki);
lcorralesc1 0:9aa80672eb3d 314 lcd.locate(3,1);
lcorralesc1 0:9aa80672eb3d 315
lcorralesc1 0:9aa80672eb3d 316 }
lcorralesc1 0:9aa80672eb3d 317 else if (p==3)
lcorralesc1 0:9aa80672eb3d 318 {
lcorralesc1 0:9aa80672eb3d 319 ++p;
lcorralesc1 0:9aa80672eb3d 320 lcd.locate(11,1);
lcorralesc1 0:9aa80672eb3d 321 lcd.printf("%d", kd);
lcorralesc1 0:9aa80672eb3d 322
lcorralesc1 0:9aa80672eb3d 323
lcorralesc1 0:9aa80672eb3d 324 }
lcorralesc1 0:9aa80672eb3d 325 else if (p==4)
lcorralesc1 0:9aa80672eb3d 326 {
lcorralesc1 0:9aa80672eb3d 327 p=1;
lcorralesc1 0:9aa80672eb3d 328 lcd.locate(3,0);
lcorralesc1 0:9aa80672eb3d 329 lcd.printf("%d", sp);
lcorralesc1 0:9aa80672eb3d 330
lcorralesc1 0:9aa80672eb3d 331
lcorralesc1 0:9aa80672eb3d 332 }
lcorralesc1 0:9aa80672eb3d 333 }
Equipo2_2015_1 1:0be27050f046 334
Equipo2_2015_1 1:0be27050f046 335 if (button4.falling()){ //Botón Enter
Equipo2_2015_1 1:0be27050f046 336
Equipo2_2015_1 1:0be27050f046 337 break; //se sale del ciclo cuando se oprime el botón Enter
Equipo2_2015_1 1:0be27050f046 338 }
Equipo2_2015_1 1:0be27050f046 339
lcorralesc1 0:9aa80672eb3d 340 }
Equipo2_2015_1 1:0be27050f046 341
Equipo2_2015_1 1:0be27050f046 342 lcd.writeCommand(C4);//escribimos un comando segun el manual del modulo LCD para quitar cursor bajo
Equipo2_2015_1 1:0be27050f046 343 lcd.cls(); //borra la pantalla
Equipo2_2015_1 1:0be27050f046 344 lcd.printf("VALORES \nGUARDADOS");
Equipo2_2015_1 1:0be27050f046 345 wait(2);
Equipo2_2015_1 1:0be27050f046 346
Equipo2_2015_1 1:0be27050f046 347 // se imprimen los parches del control *****************************************
Equipo2_2015_1 1:0be27050f046 348 lcd.cls();
Equipo2_2015_1 1:0be27050f046 349 lcd.printf("Er=%d",err);
Equipo2_2015_1 1:0be27050f046 350 lcd.locate(8,0);
Equipo2_2015_1 1:0be27050f046 351 lcd.printf("Me=%d",med);
Equipo2_2015_1 1:0be27050f046 352 lcd.locate(0,1);
Equipo2_2015_1 1:0be27050f046 353 lcd.printf("Sp=%d",sp);
Equipo2_2015_1 1:0be27050f046 354 lcd.locate(8,1);
Equipo2_2015_1 1:0be27050f046 355 lcd.printf("Co=%d",pid);
Equipo2_2015_1 1:0be27050f046 356 wait(2);
Equipo2_2015_1 1:0be27050f046 357
Equipo2_2015_1 1:0be27050f046 358
Equipo2_2015_1 1:0be27050f046 359 // CICLO PRINCIPAL CONTROLADOR PID
Equipo2_2015_1 1:0be27050f046 360 while(1) {
Equipo2_2015_1 1:0be27050f046 361 med=1000*y.read(); //leer puerto analogo y asignar a med
Equipo2_2015_1 1:0be27050f046 362 err = (sp-med);
Equipo2_2015_1 1:0be27050f046 363 ap = kp*err;
Equipo2_2015_1 1:0be27050f046 364 ai =(ki*err)+ai; //calculo de la integral del error
Equipo2_2015_1 1:0be27050f046 365 ad = kd*(err-err_v); //calculo de la accion derivativa
Equipo2_2015_1 1:0be27050f046 366 pid = (ap+ai+ad);
Equipo2_2015_1 1:0be27050f046 367
Equipo2_2015_1 1:0be27050f046 368
Equipo2_2015_1 1:0be27050f046 369 if (pid > 999){
Equipo2_2015_1 1:0be27050f046 370 pid=1000;
Equipo2_2015_1 1:0be27050f046 371 }
Equipo2_2015_1 1:0be27050f046 372 else if (pid<0){
Equipo2_2015_1 1:0be27050f046 373 pid=0;
Equipo2_2015_1 1:0be27050f046 374 }
Equipo2_2015_1 1:0be27050f046 375 // se actualizan las variables *******************************************
Equipo2_2015_1 1:0be27050f046 376 err_v = err;
Equipo2_2015_1 1:0be27050f046 377
Equipo2_2015_1 1:0be27050f046 378 //se muestran las variables******************************************
Equipo2_2015_1 1:0be27050f046 379
Equipo2_2015_1 1:0be27050f046 380 if (b==0)
Equipo2_2015_1 1:0be27050f046 381 {
Equipo2_2015_1 1:0be27050f046 382 t.start();
Equipo2_2015_1 1:0be27050f046 383 b=1;
Equipo2_2015_1 1:0be27050f046 384 }
Equipo2_2015_1 1:0be27050f046 385 if (t>=0.4){
Equipo2_2015_1 1:0be27050f046 386 wait(0.05);
Equipo2_2015_1 1:0be27050f046 387 lcd.locate(3,0);
Equipo2_2015_1 1:0be27050f046 388 lcd.printf(" ");
Equipo2_2015_1 1:0be27050f046 389 lcd.locate(3,0);
Equipo2_2015_1 1:0be27050f046 390 lcd.printf("%d",err);
Equipo2_2015_1 1:0be27050f046 391 lcd.locate(11,0);
Equipo2_2015_1 1:0be27050f046 392 lcd.printf(" ");
Equipo2_2015_1 1:0be27050f046 393 lcd.locate(11,0);
Equipo2_2015_1 1:0be27050f046 394 lcd.printf("%d",med);
Equipo2_2015_1 1:0be27050f046 395 lcd.locate(3,1);
Equipo2_2015_1 1:0be27050f046 396 lcd.printf(" ");
Equipo2_2015_1 1:0be27050f046 397 lcd.locate(3,1);
Equipo2_2015_1 1:0be27050f046 398 lcd.printf("%d",sp);
Equipo2_2015_1 1:0be27050f046 399 lcd.locate(11,1);
Equipo2_2015_1 1:0be27050f046 400 lcd.printf(" ");
Equipo2_2015_1 1:0be27050f046 401 lcd.locate(11,1);
Equipo2_2015_1 1:0be27050f046 402 lcd.printf("%d ",pid);
Equipo2_2015_1 1:0be27050f046 403 t.reset();
Equipo2_2015_1 1:0be27050f046 404 b=0;
lcorralesc1 0:9aa80672eb3d 405 }
Equipo2_2015_1 1:0be27050f046 406
Equipo2_2015_1 1:0be27050f046 407 //Normalizacion de la salida
Equipo2_2015_1 1:0be27050f046 408 pidn=pid/1000;
Equipo2_2015_1 1:0be27050f046 409 // se envia el valor pid a puerto analogico de salida (D/A) **************
Equipo2_2015_1 1:0be27050f046 410 u.write(pidn);
Equipo2_2015_1 1:0be27050f046 411
Equipo2_2015_1 1:0be27050f046 412 // se repite el ciclo
Equipo2_2015_1 1:0be27050f046 413 wait(0.1);
Equipo2_2015_1 1:0be27050f046 414 }
Equipo2_2015_1 1:0be27050f046 415
Equipo2_2015_1 1:0be27050f046 416
Equipo2_2015_1 1:0be27050f046 417 }
Equipo2_2015_1 1:0be27050f046 418