![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Despertador por rtc I2C, encoder, LCD y buzzer
Dependencies: QEI RTC-DS1307 TextLCD mbed
Diff: main.cpp
- Revision:
- 0:e078f69875aa
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sun May 29 17:52:00 2016 +0000 @@ -0,0 +1,274 @@ +#include "mbed.h" +#include "Rtc_Ds1307.h" +#include "TextLCD.h" +#include "QEI.h" + +TextLCD lcd(PTC7, PTC0, PTC3, PTC4, PTC5, PTC6); // rs, e, d4-d7 +Rtc_Ds1307 rtc(PTE0, PTE1);//Dato,Reloj +QEI encoder (PTC12, PTC13, NC, 624);//pines de etrada de comparación del encoder +DigitalIn chan(PTA13);//botón del encoder +DigitalIn rlo(PTD0);//pulsador de la freescale para configurar la RTC +DigitalIn rl(PTD5);//pulsador de la freescale para configurar la Alarma +DigitalOut ledr(PTD1);//Led indicador de la alarma +DigitalOut buzz(PTA17);//Buzzer indiciador de la alarma +char buffer[128]; +int readptr = 0,segundos =0,cambio=0,cont=0,pla=0,pla2=0,key=0;//variables del programa +int di=0,me=0,an=0,fle=0,mi=0,se=0,jod=0;//varaibles para la alarma +int main() +{ +Rtc_Ds1307::Time_rtc tm = {}; +ledr=1;//Led apagado +while(1){ +sk: if(pla==1)//Rutina para la configuración de los parametros en la RCT (día,mes,año,hora,minutos,segundos,día de la samana) + { + buzz=0;//Buzzer apagado + ledr=1;//Led apagado + jod=0; + key=0; + while(rlo==1){}//anti-rebotes + lcd.cls(); + while(cont==0) + { + rtc.stopClock();//para el clock de la RTC + lcd.locate(0,0); + lcd.printf("(Day 1..31)");//muestra en el LCD el parametro a asignar + cambio=encoder.getPulses();//valor del encoder + if(cambio<=1){cambio=1;}//limite inferior para este parametro + if(cambio>=31){cambio=31;}//limite superior para este parametro + lcd.locate(0,1); + lcd.printf(" "); + lcd.locate(0,1); + lcd.printf("%d",cambio);//valor acutal + while(chan==0){encoder.reset();cont=1;}//si presiona el botón del encoder salta al siguiente parametro + } + tm.date=cambio;//asignación del valor elegido al parametro que se desea asignar en la RTC + cambio=0;//limpia la variable + while(cont==1) + { + lcd.locate(0,0); + lcd.printf("(month 1..12)"); + cambio=encoder.getPulses(); + if(cambio<=1){cambio=1;} + if(cambio>=12){cambio=12;} + lcd.locate(0,1); + lcd.printf(" "); + lcd.locate(0,1); + lcd.printf("%d",cambio); + while(chan==0){encoder.reset();cont=2;} + } + tm.mon=cambio; + cambio=0; + while(cont==2) + { + lcd.locate(0,0); + lcd.printf("(year 0-99)"); + cambio=encoder.getPulses(); + if(cambio<=0){cambio=0;} + if(cambio>=99){cambio=99;} + lcd.locate(0,1); + lcd.printf(" "); + lcd.locate(0,1); + lcd.printf("%d",cambio); + while(chan==0){encoder.reset();cont=3;} + } + tm.year=cambio+2000; + cambio=0; + while(cont==3) + { + lcd.locate(0,0); + lcd.printf("(hours 0..23)"); + cambio=encoder.getPulses(); + if(cambio<=0){cambio=0;} + if(cambio>=23){cambio=23;} + lcd.locate(0,1); + lcd.printf(" "); + lcd.locate(0,1); + lcd.printf("%d",cambio); + while(chan==0){encoder.reset();cont=4;cambio=cambio;} + } + tm.hour=cambio; + cambio=0; + while(cont==4) + { + lcd.locate(0,0); + lcd.printf("(minutes 0..59)"); + cambio=encoder.getPulses(); + if(cambio<=0){cambio=0;} + if(cambio>=59){cambio=59;} + lcd.locate(0,1); + lcd.printf(" "); + lcd.locate(0,1); + lcd.printf("%d",cambio); + while(chan==0){encoder.reset();cont=5;} + } + tm.min=cambio; + cambio=0; + while(cont==5) + { + lcd.locate(0,0); + lcd.printf("(seconds 0..59)"); + cambio=encoder.getPulses(); + if(cambio<=0){cambio=0;} + if(cambio>=59){cambio=59;} + lcd.locate(0,1); + lcd.printf(" "); + lcd.locate(0,1); + lcd.printf("%d",cambio); + while(chan==0){encoder.reset();cont=6;lcd.locate(0,0);lcd.printf("( ");} + } + tm.sec=cambio; + cambio=1; + while(cont==6) + { + lcd.locate(0,0); + lcd.printf("(sunday=1)"); + cambio=encoder.getPulses(); + if(cambio<=1){cambio=1;} + if(cambio>=7){cambio=7;} + lcd.locate(0,1); + lcd.printf(" "); + lcd.locate(0,1); + lcd.printf("%d",cambio); + while(chan==0){encoder.reset();cont=7;} + } + tm.wday=cambio; + cambio=0; + rtc.setTime(tm, false, false); + rtc.startClock();//inicia el conteo en la RTC + pla=0; + } + cont=0; + +sk2: if(pla2==1)//Rutina para la configuración de los parametros en la Alarma (día,mes,año,hora,minutos,segundos) + { + buzz=0; + ledr=1; + jod=0; + key=0; + while(rl==1){} + lcd.cls(); + while(cont==0) + { + lcd.locate(0,0); + lcd.printf("alm(Day 1..31)"); + cambio=encoder.getPulses(); + if(cambio<=1){cambio=1;} + if(cambio>=31){cambio=31;} + lcd.locate(0,1); + lcd.printf(" "); + lcd.locate(0,1); + lcd.printf("%d",cambio); + while(chan==0){encoder.reset();cont=1;} + } + di=cambio; + cambio=0; + while(cont==1) + { + lcd.locate(0,0); + lcd.printf("alm(month 1..12)"); + cambio=encoder.getPulses(); + if(cambio<=1){cambio=1;} + if(cambio>=12){cambio=12;} + lcd.locate(0,1); + lcd.printf(" "); + lcd.locate(0,1); + lcd.printf("%d",cambio); + while(chan==0){encoder.reset();cont=2;} + } + me=cambio; + cambio=0; + while(cont==2) + { + lcd.locate(0,0); + lcd.printf("alm(year 0..99)"); + cambio=encoder.getPulses(); + if(cambio<=0){cambio=0;} + if(cambio>=99){cambio=99;} + lcd.locate(0,1); + lcd.printf(" "); + lcd.locate(0,1); + lcd.printf("%d",cambio); + while(chan==0){encoder.reset();cont=3;} + } + an=cambio+2000; + cambio=0; + while(cont==3) + { + lcd.locate(0,0); + lcd.printf("alm(hours 0..23)"); + cambio=encoder.getPulses(); + if(cambio<=0){cambio=0;} + if(cambio>=23){cambio=23;} + lcd.locate(0,1); + lcd.printf(" "); + lcd.locate(0,1); + lcd.printf("%d",cambio); + while(chan==0){encoder.reset();cont=4;} + } + fle=cambio; + cambio=0; + while(cont==4) + { + lcd.locate(0,0); + lcd.printf("alm(minutes 0..59)"); + cambio=encoder.getPulses(); + if(cambio<=0){cambio=0;} + if(cambio>=59){cambio=59;} + lcd.locate(0,1); + lcd.printf(" "); + lcd.locate(0,1); + lcd.printf("%d",cambio); + while(chan==0){encoder.reset();cont=5;} + } + mi=cambio; + cambio=0; + while(cont==5) + { + lcd.locate(0,0); + lcd.printf("alm(seconds 0..59)"); + cambio=encoder.getPulses(); + if(cambio<=0){cambio=0;} + if(cambio>=59){cambio=59;} + lcd.locate(0,1); + lcd.printf(" "); + lcd.locate(0,1); + lcd.printf("%d",cambio); + while(chan==0){encoder.reset();cont=6;lcd.locate(0,0);lcd.printf("( ");} + } + se=cambio; + cambio=0; + pla2=0; + } + + cont=0; + cicl: if (rtc.getTime(tm) ) { + if(rlo==0){pla=1;goto sk;}//si se presiona va a la configuración de la RTC + if(rl==0){pla2=1;goto sk2;}//si se presiona va a la configuración de la Alarma + lcd.cls(); + lcd.locate(0,0);//muestra el valor de todos los parametros actuales en la RTC + lcd.printf("%02d:%02d:%02d", tm.hour, tm.min, tm.sec); + lcd.locate(0,1); + lcd.printf("%s/%02d/%02d/%4d", rtc.weekdayToString(tm.wday), tm.date, tm.mon, tm.year); + if((tm.date==di)&&(tm.mon==me)&&(tm.year==an)&&(tm.hour==fle)&&(tm.min==mi)&&(tm.sec==se)){key=1;}//comparación de la Alarma + while(key==1) + { + jod++; + ledr=0;buzz=1; + wait(1); + ledr=1;buzz=0; + wait(0.5); + if(chan!=1){key=0;jod=0;goto cicl;}//botón que para la Alarma + if(jod==7){key=0;mi=mi+1;if(mi==60){mi=0;fle=fle+1;if(fle==24){fle=0;di=di+1;if(di==31){di=1;me=me+1;if(me==12){me=1;an=an+1;}}}}jod=0;//condiciones de salto + + } + } + wait(0.2); + goto cicl;//blucle infinito hasta que suceda una interrupción + } + + } + + + +} + \ No newline at end of file