En este programa se agrego la funcionalidad de incremento y decremento por gradiente a los botones también se creo una rutina para el anti-rebote de los botones sin usar librería
main.cpp
- Committer:
- amarincan
- Date:
- 2013-10-16
- Revision:
- 0:c476b1e3e7a3
File content as of revision 0:c476b1e3e7a3:
#include "mbed.h" #include "TextLCD.h" TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7 int i,Sp=0,Kp,Ki,Kd,j; DigitalOut l1(LED1); DigitalOut l2(LED2); int main() { DigitalIn button1(PTC12); DigitalIn button2(PTC13); DigitalIn button3(PTC16); lcd.writeCommand(0x0E); lcd.printf("Sp= Kp="); lcd.locate(0,1); lcd.printf("Ki= Kd="); lcd.locate(2,0); lcd.printf("="); while(1) { if (!button1) { switch(i) { case 0: wait(0.5); j++; // <-----ANTIREBOTE AQUI!!! while(!button1) { if((j>=1) &&(j<6)) { j++; Sp+=1; } if((j>=6)&&(j<11)&&(Sp<9999)) { j++; Sp+=10; } if((j>=11)&&(j<16)&&(Sp<9999)) { j++; Sp+=100; } if((j>=16)&&(Sp<9999)) { j++; Sp+=500; } if(Sp>9999) Sp=9999; lcd.locate(2,0); lcd.printf("= "); lcd.locate(3,0); lcd.printf("%d",Sp); wait(1); } if(j==1) ++Sp; if(Sp>9999) Sp=9999; lcd.locate(2,0); lcd.printf("= "); lcd.locate(3,0); lcd.printf("%d",Sp); break; case 1: wait(0.5); j++; // <-----ANTIREBOTE AQUI!!! while(!button1) { if((j>=1) &&(j<6)) { j++; Kp+=1; } if((j>=6)&&(j<11)&&(Kp<9999)) { j++; Kp+=10; } if((j>=11)&&(j<16)&&(Kp<9999)) { j++; Kp+=100; } if((j>=16)&&(Kp<9999)) { j++; Kp+=500; } if(Kp>9999) Kp=9999; lcd.locate(10,0); lcd.printf("= "); lcd.locate(11,0); lcd.printf("%d",Kp); wait(1); } if(j==1) ++Kp; if(Kp>9999) Kp=9999; lcd.locate(10,0); lcd.printf("= "); lcd.locate(11,0); lcd.printf("%d",Kp); break; case 2: wait(0.5); j++; // <-----ANTIREBOTE AQUI!!! while(!button1) { if((j>=1) &&(j<6)) { j++; Ki+=1; } if((j>=6)&&(j<11)&&(Ki<9999)) { j++; Ki+=10; } if((j>=11)&&(j<16)&&(Ki<9999)) { j++; Ki+=100; } if((j>=16)&&(Ki<9999)) { j++; Ki+=500; } if(Ki>9999) Ki=9999; lcd.locate(2,1); lcd.printf("= "); lcd.locate(3,1); lcd.printf("%d",Ki); wait(1); } if(j==1) ++Ki; if(Ki>9999) Ki=9999; lcd.locate(2,1); lcd.printf("= "); lcd.locate(3,1); lcd.printf("%d",Ki); break; case 3: wait(0.5); j++; // <-----ANTIREBOTE AQUI!!! while(!button1) { if((j>=1) &&(j<6)) { j++; Kd+=1; } if((j>=6)&&(j<11)&&(Kd<9999)) { j++; Kd+=10; } if((j>=11)&&(j<16)&&(Kd<9999)) { j++; Kd+=100; } if((j>=16)&&(Kd<9999)) { j++; Kd+=500; } if(Kd>9999) Kd=9999; lcd.locate(10,1); lcd.printf("= "); lcd.locate(11,1); lcd.printf("%d",Kd); wait(1); } if(j==1) ++Kd; if(Kd>9999) Kd=9999; lcd.locate(10,1); lcd.printf("= "); lcd.locate(11,1); lcd.printf("%d",Kd); break; } } j=0; if (!button2) { switch(i) { case 0: wait(0.5); j++; // <-----ANTIREBOTE AQUI!!! while(!button2) { if((j>=1) &&(j<6)) { j++; Sp-=1; } if((j>=6)&&(j<11)&&(Sp>0)) { j++; Sp-=10; } if((j>=11)&&(j<16)&&(Sp>0)) { j++; Sp-=100; } if((j>=16)&&(Sp>0)) { j++; Sp-=500; } if(Sp<0) Sp=0; lcd.locate(2,0); lcd.printf("= "); lcd.locate(3,0); lcd.printf("%d",Sp); wait(1); } if(j==1) --Sp; if(Sp<0) Sp=0; lcd.locate(2,0); lcd.printf("= "); lcd.locate(3,0); lcd.printf("%d",Sp); break; case 1: wait(0.5); j++; // <-----ANTIREBOTE AQUI!!! while(!button2) { if((j>=1) &&(j<6)) { j++; Kp-=1; } if((j>=6)&&(j<11)&&(Kp>0)) { j++; Kp-=10; } if((j>=11)&&(j<16)&&(Kp>0)) { j++; Kp-=100; } if((j>=16)&&(Kp>0)) { j++; Kp-=500; } if(Kp<0) Kp=0; lcd.locate(10,0); lcd.printf("= "); lcd.locate(11,0); lcd.printf("%d",Kp); wait(1); } if(j==1) --Kp; if(Kp<0) Kp=0; lcd.locate(10,0); lcd.printf("= "); lcd.locate(11,0); lcd.printf("%d",Kp); break; case 2: wait(0.5); j++; // <-----ANTIREBOTE AQUI!!! while(!button2) { if((j>=1) &&(j<6)) { j++; Ki-=1; } if((j>=6)&&(j<11)&&(Ki>0)) { j++; Ki-=10; } if((j>=11)&&(j<16)&&(Ki>0)) { j++; Ki-=100; } if((j>=16)&&(Ki>0)) { j++; Ki-=500; } if(Ki<0) Ki=0; lcd.locate(2,1); lcd.printf("= "); lcd.locate(3,1); lcd.printf("%d",Ki); wait(1); } if(j==1) --Ki; if(Ki<0) Ki=0; lcd.locate(2,1); lcd.printf("= "); lcd.locate(3,1); lcd.printf("%d",Ki); break; case 3: wait(0.5); j++; // <-----ANTIREBOTE AQUI!!! while(!button1) { if((j>=1) &&(j<6)) { j++; Kd-=1; } if((j>=6)&&(j<11)&&(Kd>0)) { j++; Kd-=10; } if((j>=11)&&(j<16)&&(Kd>0)) { j++; Kd-=100; } if((j>=16)&&(Kd>0)) { j++; Kd-=500; } if(Kd>0) Kd=0; lcd.locate(10,1); lcd.printf("= "); lcd.locate(11,1); lcd.printf("%d",Kd); wait(1); } if(j==1) ++Kd; if(Kd>0) Kd=0; lcd.locate(10,1); lcd.printf("= "); lcd.locate(11,1); lcd.printf("%d",Kd); break; } } j=0; if(!button3) { wait(0.5); // <-----ANTIREBOTE AQUI!!! while(!button1); i++; if(i>3) i=0; switch (i) { case 0: lcd.locate(2,0); lcd.printf("="); break; case 1: lcd.locate(10,0); lcd.printf("="); break; case 2: lcd.locate(2,1); lcd.printf("="); break; case 3: lcd.locate(10,1); lcd.printf("="); break; } } } }