Alarm v1.0
Dependencies: Debounced RTC-DS1307 mbed
Fork of Rtc_Ds1307_Sample by
Diff: main.cpp
- Revision:
- 3:fb2b42e00333
- Parent:
- 2:3be003301107
--- a/main.cpp Wed Jun 26 21:07:13 2013 +0000 +++ b/main.cpp Mon Nov 02 04:18:25 2015 +0000 @@ -1,87 +1,218 @@ +/*Programa tomado y adaptado de Henry Leinen*/ +/*Algunas modificaciones se realizan con propósitos educativos*/ #include "mbed.h" #include "Rtc_Ds1307.h" +#include "DebouncedIn.h" //RtcCls rtc(p28, p27, p29, true); -Rtc_Ds1307 rtc(p28, p27); +Rtc_Ds1307 rtc(PTE0, PTE1); + +/****************Configurar Salidas********************/ +Serial pc(USBTX, USBRX, "pc"); +PwmOut led1(LED1); +PwmOut led2(LED2); -Serial pc(USBTX, USBRX, "pc"); - +DebouncedIn Stop(PTE2); +DebouncedIn CLK(PTE3); +DebouncedIn DT(PTE4); +DebouncedIn SW1(PTE5); +DebouncedIn Snooze(PTB11); +/*****************Definir variables********************/ char buffer[128]; int readptr = 0; +int started=0; +int wakeup=0; +//int snooze=0; +int howmanytimes = 0; +//Alarm variables; +int hour1; +int min1; +int sec1; -int main() { - char c; - Rtc_Ds1307::Time_rtc tm = {}; - - while(1) { - 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); +/*******************Rutinas********************/ + +void Encoder() +{ + int NewClk; + int OldClk; + int NewDt; + int OldDt; + int NewPos; + int OldPos; + int counter2=0; + pc.printf("Setting Alarm...\n\r") ; + pc.printf("The current alarm settings : %02d:%02d\n", hour1,min1); + pc.printf("Hour:\n\r") ; + + while(howmanytimes != 0) + { + NewClk = CLK.read(); + NewDt=DT.read(); + NewPos = 2*NewClk + NewDt; + if (NewClk != OldClk || NewDt != OldDt) + { + counter2++; + if ((OldPos == 0 && NewPos == 2) ||(OldPos == 2 && NewPos == 3) || (OldPos == 3 && NewPos == 1) || (OldPos == 1 && NewPos == 0)) //Incremento; + { + + if (howmanytimes ==1 && counter2 ==2){hour1++; if(hour1>23){hour1=0;}}; + if (howmanytimes ==2 && counter2 ==2){min1++; if(min1>59){min1=0;}}; + + printf("%d : %d\n", hour1, min1); } - + else if ((OldPos == 0 && NewPos == 1) ||(OldPos == 1 && NewPos == 3) || (OldPos == 3 && NewPos == 2) || (OldPos == 2 && NewPos == 0)) + { + if (howmanytimes ==1 && counter2 ==2 ){hour1--; if(hour1<0){hour1=23;}}; + if (howmanytimes ==2 && counter2 ==2){min1--; if(min1<0){min1=59;}}; + printf("%d : %d\n", hour1, min1); + } + + if (counter2==2){counter2=0;} } - 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); + OldClk=NewClk; + OldDt=NewDt; + OldPos = NewPos; + + if(SW1.falling()) + { + howmanytimes++; + if(howmanytimes==2){pc.printf("Minutes...\n");} + if(howmanytimes > 2) {howmanytimes=0;} } - else if (strncmp(buffer, "start", 5) == 0) { - // start - pc.printf("Performing start operation\n"); - rtc.startClock(); - } - 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"); } } + + +//Main +int main() { + int c; + int counter1=0; + + led1.period(2.0); + led1.write(1.0); + led2.period(2.0); + led2.write(1.0); + + Rtc_Ds1307::Time_rtc tm = {}; //Se da un nombre a la estructura usada para almacenar la información del reloj + + + /*Inicializar el reloj*/ + pc.printf("************************\n Be Welcome! \n ************************\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 : %02d/%02d/%04d\n", tm.mon, tm.date, tm.year); + + } + + while(started==0) + + { pc.printf("Is it right? yes or not?\n"); + while( (c = pc.getc()) != '\n') + { + buffer[readptr++] = c; + } + + buffer[readptr++] = 0; //Almaceno un cero en la posición después del cambio de línea; + + if (strncmp(buffer, "yes", 3) == 0) //Date and time are ok, lets start! + { + pc.printf("Lets start...\n"); + rtc.startClock(); + started=1; + } + + else if (strncmp(buffer, "not", 3) == 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); + rtc.startClock(); + started=1; + } + + else + { + pc.printf("Try again \n"); + readptr=0; + } + pc.printf("\n"); + }//while start + + //Esto es temporal + if (tm.min==59){ hour1 = tm.hour+1; min1=0;} + else {hour1 = tm.hour; min1=tm.min+1;} + + + /*Ciclo infinito para correr el programa*/ + while(1) + { + wait(0.01); + counter1++; //Aumento el contador + + /*******Get the time*********/ + if (counter1==90) //Cuento 900ms para mostrar algo en pantalla; + { + counter1=0; + 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 : %02d/%02d/%04d\n", tm.mon, tm.date, tm.year); + if (hour1==tm.hour && min1==tm.min && sec1 == tm.sec) + { + wakeup=1; + pc.printf("Wakeup bitch!..\n"); + led1.write(0.5); + led2.write(1.0); + } + } //if rtc + } //if counter + + + if (SW1.falling() && wakeup != 1) + { + led2.write(0.5); + howmanytimes++; + Encoder(); + led2.write(1.0); + } + + if (Stop.rising()&& wakeup==1) + { + pc.printf("Alarm Stopped ... \n"); + led1.write(1.0); + wakeup=0; + } + if (Snooze.rising() && wakeup==1)//In case of pushing snooze; + { + pc.printf("Two more minutes please!!!!\n"); + led1.write(1.0); + wakeup=0; + + if (tm.min==58){min1=0;hour1=hour1+1;} + else if (tm.min==59){min1=1;hour1=hour1+1;} + else { min1=tm.min+1;} //two more minutes please} + pc.printf("Alarm will sound again at: %02d:%02d:%02d\n", hour1, min1,sec1); + + } + }//while + +}//main + + + +