Observar las variables de control de una planta RC

Dependencies:   DebouncedIn TextLCD mbed

Committer:
ikortegag
Date:
Wed Dec 11 23:08:46 2013 +0000
Revision:
0:633c42973f34
Observar las variables de control de una planta RC

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ikortegag 0:633c42973f34 1
ikortegag 0:633c42973f34 2 #include "mbed.h"
ikortegag 0:633c42973f34 3 #include "DebouncedIn.h"
ikortegag 0:633c42973f34 4 #include "TextLCD.h"
ikortegag 0:633c42973f34 5
ikortegag 0:633c42973f34 6 AnalogIn Vin(PTC2);
ikortegag 0:633c42973f34 7 TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7
ikortegag 0:633c42973f34 8
ikortegag 0:633c42973f34 9 AnalogIn y(PTB0);
ikortegag 0:633c42973f34 10 AnalogOut u(PTE30);
ikortegag 0:633c42973f34 11
ikortegag 0:633c42973f34 12 DigitalOut l1(LED1);
ikortegag 0:633c42973f34 13 DigitalOut l2(LED2);
ikortegag 0:633c42973f34 14 DigitalOut l3(LED3);
ikortegag 0:633c42973f34 15 DigitalIn b1(PTC12);
ikortegag 0:633c42973f34 16 DigitalIn b2(PTC13);
ikortegag 0:633c42973f34 17 DigitalIn b3(PTC16);
ikortegag 0:633c42973f34 18 DigitalIn b4(PTC17);
ikortegag 0:633c42973f34 19
ikortegag 0:633c42973f34 20 int spnum=0,kpnum=0,kinum=0,kdnum=0,k=1;
ikortegag 0:633c42973f34 21 int bandera;
ikortegag 0:633c42973f34 22 Timer t;
ikortegag 0:633c42973f34 23 float tiempo;
ikortegag 0:633c42973f34 24
ikortegag 0:633c42973f34 25 //codigos movimiento del curzor
ikortegag 0:633c42973f34 26
ikortegag 0:633c42973f34 27 //int C1=0x0E; // solo muestra el curzor
ikortegag 0:633c42973f34 28 int C2=0x18; // desplaza izquierda
ikortegag 0:633c42973f34 29 int C3=0x1A; // desplaza derecha
ikortegag 0:633c42973f34 30 int C4=0x0C; // quito cursor bajo
ikortegag 0:633c42973f34 31
ikortegag 0:633c42973f34 32 int C1=0x0F;
ikortegag 0:633c42973f34 33 int err, med, yr, pid, ap, ai, ad, err_v, cycle;
ikortegag 0:633c42973f34 34 float pidn;
ikortegag 0:633c42973f34 35 int pos=1;
ikortegag 0:633c42973f34 36 //int spnum=500, kinum=2, kpnum=1, kdnum=0, pos=1;
ikortegag 0:633c42973f34 37 //int incremento=1,flagt=0;
ikortegag 0:633c42973f34 38
ikortegag 0:633c42973f34 39 int main()
ikortegag 0:633c42973f34 40 {
ikortegag 0:633c42973f34 41 lcd.cls(); // Borrar Pantalla
ikortegag 0:633c42973f34 42 lcd.writeCommand(C1);//escribimos un comando segun el manual del modulo LCD
ikortegag 0:633c42973f34 43
ikortegag 0:633c42973f34 44 lcd.locate(8,0);
ikortegag 0:633c42973f34 45 lcd.printf("Kp=%d",kpnum);
ikortegag 0:633c42973f34 46 lcd.locate(0,1);
ikortegag 0:633c42973f34 47 lcd.printf("Ki=%d",kinum);
ikortegag 0:633c42973f34 48 lcd.locate(8,1);
ikortegag 0:633c42973f34 49 lcd.printf("Kd=%d",kdnum);
ikortegag 0:633c42973f34 50 lcd.locate(0,0);
ikortegag 0:633c42973f34 51 lcd.printf("Sp=%d",spnum);
ikortegag 0:633c42973f34 52
ikortegag 0:633c42973f34 53 while(1)
ikortegag 0:633c42973f34 54 {
ikortegag 0:633c42973f34 55 while(k==1)
ikortegag 0:633c42973f34 56 {
ikortegag 0:633c42973f34 57 if(b1 & spnum<=1000)
ikortegag 0:633c42973f34 58 {
ikortegag 0:633c42973f34 59 l1 = !l1;
ikortegag 0:633c42973f34 60 if(bandera==0)
ikortegag 0:633c42973f34 61 {
ikortegag 0:633c42973f34 62 t.start();
ikortegag 0:633c42973f34 63 bandera=1;
ikortegag 0:633c42973f34 64 }
ikortegag 0:633c42973f34 65 wait(0.50);
ikortegag 0:633c42973f34 66 if(b1 & spnum<=1000)
ikortegag 0:633c42973f34 67 {
ikortegag 0:633c42973f34 68 tiempo=t.read();
ikortegag 0:633c42973f34 69 if(tiempo<5)
ikortegag 0:633c42973f34 70 {
ikortegag 0:633c42973f34 71 spnum++;
ikortegag 0:633c42973f34 72 lcd.locate(3,0);
ikortegag 0:633c42973f34 73 lcd.printf("%d",spnum);
ikortegag 0:633c42973f34 74 }
ikortegag 0:633c42973f34 75
ikortegag 0:633c42973f34 76 if(tiempo>=5 & tiempo<10)
ikortegag 0:633c42973f34 77 {
ikortegag 0:633c42973f34 78 spnum+=10;
ikortegag 0:633c42973f34 79 lcd.locate(3,0);
ikortegag 0:633c42973f34 80 lcd.printf("%d",spnum);
ikortegag 0:633c42973f34 81 }
ikortegag 0:633c42973f34 82
ikortegag 0:633c42973f34 83 if(tiempo>=10)
ikortegag 0:633c42973f34 84 {
ikortegag 0:633c42973f34 85 spnum+=100;
ikortegag 0:633c42973f34 86 lcd.locate(3,0);
ikortegag 0:633c42973f34 87 lcd.printf("%d",spnum);
ikortegag 0:633c42973f34 88 }
ikortegag 0:633c42973f34 89 }
ikortegag 0:633c42973f34 90 else
ikortegag 0:633c42973f34 91 {
ikortegag 0:633c42973f34 92 t.start();
ikortegag 0:633c42973f34 93 bandera=0;
ikortegag 0:633c42973f34 94 }
ikortegag 0:633c42973f34 95 }
ikortegag 0:633c42973f34 96
ikortegag 0:633c42973f34 97
ikortegag 0:633c42973f34 98 if(b2 & spnum>=1)
ikortegag 0:633c42973f34 99 {
ikortegag 0:633c42973f34 100 l2 = !l2;
ikortegag 0:633c42973f34 101
ikortegag 0:633c42973f34 102 if(bandera==0)
ikortegag 0:633c42973f34 103 {
ikortegag 0:633c42973f34 104 t.start();
ikortegag 0:633c42973f34 105 bandera=1;
ikortegag 0:633c42973f34 106 }
ikortegag 0:633c42973f34 107
ikortegag 0:633c42973f34 108 wait(0.50);
ikortegag 0:633c42973f34 109
ikortegag 0:633c42973f34 110 if(b2 & spnum>=1)
ikortegag 0:633c42973f34 111 {
ikortegag 0:633c42973f34 112 tiempo=t.read();
ikortegag 0:633c42973f34 113
ikortegag 0:633c42973f34 114 if(tiempo<5)
ikortegag 0:633c42973f34 115 {
ikortegag 0:633c42973f34 116 spnum--;
ikortegag 0:633c42973f34 117 lcd.locate(3,0);
ikortegag 0:633c42973f34 118 lcd.printf("%d",spnum);
ikortegag 0:633c42973f34 119 }
ikortegag 0:633c42973f34 120
ikortegag 0:633c42973f34 121 if(tiempo>=5 & tiempo<10)
ikortegag 0:633c42973f34 122 {
ikortegag 0:633c42973f34 123 spnum-=10;
ikortegag 0:633c42973f34 124 lcd.locate(3,0);
ikortegag 0:633c42973f34 125 lcd.printf("%d",spnum);
ikortegag 0:633c42973f34 126 }
ikortegag 0:633c42973f34 127
ikortegag 0:633c42973f34 128 if(tiempo>=10)
ikortegag 0:633c42973f34 129 {
ikortegag 0:633c42973f34 130 spnum-=100;
ikortegag 0:633c42973f34 131 lcd.locate(3,0);
ikortegag 0:633c42973f34 132 lcd.printf("%d",spnum);
ikortegag 0:633c42973f34 133 }
ikortegag 0:633c42973f34 134 }
ikortegag 0:633c42973f34 135 else
ikortegag 0:633c42973f34 136 {
ikortegag 0:633c42973f34 137 t.start();
ikortegag 0:633c42973f34 138 bandera=0;
ikortegag 0:633c42973f34 139 }
ikortegag 0:633c42973f34 140 }
ikortegag 0:633c42973f34 141 if (b3)
ikortegag 0:633c42973f34 142 {
ikortegag 0:633c42973f34 143 k+=1;
ikortegag 0:633c42973f34 144 wait(0.25);
ikortegag 0:633c42973f34 145 lcd.locate(12,0);lcd.printf("%d",kpnum);
ikortegag 0:633c42973f34 146 }
ikortegag 0:633c42973f34 147
ikortegag 0:633c42973f34 148 }
ikortegag 0:633c42973f34 149
ikortegag 0:633c42973f34 150 while(k==2)
ikortegag 0:633c42973f34 151 {
ikortegag 0:633c42973f34 152 if(b1 & kpnum<=1000)
ikortegag 0:633c42973f34 153 {
ikortegag 0:633c42973f34 154 l1 = !l1;
ikortegag 0:633c42973f34 155 if(bandera==0)
ikortegag 0:633c42973f34 156 {
ikortegag 0:633c42973f34 157 t.start();
ikortegag 0:633c42973f34 158 bandera=1;
ikortegag 0:633c42973f34 159 }
ikortegag 0:633c42973f34 160 wait(0.50);
ikortegag 0:633c42973f34 161
ikortegag 0:633c42973f34 162 if(b1 & kpnum<=1000)
ikortegag 0:633c42973f34 163 {
ikortegag 0:633c42973f34 164 tiempo=t.read();
ikortegag 0:633c42973f34 165
ikortegag 0:633c42973f34 166 if(tiempo<5)
ikortegag 0:633c42973f34 167 {
ikortegag 0:633c42973f34 168 kpnum++;
ikortegag 0:633c42973f34 169 lcd.locate(12,0);
ikortegag 0:633c42973f34 170 lcd.printf("%d",kpnum);
ikortegag 0:633c42973f34 171 }
ikortegag 0:633c42973f34 172
ikortegag 0:633c42973f34 173 if(tiempo>=5 & tiempo<10)
ikortegag 0:633c42973f34 174 {
ikortegag 0:633c42973f34 175 kpnum+=10;
ikortegag 0:633c42973f34 176 lcd.locate(12,0);
ikortegag 0:633c42973f34 177 lcd.printf("%d",kpnum);
ikortegag 0:633c42973f34 178 }
ikortegag 0:633c42973f34 179
ikortegag 0:633c42973f34 180 if(tiempo>=10)
ikortegag 0:633c42973f34 181 {
ikortegag 0:633c42973f34 182 kpnum+=100;
ikortegag 0:633c42973f34 183 lcd.locate(12,0);
ikortegag 0:633c42973f34 184 lcd.printf("%d",kpnum);
ikortegag 0:633c42973f34 185 }
ikortegag 0:633c42973f34 186 }
ikortegag 0:633c42973f34 187 else
ikortegag 0:633c42973f34 188 {
ikortegag 0:633c42973f34 189 t.start();
ikortegag 0:633c42973f34 190 bandera=0;
ikortegag 0:633c42973f34 191 }
ikortegag 0:633c42973f34 192 }
ikortegag 0:633c42973f34 193 if(b2 & kpnum>=1)
ikortegag 0:633c42973f34 194 {
ikortegag 0:633c42973f34 195 l2 = !l2;
ikortegag 0:633c42973f34 196
ikortegag 0:633c42973f34 197 if(bandera==0)
ikortegag 0:633c42973f34 198 {
ikortegag 0:633c42973f34 199 t.start();
ikortegag 0:633c42973f34 200 bandera=1;
ikortegag 0:633c42973f34 201 }
ikortegag 0:633c42973f34 202 wait(0.50);
ikortegag 0:633c42973f34 203
ikortegag 0:633c42973f34 204 if(b2 & kpnum>=1)
ikortegag 0:633c42973f34 205 {
ikortegag 0:633c42973f34 206 tiempo=t.read();
ikortegag 0:633c42973f34 207
ikortegag 0:633c42973f34 208 if(tiempo<5)
ikortegag 0:633c42973f34 209 {
ikortegag 0:633c42973f34 210 kpnum--;
ikortegag 0:633c42973f34 211 lcd.locate(12,0);
ikortegag 0:633c42973f34 212 lcd.printf("%d",kpnum);
ikortegag 0:633c42973f34 213 }
ikortegag 0:633c42973f34 214
ikortegag 0:633c42973f34 215 if(tiempo>=5 & tiempo<10)
ikortegag 0:633c42973f34 216 {
ikortegag 0:633c42973f34 217 kpnum-=10;
ikortegag 0:633c42973f34 218 lcd.locate(12,0);
ikortegag 0:633c42973f34 219 lcd.printf("%d",kpnum);
ikortegag 0:633c42973f34 220 }
ikortegag 0:633c42973f34 221
ikortegag 0:633c42973f34 222 if(tiempo>=10)
ikortegag 0:633c42973f34 223 {
ikortegag 0:633c42973f34 224 kpnum-=100;
ikortegag 0:633c42973f34 225 lcd.locate(12,0);
ikortegag 0:633c42973f34 226 lcd.printf("%d",kpnum);
ikortegag 0:633c42973f34 227 }
ikortegag 0:633c42973f34 228 }
ikortegag 0:633c42973f34 229 else
ikortegag 0:633c42973f34 230 {
ikortegag 0:633c42973f34 231 t.start();
ikortegag 0:633c42973f34 232 bandera=0;
ikortegag 0:633c42973f34 233 }
ikortegag 0:633c42973f34 234 }
ikortegag 0:633c42973f34 235 if (b3)
ikortegag 0:633c42973f34 236 {
ikortegag 0:633c42973f34 237 k+=1;
ikortegag 0:633c42973f34 238 wait(0.25);
ikortegag 0:633c42973f34 239 lcd.locate(3,1); lcd.printf("%d",kinum);
ikortegag 0:633c42973f34 240 }
ikortegag 0:633c42973f34 241 }
ikortegag 0:633c42973f34 242
ikortegag 0:633c42973f34 243
ikortegag 0:633c42973f34 244 while(k==3)
ikortegag 0:633c42973f34 245 {
ikortegag 0:633c42973f34 246 if(b1 & kinum<=1000)
ikortegag 0:633c42973f34 247 {
ikortegag 0:633c42973f34 248 l1 = !l1;
ikortegag 0:633c42973f34 249
ikortegag 0:633c42973f34 250 if(bandera==0)
ikortegag 0:633c42973f34 251 {
ikortegag 0:633c42973f34 252 t.start();
ikortegag 0:633c42973f34 253 bandera=1;
ikortegag 0:633c42973f34 254 }
ikortegag 0:633c42973f34 255 wait(0.50);
ikortegag 0:633c42973f34 256
ikortegag 0:633c42973f34 257 if(b1 & kinum<=1000)
ikortegag 0:633c42973f34 258 {
ikortegag 0:633c42973f34 259 tiempo=t.read();
ikortegag 0:633c42973f34 260
ikortegag 0:633c42973f34 261 if(tiempo<5)
ikortegag 0:633c42973f34 262 {
ikortegag 0:633c42973f34 263 kinum++;
ikortegag 0:633c42973f34 264 lcd.locate(3,1);
ikortegag 0:633c42973f34 265 lcd.printf("%d",kinum);
ikortegag 0:633c42973f34 266 }
ikortegag 0:633c42973f34 267
ikortegag 0:633c42973f34 268 if(tiempo>=5 & tiempo<10)
ikortegag 0:633c42973f34 269 {
ikortegag 0:633c42973f34 270 kinum+=10;
ikortegag 0:633c42973f34 271 lcd.locate(3,1);
ikortegag 0:633c42973f34 272 lcd.printf("%d",kinum);
ikortegag 0:633c42973f34 273 }
ikortegag 0:633c42973f34 274
ikortegag 0:633c42973f34 275 if(tiempo>=10)
ikortegag 0:633c42973f34 276 {
ikortegag 0:633c42973f34 277 kinum+=100;
ikortegag 0:633c42973f34 278 lcd.locate(3,1);
ikortegag 0:633c42973f34 279 lcd.printf("%d",kinum);
ikortegag 0:633c42973f34 280 }
ikortegag 0:633c42973f34 281 }
ikortegag 0:633c42973f34 282
ikortegag 0:633c42973f34 283 else
ikortegag 0:633c42973f34 284 {
ikortegag 0:633c42973f34 285 t.start();
ikortegag 0:633c42973f34 286 bandera=0;
ikortegag 0:633c42973f34 287 }
ikortegag 0:633c42973f34 288 }
ikortegag 0:633c42973f34 289
ikortegag 0:633c42973f34 290 if(b2 & kinum>=1)
ikortegag 0:633c42973f34 291 {
ikortegag 0:633c42973f34 292 l2 = !l2;
ikortegag 0:633c42973f34 293 if(bandera==0)
ikortegag 0:633c42973f34 294 {
ikortegag 0:633c42973f34 295 t.start();
ikortegag 0:633c42973f34 296 bandera=1;
ikortegag 0:633c42973f34 297 }
ikortegag 0:633c42973f34 298 wait(0.50);
ikortegag 0:633c42973f34 299
ikortegag 0:633c42973f34 300 if(b2 & kinum>=1)
ikortegag 0:633c42973f34 301 {
ikortegag 0:633c42973f34 302 tiempo=t.read();
ikortegag 0:633c42973f34 303
ikortegag 0:633c42973f34 304 if(tiempo<5)
ikortegag 0:633c42973f34 305 {
ikortegag 0:633c42973f34 306 kinum--;
ikortegag 0:633c42973f34 307 lcd.locate(3,1);
ikortegag 0:633c42973f34 308 lcd.printf("%d",kinum);
ikortegag 0:633c42973f34 309 }
ikortegag 0:633c42973f34 310
ikortegag 0:633c42973f34 311 if(tiempo>=5 & tiempo<10)
ikortegag 0:633c42973f34 312 {
ikortegag 0:633c42973f34 313 kinum-=10;
ikortegag 0:633c42973f34 314 lcd.locate(3,1);
ikortegag 0:633c42973f34 315 lcd.printf("%d",kinum);
ikortegag 0:633c42973f34 316 }
ikortegag 0:633c42973f34 317
ikortegag 0:633c42973f34 318 if(tiempo>=10)
ikortegag 0:633c42973f34 319 {
ikortegag 0:633c42973f34 320 kinum-=100;
ikortegag 0:633c42973f34 321 lcd.locate(3,1);
ikortegag 0:633c42973f34 322 lcd.printf("%d",kinum);
ikortegag 0:633c42973f34 323 }
ikortegag 0:633c42973f34 324 }
ikortegag 0:633c42973f34 325 else
ikortegag 0:633c42973f34 326 {
ikortegag 0:633c42973f34 327 t.start();
ikortegag 0:633c42973f34 328 bandera=0;
ikortegag 0:633c42973f34 329 }
ikortegag 0:633c42973f34 330 }
ikortegag 0:633c42973f34 331 if (b3)
ikortegag 0:633c42973f34 332 {
ikortegag 0:633c42973f34 333 k+=1;
ikortegag 0:633c42973f34 334 wait(0.25);
ikortegag 0:633c42973f34 335 lcd.locate(12,1); lcd.printf("%d",kdnum);
ikortegag 0:633c42973f34 336 }
ikortegag 0:633c42973f34 337 }
ikortegag 0:633c42973f34 338
ikortegag 0:633c42973f34 339 while(k==4)
ikortegag 0:633c42973f34 340 {
ikortegag 0:633c42973f34 341 if(b1 & kdnum<=1000)
ikortegag 0:633c42973f34 342 {
ikortegag 0:633c42973f34 343 l1 = !l1;
ikortegag 0:633c42973f34 344 if(bandera==0)
ikortegag 0:633c42973f34 345 {
ikortegag 0:633c42973f34 346 t.start();
ikortegag 0:633c42973f34 347 bandera=1;
ikortegag 0:633c42973f34 348 }
ikortegag 0:633c42973f34 349
ikortegag 0:633c42973f34 350 wait(0.50);
ikortegag 0:633c42973f34 351
ikortegag 0:633c42973f34 352 if(b1 & kdnum<=1000)
ikortegag 0:633c42973f34 353 {
ikortegag 0:633c42973f34 354 tiempo=t.read();
ikortegag 0:633c42973f34 355
ikortegag 0:633c42973f34 356 if(tiempo<5)
ikortegag 0:633c42973f34 357 {
ikortegag 0:633c42973f34 358 kdnum++;
ikortegag 0:633c42973f34 359 lcd.locate(12,1);
ikortegag 0:633c42973f34 360 lcd.printf("%d",kdnum);
ikortegag 0:633c42973f34 361 }
ikortegag 0:633c42973f34 362
ikortegag 0:633c42973f34 363 if(tiempo>=5 & tiempo<10)
ikortegag 0:633c42973f34 364 {
ikortegag 0:633c42973f34 365 kdnum+=10;
ikortegag 0:633c42973f34 366 lcd.locate(12,1);
ikortegag 0:633c42973f34 367 lcd.printf("%d",kdnum);
ikortegag 0:633c42973f34 368 }
ikortegag 0:633c42973f34 369
ikortegag 0:633c42973f34 370 if(tiempo>=10)
ikortegag 0:633c42973f34 371 {
ikortegag 0:633c42973f34 372 kdnum+=100;
ikortegag 0:633c42973f34 373 lcd.locate(12,1);
ikortegag 0:633c42973f34 374 lcd.printf("%d",kdnum);
ikortegag 0:633c42973f34 375 }
ikortegag 0:633c42973f34 376 }
ikortegag 0:633c42973f34 377 else
ikortegag 0:633c42973f34 378 {
ikortegag 0:633c42973f34 379 t.start();
ikortegag 0:633c42973f34 380 bandera=0;
ikortegag 0:633c42973f34 381 }
ikortegag 0:633c42973f34 382 }
ikortegag 0:633c42973f34 383
ikortegag 0:633c42973f34 384
ikortegag 0:633c42973f34 385 if(b2 & kdnum>=1)
ikortegag 0:633c42973f34 386 {
ikortegag 0:633c42973f34 387 l2 = !l2;
ikortegag 0:633c42973f34 388
ikortegag 0:633c42973f34 389 if(bandera==0)
ikortegag 0:633c42973f34 390 {
ikortegag 0:633c42973f34 391 t.start();
ikortegag 0:633c42973f34 392 bandera=1;
ikortegag 0:633c42973f34 393 }
ikortegag 0:633c42973f34 394 wait(0.50);
ikortegag 0:633c42973f34 395
ikortegag 0:633c42973f34 396 if(b2 & kdnum>=1)
ikortegag 0:633c42973f34 397 {
ikortegag 0:633c42973f34 398 tiempo=t.read();
ikortegag 0:633c42973f34 399
ikortegag 0:633c42973f34 400 if(tiempo<5)
ikortegag 0:633c42973f34 401 {
ikortegag 0:633c42973f34 402 kdnum--;
ikortegag 0:633c42973f34 403 lcd.locate(12,1);
ikortegag 0:633c42973f34 404 lcd.printf("%d",kdnum);
ikortegag 0:633c42973f34 405 }
ikortegag 0:633c42973f34 406
ikortegag 0:633c42973f34 407 if(tiempo>=5 & tiempo<10)
ikortegag 0:633c42973f34 408 {
ikortegag 0:633c42973f34 409 kdnum-=10;
ikortegag 0:633c42973f34 410 lcd.locate(12,1);
ikortegag 0:633c42973f34 411 lcd.printf("%d",kdnum);
ikortegag 0:633c42973f34 412 }
ikortegag 0:633c42973f34 413
ikortegag 0:633c42973f34 414 if(tiempo>=10)
ikortegag 0:633c42973f34 415 {
ikortegag 0:633c42973f34 416 kdnum-=100;
ikortegag 0:633c42973f34 417 lcd.locate(12,1);
ikortegag 0:633c42973f34 418 lcd.printf("%d",kdnum);
ikortegag 0:633c42973f34 419 }
ikortegag 0:633c42973f34 420 }
ikortegag 0:633c42973f34 421 else
ikortegag 0:633c42973f34 422 {
ikortegag 0:633c42973f34 423 t.start();
ikortegag 0:633c42973f34 424 bandera=0;
ikortegag 0:633c42973f34 425 }
ikortegag 0:633c42973f34 426 }
ikortegag 0:633c42973f34 427
ikortegag 0:633c42973f34 428 if (b3)
ikortegag 0:633c42973f34 429 {
ikortegag 0:633c42973f34 430 k=1;
ikortegag 0:633c42973f34 431 wait(0.25);
ikortegag 0:633c42973f34 432 lcd.locate(3,0);
ikortegag 0:633c42973f34 433 lcd.printf("%d",spnum);
ikortegag 0:633c42973f34 434 }
ikortegag 0:633c42973f34 435
ikortegag 0:633c42973f34 436 }
ikortegag 0:633c42973f34 437
ikortegag 0:633c42973f34 438
ikortegag 0:633c42973f34 439 if (b4)
ikortegag 0:633c42973f34 440 {
ikortegag 0:633c42973f34 441 break; //sale del bucle si pisan suiche4
ikortegag 0:633c42973f34 442 }
ikortegag 0:633c42973f34 443 continue;
ikortegag 0:633c42973f34 444 }
ikortegag 0:633c42973f34 445
ikortegag 0:633c42973f34 446
ikortegag 0:633c42973f34 447 //Transicion
ikortegag 0:633c42973f34 448
ikortegag 0:633c42973f34 449 lcd.writeCommand(C4);//escribimos un comando segun el manual del modulo LCD para quitar cursor bajo
ikortegag 0:633c42973f34 450 lcd.cls(); //borra la pantalla
ikortegag 0:633c42973f34 451 lcd.printf("GUARDADOS!");
ikortegag 0:633c42973f34 452 wait(1);
ikortegag 0:633c42973f34 453 lcd.cls();
ikortegag 0:633c42973f34 454 lcd.printf(" INICIA EL PID");
ikortegag 0:633c42973f34 455 wait(1);
ikortegag 0:633c42973f34 456 // se imprimen los parches del control *****************************************
ikortegag 0:633c42973f34 457 lcd.cls();
ikortegag 0:633c42973f34 458 lcd.printf("Er=%d",err);
ikortegag 0:633c42973f34 459 lcd.locate(8,0);
ikortegag 0:633c42973f34 460 lcd.printf("Me=%d",med);
ikortegag 0:633c42973f34 461 lcd.locate(0,1);
ikortegag 0:633c42973f34 462 lcd.printf("Sp=%d",spnum);
ikortegag 0:633c42973f34 463 lcd.locate(8,1);
ikortegag 0:633c42973f34 464 lcd.printf("Co=%d",pid);
ikortegag 0:633c42973f34 465 wait(2);
ikortegag 0:633c42973f34 466
ikortegag 0:633c42973f34 467 // CICLO PRINCIPAL CONTROLADOR PID
ikortegag 0:633c42973f34 468 bandera=0;
ikortegag 0:633c42973f34 469 while(1)
ikortegag 0:633c42973f34 470 {
ikortegag 0:633c42973f34 471 med=999*y.read(); //leer puerto analogo y asignar a med
ikortegag 0:633c42973f34 472 err = (spnum-med); //se calcula el error
ikortegag 0:633c42973f34 473
ikortegag 0:633c42973f34 474 ap = kpnum*err; //se calcula la accion proporcinal
ikortegag 0:633c42973f34 475
ikortegag 0:633c42973f34 476 // se verifica que la accion integral no sea muy grande
ikortegag 0:633c42973f34 477 if(ai<100)
ikortegag 0:633c42973f34 478 {
ikortegag 0:633c42973f34 479 ai =(kinum*err)+ai; //calculo de la integral del error
ikortegag 0:633c42973f34 480 }
ikortegag 0:633c42973f34 481
ikortegag 0:633c42973f34 482 ad = kdnum*(err-err_v); //calculo de la accion derivativa
ikortegag 0:633c42973f34 483
ikortegag 0:633c42973f34 484 pid = (ap+ai+ad);
ikortegag 0:633c42973f34 485
ikortegag 0:633c42973f34 486 // se verifica que pid sea positivo **************************************
ikortegag 0:633c42973f34 487 if(pid<=0)
ikortegag 0:633c42973f34 488 {
ikortegag 0:633c42973f34 489 pid=0;
ikortegag 0:633c42973f34 490 }
ikortegag 0:633c42973f34 491
ikortegag 0:633c42973f34 492 // se verifica que pid sea menor o igual la valor maximo *****************
ikortegag 0:633c42973f34 493 if (pid > 999)
ikortegag 0:633c42973f34 494 {
ikortegag 0:633c42973f34 495 pid=999;
ikortegag 0:633c42973f34 496 }
ikortegag 0:633c42973f34 497
ikortegag 0:633c42973f34 498 // se actualizan las variables *******************************************
ikortegag 0:633c42973f34 499 err_v = err;
ikortegag 0:633c42973f34 500
ikortegag 0:633c42973f34 501 //se muestran las variables******************************************
ikortegag 0:633c42973f34 502 if(bandera==0)
ikortegag 0:633c42973f34 503 {
ikortegag 0:633c42973f34 504 t.start();
ikortegag 0:633c42973f34 505 bandera=1;
ikortegag 0:633c42973f34 506 }
ikortegag 0:633c42973f34 507 if(t>=0.3)
ikortegag 0:633c42973f34 508 {
ikortegag 0:633c42973f34 509 lcd.locate(3,0);lcd.printf(" ");
ikortegag 0:633c42973f34 510 lcd.locate(3,0);lcd.printf("%d",err);
ikortegag 0:633c42973f34 511 lcd.locate(11,0);lcd.printf(" ");
ikortegag 0:633c42973f34 512 lcd.locate(11,0);lcd.printf("%d",med);
ikortegag 0:633c42973f34 513 lcd.locate(3,1);lcd.printf(" ");
ikortegag 0:633c42973f34 514 lcd.locate(3,1);lcd.printf("%d",spnum);
ikortegag 0:633c42973f34 515 lcd.locate(11,1);lcd.printf(" ");
ikortegag 0:633c42973f34 516 lcd.locate(11,1);lcd.printf("%d",pid);
ikortegag 0:633c42973f34 517 bandera=0;
ikortegag 0:633c42973f34 518 t.reset();
ikortegag 0:633c42973f34 519 }
ikortegag 0:633c42973f34 520
ikortegag 0:633c42973f34 521 //Normalizacion de la salida
ikortegag 0:633c42973f34 522 pidn=pid/999;
ikortegag 0:633c42973f34 523 // se envia el valor pid a puerto analogico de salida (D/A) **************
ikortegag 0:633c42973f34 524 u.write(pidn);
ikortegag 0:633c42973f34 525 // se repite el ciclo
ikortegag 0:633c42973f34 526 wait(0.005);
ikortegag 0:633c42973f34 527 }
ikortegag 0:633c42973f34 528
ikortegag 0:633c42973f34 529 }