joshema 216 / Mbed 2 deprecated TAREA_3_PID_IRDA

Dependencies:   Pulse1 TextLCD mbed

Fork of TAREA_3_PID_IRDA by joshema 216

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }