ejemplo de reloj despertador con FRDMKL25Z, usa un encoder y un LCD se instala parlante y tiene modo snozze (fastidio)
Dependencies: Debounced QEI RTC-DS1307 TextLCD mbed
Fork of Tarea5_Reloj_alarma by
Diff: main.cpp
- Revision:
- 0:c2ed510ee88d
- Child:
- 1:0639f31dd59f
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue May 13 18:42:02 2014 +0000 @@ -0,0 +1,521 @@ +//Este programa se basó en el programa de tony63 teclas_PID + + +//Julian Esteban Palacio Hernandez +//Andres Mauricio Gomez Arevalo + +#include "mbed.h" +#include "DebouncedIn.h" +#include "TextLCD.h" +#include "QEI.h" +#include "Rtc_Ds1307.h" + +TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7 +Rtc_Ds1307 rtc(PTE0, PTE1); +QEI wheel (PTA16, PTA17, NC, 48); + + +DebouncedIn button_enco(PTC5); +DebouncedIn button1(PTC12); +DebouncedIn button2(PTC13); +DebouncedIn button3(PTC16); + +PwmOut Sonido(PTA5); + + +float periodo; +float Frecuencia=4000; +int C1=0x0C; +int sp=0,kp=0,kd=0,ki=0,p=1,v=0,m; +int Conf=0; // 0: Alarma y 1:Reloj +int Lugar=0; // Definen el punto en el cual va el programa +int i=0; +int visual=0; +int alarma=0; + +int main() +{ + Rtc_Ds1307::Time_rtc tm = {}; + Rtc_Ds1307::Time_rtc Alarm = {}; + lcd.cls(); + lcd.writeCommand(C1);//escribimos un comando segun el manual del modulo LCD + + lcd.locate(0,0); + lcd.printf("--Alarma --Hora"); + + periodo=(1/Frecuencia); + Sonido.period(periodo); + + rtc.getTime(tm); //lo acabé de poner + + while(1) + { + switch (Lugar) + { + case 0: + m=wheel.getPulses(); + if(m!=0 && Conf==0){ + Conf=1; + wheel.reset(); + m=0; + } + + if(m!=0 && Conf==1){ + Conf=0; + wheel.reset(); + m=0; + } + + if(Conf==0){ + + lcd.locate(11,0); + lcd.printf("-"); + lcd.locate(1,0); + lcd.printf(">"); + lcd.locate(0,1); + wait(0.1); + + } + + if(Conf==1){ + + lcd.locate(1,0); + lcd.printf("-"); + lcd.locate(11,0); + lcd.printf(">"); + lcd.locate(0,1); + wait(0.1); + } + + if (button_enco.falling()){ + Lugar++; + m=0; + } + + break; + + case 1: + switch(i) + { + case 0: + + + if(Conf==0) + { + lcd.cls(); + lcd.locate(0,0); + lcd.printf("Config. Alarma "); + wait(1); + i++; + m=0; + lcd.cls(); + lcd.locate(0,0); + lcd.printf("Dia: "); + tm.date=1; + } + + if(Conf==1) + { + lcd.cls(); + lcd.locate(0,0); + lcd.printf("Config. hora "); + wait(1); + i++; + m=0; + lcd.cls(); + lcd.locate(0,0); + lcd.printf("Dia: "); + //tm.date=1; + } + + break; + + case 1: + m=wheel.getPulses(); + if (m!=0) + { + tm.date=tm.date+m; + if(tm.date>31) + { + tm.date=31; + } + if(tm.date<1) + { + tm.date=1; + } + + wheel.reset(); + m=0; + } + lcd.locate(5,0); + lcd.printf("%02d",tm.date); + + if (button_enco.falling()) + { + i++; + m=0; + lcd.cls(); + lcd.locate(0,0); + lcd.printf("Mes: "); + //tm.mon=1; + } + + break; + + case 2: + m=wheel.getPulses(); + if (m!=0) + { + tm.mon=tm.mon+m; + if(tm.mon>12) + { + tm.mon=12; + } + if(tm.mon<1) + { + tm.mon=1; + } + + wheel.reset(); + m=0; + } + lcd.locate(5,0); + lcd.printf("%02d",tm.mon); + + if (button_enco.falling()) + { + i++; + m=0; + lcd.cls(); + lcd.locate(0,0); + lcd.printf("Year: "); + //tm.year=2000; + } + + break; + + case 3: + m=wheel.getPulses(); + if (m!=0) + { + tm.year=tm.year+m; + + if(tm.year<2000) + { + tm.year=2000; + } + + wheel.reset(); + m=0; + } + lcd.locate(6,0); + lcd.printf("%02d",tm.year); + + if (button_enco.falling()) + { + i++; + m=0; + lcd.cls(); + lcd.locate(0,0); + lcd.printf("Hora: "); + //tm.hour=5; + } + + break; + + case 4: + m=wheel.getPulses(); + + if (m!=0) + { + tm.hour=tm.hour + m; + if(tm.hour>23) + { + tm.hour=23; + } + if(tm.hour<0) + { + tm.hour=0; + } + + wheel.reset(); + m=0; + } + lcd.locate(6,0); + lcd.printf("%02d",tm.hour); + + if (button_enco.falling()) + { + i++; + m=0; + lcd.cls(); + lcd.locate(0,0); + lcd.printf("Minuto: "); + //tm.min=0; + } + + break; + + case 5: + m=wheel.getPulses(); + if (m!=0) + { + tm.min=tm.min+m; + if(tm.min>59) + { + tm.min=59; + } + if(tm.min<0) + { + tm.min=0; + } + + wheel.reset(); + m=0; + } + lcd.locate(8,0); + lcd.printf("%02d",tm.min); + + if (button_enco.falling()) + { + i++; + m=0; + lcd.cls(); + lcd.locate(0,0); + lcd.printf("Segundo: "); + //tm.sec=0; + } + + break; + + + case 6: + m=wheel.getPulses(); + if (m!=0) + { + tm.sec=tm.sec+m; + if(tm.sec>59) + { + tm.sec=59; + } + if(tm.sec<0) + { + tm.sec=0; + } + + wheel.reset(); + m=0; + } + lcd.locate(9,0); + lcd.printf("%02d",tm.sec); + + if (button_enco.falling()) + { + /////////////////// + if(Conf==0) + { + Alarm=tm; + lcd.cls(); + lcd.locate(0,0); + lcd.printf("Alarma config. "); + wait(1); + i=0; + m=0; + Lugar++; + lcd.cls(); + + } + + if(Conf==1) + { + rtc.setTime(tm, false, false); + rtc.startClock(); + lcd.cls(); + lcd.locate(0,0); + lcd.printf("Hora Config. "); + wait(1); + i=0; + m=0; + Lugar=0; + lcd.locate(0,0); + lcd.printf("--Alarma --Hora"); + } + + /////////////////// + } + + break; + + } + break; + + case 2: + + rtc.getTime(tm); + + if(visual==0) + { + + lcd.locate(0,0); + lcd.printf("Hora: "); + lcd.locate(8,0); + lcd.printf("%02d:",tm.hour); + lcd.printf("%02d:",tm.min); + lcd.printf("%02d",tm.sec); + + lcd.locate(0,1); + //lcd.printf("%s, ",rtc.weekdayToString(tm.wday)); + lcd.printf("%02d/",tm.mon); + lcd.printf("%02d/",tm.date); + lcd.printf("%02d",tm.year); + wait(0.1); + ////////// + m=wheel.getPulses(); + if(m!=0) + { + visual=1; + wheel.reset(); + m=0; + } + + ////// + + } + + if(visual==1) + { + lcd.locate(0,0); + lcd.printf("Alarma: "); + lcd.locate(8,0); + lcd.printf("%02d:",Alarm.hour); + lcd.printf("%02d:",Alarm.min); + lcd.printf("%02d",Alarm.sec); + + + lcd.locate(0,1); + //lcd.printf("%s, ",rtc.weekdayToString(tm.wday)); + lcd.printf("%02d/",Alarm.mon); + lcd.printf("%02d/",Alarm.date); + lcd.printf("%02d",Alarm.year); + wait(0.1); + //// + m=wheel.getPulses(); + if(m!=0) + { + visual=0; + wheel.reset(); + m=0; + } + + //// + } + + if( (tm.date==Alarm.date)&&(tm.mon==Alarm.mon)&&(tm.year==Alarm.year)&&(tm.hour==Alarm.hour)&&(tm.min==Alarm.min)&&(tm.sec==Alarm.sec) ) + { + Lugar++; + lcd.cls(); + lcd.locate(0,0); + lcd.printf("Alarma Activa!!!"); + wait(1); + lcd.locate(0,0); + lcd.printf("->Desactivar "); + lcd.locate(0,1); + lcd.printf("--Aplazar "); + m=0; + } + + break; + + case 3: + + if(alarma==0) + { + Sonido.write(0.5); + wait(0.2); + Sonido.write(0); + wait(0.2); + Sonido.write(0.5); + wait(0.2); + Sonido.write(0); + wait(0.2); + + m=wheel.getPulses(); + if(m!=0) + { + alarma=1; + m=0; + wheel.reset(); + + lcd.locate(1,0); + lcd.printf("-"); + lcd.locate(1,1); + lcd.printf(">"); + } + } + + /////////////////// + + if(alarma==1) + { + Sonido.write(0.5); + wait(0.2); + Sonido.write(0); + wait(0.2); + Sonido.write(0.5); + wait(0.2); + Sonido.write(0); + wait(0.2); + + m=wheel.getPulses(); + if(m!=0) + { + alarma=0; + m=0; + wheel.reset(); + + lcd.locate(1,0); + lcd.printf(">"); + lcd.locate(1,1); + lcd.printf("-"); + } + } + + if (button_enco.falling()) + { + if(alarma==0) + { + Lugar=0; + wheel.reset(); + m=0; + Sonido.write(0); + lcd.cls(); + lcd.locate(0,0); + lcd.printf("--Alarma --Hora"); + + } + if(alarma==1) + { + Lugar=2; + rtc.getTime(tm); + if(tm.min!=58) + { + Alarm.min=tm.min+1; + } + if(tm.min==59) + { + Alarm.min=0; + Alarm.hour=tm.hour+1; + } + Alarm.sec=tm.sec; + lcd.cls(); + alarma=0; + + } + + } + + + break; + } + } +} \ No newline at end of file