Alarm v1.0

Dependencies:   Debounced RTC-DS1307 mbed

Fork of Rtc_Ds1307_Sample by Henry Leinen

/media/uploads/PabloViana/dscf8240.jpg

Committer:
PabloViana
Date:
Mon Nov 02 04:18:25 2015 +0000
Revision:
3:fb2b42e00333
Parent:
2:3be003301107
Alarm v1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
PabloViana 3:fb2b42e00333 1 /*Programa tomado y adaptado de Henry Leinen*/
PabloViana 3:fb2b42e00333 2 /*Algunas modificaciones se realizan con propósitos educativos*/
leihen 0:431183c5b136 3 #include "mbed.h"
leihen 0:431183c5b136 4 #include "Rtc_Ds1307.h"
PabloViana 3:fb2b42e00333 5 #include "DebouncedIn.h"
leihen 0:431183c5b136 6
leihen 2:3be003301107 7 //RtcCls rtc(p28, p27, p29, true);
PabloViana 3:fb2b42e00333 8 Rtc_Ds1307 rtc(PTE0, PTE1);
PabloViana 3:fb2b42e00333 9
PabloViana 3:fb2b42e00333 10 /****************Configurar Salidas********************/
PabloViana 3:fb2b42e00333 11 Serial pc(USBTX, USBRX, "pc");
PabloViana 3:fb2b42e00333 12 PwmOut led1(LED1);
PabloViana 3:fb2b42e00333 13 PwmOut led2(LED2);
leihen 0:431183c5b136 14
PabloViana 3:fb2b42e00333 15 DebouncedIn Stop(PTE2);
PabloViana 3:fb2b42e00333 16 DebouncedIn CLK(PTE3);
PabloViana 3:fb2b42e00333 17 DebouncedIn DT(PTE4);
PabloViana 3:fb2b42e00333 18 DebouncedIn SW1(PTE5);
PabloViana 3:fb2b42e00333 19 DebouncedIn Snooze(PTB11);
PabloViana 3:fb2b42e00333 20 /*****************Definir variables********************/
leihen 0:431183c5b136 21 char buffer[128];
leihen 0:431183c5b136 22 int readptr = 0;
PabloViana 3:fb2b42e00333 23 int started=0;
PabloViana 3:fb2b42e00333 24 int wakeup=0;
PabloViana 3:fb2b42e00333 25 //int snooze=0;
PabloViana 3:fb2b42e00333 26 int howmanytimes = 0;
PabloViana 3:fb2b42e00333 27 //Alarm variables;
PabloViana 3:fb2b42e00333 28 int hour1;
PabloViana 3:fb2b42e00333 29 int min1;
PabloViana 3:fb2b42e00333 30 int sec1;
leihen 1:6dbe51fe0737 31
PabloViana 3:fb2b42e00333 32 /*******************Rutinas********************/
PabloViana 3:fb2b42e00333 33
PabloViana 3:fb2b42e00333 34 void Encoder()
PabloViana 3:fb2b42e00333 35 {
PabloViana 3:fb2b42e00333 36 int NewClk;
PabloViana 3:fb2b42e00333 37 int OldClk;
PabloViana 3:fb2b42e00333 38 int NewDt;
PabloViana 3:fb2b42e00333 39 int OldDt;
PabloViana 3:fb2b42e00333 40 int NewPos;
PabloViana 3:fb2b42e00333 41 int OldPos;
PabloViana 3:fb2b42e00333 42 int counter2=0;
PabloViana 3:fb2b42e00333 43 pc.printf("Setting Alarm...\n\r") ;
PabloViana 3:fb2b42e00333 44 pc.printf("The current alarm settings : %02d:%02d\n", hour1,min1);
PabloViana 3:fb2b42e00333 45 pc.printf("Hour:\n\r") ;
PabloViana 3:fb2b42e00333 46
PabloViana 3:fb2b42e00333 47 while(howmanytimes != 0)
PabloViana 3:fb2b42e00333 48 {
PabloViana 3:fb2b42e00333 49 NewClk = CLK.read();
PabloViana 3:fb2b42e00333 50 NewDt=DT.read();
PabloViana 3:fb2b42e00333 51 NewPos = 2*NewClk + NewDt;
PabloViana 3:fb2b42e00333 52 if (NewClk != OldClk || NewDt != OldDt)
PabloViana 3:fb2b42e00333 53 {
PabloViana 3:fb2b42e00333 54 counter2++;
PabloViana 3:fb2b42e00333 55 if ((OldPos == 0 && NewPos == 2) ||(OldPos == 2 && NewPos == 3) || (OldPos == 3 && NewPos == 1) || (OldPos == 1 && NewPos == 0)) //Incremento;
PabloViana 3:fb2b42e00333 56 {
PabloViana 3:fb2b42e00333 57
PabloViana 3:fb2b42e00333 58 if (howmanytimes ==1 && counter2 ==2){hour1++; if(hour1>23){hour1=0;}};
PabloViana 3:fb2b42e00333 59 if (howmanytimes ==2 && counter2 ==2){min1++; if(min1>59){min1=0;}};
PabloViana 3:fb2b42e00333 60
PabloViana 3:fb2b42e00333 61 printf("%d : %d\n", hour1, min1);
leihen 0:431183c5b136 62 }
PabloViana 3:fb2b42e00333 63 else if ((OldPos == 0 && NewPos == 1) ||(OldPos == 1 && NewPos == 3) || (OldPos == 3 && NewPos == 2) || (OldPos == 2 && NewPos == 0))
PabloViana 3:fb2b42e00333 64 {
PabloViana 3:fb2b42e00333 65 if (howmanytimes ==1 && counter2 ==2 ){hour1--; if(hour1<0){hour1=23;}};
PabloViana 3:fb2b42e00333 66 if (howmanytimes ==2 && counter2 ==2){min1--; if(min1<0){min1=59;}};
PabloViana 3:fb2b42e00333 67 printf("%d : %d\n", hour1, min1);
PabloViana 3:fb2b42e00333 68 }
PabloViana 3:fb2b42e00333 69
PabloViana 3:fb2b42e00333 70 if (counter2==2){counter2=0;}
leihen 0:431183c5b136 71 }
PabloViana 3:fb2b42e00333 72 OldClk=NewClk;
PabloViana 3:fb2b42e00333 73 OldDt=NewDt;
PabloViana 3:fb2b42e00333 74 OldPos = NewPos;
PabloViana 3:fb2b42e00333 75
PabloViana 3:fb2b42e00333 76 if(SW1.falling())
PabloViana 3:fb2b42e00333 77 {
PabloViana 3:fb2b42e00333 78 howmanytimes++;
PabloViana 3:fb2b42e00333 79 if(howmanytimes==2){pc.printf("Minutes...\n");}
PabloViana 3:fb2b42e00333 80 if(howmanytimes > 2) {howmanytimes=0;}
leihen 0:431183c5b136 81 }
leihen 0:431183c5b136 82 }
leihen 0:431183c5b136 83 }
PabloViana 3:fb2b42e00333 84
PabloViana 3:fb2b42e00333 85
PabloViana 3:fb2b42e00333 86 //Main
PabloViana 3:fb2b42e00333 87 int main() {
PabloViana 3:fb2b42e00333 88 int c;
PabloViana 3:fb2b42e00333 89 int counter1=0;
PabloViana 3:fb2b42e00333 90
PabloViana 3:fb2b42e00333 91 led1.period(2.0);
PabloViana 3:fb2b42e00333 92 led1.write(1.0);
PabloViana 3:fb2b42e00333 93 led2.period(2.0);
PabloViana 3:fb2b42e00333 94 led2.write(1.0);
PabloViana 3:fb2b42e00333 95
PabloViana 3:fb2b42e00333 96 Rtc_Ds1307::Time_rtc tm = {}; //Se da un nombre a la estructura usada para almacenar la información del reloj
PabloViana 3:fb2b42e00333 97
PabloViana 3:fb2b42e00333 98
PabloViana 3:fb2b42e00333 99 /*Inicializar el reloj*/
PabloViana 3:fb2b42e00333 100 pc.printf("************************\n Be Welcome! \n ************************\n");
PabloViana 3:fb2b42e00333 101 if (rtc.getTime(tm) ) {
PabloViana 3:fb2b42e00333 102 pc.printf("The current time is : %02d:%02d:%02d\n", tm.hour, tm.min, tm.sec);
PabloViana 3:fb2b42e00333 103 pc.printf("The current date is : %02d/%02d/%04d\n", tm.mon, tm.date, tm.year);
PabloViana 3:fb2b42e00333 104
PabloViana 3:fb2b42e00333 105 }
PabloViana 3:fb2b42e00333 106
PabloViana 3:fb2b42e00333 107 while(started==0)
PabloViana 3:fb2b42e00333 108
PabloViana 3:fb2b42e00333 109 { pc.printf("Is it right? yes or not?\n");
PabloViana 3:fb2b42e00333 110 while( (c = pc.getc()) != '\n')
PabloViana 3:fb2b42e00333 111 {
PabloViana 3:fb2b42e00333 112 buffer[readptr++] = c;
PabloViana 3:fb2b42e00333 113 }
PabloViana 3:fb2b42e00333 114
PabloViana 3:fb2b42e00333 115 buffer[readptr++] = 0; //Almaceno un cero en la posición después del cambio de línea;
PabloViana 3:fb2b42e00333 116
PabloViana 3:fb2b42e00333 117 if (strncmp(buffer, "yes", 3) == 0) //Date and time are ok, lets start!
PabloViana 3:fb2b42e00333 118 {
PabloViana 3:fb2b42e00333 119 pc.printf("Lets start...\n");
PabloViana 3:fb2b42e00333 120 rtc.startClock();
PabloViana 3:fb2b42e00333 121 started=1;
PabloViana 3:fb2b42e00333 122 }
PabloViana 3:fb2b42e00333 123
PabloViana 3:fb2b42e00333 124 else if (strncmp(buffer, "not", 3) == 0)
PabloViana 3:fb2b42e00333 125 {
PabloViana 3:fb2b42e00333 126 // perform write
PabloViana 3:fb2b42e00333 127 pc.printf("Enter the date (date 0..31)");
PabloViana 3:fb2b42e00333 128 pc.scanf("%d", &tm.date);
PabloViana 3:fb2b42e00333 129 pc.printf("Enter the date (month 1..12)");
PabloViana 3:fb2b42e00333 130 pc.scanf("%d", &tm.mon);
PabloViana 3:fb2b42e00333 131 pc.printf("Enter the date (year)");
PabloViana 3:fb2b42e00333 132 pc.scanf("%d", &tm.year);
PabloViana 3:fb2b42e00333 133 pc.printf("Enter the time (hours 0..23)");
PabloViana 3:fb2b42e00333 134 pc.scanf("%d", &tm.hour);
PabloViana 3:fb2b42e00333 135 pc.printf("Enter the time (minutes 0..59)");
PabloViana 3:fb2b42e00333 136 pc.scanf("%d", &tm.min);
PabloViana 3:fb2b42e00333 137 pc.printf("Enter the time (seconds 0..59)");
PabloViana 3:fb2b42e00333 138 pc.scanf("%d", &tm.sec);
PabloViana 3:fb2b42e00333 139 pc.printf("Performing write operation\n");
PabloViana 3:fb2b42e00333 140
PabloViana 3:fb2b42e00333 141 while(pc.readable())
PabloViana 3:fb2b42e00333 142 pc.getc();
PabloViana 3:fb2b42e00333 143 rtc.setTime(tm, false, false);
PabloViana 3:fb2b42e00333 144 rtc.startClock();
PabloViana 3:fb2b42e00333 145 started=1;
PabloViana 3:fb2b42e00333 146 }
PabloViana 3:fb2b42e00333 147
PabloViana 3:fb2b42e00333 148 else
PabloViana 3:fb2b42e00333 149 {
PabloViana 3:fb2b42e00333 150 pc.printf("Try again \n");
PabloViana 3:fb2b42e00333 151 readptr=0;
PabloViana 3:fb2b42e00333 152 }
PabloViana 3:fb2b42e00333 153 pc.printf("\n");
PabloViana 3:fb2b42e00333 154 }//while start
PabloViana 3:fb2b42e00333 155
PabloViana 3:fb2b42e00333 156 //Esto es temporal
PabloViana 3:fb2b42e00333 157 if (tm.min==59){ hour1 = tm.hour+1; min1=0;}
PabloViana 3:fb2b42e00333 158 else {hour1 = tm.hour; min1=tm.min+1;}
PabloViana 3:fb2b42e00333 159
PabloViana 3:fb2b42e00333 160
PabloViana 3:fb2b42e00333 161 /*Ciclo infinito para correr el programa*/
PabloViana 3:fb2b42e00333 162 while(1)
PabloViana 3:fb2b42e00333 163 {
PabloViana 3:fb2b42e00333 164 wait(0.01);
PabloViana 3:fb2b42e00333 165 counter1++; //Aumento el contador
PabloViana 3:fb2b42e00333 166
PabloViana 3:fb2b42e00333 167 /*******Get the time*********/
PabloViana 3:fb2b42e00333 168 if (counter1==90) //Cuento 900ms para mostrar algo en pantalla;
PabloViana 3:fb2b42e00333 169 {
PabloViana 3:fb2b42e00333 170 counter1=0;
PabloViana 3:fb2b42e00333 171 if (rtc.getTime(tm) )
PabloViana 3:fb2b42e00333 172 {
PabloViana 3:fb2b42e00333 173 pc.printf("The current time is : %02d:%02d:%02d\n", tm.hour, tm.min, tm.sec);
PabloViana 3:fb2b42e00333 174 pc.printf("The current date is : %02d/%02d/%04d\n", tm.mon, tm.date, tm.year);
PabloViana 3:fb2b42e00333 175 if (hour1==tm.hour && min1==tm.min && sec1 == tm.sec)
PabloViana 3:fb2b42e00333 176 {
PabloViana 3:fb2b42e00333 177 wakeup=1;
PabloViana 3:fb2b42e00333 178 pc.printf("Wakeup bitch!..\n");
PabloViana 3:fb2b42e00333 179 led1.write(0.5);
PabloViana 3:fb2b42e00333 180 led2.write(1.0);
PabloViana 3:fb2b42e00333 181 }
PabloViana 3:fb2b42e00333 182 } //if rtc
PabloViana 3:fb2b42e00333 183 } //if counter
PabloViana 3:fb2b42e00333 184
PabloViana 3:fb2b42e00333 185
PabloViana 3:fb2b42e00333 186 if (SW1.falling() && wakeup != 1)
PabloViana 3:fb2b42e00333 187 {
PabloViana 3:fb2b42e00333 188 led2.write(0.5);
PabloViana 3:fb2b42e00333 189 howmanytimes++;
PabloViana 3:fb2b42e00333 190 Encoder();
PabloViana 3:fb2b42e00333 191 led2.write(1.0);
PabloViana 3:fb2b42e00333 192 }
PabloViana 3:fb2b42e00333 193
PabloViana 3:fb2b42e00333 194 if (Stop.rising()&& wakeup==1)
PabloViana 3:fb2b42e00333 195 {
PabloViana 3:fb2b42e00333 196 pc.printf("Alarm Stopped ... \n");
PabloViana 3:fb2b42e00333 197 led1.write(1.0);
PabloViana 3:fb2b42e00333 198 wakeup=0;
PabloViana 3:fb2b42e00333 199 }
PabloViana 3:fb2b42e00333 200 if (Snooze.rising() && wakeup==1)//In case of pushing snooze;
PabloViana 3:fb2b42e00333 201 {
PabloViana 3:fb2b42e00333 202 pc.printf("Two more minutes please!!!!\n");
PabloViana 3:fb2b42e00333 203 led1.write(1.0);
PabloViana 3:fb2b42e00333 204 wakeup=0;
PabloViana 3:fb2b42e00333 205
PabloViana 3:fb2b42e00333 206 if (tm.min==58){min1=0;hour1=hour1+1;}
PabloViana 3:fb2b42e00333 207 else if (tm.min==59){min1=1;hour1=hour1+1;}
PabloViana 3:fb2b42e00333 208 else { min1=tm.min+1;} //two more minutes please}
PabloViana 3:fb2b42e00333 209 pc.printf("Alarm will sound again at: %02d:%02d:%02d\n", hour1, min1,sec1);
PabloViana 3:fb2b42e00333 210
PabloViana 3:fb2b42e00333 211 }
PabloViana 3:fb2b42e00333 212 }//while
PabloViana 3:fb2b42e00333 213
PabloViana 3:fb2b42e00333 214 }//main
PabloViana 3:fb2b42e00333 215
PabloViana 3:fb2b42e00333 216
PabloViana 3:fb2b42e00333 217
PabloViana 3:fb2b42e00333 218