![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Tarea_I2C_Alarma
Dependencies: DebouncedIn QEI RTC-DS1307 mbed
Diff: main.cpp
- Revision:
- 0:642fe2aac275
diff -r 000000000000 -r 642fe2aac275 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Nov 23 15:12:03 2015 +0000 @@ -0,0 +1,312 @@ +#include "mbed.h" +#include "Rtc_Ds1307.h" +#include "DebouncedIn.h" +#include "QEI.h" + +//RtcCls rtc(p28, p27, p29, true); +Rtc_Ds1307 rtc(PTE0,PTE1); /*modulo I2C*/ + +Serial pc(USBTX, USBRX, "pc"); + + +//Configuracion encoder +QEI wheel (PTA5, PTA4, NC, 100); + +//Botones +DebouncedIn BotonENC(PTD5); //Boton Encoder + +DebouncedIn Boton2(PTE2); //Boton para confirmar + +//salida led +DigitalOut myled(LED1); +int dia=0,mes=0,anno=2015,hor=0,min=0,seg=0; + +char buffer[128]; +int readptr = 0; +int start=0; +int Config; + +int main() { + char c; + Rtc_Ds1307::Time_rtc tm = {}; + + while(1) { + + set_reloj: + + pc.printf("*************************************\n"); + pc.printf("* Menu for RTC Test : *\n"); + pc.printf("* read - reads the clock *\n"); + pc.printf("* start - start the clock *\n"); + pc.printf("* stop - stop the clock *\n"); + pc.printf("* write - write the clock *\n"); + pc.printf("* ena - enable Square wave output *\n"); + pc.printf("* dis - disable square wave outp. *\n"); + pc.printf("*************************************\n"); + + while( (c = pc.getc()) != '\n') { + buffer[readptr++] = c; + } + buffer[readptr++] = 0; + if (strncmp(buffer, "read", 4) == 0) { + // perform read + pc.printf("Performing read operation\n"); + if (rtc.getTime(tm) ) { + pc.printf("The current time is : %02d:%02d:%02d\n", tm.hour, tm.min, tm.sec); + pc.printf("The current date is : %s, %02d/%02d/%04d\n", rtc.weekdayToString(tm.wday), tm.mon, tm.date, tm.year); + } + + } + else if (strncmp(buffer, "write", 5) == 0) { + // perform write + pc.printf("Enter the date (date 0..31)"); + pc.scanf("%d", &tm.date); + pc.printf("Enter the date (month 1..12)"); + pc.scanf("%d", &tm.mon); + pc.printf("Enter the date (year)"); + pc.scanf("%d", &tm.year); + pc.printf("Enter the time (hours 0..23)"); + pc.scanf("%d", &tm.hour); + pc.printf("Enter the time (minutes 0..59)"); + pc.scanf("%d", &tm.min); + pc.printf("Enter the time (seconds 0..59)"); + pc.scanf("%d", &tm.sec); + pc.printf("Performing write operation\n"); + + while(pc.readable()) + pc.getc(); + rtc.setTime(tm, false, false); + } + else if (strncmp(buffer, "start", 5) == 0) { + // start + readptr = 0; + pc.printf("Dispositivo Iniciado\n"); + rtc.startClock(); + goto set_prev; + + + } + else if (strncmp(buffer, "stop", 4) == 0) { + // stop + pc.printf("Performing stop operation\n"); + rtc.stopClock(); + } + else if (strncmp(buffer, "ena", 3) == 0) { + int rs; + pc.printf("Please specify the frequency : [0 = 1Hz, 1 = 4.096kHz, 2 = 8.192kHz, 3 = 32.768kHz] "); + scanf("%d", &rs); + pc.printf("Enabling the output with %d option\n", rs); + rtc.setSquareWaveOutput(true, (Rtc_Ds1307::SqwRateSelect_t)rs); + } + else if (strncmp(buffer, "dis", 3) == 0) { + pc.printf("Disableing square wave output\n"); + rtc.setSquareWaveOutput(false, Rtc_Ds1307::RS1Hz); + } + else { + pc.printf("syntax error\n"); + } + readptr = 0; + //pc.printf("\n\n\n"); + } + + + set_prev: + + + if (Config ==1){ + readptr = 0; + goto set_reloj; + } + + + + + set_alarma: + pc.printf("******* Configuracion Alarma *******\n"); + + + /*inicia seleccion anno*/ + set_anno: + while(1){ + + anno=anno+wheel.getPulses(); + wheel.reset(); + + /*restriccion del año--no se puede config alarma hacia el pasado*/ + + if(anno>=2100){ + anno=2100; + } + else if (anno<=2015){ + anno=2015; + } + pc.printf("*Anno=%d\n ",anno); + + + if(BotonENC.falling()){ + goto set_mes; + } + if(Boton2.falling()){ + goto set_comp; + } + + } + /*termina seleccion anno*/ + + /*seleccion mes*/ + set_mes: + while(1){ + + mes=mes+wheel.getPulses(); + wheel.reset(); + + /*restricción mes--maximo 12 meses*/ + + if(mes>=12){ + mes=12;} + else if (mes<=0){ + mes=0;} + pc.printf("*Mes=%d\n ",mes); + + if(BotonENC.falling()){ + goto set_dia;} + if(Boton2.falling()){ + goto set_comp;} + + } + /*termina seleccion mes*/ + + /*inicia dia*/ + set_dia: + while(1){ + + dia=dia+wheel.getPulses(); + wheel.reset(); + /*restricción al numero de dias--maximo 31--*/ + if(dia>=31){ + dia=31;} + else if (dia<=0){ + dia=0;} + + pc.printf("*Dia=%d\n ",dia); + + if(BotonENC.falling()){ + goto set_hor; + } + if(Boton2.falling()){ + goto set_comp; + } + } + /*termine dia*/ + /*inicia seleccion hora*/ + set_hor: + while(1){ + + hor=hor+wheel.getPulses(); + wheel.reset(); + + /*restriccion de la hora--no puede ser mayor de 23*/ + + if(hor>=23){ + hor=23; + } + else if (hor<=0){ + hor=0; + } + pc.printf("*Hora=%d\n ",hor); + + + if(BotonENC.falling()){ + goto set_min; + } + if(Boton2.falling()){ + goto set_comp; + } + + + } + /*finaliza la seleccion de la hora*/ + + /*seleccion min*/ + set_min: + while(1){ + + min=min+wheel.getPulses(); + wheel.reset(); + + /*restriccion de la hora--no puede ser mayor a 59*/ + + if(min>=59){ + min=59; + } + else if (min<=0){ + min=0; + } + pc.printf("*Min=%d\n ",min); + + if(BotonENC.falling()){ + goto set_seg; + } + if(Boton2.falling()){ + goto set_comp; + } + + } + /*termina la seleccion de los minutos*/ + + /*seleccionar segundos*/ + set_seg: + while(1){ + + seg=seg+wheel.getPulses(); + wheel.reset(); + + /*restriccion de los segundos--no puede ser mas de 59*/ + + if(seg>=59){ + seg=59; + } + else if (seg<=0){ + seg=0; + } + pc.printf("*Seg=%d\n ",seg); + + if(BotonENC.falling()){ + goto set_anno; + } + if(Boton2.falling()){ + goto set_comp; + } + + + } + /*termina la seleccion de los segundos*/ + + set_comp: + + pc.printf("Alarma configurada para: \n"); + pc.printf(" Anno=%d\n ",anno); /* imprime el año */ + pc.printf(" Mes=%d\n ",mes); /* imprime el mes */ + pc.printf(" Dia=%d\n ",dia); /* imprime el dia */ + pc.printf(" Hora=%d\n ",hor); /* imprime la hora */ + pc.printf(" Min=%d\n ",min); /* imprime los minutos */ + pc.printf(" Seg=%d\n ",seg); /* imprime los segundos */ + wait(3); + + /*comparamos la alarma programada con la hora del reloj, si coincide + prende el led*/ + while(1){ + rtc.getTime(tm); + pc.printf("The current time is : %02d:%02d:%02d\n", tm.hour, tm.min, tm.sec); + + if(tm.hour>=hor && tm.min>=min &&tm.sec>=seg && tm.mon>=mes && tm.date>=dia && tm.year>=anno){ + myled=0; + } + else { + myled=1; + } + wait(1); + } + //// + + } \ No newline at end of file