Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: Pulse1 TextLCD mbed
Fork of TAREA_3_PID_IRDA by
main.cpp
00001 // Programa para ejecutar un control PID que lee las constantes del controlador desde la 00002 // manipulación de un control LG AKB73275620 por medio de un protocolo IrDA. Un sensor 00003 // infrarrojo lee los pulsos de entrada y asigna la acción correspondiente dependiendo 00004 // de la tecla pulsada. Para cada tecla el control manda una cadena de pulsos distinta, 00005 // se usarán las teclas de los números del 0 al 9 para asignar fácilmente las constantes 00006 // del controlador, una tecla de "OK" para acceder a la siguiente constante, una tecla de 00007 // "Back" para borrar lo asignado en la constante y una tecla de "Power" para iniciar el 00008 // ciclo de control. 00009 00010 // Oswaldo Andrés Giraldo Giraldo - C.C.: 1152458465 00011 // Héctor Andrés Hoyos Ceballos - C.C.: 1039466317 00012 // Jose Fernando Montoya Vargas - C.C.: 1039468676 00013 // María Fernanda Villa Tamayo - C.C.: 1152457490 00014 00015 #include "mbed.h" 00016 #include <Pulse1.h> 00017 #include "stdio.h" 00018 #include "math.h" 00019 #include "TextLCD.h" 00020 00021 //control remoto sony disparo camara 00022 //puede convertir la trama en un entero 00023 //para cualquier tecla 00024 00025 PulseInOut irda(PTD5);// En este puerto se pone el sensor infrarrojo. 00026 Serial pc(USBTX, USBRX); 00027 TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // RS, E, D4 - D7. 00028 AnalogIn y(PTB3); // Entrada análoga. 00029 AnalogOut u(PTE30); // Salida análoga. 00030 00031 DigitalOut led1(LED1); 00032 DigitalOut led2(LED2); 00033 DigitalOut led3(LED3); 00034 00035 int C1=0x0E; // Sólo muestra el cursor. 00036 int C2=0x18; // Desplaza hacia la izquierda. 00037 int C3=0x1A; // Desplaza hacia la derecha. 00038 int C4=0x0C; // Quita el cursor bajo. 00039 00040 float pid, o, ai, ad, ap, med, err; 00041 float err_v; 00042 int spnum = 0, kinum = 0, kpnum = 0, kdnum = 0, pos = 1, cen = 0, dec = 0, uni = 0, uninum = 0, decnum = 0, cennum = 0, tec = 0; 00043 00044 int header = 0; // Tiempo de cabecera pulso abajo 00045 const int head_H = 9977; //+10% de la cabecera medida, con osciloscopio en microsegundos. 00046 const int head_L = 8163;//-10% de la cabecera medida, con osciloscopio. 00047 int i = 0; 00048 00049 const int T_alto = 1240; // Tiempo en ALTO de un 1 lógico. 00050 const int T_bajo = 680; // Tiempo en BAJO de un 1 lógico. 00051 const int num_bits = 32; // Número de bits al pisar una tecla. 00052 int num[num_bits]; // Cadena para almacenar todos los tiempos que conforman los bits de datos 00053 int dato; // Tiempo de cada dato que se lee. 00054 int numero; 00055 int binM[32]; 00056 int bin_max[32]; 00057 00058 int main(){ 00059 00060 lcd.locate(0,1); 00061 lcd.printf("**Control PID**"); 00062 wait(2); 00063 lcd.cls(); // Borrar Pantalla. 00064 lcd.writeCommand(C1); // Escribimos un comando segun el manual del modulo LCD. 00065 00066 lcd.locate(8, 0); 00067 lcd.printf("Kp=%d", kpnum); 00068 lcd.locate(0, 1); 00069 lcd.printf("Ki=%d", kinum); 00070 lcd.locate(8, 1); 00071 lcd.printf("Kd=%d", kdnum); 00072 lcd.locate(0, 0); 00073 lcd.printf("Sp=%d", spnum); 00074 00075 while(1){ 00076 ini1: fflush( stdin ); 00077 header = 0; 00078 led2 = 1; 00079 led1 = 1; 00080 header = irda.read_low_us(); // Función para leer un pulso de caida o bajo en header. 00081 if (header > head_L && header < head_H) goto seguir; // Verificar que este en la tolerancia +-10% 00082 else goto ini1; 00083 00084 seguir: 00085 // Leer los datos de la trama y asignarlos a un arreglo. 00086 wait_us(400);// ES EL TIEMPO DE HEADER QUE NO SE Lee O EL ALTO 00087 led2 = 1; 00088 for(i = 0; i < (num_bits - 1); ++i){ // POR OSCILOSCOPIO se determina que llegan (num_bits), datos. 00089 dato = irda.read_high_us(); // Leer un bit de datos que es pulso arriba en este control. 00090 num[i] = dato; 00091 wait_us(400); 00092 } 00093 wait(0.5); // Esperar luego de leer todo el arreglo y ponerlo en pantalla. 00094 pc.printf("%d",header); 00095 /*for(i = 0; i < (num_bits - 1); ++i){ 00096 pc.printf(",%d",num[i]); 00097 }*/ 00098 wait(0.1); 00099 pc.printf("\n\n"); 00100 for(i = 0; i < (num_bits - 1); ++i){ 00101 if(num[i] > ((T_alto + T_bajo)/2)){ 00102 bin_max[i] = 1; 00103 } 00104 else{ 00105 bin_max[i] = 0; 00106 } 00107 } 00108 binM[0] = 1; 00109 for(i = 1; i < (num_bits - 1); ++i){ 00110 binM[i] = binM[i - 1]*2; 00111 } 00112 numero = 0; 00113 /*for(i = 0; i < (num_bits - 1); ++i){ 00114 pc.printf(",%d", binM[i]); 00115 }*/ 00116 00117 for(i = 0; i < (num_bits - 1); ++i){ 00118 numero = numero + (binM[i]*bin_max[i]); 00119 } 00120 pc.printf("\n\n"); 00121 pc.printf("Numero = %d", numero); 00122 pc.printf("\n\n"); 00123 00124 // Datos del control utilizado. 00125 00126 //'1846672132' - Número 1 00127 //'1829960452' - Número 2 00128 //'1813248772' - Número 3 00129 //'1796537092' - Número 4 00130 //'1779825412' - Número 5 00131 //'1763113732' - Número 6 00132 //'1746402052' - Número 7 00133 //'1729690372' - Número 8 00134 //'1712978692' - Número 9 00135 //'1863383812' - Número 0 00136 //'994376452' - OK 00137 //'1462303492' - Back 00138 //'1997077252' - Power 00139 00140 if (numero == 1846672132){ // Número 1 00141 tec = 1; 00142 if (cen == 0 && dec == 0 && uni == 0){ 00143 uninum = tec; 00144 uni = 1; 00145 if(pos == 1){ 00146 spnum = uninum; 00147 lcd.locate(3, 0); 00148 lcd.printf(" "); 00149 lcd.locate(3, 0); 00150 lcd.printf("%d", spnum); 00151 } 00152 else if (pos == 2){ 00153 kpnum = uninum; 00154 lcd.locate(11, 0); 00155 lcd.printf(" "); 00156 lcd.locate(11, 0); 00157 lcd.printf("%d", kpnum); 00158 } 00159 else if(pos == 3){ 00160 kinum = uninum; 00161 lcd.locate(3, 1); 00162 lcd.printf(" "); 00163 lcd.locate(3, 1); 00164 lcd.printf("%d", kinum); 00165 } 00166 else if(pos == 4){ 00167 kdnum = uninum; 00168 lcd.locate(11, 1); 00169 lcd.printf(" "); 00170 lcd.locate(11, 1); 00171 lcd.printf("%d", kdnum); 00172 } 00173 } 00174 else if (cen == 0 && dec == 0 && uni != 0){ 00175 decnum = tec; 00176 dec = 1; 00177 if(pos == 1){ 00178 spnum = uninum*10 + decnum; 00179 lcd.locate(3, 0); 00180 lcd.printf("%d", spnum); 00181 } 00182 else if (pos == 2){ 00183 kpnum = uninum*10 + decnum; 00184 lcd.locate(11, 0); 00185 lcd.printf("%d", kpnum); 00186 } 00187 else if(pos == 3){ 00188 kinum = uninum*10 + decnum; 00189 lcd.locate(3, 1); 00190 lcd.printf("%d", kinum); 00191 } 00192 else if(pos == 4){ 00193 kdnum = uninum*10 + decnum; 00194 lcd.locate(11, 1); 00195 lcd.printf("%d", kdnum); 00196 } 00197 } 00198 else if (cen == 0 && dec != 0 && uni != 0){ 00199 cennum = tec; 00200 cen = 1; 00201 if(pos == 1){ 00202 spnum = uninum*100 + decnum*10 + cennum; 00203 lcd.locate(3, 0); 00204 lcd.printf("%d", spnum); 00205 } 00206 else if (pos == 2){ 00207 kpnum = uninum*100 + decnum*10 + cennum; 00208 lcd.locate(11, 0); 00209 lcd.printf("%d", kpnum); 00210 } 00211 else if(pos == 3){ 00212 kinum = uninum*100 + decnum*10 + cennum; 00213 lcd.locate(3, 1); 00214 lcd.printf("%d", kinum); 00215 } 00216 else if(pos == 4){ 00217 kdnum = uninum*100 + decnum*10 + cennum; 00218 lcd.locate(11, 1); 00219 lcd.printf("%d", kdnum); 00220 } 00221 uni = 0; 00222 dec = 0; 00223 cen = 0; 00224 } 00225 } 00226 00227 if (numero == 1829960452){ // Número 2 00228 tec = 2; 00229 if (cen == 0 && dec == 0 && uni == 0){ 00230 uninum = tec; 00231 uni = 1; 00232 if(pos == 1){ 00233 spnum = uninum; 00234 lcd.locate(3, 0); 00235 lcd.printf(" "); 00236 lcd.locate(3, 0); 00237 lcd.printf("%d", spnum); 00238 } 00239 else if (pos == 2){ 00240 kpnum = uninum; 00241 lcd.locate(11, 0); 00242 lcd.printf(" "); 00243 lcd.locate(11, 0); 00244 lcd.printf("%d", kpnum); 00245 } 00246 else if(pos == 3){ 00247 kinum = uninum; 00248 lcd.locate(3, 1); 00249 lcd.printf(" "); 00250 lcd.locate(3, 1); 00251 lcd.printf("%d", kinum); 00252 } 00253 else if(pos == 4){ 00254 kdnum = uninum; 00255 lcd.locate(11, 1); 00256 lcd.printf(" "); 00257 lcd.locate(11, 1); 00258 lcd.printf("%d", kdnum); 00259 } 00260 } 00261 else if (cen == 0 && dec == 0 && uni != 0){ 00262 decnum = tec; 00263 dec = 1; 00264 if(pos == 1){ 00265 spnum = uninum*10 + decnum; 00266 lcd.locate(3, 0); 00267 lcd.printf("%d", spnum); 00268 } 00269 else if (pos == 2){ 00270 kpnum = uninum*10 + decnum; 00271 lcd.locate(11, 0); 00272 lcd.printf("%d", kpnum); 00273 } 00274 else if(pos == 3){ 00275 kinum = uninum*10 + decnum; 00276 lcd.locate(3, 1); 00277 lcd.printf("%d", kinum); 00278 } 00279 else if(pos == 4){ 00280 kdnum = uninum*10 + decnum; 00281 lcd.locate(11, 1); 00282 lcd.printf("%d", kdnum); 00283 } 00284 } 00285 else if (cen == 0 && dec != 0 && uni != 0){ 00286 cennum = tec; 00287 cen = 1; 00288 if(pos == 1){ 00289 spnum = uninum*100 + decnum*10 + cennum; 00290 lcd.locate(3, 0); 00291 lcd.printf("%d", spnum); 00292 } 00293 else if (pos == 2){ 00294 kpnum = uninum*100 + decnum*10 + cennum; 00295 lcd.locate(11, 0); 00296 lcd.printf("%d", kpnum); 00297 } 00298 else if(pos == 3){ 00299 kinum = uninum*100 + decnum*10 + cennum; 00300 lcd.locate(3, 1); 00301 lcd.printf("%d", kinum); 00302 } 00303 else if(pos == 4){ 00304 kdnum = uninum*100 + decnum*10 + cennum; 00305 lcd.locate(11, 1); 00306 lcd.printf("%d", kdnum); 00307 } 00308 uni = 0; 00309 dec = 0; 00310 cen = 0; 00311 } 00312 } 00313 00314 if (numero == 1813248772){ // Número 3 00315 tec = 3; 00316 if (cen == 0 && dec == 0 && uni == 0){ 00317 uninum = tec; 00318 uni = 1; 00319 if(pos == 1){ 00320 spnum = uninum; 00321 lcd.locate(3, 0); 00322 lcd.printf(" "); 00323 lcd.locate(3, 0); 00324 lcd.printf("%d", spnum); 00325 } 00326 else if (pos == 2){ 00327 kpnum = uninum; 00328 lcd.locate(11, 0); 00329 lcd.printf(" "); 00330 lcd.locate(11, 0); 00331 lcd.printf("%d", kpnum); 00332 } 00333 else if(pos == 3){ 00334 kinum = uninum; 00335 lcd.locate(3, 1); 00336 lcd.printf(" "); 00337 lcd.locate(3, 1); 00338 lcd.printf("%d", kinum); 00339 } 00340 else if(pos == 4){ 00341 kdnum = uninum; 00342 lcd.locate(11, 1); 00343 lcd.printf(" "); 00344 lcd.locate(11, 1); 00345 lcd.printf("%d", kdnum); 00346 } 00347 } 00348 else if (cen == 0 && dec == 0 && uni != 0){ 00349 decnum = tec; 00350 dec = 1; 00351 if(pos == 1){ 00352 spnum = uninum*10 + decnum; 00353 lcd.locate(3, 0); 00354 lcd.printf("%d", spnum); 00355 } 00356 else if (pos == 2){ 00357 kpnum = uninum*10 + decnum; 00358 lcd.locate(11, 0); 00359 lcd.printf("%d", kpnum); 00360 } 00361 else if(pos == 3){ 00362 kinum = uninum*10 + decnum; 00363 lcd.locate(3, 1); 00364 lcd.printf("%d", kinum); 00365 } 00366 else if(pos == 4){ 00367 kdnum = uninum*10 + decnum; 00368 lcd.locate(11, 1); 00369 lcd.printf("%d", kdnum); 00370 } 00371 } 00372 else if (cen == 0 && dec != 0 && uni != 0){ 00373 cennum = tec; 00374 cen = 1; 00375 if(pos == 1){ 00376 spnum = uninum*100 + decnum*10 + cennum; 00377 lcd.locate(3, 0); 00378 lcd.printf("%d", spnum); 00379 } 00380 else if (pos == 2){ 00381 kpnum = uninum*100 + decnum*10 + cennum; 00382 lcd.locate(11, 0); 00383 lcd.printf("%d", kpnum); 00384 } 00385 else if(pos == 3){ 00386 kinum = uninum*100 + decnum*10 + cennum; 00387 lcd.locate(3, 1); 00388 lcd.printf("%d", kinum); 00389 } 00390 else if(pos == 4){ 00391 kdnum = uninum*100 + decnum*10 + cennum; 00392 lcd.locate(11, 1); 00393 lcd.printf("%d", kdnum); 00394 } 00395 uni = 0; 00396 dec = 0; 00397 cen = 0; 00398 } 00399 } 00400 00401 if (numero == 1796537092){ // Número 4 00402 tec = 4; 00403 if (cen == 0 && dec == 0 && uni == 0){ 00404 uninum = tec; 00405 uni = 1; 00406 if(pos == 1){ 00407 spnum = uninum; 00408 lcd.locate(3, 0); 00409 lcd.printf(" "); 00410 lcd.locate(3, 0); 00411 lcd.printf("%d", spnum); 00412 } 00413 else if (pos == 2){ 00414 kpnum = uninum; 00415 lcd.locate(11, 0); 00416 lcd.printf(" "); 00417 lcd.locate(11, 0); 00418 lcd.printf("%d", kpnum); 00419 } 00420 else if(pos == 3){ 00421 kinum = uninum; 00422 lcd.locate(3, 1); 00423 lcd.printf(" "); 00424 lcd.locate(3, 1); 00425 lcd.printf("%d", kinum); 00426 } 00427 else if(pos == 4){ 00428 kdnum = uninum; 00429 lcd.locate(11, 1); 00430 lcd.printf(" "); 00431 lcd.locate(11, 1); 00432 lcd.printf("%d", kdnum); 00433 } 00434 } 00435 else if (cen == 0 && dec == 0 && uni != 0){ 00436 decnum = tec; 00437 dec = 1; 00438 if(pos == 1){ 00439 spnum = uninum*10 + decnum; 00440 lcd.locate(3, 0); 00441 lcd.printf("%d", spnum); 00442 } 00443 else if (pos == 2){ 00444 kpnum = uninum*10 + decnum; 00445 lcd.locate(11, 0); 00446 lcd.printf("%d", kpnum); 00447 } 00448 else if(pos == 3){ 00449 kinum = uninum*10 + decnum; 00450 lcd.locate(3, 1); 00451 lcd.printf("%d", kinum); 00452 } 00453 else if(pos == 4){ 00454 kdnum = uninum*10 + decnum; 00455 lcd.locate(11, 1); 00456 lcd.printf("%d", kdnum); 00457 } 00458 } 00459 else if (cen == 0 && dec != 0 && uni != 0){ 00460 cennum = tec; 00461 cen = 1; 00462 if(pos == 1){ 00463 spnum = uninum*100 + decnum*10 + cennum; 00464 lcd.locate(3, 0); 00465 lcd.printf("%d", spnum); 00466 } 00467 else if (pos == 2){ 00468 kpnum = uninum*100 + decnum*10 + cennum; 00469 lcd.locate(11, 0); 00470 lcd.printf("%d", kpnum); 00471 } 00472 else if(pos == 3){ 00473 kinum = uninum*100 + decnum*10 + cennum; 00474 lcd.locate(3, 1); 00475 lcd.printf("%d", kinum); 00476 } 00477 else if(pos == 4){ 00478 kdnum = uninum*100 + decnum*10 + cennum; 00479 lcd.locate(11, 1); 00480 lcd.printf("%d", kdnum); 00481 } 00482 uni = 0; 00483 dec = 0; 00484 cen = 0; 00485 } 00486 } 00487 00488 if (numero == 1779825412){ // Número 5 00489 tec = 5; 00490 if (cen == 0 && dec == 0 && uni == 0){ 00491 uninum = tec; 00492 uni = 1; 00493 if(pos == 1){ 00494 spnum = uninum; 00495 lcd.locate(3, 0); 00496 lcd.printf(" "); 00497 lcd.locate(3, 0); 00498 lcd.printf("%d", spnum); 00499 } 00500 else if (pos == 2){ 00501 kpnum = uninum; 00502 lcd.locate(11, 0); 00503 lcd.printf(" "); 00504 lcd.locate(11, 0); 00505 lcd.printf("%d", kpnum); 00506 } 00507 else if(pos == 3){ 00508 kinum = uninum; 00509 lcd.locate(3, 1); 00510 lcd.printf(" "); 00511 lcd.locate(3, 1); 00512 lcd.printf("%d", kinum); 00513 } 00514 else if(pos == 4){ 00515 kdnum = uninum; 00516 lcd.locate(11, 1); 00517 lcd.printf(" "); 00518 lcd.locate(11, 1); 00519 lcd.printf("%d", kdnum); 00520 } 00521 } 00522 else if (cen == 0 && dec == 0 && uni != 0){ 00523 decnum = tec; 00524 dec = 1; 00525 if(pos == 1){ 00526 spnum = uninum*10 + decnum; 00527 lcd.locate(3, 0); 00528 lcd.printf("%d", spnum); 00529 } 00530 else if (pos == 2){ 00531 kpnum = uninum*10 + decnum; 00532 lcd.locate(11, 0); 00533 lcd.printf("%d", kpnum); 00534 } 00535 else if(pos == 3){ 00536 kinum = uninum*10 + decnum; 00537 lcd.locate(3, 1); 00538 lcd.printf("%d", kinum); 00539 } 00540 else if(pos == 4){ 00541 kdnum = uninum*10 + decnum; 00542 lcd.locate(11, 1); 00543 lcd.printf("%d", kdnum); 00544 } 00545 } 00546 else if (cen == 0 && dec != 0 && uni != 0){ 00547 cennum = tec; 00548 cen = 1; 00549 if(pos == 1){ 00550 spnum = uninum*100 + decnum*10 + cennum; 00551 lcd.locate(3, 0); 00552 lcd.printf("%d", spnum); 00553 } 00554 else if (pos == 2){ 00555 kpnum = uninum*100 + decnum*10 + cennum; 00556 lcd.locate(11, 0); 00557 lcd.printf("%d", kpnum); 00558 } 00559 else if(pos == 3){ 00560 kinum = uninum*100 + decnum*10 + cennum; 00561 lcd.locate(3, 1); 00562 lcd.printf("%d", kinum); 00563 } 00564 else if(pos == 4){ 00565 kdnum = uninum*100 + decnum*10 + cennum; 00566 lcd.locate(11, 1); 00567 lcd.printf("%d", kdnum); 00568 } 00569 uni = 0; 00570 dec = 0; 00571 cen = 0; 00572 } 00573 } 00574 00575 if (numero == 1763113732){ // Número 6 00576 tec = 6; 00577 if (cen == 0 && dec == 0 && uni == 0){ 00578 uninum = tec; 00579 uni = 1; 00580 if(pos == 1){ 00581 spnum = uninum; 00582 lcd.locate(3, 0); 00583 lcd.printf(" "); 00584 lcd.locate(3, 0); 00585 lcd.printf("%d", spnum); 00586 } 00587 else if (pos == 2){ 00588 kpnum = uninum; 00589 lcd.locate(11, 0); 00590 lcd.printf(" "); 00591 lcd.locate(11, 0); 00592 lcd.printf("%d", kpnum); 00593 } 00594 else if(pos == 3){ 00595 kinum = uninum; 00596 lcd.locate(3, 1); 00597 lcd.printf(" "); 00598 lcd.locate(3, 1); 00599 lcd.printf("%d", kinum); 00600 } 00601 else if(pos == 4){ 00602 kdnum = uninum; 00603 lcd.locate(11, 1); 00604 lcd.printf(" "); 00605 lcd.locate(11, 1); 00606 lcd.printf("%d", kdnum); 00607 } 00608 } 00609 else if (cen == 0 && dec == 0 && uni != 0){ 00610 decnum = tec; 00611 dec = 1; 00612 if(pos == 1){ 00613 spnum = uninum*10 + decnum; 00614 lcd.locate(3, 0); 00615 lcd.printf("%d", spnum); 00616 } 00617 else if (pos == 2){ 00618 kpnum = uninum*10 + decnum; 00619 lcd.locate(11, 0); 00620 lcd.printf("%d", kpnum); 00621 } 00622 else if(pos == 3){ 00623 kinum = uninum*10 + decnum; 00624 lcd.locate(3, 1); 00625 lcd.printf("%d", kinum); 00626 } 00627 else if(pos == 4){ 00628 kdnum = uninum*10 + decnum; 00629 lcd.locate(11, 1); 00630 lcd.printf("%d", kdnum); 00631 } 00632 } 00633 else if (cen == 0 && dec != 0 && uni != 0){ 00634 cennum = tec; 00635 cen = 1; 00636 if(pos == 1){ 00637 spnum = uninum*100 + decnum*10 + cennum; 00638 lcd.locate(3, 0); 00639 lcd.printf("%d", spnum); 00640 } 00641 else if (pos == 2){ 00642 kpnum = uninum*100 + decnum*10 + cennum; 00643 lcd.locate(11, 0); 00644 lcd.printf("%d", kpnum); 00645 } 00646 else if(pos == 3){ 00647 kinum = uninum*100 + decnum*10 + cennum; 00648 lcd.locate(3, 1); 00649 lcd.printf("%d", kinum); 00650 } 00651 else if(pos == 4){ 00652 kdnum = uninum*100 + decnum*10 + cennum; 00653 lcd.locate(11, 1); 00654 lcd.printf("%d", kdnum); 00655 } 00656 uni = 0; 00657 dec = 0; 00658 cen = 0; 00659 } 00660 } 00661 00662 if (numero == 1746402052){ // Número 7 00663 tec = 7; 00664 if (cen == 0 && dec == 0 && uni == 0){ 00665 uninum = tec; 00666 uni = 1; 00667 if(pos == 1){ 00668 spnum = uninum; 00669 lcd.locate(3, 0); 00670 lcd.printf(" "); 00671 lcd.locate(3, 0); 00672 lcd.printf("%d", spnum); 00673 } 00674 else if (pos == 2){ 00675 kpnum = uninum; 00676 lcd.locate(11, 0); 00677 lcd.printf(" "); 00678 lcd.locate(11, 0); 00679 lcd.printf("%d", kpnum); 00680 } 00681 else if(pos == 3){ 00682 kinum = uninum; 00683 lcd.locate(3, 1); 00684 lcd.printf(" "); 00685 lcd.locate(3, 1); 00686 lcd.printf("%d", kinum); 00687 } 00688 else if(pos == 4){ 00689 kdnum = uninum; 00690 lcd.locate(11, 1); 00691 lcd.printf(" "); 00692 lcd.locate(11, 1); 00693 lcd.printf("%d", kdnum); 00694 } 00695 } 00696 else if (cen == 0 && dec == 0 && uni != 0){ 00697 decnum = tec; 00698 dec = 1; 00699 if(pos == 1){ 00700 spnum = uninum*10 + decnum; 00701 lcd.locate(3, 0); 00702 lcd.printf("%d", spnum); 00703 } 00704 else if (pos == 2){ 00705 kpnum = uninum*10 + decnum; 00706 lcd.locate(11, 0); 00707 lcd.printf("%d", kpnum); 00708 } 00709 else if(pos == 3){ 00710 kinum = uninum*10 + decnum; 00711 lcd.locate(3, 1); 00712 lcd.printf("%d", kinum); 00713 } 00714 else if(pos == 4){ 00715 kdnum = uninum*10 + decnum; 00716 lcd.locate(11, 1); 00717 lcd.printf("%d", kdnum); 00718 } 00719 } 00720 else if (cen == 0 && dec != 0 && uni != 0){ 00721 cennum = tec; 00722 cen = 1; 00723 if (pos == 1){ 00724 spnum = uninum*100 + decnum*10 + cennum; 00725 lcd.locate(3, 0); 00726 lcd.printf("%d", spnum); 00727 } 00728 else if (pos == 2){ 00729 kpnum = uninum*100 + decnum*10 + cennum; 00730 lcd.locate(11, 0); 00731 lcd.printf("%d", kpnum); 00732 } 00733 else if(pos == 3){ 00734 kinum = uninum*100 + decnum*10 + cennum; 00735 lcd.locate(3, 1); 00736 lcd.printf("%d", kinum); 00737 } 00738 else if(pos == 4){ 00739 kdnum = uninum*100 + decnum*10 + cennum; 00740 lcd.locate(11, 1); 00741 lcd.printf("%d", kdnum); 00742 } 00743 uni = 0; 00744 dec = 0; 00745 cen = 0; 00746 } 00747 } 00748 00749 if (numero == 1729690372){ // Número 8 00750 tec = 8; 00751 if (cen == 0 && dec == 0 && uni == 0){ 00752 uninum = tec; 00753 uni = 1; 00754 if(pos == 1){ 00755 spnum = uninum; 00756 lcd.locate(3, 0); 00757 lcd.printf(" "); 00758 lcd.locate(3, 0); 00759 lcd.printf("%d", spnum); 00760 } 00761 else if(pos == 2){ 00762 kpnum = uninum; 00763 lcd.locate(11, 0); 00764 lcd.printf(" "); 00765 lcd.locate(11, 0); 00766 lcd.printf("%d", kpnum); 00767 } 00768 else if(pos == 3){ 00769 kinum = uninum; 00770 lcd.locate(3, 1); 00771 lcd.printf(" "); 00772 lcd.locate(3, 1); 00773 lcd.printf("%d", kinum); 00774 } 00775 else if(pos == 4){ 00776 kdnum = uninum; 00777 lcd.locate(11, 1); 00778 lcd.printf(" "); 00779 lcd.locate(11, 1); 00780 lcd.printf("%d", kdnum); 00781 } 00782 } 00783 else if (cen == 0 && dec == 0 && uni != 0){ 00784 decnum = tec; 00785 dec = 1; 00786 if(pos == 1){ 00787 spnum = uninum*10 + decnum; 00788 lcd.locate(3, 0); 00789 lcd.printf("%d", spnum); 00790 } 00791 else if(pos == 2){ 00792 kpnum = uninum*10 + decnum; 00793 lcd.locate(11, 0); 00794 lcd.printf("%d", kpnum); 00795 } 00796 else if(pos == 3){ 00797 kinum = uninum*10 + decnum; 00798 lcd.locate(3, 1); 00799 lcd.printf("%d", kinum); 00800 } 00801 else if(pos == 4){ 00802 kdnum = uninum*10 + decnum; 00803 lcd.locate(11, 1); 00804 lcd.printf("%d", kdnum); 00805 } 00806 } 00807 else if (cen == 0 && dec != 0 && uni != 0){ 00808 cennum = tec; 00809 cen = 1; 00810 if(pos == 1){ 00811 spnum = uninum*100 + decnum*10 + cennum; 00812 lcd.locate(3, 0); 00813 lcd.printf("%d", spnum); 00814 } 00815 else if (pos == 2){ 00816 kpnum = uninum*100 + decnum*10 + cennum; 00817 lcd.locate(11, 0); 00818 lcd.printf("%d", kpnum); 00819 } 00820 else if(pos == 3){ 00821 kinum = uninum*100 + decnum*10 + cennum; 00822 lcd.locate(3, 1); 00823 lcd.printf("%d", kinum); 00824 } 00825 else if(pos == 4){ 00826 kdnum = uninum*100 + decnum*10 + cennum; 00827 lcd.locate(11, 1); 00828 lcd.printf("%d", kdnum); 00829 } 00830 uni = 0; 00831 dec = 0; 00832 cen = 0; 00833 } 00834 } 00835 00836 if (numero == 1712978692){ // Número 9 00837 tec = 9; 00838 if (cen == 0 && dec == 0 && uni == 0){ 00839 uninum = tec; 00840 uni = 1; 00841 if(pos == 1){ 00842 spnum = uninum; 00843 lcd.locate(3, 0); 00844 lcd.printf(" "); 00845 lcd.locate(3, 0); 00846 lcd.printf("%d", spnum); 00847 } 00848 else if (pos == 2){ 00849 kpnum = uninum; 00850 lcd.locate(11, 0); 00851 lcd.printf(" "); 00852 lcd.locate(11, 0); 00853 lcd.printf("%d", kpnum); 00854 } 00855 else if(pos == 3){ 00856 kinum = uninum; 00857 lcd.locate(3, 1); 00858 lcd.printf(" "); 00859 lcd.locate(3, 1); 00860 lcd.printf("%d", kinum); 00861 } 00862 else if(pos == 4){ 00863 kdnum = uninum; 00864 lcd.locate(11, 1); 00865 lcd.printf(" "); 00866 lcd.locate(11, 1); 00867 lcd.printf("%d", kdnum); 00868 } 00869 } 00870 else if (cen == 0 && dec == 0 && uni != 0){ 00871 decnum = tec; 00872 dec = 1; 00873 if(pos == 1){ 00874 spnum = uninum*10 + decnum; 00875 lcd.locate(3, 0); 00876 lcd.printf("%d", spnum); 00877 } 00878 else if(pos == 2){ 00879 kpnum = uninum*10 + decnum; 00880 lcd.locate(11, 0); 00881 lcd.printf("%d", kpnum); 00882 } 00883 else if(pos == 3){ 00884 kinum = uninum*10 + decnum; 00885 lcd.locate(3, 1); 00886 lcd.printf("%d", kinum); 00887 } 00888 else if(pos == 4){ 00889 kdnum = uninum*10 + decnum; 00890 lcd.locate(11, 1); 00891 lcd.printf("%d", kdnum); 00892 } 00893 } 00894 else if (cen == 0 && dec != 0 && uni != 0){ 00895 cennum = tec; 00896 cen = 1; 00897 if(pos == 1){ 00898 spnum = uninum*100 + decnum*10 + cennum; 00899 lcd.locate(3, 0); 00900 lcd.printf("%d", spnum); 00901 } 00902 else if (pos == 2){ 00903 kpnum = uninum*100 + decnum*10 + cennum; 00904 lcd.locate(11, 0); 00905 lcd.printf("%d", kpnum); 00906 } 00907 else if(pos == 3){ 00908 kinum = uninum*100 + decnum*10 + cennum; 00909 lcd.locate(3, 1); 00910 lcd.printf("%d", kinum); 00911 } 00912 else if(pos == 4){ 00913 kdnum = uninum*100 + decnum*10 + cennum; 00914 lcd.locate(11, 1); 00915 lcd.printf("%d", kdnum); 00916 } 00917 uni = 0; 00918 dec = 0; 00919 cen = 0; 00920 } 00921 } 00922 00923 if (numero == 1863383812){ // Número 0 00924 tec = 0; 00925 if (cen == 0 && dec == 0 && uni == 0){ 00926 uninum = tec; 00927 uni = 1; 00928 if(pos == 1){ 00929 spnum = uninum; 00930 lcd.locate(3, 0); 00931 lcd.printf(" "); 00932 lcd.locate(3, 0); 00933 lcd.printf("%d", spnum); 00934 } 00935 else if (pos == 2){ 00936 kpnum = uninum; 00937 lcd.locate(11, 0); 00938 lcd.locate(11, 0); 00939 lcd.printf(" "); 00940 lcd.printf("%d", kpnum); 00941 } 00942 else if(pos == 3){ 00943 kinum = uninum; 00944 lcd.locate(3, 1); 00945 lcd.printf(" "); 00946 lcd.locate(3, 1); 00947 lcd.printf("%d", kinum); 00948 } 00949 else if(pos == 4){ 00950 kdnum = uninum; 00951 lcd.locate(11, 1); 00952 lcd.printf(" "); 00953 lcd.locate(11, 1); 00954 lcd.printf("%d", kdnum); 00955 } 00956 } 00957 else if (cen == 0 && dec == 0 && uni != 0){ 00958 decnum = tec; 00959 dec = 1; 00960 if(pos == 1){ 00961 spnum = uninum*10 + decnum; 00962 lcd.locate(3, 0); 00963 lcd.printf("%d", spnum); 00964 } 00965 else if (pos == 2){ 00966 kpnum = uninum*10 + decnum; 00967 lcd.locate(11, 0); 00968 lcd.printf("%d", kpnum); 00969 } 00970 else if(pos == 3){ 00971 kinum = uninum*10 + decnum; 00972 lcd.locate(3, 1); 00973 lcd.printf("%d", kinum); 00974 } 00975 else if(pos == 4){ 00976 kdnum = uninum*10 + decnum; 00977 lcd.locate(11, 1); 00978 lcd.printf("%d", kdnum); 00979 } 00980 } 00981 else if (cen == 0 && dec != 0 && uni != 0){ 00982 cennum = tec; 00983 cen = 1; 00984 if(pos == 1){ 00985 spnum = uninum*100 + decnum*10 + cennum; 00986 lcd.locate(3, 0); 00987 lcd.printf("%d", spnum); 00988 } 00989 else if (pos == 2){ 00990 kpnum = uninum*100 + decnum*10 + cennum; 00991 lcd.locate(11, 0); 00992 lcd.printf("%d", kpnum); 00993 } 00994 else if(pos == 3){ 00995 kinum = uninum*100 + decnum*10 + cennum; 00996 lcd.locate(3, 1); 00997 lcd.printf("%d", kinum); 00998 } 00999 else if(pos == 4){ 01000 kdnum = uninum*100 + decnum*10 + cennum; 01001 lcd.locate(11, 1); 01002 lcd.printf("%d", kdnum); 01003 } 01004 uni = 0; 01005 dec = 0; 01006 cen = 0; 01007 } 01008 } 01009 01010 if (numero == 1462303492){ // Back (Borrar el número actual). 01011 if(pos == 1){ 01012 uni = 0; 01013 dec = 0; 01014 cen = 0; 01015 spnum = 0; 01016 lcd.locate(3, 0); 01017 lcd.printf(" "); 01018 lcd.locate(3, 0); 01019 lcd.printf("%d", spnum); 01020 } 01021 else if (pos == 2){ 01022 uni = 0; 01023 dec = 0; 01024 cen = 0; 01025 kpnum = 0; 01026 lcd.locate(11, 0); 01027 lcd.printf(" "); 01028 lcd.locate(11, 0); 01029 lcd.printf("%d", kpnum); 01030 } 01031 else if(pos == 3){ 01032 uni = 0; 01033 dec = 0; 01034 cen = 0; 01035 kinum = 0; 01036 lcd.locate(3, 1); 01037 lcd.printf(" "); 01038 lcd.locate(3, 1); 01039 lcd.printf("%d", kinum); 01040 } 01041 else if(pos == 4){ 01042 uni = 0; 01043 dec = 0; 01044 cen = 0; 01045 kdnum = 0; 01046 lcd.locate(11, 1); 01047 lcd.printf(" "); 01048 lcd.locate(11, 1); 01049 lcd.printf("%d", kdnum); 01050 } 01051 } 01052 01053 if (numero == 994376452){ // OK (Cambiar a la siguiente constante). 01054 led3 =!led3; 01055 uni = 0; 01056 dec = 0; 01057 cen = 0; 01058 if(pos == 4){ 01059 pos = 1; 01060 lcd.locate(3, 0); 01061 lcd.printf("%d", spnum); 01062 } 01063 else if (pos == 1){ 01064 pos++; 01065 lcd.locate(11, 0); 01066 lcd.printf("%d", kpnum); 01067 } 01068 else if(pos == 2){ 01069 pos++; 01070 lcd.locate(3, 1); 01071 lcd.printf("%d", kinum); 01072 } 01073 else if(pos == 3){ 01074 pos++; 01075 lcd.locate(11, 1); 01076 lcd.printf("%d", kdnum); 01077 } 01078 wait(0.25); 01079 } 01080 01081 if (numero == 1997077252){ // Power (Inicializar el PID). 01082 break; // Sale del bucle si se pisa Power. 01083 } 01084 wait(0.1); 01085 } 01086 01087 //Transición 01088 lcd.writeCommand(C4); // Escribimos un comando segun el manual del modulo LCD para quitar cursor bajo. 01089 lcd.cls(); // Borra la pantalla. 01090 lcd.locate(1, 1); 01091 lcd.printf("DATOS GUARDADOS"); 01092 wait(1); 01093 lcd.cls(); 01094 lcd.locate(1, 1); 01095 lcd.printf("INICIO DEL PID"); 01096 wait(1); 01097 01098 // Se imprimen los parches del control. 01099 lcd.cls(); 01100 lcd.printf("Er=%3.0f",err); 01101 lcd.locate(8,0); 01102 lcd.printf("Me=%3.0f",med); 01103 lcd.locate(0,1); 01104 lcd.printf("Sp=%3.0f",spnum); 01105 lcd.locate(8,1); 01106 lcd.printf("Co=%3.0f",pid); 01107 wait(1); 01108 01109 // CICLO PRINCIPAL CONTROLADOR PID. 01110 lop1: 01111 med = y.read()*999; 01112 err = (spnum-med); // Se calcula el error. 01113 ap = kpnum*err*0.01f; // Se calcula la acción proporcinal. 01114 ai =(kinum*err*0.01f)+ai; // Cálculo de la integral del error. 01115 ad = kdnum*(err-err_v)*0.01f; // Cálculo de la acción derivativa. 01116 pid = (ap+ai+ad); // Se actualiza el valor del la acción de control. 01117 01118 // Se verifica que pid sea positivo. 01119 if(pid<=0){ 01120 pid=0; 01121 } 01122 01123 // Se verifica que pid sea menor o igual la valor máximo. 01124 if (pid > 999){ 01125 pid=999; 01126 } 01127 01128 // Se muestran las variables en la LCD. 01129 lcd.locate(3,0); 01130 lcd.printf(" "); 01131 lcd.locate(3,0); 01132 lcd.printf("%3.0f",err); 01133 lcd.locate(11,0); 01134 lcd.printf(" "); 01135 lcd.locate(11,0); 01136 lcd.printf("%3.0f",med); 01137 lcd.locate(3,1); 01138 lcd.printf(" "); 01139 lcd.locate(3,1); 01140 lcd.printf("%d",spnum); 01141 lcd.locate(11,1); 01142 lcd.printf(" "); 01143 lcd.locate(11,1); 01144 lcd.printf("%3.0f",pid); 01145 01146 // Normalización de la salida. 01147 // Se actualizan las variables. 01148 err_v = err; 01149 o = pid/999; 01150 u.write(o); // Se envía el valor de pid al puerto analogico de salida (D/A). 01151 01152 // Se repite el ciclo. 01153 wait_ms(300); 01154 goto lop1; 01155 }
Generated on Wed Aug 31 2022 07:46:52 by
1.7.2
