Permite la configuración de los parámetros Kp, Ki Kd y Sp en un Display LCD 16x2 en un teclado matricial 4x4.
Dependencies: TextLCD keypad mbed
main.cpp
- Committer:
- SSJprocesa
- Date:
- 2016-05-17
- Revision:
- 0:626b11d510b7
File content as of revision 0:626b11d510b7:
#include "mbed.h" #include "TextLCD.h" #include "Keypad.h" TextLCD lcd(PTC9, PTC8, PTA5, PTA4, PTA12, PTD4); // rs, e, d4-d7 int long g=0,p=0,i=0,d=0,s=0,chan=0,num=0; int c=1,b=1,a=15,uno=0,dos=0,tre=0,cua=0,aux=0,jod=0,pla=0,aste=0; int Keytable[] = { 1, 2, 3, 10, // r0 4, 5, 6, 11, // r1 7, 8, 9, 12, // r2 20,0, 21, 13 // r3 }; uint32_t cbAfterInput(uint32_t index) { a = index; return 0; } void limpiar() { c=1,a=15,uno=0,dos=0,tre=0,cua=0,aux=0,b=1,jod=0,pla=0; } void nds() { if(aste==0){lcd.locate((3+aux),0);} if(aste==1){lcd.locate((11+aux),0);} if(aste==2){lcd.locate((3+aux),1);} if(aste==3){lcd.locate((11+aux),1);} } void mostrar () { lcd.locate(0,0); lcd.printf("Kp=%Ld", p); lcd.locate(8,0); lcd.printf("Ki=%Ld", i); lcd.locate(0,1); lcd.printf("Kd=%Ld", d); lcd.locate(8,1); lcd.printf("Sp=%Ld", s); } void titi() { jod++; if(jod<=1000){ nds(); lcd.printf ("_"); } if(jod>=2000){ nds(); lcd.printf ("%Ld",chan); } if(jod==3000){jod=0;} } int long numero() { while(b==1&&c==1) { titi(); nds(); lcd.printf("%Ld",chan); if(Keytable[a]==21){ aux++; if(aux==4){c=0;aux=3;} a=15; chan=0;} if(Keytable[a]==10){b=0;chan=0;} if(Keytable[a]!=10&&Keytable[a]!=11&&Keytable[a]!=12&&Keytable[a]!=13&&Keytable[a]!=20&&Keytable[a]!=21&&a!=15) { chan=Keytable[a]; nds(); lcd.printf ("%Ld",chan); if(chan==50){chan=0;} switch(aux){ case 0:uno=chan; break; case 1:dos=chan; break; case 2:tre=chan; break; case 3:cua=chan; break; default : a=15; } a=15; } } aux=aux; switch(aux) { case 0: uno=uno; break; case 1: uno=uno*10;dos=dos; break; case 2: uno=uno*100;dos=dos*10;tre=tre; break; case 3: uno=uno*1000;dos=dos*100;tre=tre*10;cua=cua; break; default : aux=0; } num=uno+dos+tre+cua; aux=0; return(num); } int main() { // r0 r1 r2 r3 c0 c1 c2 c3 Keypad keypad(PTC11, PTC10, PTC6, PTC5, PTC4, PTC3, PTC0, PTC7); keypad.attach(&cbAfterInput); keypad.start(); // energize the keypad via c0-c3 mostrar(); while(1) { if(Keytable[a]==10) { if(aste==4){aste=0;} switch(aste) { case 0:limpiar(); lcd.locate(3,0); lcd.printf(" "); p=numero(); mostrar(); break; case 1:limpiar(); lcd.locate(11,0); lcd.printf(" "); i=numero(); mostrar(); break; case 2:limpiar(); lcd.locate(3,1); lcd.printf(" "); d=numero(); mostrar(); break; case 3:limpiar(); lcd.locate(11,1); lcd.printf(" "); s=numero(); mostrar(); break; } aste++; } } }