Tarea 3 del curso de procesadores
Dependencies: Debounced Pulse1 QEI RTC-DS1307 TextLCD mbed
Fork of Reloj_alarma by
main.cpp
- Committer:
- CristihanPerez95
- Date:
- 2018-06-05
- Revision:
- 2:ddd2659db993
- Parent:
- 1:0639f31dd59f
File content as of revision 2:ddd2659db993:
#include "mbed.h" #include "DebouncedIn.h" #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 (PTA13, PTD5, NC, 624); DebouncedIn button_enco(PTC17); DigitalOut myled(LED1); 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 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[8] = {}; lcd.cls(); lcd.writeCommand(C1);//escribimos un comando segun el manual del modulo LCD lcd.locate(0,0); lcd.printf("--Alarmas --Hora"); rtc.getTime(tm); //lee el tiempo del DS1307 while(1) { switch (Lugar) { case 0: m=wheel.getPulses(); // m son los datos del encoder 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()){ //si se pulsa boton encoder Lugar++; m=0; } break; case 1: switch(i) { case 0: if(Conf==0) // ALARMA { lcd.cls(); lcd.locate(0,0); 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++; lcd.cls(); lcd.locate(0,0); lcd.printf("Dia: "); m=0; } break; case 1: // Dia m=0; 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: "); } break; case 2: // Mes 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(7,0); lcd.printf("%02d",tm.mon); if (button_enco.falling()) { i++; m=0; lcd.cls(); lcd.locate(0,0); lcd.printf("Year: "); } break; case 3: //Año 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: "); } break; case 4: //HORA m=0; m=wheel.getPulses(); if (m!=0) { 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: //MINUTOS m=0; 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: //SEGUNDOS 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(8,0); lcd.printf("%02d",tm.sec); if (button_enco.falling()) { /////////////////// if(Conf==0) { Alarm[j]=tm; lcd.cls(); lcd.locate(0,0); 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, true, false); lcd.cls(); lcd.locate(0,0); lcd.printf("Hora config. "); wait(1); i=0; m=0; Lugar=0; lcd.locate(0,0); lcd.printf("--Alarmas --Hora"); } /////////////////// } break; } break; 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:",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); wait(0.1); ////////// m=wheel.getPulses(); if(m!=0) { visual=1; wheel.reset(); m=0; } } if(visual==1) { lcd.locate(0,1); lcd.printf(" "); lcd.locate(8,0); 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[Select].mon); lcd.printf("%02d/",Alarm[Select].date); lcd.printf("%02d",Alarm[Select].year); wait(0.1); //// m=wheel.getPulses(); if(m!=0) { visual=0; wheel.reset(); m=0; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////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(); 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; } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////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: //Desactivar o aplazar la alarma if(alarma==0) //Desactivar { myled=1; wait(0.5); myled=0; wait(0.5); 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) //Posponer { myled=1; wait(0.5); myled=0; wait(0.5); 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) //Desactivar { Lugar=2; //Volver a mostrar el tiempo wheel.reset(); m=0; myled=1; lcd.cls(); } if(alarma==1) //Posponer { Lugar=2; //Volver a mostrar el tiempo rtc.getTime(tm2); if(tm.min!=58) { Alarm[Select].min=tm2.min+2; } if(tm.min==59) { Alarm[Select].min=0; Alarm[Select].hour=tm2.hour+1; } 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; } } } }