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
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 }
Generated on Mon Jul 18 2022 01:09:55 by 1.7.2