ingrese los parámetros para el controlador PID, se pueden ingresar del 0 al 9999 pero para el debido funcionamiento del PID ingrese del 0 al 100 cada parametro
Dependencies: DebounceIn Debounced TextLCD mbed
main.cpp
00001 #include "mbed.h" 00002 #include "DebouncedIn.h" 00003 #include "DebounceIn.h" 00004 #include "TextLCD.h" 00005 AnalogIn Vin(PTC2); 00006 AnalogOut Vo(PTE30); 00007 int C1=0x0e; 00008 00009 int i=0; 00010 int k=0,u=0; 00011 00012 int j=0; 00013 int l=0,g=0; 00014 00015 int m=0; 00016 int n=0,q=0; 00017 int o=0; 00018 int p=0,h=0; 00019 00020 float kp, ki, kd, sp ,err, med, yr, pid, ap, ai, ad, err_v ,Sp; 00021 int x=1; 00022 00023 int main() 00024 { 00025 TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5) ;// declaración de los puertos del lcd 00026 DebounceIn b1(PTC16); //aumento 00027 DebounceIn b3(PTC12);// disminuye 00028 DebouncedIn b2(PTC13);// ,cambio de posición 00029 DebounceIn b4(PTC17);// Cabio de etiqueta 00030 lcd.printf("TAREA2:Proc"); // IMPRIMIR 00031 wait(1); // espera 1 segundo 00032 lcd.cls(); // borra lcd 00033 lcd.writeCommand(C1); // escribe el comando C1 00034 // Localiza y escribe los titulos Sp,Kp,Ki,Kd en la patalla 00035 lcd.locate(0,0); 00036 lcd.printf("Sp:%d",i); 00037 lcd.locate(8,0); 00038 lcd.printf("Kp:%d",j); 00039 lcd.locate(0,1); 00040 lcd.printf("Ki:%d",m); 00041 lcd.locate(8,1); 00042 lcd.printf("Kd:%d",o); 00043 // Ciclo infinito 00044 while (1) 00045 { 00046 if(b2.falling()) 00047 { 00048 x=x+1; 00049 } 00050 //condicionales para ubicación en pantalla 00051 if(x==1) 00052 {//a 00053 lcd.locate(3,0); 00054 lcd.printf("%d",i); 00055 //Ascenso 00056 if(b1.read()==1) 00057 { 00058 k=0; 00059 } 00060 if(b1.read()==0 && k<25) 00061 {//1.1 00062 k=k+1; 00063 i=i+1; 00064 wait(0.2); 00065 lcd.locate(3,0); 00066 lcd.printf("%d",i); 00067 }//1.1 00068 if(b1.read()==0 && k>=25 && k<50) 00069 {//1.2 00070 k=k+1; 00071 i=i+5; 00072 wait(0.2); 00073 lcd.locate(3,0); 00074 lcd.printf("%d",i); 00075 }//1.2 00076 00077 if(b1.read()==0 && k>=50 && k<75) 00078 {//1.3 00079 k=k+1; 00080 i=i+10; 00081 wait(0.2); 00082 lcd.locate(3,0); 00083 lcd.printf("%d",i); 00084 }//1.3 00085 00086 if(b1.read()==0 && k>=75 && k<100) 00087 {//1.4 00088 k=k+1; 00089 i=i+100; 00090 wait(0.2); 00091 lcd.locate(3,0); 00092 lcd.printf("%d",i); 00093 }//1.4 00094 if(b1.read()==0 && k>=100 && k<125) 00095 {//1.5 00096 k=k+1; 00097 i=i+1000; 00098 wait(0.2); 00099 lcd.locate(3,0); 00100 lcd.printf("%d",i); 00101 if(i>9999) 00102 {//1.5.1 00103 i=9999; 00104 lcd.locate(3,0); 00105 lcd.printf(" "); 00106 lcd.locate(3,0); 00107 lcd.printf("%d",i); 00108 }//1.5.1 00109 }//1.5 00110 //Descenso 00111 if(b3.read()==1) 00112 { 00113 u=0; 00114 } 00115 if(b3.read()==0 && u<25) 00116 {//2.1 00117 u=u+1; 00118 i=i-1; 00119 wait(0.2); 00120 lcd.locate(3,0); 00121 lcd.printf(" "); 00122 lcd.locate(3,0); 00123 lcd.printf("%d",i); 00124 }//2.1 00125 if(b3.read()==0 && u>=25 && u<50) 00126 {//2.2 00127 u=u+1; 00128 i=i-5; 00129 wait(0.2); 00130 lcd.locate(3,0); 00131 lcd.printf(" "); 00132 lcd.locate(3,0); 00133 lcd.printf("%d",i); 00134 }//2.2 00135 00136 if(b3.read()==0 && u>=50 && u<75) 00137 {//2.3 00138 u=u+1; 00139 i=i-10; 00140 wait(0.2); 00141 lcd.locate(3,0); 00142 lcd.printf(" "); 00143 lcd.locate(3,0); 00144 lcd.printf("%d",i); 00145 }//2.3 00146 00147 if(b3.read()==0 && u>=75 && u<100) 00148 {//2.4 00149 u=u+1; 00150 i=i-100; 00151 wait(0.2); 00152 lcd.locate(3,0); 00153 lcd.printf(" "); 00154 lcd.locate(3,0); 00155 lcd.printf("%d",i); 00156 }//2.4 00157 if(b3.read()==0 && u>=100 && u<125) 00158 {//2.5 00159 u=u-1; 00160 i=i-1000; 00161 wait(0.2); 00162 lcd.locate(3,0); 00163 lcd.printf(" "); 00164 lcd.locate(3,0); 00165 lcd.printf("%d",i); 00166 }//2.5 00167 if(i<0) 00168 {//2.6 00169 i=0; 00170 lcd.locate(3,0); 00171 lcd.printf(" "); 00172 lcd.locate(3,0); 00173 lcd.printf("%d",i); 00174 }//2.6 00175 00176 }//a 00177 00178 if(x==2) 00179 {//b 00180 lcd.locate(11,0); 00181 lcd.printf("%d",j); 00182 //Ascenso 00183 if(b1.read()==1) 00184 { 00185 l=0; 00186 } 00187 if(b1.read()==0 && l<25) 00188 {//1.1 00189 l=l+1; 00190 j=j+1; 00191 wait(0.2); 00192 lcd.locate(11,0); 00193 lcd.printf("%d",j); 00194 }//1.1 00195 if(b1.read()==0 && l>=25 && l<50) 00196 {//1.2 00197 l=l+1; 00198 j=j+5; 00199 wait(0.2); 00200 lcd.locate(11,0); 00201 lcd.printf("%d",j); 00202 }//1.2 00203 00204 if(b1.read()==0 && l>=50 && l<75) 00205 {//1.3 00206 l=l+1; 00207 j=j+10; 00208 wait(0.2); 00209 lcd.locate(11,0); 00210 lcd.printf("%d",j); 00211 }//1.3 00212 00213 if(b1.read()==0 && l>=75 && l<100) 00214 {//1.4 00215 l=l+1; 00216 j=j+100; 00217 wait(0.2); 00218 lcd.locate(11,0); 00219 lcd.printf("%d",j); 00220 }//1.4 00221 if(b1.read()==0 && l>=100 && l<125) 00222 {//1.5 00223 l=l+1; 00224 j=j+1000; 00225 wait(0.2); 00226 lcd.locate(11,0); 00227 lcd.printf("%d",j); 00228 if(j>9999) 00229 {//1.5.1 00230 j=9999; 00231 lcd.locate(11,0); 00232 lcd.printf(" "); 00233 lcd.locate(11,0); 00234 lcd.printf("%d",j); 00235 }//1.5.1 00236 }//1.5 00237 //Descenso 00238 if(b3.read()==1) 00239 { 00240 g=0; 00241 } 00242 if(b3.read()==0 && g<25) 00243 {//2.1 00244 g=g+1; 00245 j=j-1; 00246 wait(0.2); 00247 lcd.locate(11,0); 00248 lcd.printf(" "); 00249 lcd.locate(11,0); 00250 lcd.printf("%d",j); 00251 }//2.1 00252 if(b3.read()==0 && g>=25 && g<50) 00253 {//2.2 00254 g=g+1; 00255 j=j-5; 00256 wait(0.2); 00257 lcd.locate(11,0); 00258 lcd.printf(" "); 00259 lcd.locate(11,0); 00260 lcd.printf("%d",j); 00261 }//2.2 00262 00263 if(b3.read()==0 && g>=50 && g<75) 00264 {//2.3 00265 g=g+1; 00266 j=j-10; 00267 wait(0.2); 00268 lcd.locate(11,0); 00269 lcd.printf(" "); 00270 lcd.locate(11,0); 00271 lcd.printf("%d",j); 00272 }//2.3 00273 00274 if(b3.read()==0 && g>=75 && g<100) 00275 {//2.4 00276 g=g+1; 00277 j=j-100; 00278 wait(0.2); 00279 lcd.locate(11,0); 00280 lcd.printf(" "); 00281 lcd.locate(11,0); 00282 lcd.printf("%d",j); 00283 }//2.4 00284 if(b3.read()==0 && g>=100 && g<125) 00285 {//2.5 00286 g=g-1; 00287 j=j-1000; 00288 wait(0.2); 00289 lcd.locate(11,0); 00290 lcd.printf(" "); 00291 lcd.locate(11,0); 00292 lcd.printf("%d",j); 00293 }//2.5 00294 if(j<0) 00295 {//2.6 00296 j=0; 00297 lcd.locate(11,0); 00298 lcd.printf(" "); 00299 lcd.locate(11,0); 00300 lcd.printf("%d",j); 00301 }//2.6 00302 00303 00304 }//b 00305 00306 if(x==3) 00307 {//c 00308 lcd.locate(3,1); 00309 lcd.printf("%d",m); 00310 if(b1.read()==1) 00311 { 00312 n=0; 00313 } 00314 if(b1.read()==0 && n<25) 00315 {//1.1 00316 n=n+1; 00317 m=m+1; 00318 wait(0.2); 00319 lcd.locate(3,1); 00320 lcd.printf("%d",m); 00321 }//1.1 00322 if(b1.read()==0 && n>=25 && n<50) 00323 {//1.2 00324 n=n+1; 00325 m=m+5; 00326 wait(0.2); 00327 lcd.locate(3,1); 00328 lcd.printf("%d",m); 00329 }//1.2 00330 00331 if(b1.read()==0 && n>=50 && n<75) 00332 {//1.3 00333 n=n+1; 00334 m=m+10; 00335 wait(0.2); 00336 lcd.locate(3,1); 00337 lcd.printf("%d",m); 00338 }//1.3 00339 00340 if(b1.read()==0 && n>=75 && n<100) 00341 {//1.4 00342 n=n+1; 00343 m=m+100; 00344 wait(0.2); 00345 lcd.locate(3,1); 00346 lcd.printf("%d",m); 00347 }//1.4 00348 if(b1.read()==0 && n>=100 && n<125) 00349 {//1.5 00350 n=n+1; 00351 m=m+1000; 00352 wait(0.2); 00353 lcd.locate(3,1); 00354 lcd.printf("%d",m); 00355 if(m>9999) 00356 {//1.5.1 00357 m=9999; 00358 lcd.locate(3,1); 00359 lcd.printf(" "); 00360 lcd.locate(3,1); 00361 lcd.printf("%d",m); 00362 }//1.5.1 00363 }//1.5 00364 //Descenso 00365 if(b3.read()==1) 00366 { 00367 q=0; 00368 } 00369 if(b3.read()==0 && q<25) 00370 {//2.1 00371 q=q+1; 00372 m=m-1; 00373 wait(0.2); 00374 lcd.locate(3,1); 00375 lcd.printf(" "); 00376 lcd.locate(3,1); 00377 lcd.printf("%d",m); 00378 }//2.1 00379 if(b3.read()==0 && q>=25 && q<50) 00380 {//2.2 00381 q=q+1; 00382 m=m-5; 00383 wait(0.2); 00384 lcd.locate(3,1); 00385 lcd.printf(" "); 00386 lcd.locate(3,1); 00387 lcd.printf("%d",m); 00388 }//2.2 00389 00390 if(b3.read()==0 && q>=50 && q<75) 00391 {//2.3 00392 q=q+1; 00393 m=m-10; 00394 wait(0.2); 00395 lcd.locate(3,1); 00396 lcd.printf(" "); 00397 lcd.locate(3,1); 00398 lcd.printf("%d",m); 00399 }//2.3 00400 00401 if(b3.read()==0 && q>=75 && q<100) 00402 {//2.4 00403 q=q+1; 00404 m=m-100; 00405 wait(0.2); 00406 lcd.locate(3,1); 00407 lcd.printf(" "); 00408 lcd.locate(3,1); 00409 lcd.printf("%d",m); 00410 }//2.4 00411 if(b3.read()==0 && q>=100 && q<125) 00412 {//2.5 00413 q=q+1; 00414 m=m-1000; 00415 wait(0.2); 00416 lcd.locate(3,1); 00417 lcd.printf(" "); 00418 lcd.locate(3,1); 00419 lcd.printf("%d",m); 00420 }//2.5 00421 if(m<0) 00422 {//2.6 00423 m=0; 00424 lcd.locate(3,1); 00425 lcd.printf(" "); 00426 lcd.locate(3,1); 00427 lcd.printf("%d",m); 00428 }//2.6 00429 00430 }//c 00431 00432 if(x==4) 00433 {//d 00434 lcd.locate(11,1); 00435 lcd.printf("%d",o); 00436 00437 if(b1.read()==1) 00438 { 00439 n=0; 00440 } 00441 if(b1.read()==0 && p<25) 00442 {//1.1 00443 p=p+1; 00444 o=o+1; 00445 wait(0.2); 00446 lcd.locate(11,1); 00447 lcd.printf("%d",o); 00448 }//1.1 00449 if(b1.read()==0 && p>=25 && p<50) 00450 {//1.2 00451 p=p+1; 00452 o=o+5; 00453 wait(0.2); 00454 lcd.locate(11,1); 00455 lcd.printf("%f",o); 00456 }//1.2 00457 00458 if(b1.read()==0 && p>=50 && p<75) 00459 {//1.3 00460 p=p+1; 00461 o=o+10; 00462 wait(0.2); 00463 lcd.locate(11,1); 00464 lcd.printf("%d",o); 00465 }//1.3 00466 00467 if(b1.read()==0 && p>=75 && p<100) 00468 {//1.4 00469 p=p+1; 00470 o=o+100; 00471 wait(0.2); 00472 lcd.locate(11,1); 00473 lcd.printf("%d",o); 00474 }//1.4 00475 if(b1.read()==0 && p>=100 && p<125) 00476 {//1.5 00477 p=p+1; 00478 o=o+1000; 00479 wait(0.2); 00480 lcd.locate(11,1); 00481 lcd.printf("%d",o); 00482 if(o>9999) 00483 {//1.5.1 00484 o=9999; 00485 lcd.locate(11,1); 00486 lcd.printf(" "); 00487 lcd.locate(11,1); 00488 lcd.printf("%d",o); 00489 }//1.5.1 00490 }//1.5 00491 //Descenso 00492 if(b3.read()==1) 00493 { 00494 h=0; 00495 } 00496 if(b3.read()==0 && h<25) 00497 {//2.1 00498 h=h+1; 00499 o=o-1; 00500 wait(0.2); 00501 lcd.locate(11,1); 00502 lcd.printf(" "); 00503 lcd.locate(11,1); 00504 lcd.printf("%d",o); 00505 }//2.1 00506 if(b3.read()==0 && h>=25 && h<50) 00507 {//2.2 00508 h=h+1; 00509 o=o-5; 00510 wait(0.2); 00511 lcd.locate(11,1); 00512 lcd.printf(" "); 00513 lcd.locate(11,1); 00514 lcd.printf("%d",o); 00515 }//2.2 00516 00517 if(b3.read()==0 && h>=50 && h<75) 00518 {//2.3 00519 h=h+1; 00520 o=o-10; 00521 wait(0.2); 00522 lcd.locate(11,1); 00523 lcd.printf(" "); 00524 lcd.locate(11,1); 00525 lcd.printf("%d",o); 00526 }//2.3 00527 00528 if(b3.read()==0 && h>=75 && h<100) 00529 {//2.4 00530 h=h+1; 00531 o=o-100; 00532 wait(0.2); 00533 lcd.locate(11,1); 00534 lcd.printf(" "); 00535 lcd.locate(11,1); 00536 lcd.printf("%d",o); 00537 }//2.4 00538 if(b3.read()==0 && h>=100 && h<125) 00539 {//2.5 00540 h=h+1; 00541 o=o-1000; 00542 wait(0.2); 00543 lcd.locate(11,1); 00544 lcd.printf(" "); 00545 lcd.locate(11,1); 00546 lcd.printf("%d",o); 00547 }//2.5 00548 if(o<0) 00549 {//2.6 00550 o=0; 00551 lcd.locate(11,1); 00552 lcd.printf(" "); 00553 lcd.locate(11,1); 00554 lcd.printf("%d",o); 00555 }//2.6 00556 }//d 00557 00558 if(x>4) 00559 { 00560 x=1; 00561 } 00562 if(b4.read()==0) 00563 { 00564 00565 00566 goto PID; 00567 } 00568 }//while1 00569 00570 PID: 00571 00572 wait(0.5); // espera 1 segundo 00573 lcd.cls(); // borra lcd 00574 wait(0.2); 00575 lcd.printf("DATOS GUARDADOS!"); 00576 wait(1); 00577 lcd.cls(); 00578 00579 lcd.locate(0,0); 00580 lcd.printf("Er:"); 00581 lcd.locate(8,0); 00582 lcd.printf("Me:"); 00583 lcd.locate(0,1); 00584 lcd.printf("Sp:"); 00585 lcd.locate(8,1); 00586 lcd.printf("CO:"); 00587 00588 while(1) 00589 {//whilePID 00590 wait(0.1); 00591 sp=i; 00592 kp=j; 00593 kd=m; 00594 ki=o; 00595 00596 Sp=(sp*3.3)/100; 00597 med=Vin*3.3; 00598 err = (Sp-med); 00599 ap = kp*err; 00600 ai =(ki*err)+ai; 00601 00602 ad = kd*(err-err_v); 00603 pid = (ap+ai+ad); 00604 if (pid<0) 00605 { 00606 pid=0; 00607 } 00608 if (pid>99) 00609 { 00610 pid=100; 00611 } 00612 00613 Vo=pid/100; 00614 00615 00616 lcd.locate(3,0); 00617 lcd.printf(" "); 00618 lcd.locate(3,0); 00619 lcd.printf("%.1f",err); 00620 lcd.locate(11,0); 00621 lcd.printf(" "); 00622 lcd.locate(11,0); 00623 lcd.printf("%.1f",med); 00624 lcd.locate(3,1); 00625 lcd.printf(" "); 00626 lcd.locate(3,1); 00627 lcd.printf("%.1f",Sp); 00628 lcd.locate(11,1); 00629 lcd.printf(" "); 00630 lcd.locate(11,1); 00631 lcd.printf("%.1f",pid); 00632 00633 err_v = err; 00634 }//whilePID 00635 }//main
Generated on Tue Jul 19 2022 20:04:32 by 1.7.2