Tarea 3 del curso de procesadores
Dependencies: Debounced Pulse1 QEI RTC-DS1307 TextLCD mbed
Fork of Reloj_alarma by
Revision 2:ddd2659db993, committed 2018-06-05
- Comitter:
- CristihanPerez95
- Date:
- Tue Jun 05 01:53:03 2018 +0000
- Parent:
- 1:0639f31dd59f
- Commit message:
- Tarea 3 del curso de procesadores.; Universidad Nacional de Colombia Sede Medell?n.
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 ddd2659db993 Pulse1.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Pulse1.lib Tue Jun 05 01:53:03 2018 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/tony63/code/Pulse1/#48651f86a80c
diff -r 0639f31dd59f -r ddd2659db993 main.cpp --- a/main.cpp Wed Sep 28 06:48:39 2016 +0000 +++ b/main.cpp Tue Jun 05 01:53:03 2018 +0000 @@ -3,42 +3,64 @@ #include "TextLCD.h" #include "QEI.h" #include "Rtc_Ds1307.h" +#include "string.h" +#include <Pulse1.h> +//DigitalIn Irda_int(PTB0); +//DebouncedIn Irda_int(PTB0); +PulseInOut irda(PTB0);// 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); +QEI wheel (PTA13, PTD5, NC, 624); +DebouncedIn button_enco(PTC17); +DigitalOut myled(LED1); -PwmOut Sonido(PTA5); - -float periodo; -float Frecuencia=4000; +int numP[35];//cadena para almacenar todos los tiempos que conforman los bits de datos +int numbin[35]; +int i1; +int header=0; +char r; +char cadena[34]; +char cadena1[34]; +//char Read[]="0000000011111111111000100001110111"; +char uno[]="0000000011111111001100001100111111"; +char dos[]="0000000011111111000110001110011111"; +char tres[]="0000000011111111011110101000010111"; +char cuatro[]="0000000011111111000100001110111111"; +char cinco[]="0000000011111111001110001100011111"; +char seis[]="0000000011111111010110101010010111"; +char siete[]="0000000011111111010000101011110111"; +char set[]="0000000011111111100100000110111111"; +int mode=0; +int numb=34; +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 visual=0; -int alarma=0; - +int j=1; //Cuenta las alarmas +int Select=1; //Alarma Seleccionada +int StarReadIR=0; +int visual=0; //0: Reloj y 1:Alarm +int alarma=0; //0: Desactivar y 1:Posponer 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("--Alarmas --Hora"); rtc.getTime(tm); //lee el tiempo del DS1307 - + while(1) { + switch (Lugar) { case 0: @@ -49,7 +71,7 @@ m=0; } - if(m!=0 && Conf==1){ + if(m!=0 && Conf==1){ Conf=0; wheel.reset(); m=0; @@ -86,40 +108,37 @@ 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. Alarmas "); + wait(1); + lcd.cls(); + i++; + lcd.locate(0,0); + lcd.printf("Dia: "); + m=0; + } + + if(Conf==1) //RELOJ + { + 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; - } - - 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: "); } - + break; - - case 1: + case 1: // Dia + m=0; m=wheel.getPulses(); if (m!=0) { @@ -137,7 +156,7 @@ m=0; } lcd.locate(5,0); - lcd.printf("%02d",tm.date); + lcd.printf("%02d ",tm.date); if (button_enco.falling()) { @@ -146,12 +165,10 @@ lcd.cls(); lcd.locate(0,0); lcd.printf("Mes: "); - //tm.mon=1; + } - break; - - case 2: + case 2: // Mes m=wheel.getPulses(); if (m!=0) { @@ -168,7 +185,7 @@ wheel.reset(); m=0; } - lcd.locate(5,0); + lcd.locate(7,0); lcd.printf("%02d",tm.mon); if (button_enco.falling()) @@ -183,7 +200,7 @@ break; - case 3: + case 3: //Año m=wheel.getPulses(); if (m!=0) { @@ -208,16 +225,17 @@ lcd.locate(0,0); lcd.printf("Hora: "); + } break; - case 4: - m=wheel.getPulses(); - + case 4: //HORA + m=0; + m=wheel.getPulses(); if (m!=0) { - tm.hour=tm.hour + m; + tm.hour+= m; if(tm.hour>23) { tm.hour=23; @@ -245,7 +263,8 @@ break; - case 5: + case 5: //MINUTOS + m=0; m=wheel.getPulses(); if (m!=0) { @@ -278,7 +297,7 @@ break; - case 6: + case 6: //SEGUNDOS m=wheel.getPulses(); if (m!=0) { @@ -295,7 +314,7 @@ wheel.reset(); m=0; } - lcd.locate(9,0); + lcd.locate(8,0); lcd.printf("%02d",tm.sec); if (button_enco.falling()) @@ -303,31 +322,34 @@ /////////////////// if(Conf==0) { - Alarm=tm; + Alarm[j]=tm; lcd.cls(); lcd.locate(0,0); - lcd.printf("Alarma config. "); + lcd.printf("Alarma %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("Hora config. "); wait(1); i=0; m=0; Lugar=0; lcd.locate(0,0); - lcd.printf("--Alarma --Hora"); + lcd.printf("--Alarmas --Hora"); } /////////////////// @@ -338,20 +360,19 @@ } break; - case 2: - - rtc.getTime(tm); + case 2: // Muestra la hora y la alarma, ademas se cumprueba el estado de la alarma + rtc.getTime(tm2); //Lee el reloj + 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.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); @@ -365,25 +386,21 @@ 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[Select].hour); + lcd.printf("%02d:",Alarm[Select].min); + lcd.printf("%02d",Alarm[Select].sec); - lcd.locate(0,1); - lcd.printf("%02d/",Alarm.mon); - lcd.printf("%02d/",Alarm.date); - lcd.printf("%02d",Alarm.year); + lcd.printf("%02d/",Alarm[Select].mon); + lcd.printf("%02d/",Alarm[Select].date); + lcd.printf("%02d",Alarm[Select].year); wait(0.1); //// m=wheel.getPulses(); @@ -393,11 +410,11 @@ 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) ) +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////Se comprueba el estado de la alarma/////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + if( (tm2.date==Alarm[Select].date)&&(tm2.mon==Alarm[Select].mon)&&(tm2.year==Alarm[Select].year)&&(tm2.hour==Alarm[Select].hour)&&(tm2.min==Alarm[Select].min)&&(tm2.sec==Alarm[Select].sec) ) { Lugar++; lcd.cls(); @@ -410,22 +427,53 @@ lcd.printf("--Aplazar "); m=0; } +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////Inicializar la lectura del IRDA/////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //StarReadIR=1; + if (button_enco.falling()) + { + Lugar=0; + wheel.reset(); + m=0; + myled=1; + i=0; + j=1; + lcd.cls(); + lcd.locate(0,0); + lcd.printf("--Alarma --Hora"); + } + // if (header==0) + // { + // StarReadIR=1; + // } + + if(!mode) + { + header = irda.read_low_us(8000); + if(header!=-1) + { + StarReadIR=1; + lcd.cls(); + lcd.locate(0,0); + lcd.printf(" Select Alarm "); + }else{ + header = 0; + } + } + break; - case 3: + case 3: //Desactivar o aplazar la alarma - if(alarma==0) + if(alarma==0) //Desactivar { - 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 +490,13 @@ /////////////////// - if(alarma==1) + if(alarma==1) //Posponer { - 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) { @@ -469,40 +513,102 @@ if (button_enco.falling()) { - if(alarma==0) + if(alarma==0) //Desactivar { - Lugar=0; + Lugar=2; //Volver a mostrar el tiempo wheel.reset(); m=0; - Sonido.write(0); - lcd.cls(); - lcd.locate(0,0); - lcd.printf("--Alarma --Hora"); - + myled=1; + lcd.cls(); } - if(alarma==1) + if(alarma==1) //Posponer { - Lugar=2; - rtc.getTime(tm); + Lugar=2; //Volver a mostrar el tiempo + rtc.getTime(tm2); if(tm.min!=58) { - Alarm.min=tm.min+1; + Alarm[Select].min=tm2.min+2; } if(tm.min==59) { - Alarm.min=0; - Alarm.hour=tm.hour+1; + Alarm[Select].min=0; + Alarm[Select].hour=tm2.hour+1; } - Alarm.sec=tm.sec; + Alarm[Select].sec=tm2.sec; lcd.cls(); alarma=0; - - } - + myled=1; + } } - - break; - } - } + } +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////Lectura del sensor IRDA/////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + while (StarReadIR) + { + fflush( stdin ); + lop1: if(!mode){ + header = irda.read_high_us(); + if(header>3500) goto seguir1; + goto lop1; + } + + seguir1: + 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)){ + Select=1; + lcd.locate(8,1); + lcd.printf("%d",Select); + goto seguir1; + }else if (!strcmp(cadena,dos)){ + Select=2; + lcd.locate(8,1); + lcd.printf("%d",Select); + goto seguir1; + }else if (!strcmp(cadena,tres)){ + Select=3; + lcd.locate(8,1); + lcd.printf("%d",Select); + goto seguir1; + }else if (!strcmp(cadena,cuatro)){ + Select=4; + lcd.locate(8,1); + lcd.printf("%d",Select); + goto seguir1; + }else if (!strcmp(cadena,cinco)){ + Select=5; + lcd.locate(8,1); + lcd.printf("%d",Select); + goto seguir1; + }else if (!strcmp(cadena,seis)){ + Select=6; + lcd.locate(8,1); + lcd.printf("%d",Select); + goto seguir1; + }else if (!strcmp(cadena,siete)){ + Select=7; + lcd.locate(8,1); + lcd.printf("%d",Select); + goto seguir1; + }else if(!strcmp(cadena,set)){ + Lugar=2; + StarReadIR=0; + header=0; + lcd.cls(); + break; + } + } + } } \ No newline at end of file