Código para programar un PID por medio de un teclado matricial y un LCD.
Dependencies: FPointer TextLCD keypad mbed
Revision 0:e4f5d9537189, committed 2016-06-01
- Comitter:
- gjusecheo
- Date:
- Wed Jun 01 15:35:55 2016 +0000
- Commit message:
- Tarea_LCD_PID
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FPointer.lib Wed Jun 01 15:35:55 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/AjK/code/FPointer/#56e309e76c19
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TextLCD.lib Wed Jun 01 15:35:55 2016 +0000 @@ -0,0 +1,1 @@ +https://mbed.org/users/avallejopo/code/TextLCD/#aba8ab3dde9d
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/keypad.lib Wed Jun 01 15:35:55 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/yoonghm/code/keypad/#e48ba5b4c497
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Jun 01 15:35:55 2016 +0000 @@ -0,0 +1,135 @@ +#include "mbed.h" +#include "keypad.h" +#include "TextLCD.h" +#include "stdlib.h" + +TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7 +int C1=0x0F; // Cursor +int C4=0x0C; // quito cursor bajo +int kpnum=0,kinum=0,spnum=0,kdnum=0,pos=1,tecla,flag1=1,num=0; +int flagt=0; +Timer t; +char cadena[3]={' ',' ',' '}; +int llena=0; //verificar que la entrada es de 3 numeros +// Define your own keypad values +char Keytable[] = { '1', '2', '3', 'A', + '4', '5', '6', 'B', + '7', '8', '9', 'C', + '*', '0', '#', 'D' + }; + +uint32_t cbAfterInput(uint32_t index) { + tecla=index; + flag1=0; + return 0; +} + +int main() { + // f0 f1 f2 f3 c0 c1 c2 c3 + Keypad keypad(PTA1, PTA2, PTD4, PTA12,PTC7, PTC0, PTC3, PTC4); + ini1: + lcd.cls(); // Borrar Pantalla + lcd.locate(0,0); + lcd.printf("**PID-TECLADO**"); + wait(1); + lcd.cls(); + + lcd.locate(0,0); + lcd.printf("Kp=%d",kpnum); + lcd.locate(8,0); + lcd.printf("Ki=%d",kinum); + lcd.locate(0,1); + lcd.printf("Kd=%d",kdnum); + lcd.locate(8,1); + lcd.printf("Sp=%d",spnum); + + //lcd.locate(3,0); + //lcd.writeCommand(C1);//escribimos un comando segun el manual del modulo LCD + + ini2: + keypad.CallAfterInput(&cbAfterInput); + keypad.Start(); + if(flag1==0){ + if(Keytable[tecla]=='B'){ + cadena[0]=' ';cadena[1]=' ';cadena[2]=' '; + llena=0; + num=0; + if(pos==4){ + pos=1;} + else { + pos++;} + } + else if(Keytable[tecla]=='A'){ + llena--; + cadena[llena]=' '; + num=strtod(cadena,NULL); + } + else if((tecla==0)||(tecla==1)||(tecla==2)||(tecla==4)||(tecla==5)||(tecla==6)||(tecla==8)||(tecla==9)||(tecla==10)||(tecla==13)){ + if(llena<3){ + cadena[llena]=Keytable[tecla]; + num=strtod(cadena,NULL); + llena++;} + } + else if(Keytable[tecla]=='D'){ + lcd.writeCommand(C4);//escribimos un comando segun el manual del modulo LCD para quitar cursor bajo + lcd.cls(); //borra la pantalla + lcd.printf(" GUARDADOS!"); + wait(1); + lcd.cls(); + lcd.locate(0,0); + lcd.printf("Kp=%d",kpnum); + lcd.locate(8,0); + lcd.printf("Ki=%d",kinum); + lcd.locate(0,1); + lcd.printf("Kd=%d",kdnum); + lcd.locate(8,1); + lcd.printf("Sp=%d",spnum); + wait(2); + cicloPID: + if(Keytable[tecla]=='C'){ + kpnum=0;kinum=0;kdnum=0;spnum=0;llena=0;pos=1;flag1=1; + cadena[0]=' ';cadena[1]=' ';cadena[2]=' '; + goto ini1;} + + if(flagt==0){//se muestran las variables + t.start(); + flagt=1;} + if(t>=0.3){ + lcd.locate(3,0);lcd.printf(" "); + lcd.locate(3,0);lcd.printf("%d",kpnum); + lcd.locate(11,0);lcd.printf(" "); + lcd.locate(11,0);lcd.printf("%d",kinum); + lcd.locate(3,1);lcd.printf(" "); + lcd.locate(3,1);lcd.printf("%d",kdnum); + lcd.locate(11,1);lcd.printf(" "); + lcd.locate(11,1);lcd.printf("%d",spnum); + flagt=0; + t.reset(); + } + goto cicloPID; + } + if(pos==1){ + kpnum=num; + lcd.locate(3,0);lcd.writeCommand(C1); + lcd.locate(3,0);lcd.printf(" "); + lcd.locate(3,0);lcd.printf("%d",kpnum); + } + else if(pos==2){ + kinum=num; + lcd.locate(11,0);lcd.printf(" "); + lcd.locate(11,0);lcd.printf("%d",kinum); + } + else if(pos==3){ + kdnum=num; + lcd.locate(3,1);lcd.printf(" "); + lcd.locate(3,1);lcd.printf("%d",kdnum); + } + else if(pos==4){ + spnum=num; + lcd.locate(11,1);lcd.printf(" "); + lcd.locate(11,1);lcd.printf("%d",spnum); + } + } + flag1=1; + goto ini2; +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Wed Jun 01 15:35:55 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/6c34061e7c34 \ No newline at end of file