El programa funciona de la siguiente manera, las teclas A, B, C, D, * y # se ulizarán como funciones del teclado matricial para la perfecta ubicación de parámetros, estos se ingresarán en forma de cadena y luego se transformarán a al numero ingresado en los diferentes datos de la cadena.

Dependencies:   FPointer TextLCDlib mbed

Fork of keypad by HM Yoong

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "keypad.h"
00003 #include "TextLCD.h"
00004 
00005 //Utilizar funciones del teclado 
00006 #define       KEYLEN    4 //tamaño del vector
00007 #define       ENDKEY   15//Guardar datos < que 3 cifras
00008 #define       BORKEY   7//Borrar datos
00009 #define       PASKEY   12//Pasar de parametro
00010 #define       MENKEY   14//Guardar datos
00011 //Se guardan los aprametros como una cadena de datos para luego convertirlos a un numero de 3 cifras
00012 char          SP[KEYLEN]; 
00013 char          KP[KEYLEN];
00014 char          KI[KEYLEN];
00015 char          KD[KEYLEN];
00016 //Se definen las variables a utilizar
00017 int           Index = 0;
00018 int           p=0;
00019 int           i=0;
00020 int           c=1;
00021 int           sp=0;
00022 int           kp=0;
00023 int           ki=0;
00024 int           kd=0;
00025 
00026 //Se DEclara los puertos de la pantalla LCD
00027 TextLCD lcd(PTB10,PTB11,PTE2,PTE3,PTE4,PTE5);
00028 // Se Declaran los puertos PTC2 PTE30
00029 AnalogIn    me(PTC2);
00030 AnalogOut   co(PTE30);
00031 
00032  
00033 // se declara el teclado y el arreglo
00034 int teclado[] = { 1,2,3,0,
00035                    4,5,6,0,
00036                    7,8,9,0,
00037                     0,0,0,0};
00038 
00039 
00040 //Comienza programa:
00041 uint32_t cbAfterInput(uint32_t tecla) {
00042     bool      finish = false;
00043     
00044 
00045     if (Index==0){
00046         if (tecla==PASKEY){
00047             p++;
00048             
00049                 if (p==0){
00050                     lcd.locate(2,0);
00051                     lcd.printf(":");
00052                 }
00053                 if (p==1){
00054                     lcd.locate(10,0);
00055                     lcd.printf(":");
00056                  
00057                 }
00058                 if (p==2){
00059                     lcd.locate(2,1);
00060                     lcd.printf(":");
00061                 }
00062                 if (p==3){
00063                     lcd.locate(10,1);
00064                     lcd.printf(":");
00065                 }   
00066                 if (p==4){
00067                     lcd.locate(2,0);
00068                     lcd.printf(":");
00069                     p=0;
00070                 }
00071             
00072                 
00073         }
00074     }
00075     
00076    if(p==0){
00077         
00078               
00079         if (Index < KEYLEN - 1)
00080         {
00081             if ((tecla != ENDKEY) & (tecla != BORKEY) & (tecla != PASKEY)){
00082                 SP[Index] = teclado[tecla];
00083                 Index++;
00084                 c--;
00085                     if (c==0){
00086                         lcd.locate(3,0);
00087                         lcd.printf("   ");
00088                         c=3;
00089                     }
00090                 lcd.locate(3+i,0);
00091                 lcd.printf("%d",SP[i]);
00092                 i++;
00093                 
00094             }
00095             
00096             if (tecla == ENDKEY){
00097                 finish = true;
00098                 c=1;
00099             }    
00100             
00101             if (tecla == BORKEY){
00102                 memset(&SP, 0, KEYLEN);
00103                 Index = 0;  
00104                 i=0; 
00105                 lcd.locate(3,0);
00106                 lcd.printf("   ");
00107                 c=1; 
00108                 lcd.locate(2,0);
00109                 lcd.printf("=");
00110             }
00111 
00112         }
00113  
00114         if (finish || (Index == KEYLEN - 1)) {
00115             sp=0;
00116             if (i==3){
00117                 sp=(100*SP[0])+(10*SP[1])+(SP[2]);
00118             }
00119             if (i==2){
00120                 sp=(10*SP[0])+(1*SP[1]);
00121             }
00122             if (i==1){
00123                 sp=SP[0];
00124             }
00125             lcd.locate(3,0);
00126             lcd.printf("   ");
00127             
00128             lcd.locate(3,0);
00129             lcd.printf("%d",sp);
00130             memset(&SP, 0, KEYLEN);
00131             Index = 0;
00132             i=0;
00133 
00134         }
00135     }
00136  
00137  if(p==1){
00138         
00139         
00140       
00141         if (Index < KEYLEN - 1)
00142         {
00143             if ((tecla != ENDKEY) & (tecla != BORKEY) & (tecla != PASKEY)){
00144                 KP[Index] = teclado[tecla];
00145                 Index++;
00146                 c--;
00147                     if (c==0){
00148                         lcd.locate(11,0);
00149                         lcd.printf("   ");
00150                         c=3;
00151                     }
00152                 lcd.locate(11+i,0);
00153                 lcd.printf("%d",KP[i]);
00154                 i++;
00155                 
00156             }
00157             
00158             if (tecla == ENDKEY){
00159                 finish = true;
00160                 c=1;
00161             }    
00162             
00163             if (tecla == BORKEY){
00164                 memset(&KP, 0, KEYLEN);
00165                 Index = 0;  
00166                 i=0; 
00167                 lcd.locate(11,0);
00168                 lcd.printf("   ");
00169                 c=1; 
00170                 lcd.locate(10,0);
00171                 lcd.printf("=");
00172             }
00173 
00174         }
00175  
00176         if (finish || (Index == KEYLEN - 1)) {
00177             kp=0;
00178             if (i==3){
00179                 kp=(100*KP[0])+(10*KP[1])+(KP[2]);
00180             }
00181             if (i==2){
00182                 kp=(10*KP[0])+(1*KP[1]);
00183             }
00184             if (i==1){
00185                 kp=KP[0];
00186             }
00187             lcd.locate(11,0);
00188             lcd.printf("   ");
00189             
00190             lcd.locate(11,0);
00191             lcd.printf("%d",kp);
00192             memset(&KP, 0, KEYLEN);
00193             Index = 0;
00194             i=0;
00195 
00196         }
00197     }
00198  if(p==2){
00199         
00200         
00201       
00202         if (Index < KEYLEN - 1)
00203         {
00204             if ((tecla != ENDKEY) & (tecla != BORKEY) & (tecla != PASKEY)){
00205                 KI[Index] = teclado[tecla];
00206                 Index++;
00207                 c--;
00208                     if (c==0){
00209                         lcd.locate(3,1);
00210                         lcd.printf("   ");
00211                         c=3;
00212                     }
00213                 lcd.locate(3+i,1);
00214                 lcd.printf("%d",KI[i]);
00215                 i++;
00216                 
00217             }
00218             
00219             if (tecla == ENDKEY){
00220                 finish = true;
00221                 c=1;
00222             }    
00223             
00224             if (tecla == BORKEY){
00225                 memset(&KI, 0, KEYLEN);
00226                 Index = 0;  
00227                 i=0; 
00228                 lcd.locate(3,1);
00229                 lcd.printf("   ");
00230                 c=1;
00231                 lcd.locate(2,1);
00232                 lcd.printf("="); 
00233             }
00234 
00235         }
00236  
00237         if (finish || (Index == KEYLEN - 1)) {
00238             ki=0;
00239             if (i==3){
00240                 ki=(100*KI[0])+(10*KI[1])+(KI[2]);
00241             }
00242             if (i==2){
00243                 ki=(10*KI[0])+(1*KI[1]);
00244             }
00245             if (i==1){
00246                 ki=KI[0];
00247             }
00248             lcd.locate(3,1);
00249             lcd.printf("   ");
00250             
00251             lcd.locate(3,1);
00252             lcd.printf("%d",ki);
00253             memset(&KI, 0, KEYLEN);
00254             Index = 0;
00255             i=0;
00256 
00257         }
00258     }
00259 
00260 if(p==3){
00261                
00262       
00263         if (Index < KEYLEN - 1)
00264         {
00265             if ((tecla != ENDKEY) & (tecla != BORKEY) & (tecla != PASKEY)){
00266                 KD[Index] = teclado[tecla];
00267                 Index++;
00268                 c--;
00269                     if (c==0){
00270                         lcd.locate(11,1);
00271                         lcd.printf("   ");
00272                         c=3;
00273                     }
00274                 lcd.locate(11+i,1);
00275                 lcd.printf("%d",KD[i]);
00276                 i++;
00277                 
00278             }
00279             
00280             if (tecla == ENDKEY){
00281                 finish = true;
00282                 c=1;
00283             }    
00284             
00285             if (tecla == BORKEY){
00286                 memset(&KD, 0, KEYLEN);
00287                 Index = 0;  
00288                 i=0; 
00289                 lcd.locate(11,1);
00290                 lcd.printf("   ");
00291                 c=1;
00292                 lcd.locate(10,1);
00293                 lcd.printf("="); 
00294             }
00295 
00296         }
00297  
00298         if (finish || (Index == KEYLEN - 1)) {
00299             kd=0;
00300             if (i==3){
00301                 kd=(100*KD[0])+(10*KD[1])+(KD[2]);
00302             }
00303             if (i==2){
00304                 kd=(10*KD[0])+(1*KD[1]);
00305             }
00306             if (i==1){
00307                 kd=KD[0];
00308             }
00309             lcd.locate(11,1);
00310             lcd.printf("   ");
00311             
00312             lcd.locate(11,1);
00313             lcd.printf("%d",kd);
00314             memset(&KD, 0, KEYLEN);
00315             Index = 0;
00316             i=0;
00317 
00318         }
00319     }
00320  
00321    if(tecla==MENKEY){//inicia control PID:
00322    
00323     float med,err,Sp,ap,ai,ad,PID,err_v,sal;
00324     med=err=Sp=ap=ai=ad=PID=err_v=sal=0;
00325 
00326     int k=0;
00327     lcd.cls();
00328     lcd.locate(3,0);
00329     lcd.printf("Guardado!!");
00330     wait(2);
00331     lcd.cls();
00332     lcd.locate(0,0);
00333     lcd.printf("Er=%.2f",err);
00334     lcd.locate(8,0);
00335     lcd.printf("Me=%.2f",med);
00336     lcd.locate(0,1);
00337     lcd.printf("Sp=0.00");    
00338     lcd.locate(8,1);
00339     lcd.printf("AC=%.2f",PID);
00340     
00341 
00342     
00343     while (1){
00344     wait(0.001);
00345         k++;
00346         med=me*3.3;
00347         Sp=(3.3/999)*sp;
00348         err=Sp-med;
00349         ap=kp*err;
00350         ai=(ki*err)+ai;
00351             if(ai>999){
00352                 ai=999;
00353            }
00354         ad=kd*(err-err_v);
00355         PID=ap+ai+ad;
00356         
00357             if (PID<0){
00358                 PID=0;
00359             }
00360             if (PID>999){
00361                 PID=999;
00362             }  
00363         co=(PID/999);
00364         sal=co*3.3;
00365         err_v=err;
00366         
00367        
00368         if(k>100){
00369             
00370             lcd.locate(3,0);
00371             lcd.printf("     ");
00372             lcd.locate(3,0);
00373             lcd.printf("%.2f",err);
00374             lcd.locate(11,0);
00375             lcd.printf("     ");
00376             lcd.locate(11,0);
00377             lcd.printf("%.2f",med);
00378             lcd.locate(11,1);
00379             lcd.printf("     ");
00380             lcd.locate(11,1);
00381             lcd.printf("%.2f",sal);
00382             lcd.locate(3,1);
00383             lcd.printf("%.2f",Sp);
00384             k=0;            
00385         }
00386    
00387     }//while   
00388    
00389    }
00390    
00391    
00392    
00393    
00394     
00395         return 0;
00396 }
00397 
00398  
00399 int main() {
00400 //Se elimina el bufer de los vectores
00401     memset(&SP, 0, KEYLEN);
00402     memset(&KP, 0, KEYLEN);
00403     memset(&KI, 0, KEYLEN);
00404     memset(&KD, 0, KEYLEN);
00405 /***********************************************/
00406     Index = 0;
00407     Keypad keypad(PTA2,PTD4,PTD3,PTD1,PTA13,PTD5,PTD0,PTD2);
00408     keypad.CallAfterInput(&cbAfterInput);
00409     keypad.Start();
00410     lcd.writeCommand(0x0e);
00411     lcd.locate(0,0);
00412     lcd.printf("Sp:0");
00413     lcd.locate(8,0);
00414     lcd.printf("Kp:0");
00415     lcd.locate(0,1);
00416     lcd.printf("Ki:0");    
00417     lcd.locate(8,1);
00418     lcd.printf("Kd:0");    
00419     while (1) {
00420         
00421         
00422         wait(0.5);
00423         
00424     }
00425     
00426 }