Se definen 7 alarmas de forma preestablecida y luego se escogen con un control remoto.
Dependencies: Debounced Pulse1 QEI RTC-DS1307 TextLCD mbed
Fork of Reloj_alarma by
Revision 2:8b79efdd0127, committed 2018-05-23
- Comitter:
- seccastanova
- Date:
- Wed May 23 18:40:41 2018 +0000
- Parent:
- 1:0639f31dd59f
- Commit message:
- Tarea que permite configurar 7 alarmas predefinidas usando un reloj RTC1307;
Changed in this revision
Pulse1.lib | Show annotated file Show diff for this revision Revisions of this file |
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r 0639f31dd59f -r 8b79efdd0127 Pulse1.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Pulse1.lib Wed May 23 18:40:41 2018 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/tony63/code/Pulse1/#48651f86a80c
diff -r 0639f31dd59f -r 8b79efdd0127 main.cpp --- a/main.cpp Wed Sep 28 06:48:39 2016 +0000 +++ b/main.cpp Wed May 23 18:40:41 2018 +0000 @@ -1,44 +1,73 @@ +/* +ESTE PROGRAMA PERMITE CONFIGURAR UNA SERIE DE ALARMAS (7) PREDEFINIDAS QUE LUEGO +PODRÁN SER ESCOGIDAS CON UN CONTROL DE TELEVISOR MARCA LG CON LOS NÚMEROS DE 1 A 7 +SE USA UN RELOJ RTC 1307 Y UN RECEPTOR IRDA COMUN. +ESTA TAREA FUE DESARROLLADA POR SEBASTIÁN CAMILO CASTAÑO VANEGAS Y CARLOS MAURICIO ALZATE TORRES +PARA LA MATERIA DE PROCESADORES DE LA UNIVERSIDAD NACIONAL DE MEDELLÍN SEMESTRE I DEL AÑO 2018 +*/ #include "mbed.h" #include "DebouncedIn.h" #include "TextLCD.h" #include "QEI.h" #include "Rtc_Ds1307.h" +#include "string.h" +#include <Pulse1.h> +PulseInOut irda(PTB0);// en este puerto se pone el sensor infrarrojo 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); +DigitalOut myled(LED3); -PwmOut Sonido(PTA5); - -float periodo; -float Frecuencia=4000; +int numN[35];//cadena para almacenar todos los tiempos que conforman los bits de datos +int numP[35];//cadena para almacenar todos los tiempos que conforman los bits de datos +int numbin[35]; +int bin[35];//cadena para almacenar todos los tiempos que conforman los bits de datos +int dato; // tiempo de cada dato que se lee +int pul_low; +int i1,j1,k1,header,proL,proH; +char r; +char cadena[33]; +char uno[33]="10110100101101001101110000100011"; +char dos[33]="10110100101101000011110011000011"; +char tres[33]="10110100101101001011110001000011"; +char cuatro[33]="10110100101101000111110010000011"; +char cinco[33]="10110100101101001111110000000011"; +char seis[33]="10110100101101000000001011111101"; +char siete[33]="10110100101101001000001001111101"; +char set[33]="00100000110111110001000011101111"; +int mode=0; +int code; +int numb=32; +int s=0; +// int C1=0x0C; int 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 j=1; +int IRDA=1; +int irda_en=0; int visual=0; -int alarma=0; - +int alarma=0; int main() { + myled=1; + j=1; + Rtc_Ds1307::Time_rtc tm2 = {}; Rtc_Ds1307::Time_rtc tm = {}; - Rtc_Ds1307::Time_rtc Alarm = {}; + Rtc_Ds1307::Time_rtc Alarm[8] = {}; 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); - + lcd.printf("--Alarms --Time"); rtc.getTime(tm); //lee el tiempo del DS1307 while(1) { + switch (Lugar) { case 0: @@ -49,7 +78,7 @@ m=0; } - if(m!=0 && Conf==1){ + if(m!=0 && Conf==1){ Conf=0; wheel.reset(); m=0; @@ -86,40 +115,111 @@ case 1: switch(i) { - case 0: - - - if(Conf==0) + case 0: + if(Conf==0) // ALARMA { lcd.cls(); lcd.locate(0,0); - lcd.printf("Config. Alarma "); + lcd.printf("Config. Alarms "); wait(1); + lcd.cls(); i++; - m=0; - lcd.cls(); lcd.locate(0,0); - lcd.printf("Dia: "); - tm.date=1; + lcd.printf("Day: "); + m=0; } - if(Conf==1) + if(Conf==1) //RELOJ { lcd.cls(); lcd.locate(0,0); - lcd.printf("Config. hora "); + lcd.printf("Config. Time "); wait(1); i++; - m=0; lcd.cls(); lcd.locate(0,0); - lcd.printf("Dia: "); + lcd.printf("Day: "); + m=0; } break; - case 1: + case 1: //DAY OF WEEK + m=wheel.getPulses(); + if (m!=0) + { + tm.wday=tm.wday+m; + if(tm.wday>7) + { + tm.wday=7; + } + if(tm.wday<1) + { + tm.wday=1; + } + + wheel.reset(); + m=0; + } + + switch(tm.wday){ + case (1): + lcd.locate(5,0); + lcd.printf("Sunday "); + break; + case (2): + lcd.locate(5,0); + lcd.printf("Monday "); + break; + case (3): + lcd.locate(5,0); + lcd.printf("Tuesday "); + break; + case (4): + lcd.locate(5,0); + lcd.printf("Wednesday"); + break; + case (5): + lcd.locate(5,0); + lcd.printf("Thursday "); + break; + case (6): + lcd.locate(5,0); + lcd.printf("Friday "); + break; + case (7): + lcd.locate(5,0); + lcd.printf("Saturday "); + break; + } + + + if (button_enco.falling()) + { + switch(Conf) + { + case 0: + i=5; + m=0; + lcd.cls(); + lcd.locate(0,0); + lcd.printf("Hour: "); + m=0; + break; + case 1: + i=2; + m=0; + lcd.cls(); + lcd.locate(0,0); + lcd.printf("Day: "); + break; + } + } + + break; + case 2: // DAY OF DATE + m=0; m=wheel.getPulses(); if (m!=0) { @@ -137,7 +237,7 @@ m=0; } lcd.locate(5,0); - lcd.printf("%02d",tm.date); + lcd.printf("%02d ",tm.date); if (button_enco.falling()) { @@ -145,13 +245,11 @@ m=0; lcd.cls(); lcd.locate(0,0); - lcd.printf("Mes: "); - //tm.mon=1; + lcd.printf("Month: "); + } - break; - - case 2: + case 3: // MONTH m=wheel.getPulses(); if (m!=0) { @@ -168,7 +266,7 @@ wheel.reset(); m=0; } - lcd.locate(5,0); + lcd.locate(7,0); lcd.printf("%02d",tm.mon); if (button_enco.falling()) @@ -183,7 +281,7 @@ break; - case 3: + case 4: //YEAR m=wheel.getPulses(); if (m!=0) { @@ -202,22 +300,23 @@ if (button_enco.falling()) { - i++; + i=5; m=0; lcd.cls(); lcd.locate(0,0); - lcd.printf("Hora: "); + lcd.printf("Hour: "); + } break; - case 4: - m=wheel.getPulses(); - + case 5: //HOUR + m=0; + m=wheel.getPulses(); if (m!=0) { - tm.hour=tm.hour + m; + tm.hour+= m; if(tm.hour>23) { tm.hour=23; @@ -235,17 +334,18 @@ if (button_enco.falling()) { - i++; + i=6; m=0; lcd.cls(); lcd.locate(0,0); - lcd.printf("Minuto: "); + lcd.printf("Minute: "); //tm.min=0; } break; - case 5: + case 6: //MINUTE + m=0; m=wheel.getPulses(); if (m!=0) { @@ -267,18 +367,18 @@ if (button_enco.falling()) { - i++; + i=7; m=0; lcd.cls(); lcd.locate(0,0); - lcd.printf("Segundo: "); + lcd.printf("Second: "); //tm.sec=0; } break; - case 6: + case 7: //SECOND m=wheel.getPulses(); if (m!=0) { @@ -295,7 +395,7 @@ wheel.reset(); m=0; } - lcd.locate(9,0); + lcd.locate(8,0); lcd.printf("%02d",tm.sec); if (button_enco.falling()) @@ -303,31 +403,34 @@ /////////////////// if(Conf==0) { - Alarm=tm; + Alarm[j]=tm; lcd.cls(); lcd.locate(0,0); - lcd.printf("Alarma config. "); + lcd.printf("Alarm %d config. ",j); wait(1); i=0; m=0; + if(j>=7) + { Lugar++; + } + j++; lcd.cls(); } if(Conf==1) - { - rtc.setTime(tm, false, false); - rtc.startClock(); + { + rtc.setTime(tm, true, false); lcd.cls(); lcd.locate(0,0); - lcd.printf("Hora Config. "); + lcd.printf("Time config. "); wait(1); i=0; m=0; Lugar=0; lcd.locate(0,0); - lcd.printf("--Alarma --Hora"); + lcd.printf("--Alarms --Time"); } /////////////////// @@ -338,24 +441,53 @@ } break; - case 2: - - rtc.getTime(tm); + case 2: // SHOW THE TIME AND ALARM AND COMPROBATE THE ALARM STATE + rtc.getTime(tm2); //READING THE RTC + if(visual==0) - { - + { lcd.locate(0,0); - lcd.printf("Hora: "); + lcd.printf("Hour: "); lcd.locate(8,0); - lcd.printf("%02d:",tm.hour); - lcd.printf("%02d:",tm.min); - lcd.printf("%02d",tm.sec); - + lcd.printf("%02d:",tm2.hour); + lcd.printf("%02d:",tm2.min); + lcd.printf("%02d",tm2.sec); lcd.locate(0,1); - lcd.printf("%02d/",tm.mon); - lcd.printf("%02d/",tm.date); - lcd.printf("%02d",tm.year); + switch(tm2.wday){ + case (1): + lcd.locate(0,1); + lcd.printf("Sun "); + break; + case (2): + lcd.locate(0,1); + lcd.printf("Mon "); + break; + case (3): + lcd.locate(0,1); + lcd.printf("Tue "); + break; + case (4): + lcd.locate(0,1); + lcd.printf("Wed "); + break; + case (5): + lcd.locate(0,1); + lcd.printf("Thu "); + break; + case (6): + lcd.locate(0,1); + lcd.printf("Fri "); + break; + case (7): + lcd.locate(0,1); + lcd.printf("Sat "); + break; + } + lcd.locate(6,1); + lcd.printf("%02d/",tm2.date); + lcd.printf("%02d/",tm2.mon); + lcd.printf("%02d",tm2.year); wait(0.1); ////////// m=wheel.getPulses(); @@ -365,25 +497,49 @@ wheel.reset(); m=0; } - - ////// - } if(visual==1) { - lcd.locate(0,0); - lcd.printf("Alarma: "); + lcd.locate(0,1); + lcd.printf(" "); lcd.locate(8,0); - lcd.printf("%02d:",Alarm.hour); - lcd.printf("%02d:",Alarm.min); - lcd.printf("%02d",Alarm.sec); + lcd.printf("%02d:",Alarm[IRDA].hour); + lcd.printf("%02d:",Alarm[IRDA].min); + lcd.printf("%02d",Alarm[IRDA].sec); - - lcd.locate(0,1); - lcd.printf("%02d/",Alarm.mon); - lcd.printf("%02d/",Alarm.date); - lcd.printf("%02d",Alarm.year); + switch(Alarm[IRDA].wday){ + case (1): + lcd.locate(0,0); + lcd.printf("Sun "); + break; + case (2): + lcd.locate(0,0); + lcd.printf("Mon "); + break; + case (3): + lcd.locate(0,0); + lcd.printf("Tue "); + break; + case (4): + lcd.locate(0,0); + lcd.printf("Wed "); + break; + case (5): + lcd.locate(0,0); + lcd.printf("Thu "); + break; + case (6): + lcd.locate(0,0); + lcd.printf("Fri "); + break; + case (7): + lcd.locate(0,0); + lcd.printf("Sat "); + break; + } + lcd.locate(5,1); + lcd.printf("Alarm %d Set",IRDA); wait(0.1); //// m=wheel.getPulses(); @@ -393,39 +549,42 @@ 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) ) +/////////////////////////////////// ALARM COMPROBATION ///////////////////////////////////////////////////////////////////////////// + if( (tm2.wday==Alarm[IRDA].wday)&&((tm2.hour)==Alarm[IRDA].hour)&&(tm2.min==Alarm[IRDA].min)&&(tm2.sec==Alarm[IRDA].sec) ) { Lugar++; lcd.cls(); lcd.locate(0,0); - lcd.printf("Alarma Activa!!!"); + lcd.printf("Active Alarm!!!"); wait(1); lcd.locate(0,0); - lcd.printf("->Desactivar "); + lcd.printf("->Turn off "); lcd.locate(0,1); - lcd.printf("--Aplazar "); + lcd.printf("--Postpone "); m=0; } +////////////////// IRDA WAITING /////////////////////////////////////////////////////////////////////////////////////////////////// + if (button_enco.falling()) + { + irda_en=1; + lcd.cls(); + lcd.locate(0,0); + lcd.printf(" IRDA Waiting "); + + } break; - case 3: + case 3: //TURN OFF OR POSTPONE THE ALARM - if(alarma==0) + if(alarma==0) //CHOICE OF POSTPONE { - 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); - + myled=1; + wait(0.5); + myled=0; + wait(0.5); + m=wheel.getPulses(); if(m!=0) { @@ -442,17 +601,13 @@ /////////////////// - if(alarma==1) + if(alarma==1) //CHOICE OF TURN OFF { - 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); - + myled=1; + wait(0.5); + myled=0; + wait(0.5); + m=wheel.getPulses(); if(m!=0) { @@ -471,38 +626,98 @@ { if(alarma==0) { - Lugar=0; + Lugar=2; //RETURN TO SHOW THE TIME wheel.reset(); m=0; - Sonido.write(0); - lcd.cls(); - lcd.locate(0,0); - lcd.printf("--Alarma --Hora"); - + myled=1; + lcd.cls(); } if(alarma==1) { - Lugar=2; - rtc.getTime(tm); + Lugar=2; //RETURN TO SHOW THE TIME WITH CURRENT ALARM UPDATED + rtc.getTime(tm2); if(tm.min!=58) { - Alarm.min=tm.min+1; + Alarm[IRDA].min=tm2.min+1; } if(tm.min==59) { - Alarm.min=0; - Alarm.hour=tm.hour+1; + Alarm[IRDA].min=0; + Alarm[IRDA].hour=tm2.hour+1; } - Alarm.sec=tm.sec; + Alarm[IRDA].sec=tm2.sec; lcd.cls(); alarma=0; - - } - + myled=1; + } } - - break; - } - } + } +///////////////////////////////// IRDA READING ////////////////////////////////////////////////////////////////////////////////// + while (irda_en) + { + fflush( stdin ); + lop2: if(!mode){ + header = irda.read_high_us(); + if(header>3500) goto seguir2; + goto lop2; + } + + seguir2: + for(i1=0;i1<numb;++i1){ + numP[i1] = irda.read_high_us(); //funcion para leer un pulso alto + if (numP[i1]<1000){ + s=0; + r='0'; + }else{ + s=1; + r='1'; + } + numbin[i1]=s; + cadena[i1]=r; + } + if (!strcmp(cadena,uno)){ + IRDA=1; + lcd.locate(8,1); + lcd.printf("%d",IRDA); + goto seguir2; + }else if (!strcmp(cadena,dos)){ + IRDA=2; + lcd.locate(8,1); + lcd.printf("%d",IRDA); + goto seguir2; + }else if (!strcmp(cadena,tres)){ + IRDA=3; + lcd.locate(8,1); + lcd.printf("%d",IRDA); + goto seguir2; + }else if (!strcmp(cadena,cuatro)){ + IRDA=4; + lcd.locate(8,1); + lcd.printf("%d",IRDA); + goto seguir2; + }else if (!strcmp(cadena,cinco)){ + IRDA=5; + lcd.locate(8,1); + lcd.printf("%d",IRDA); + goto seguir2; + }else if (!strcmp(cadena,seis)){ + IRDA=6; + lcd.locate(8,1); + lcd.printf("%d",IRDA); + goto seguir2; + }else if (!strcmp(cadena,siete)){ + IRDA=7; + lcd.locate(8,1); + lcd.printf("%d",IRDA); + goto seguir2; + }else if(!strcmp(cadena,set)){ + goto lop3; + } + lop3: Lugar=2; + irda_en=0; + lcd.cls(); + break; + } + } } \ No newline at end of file