Despertador

Dependencies:   QEI RTC-DS1307 TextLCD mbed

Committer:
SSJprocesa
Date:
Sat May 21 15:45:20 2016 +0000
Revision:
0:d9d18ee787ba
Despertador con alarma programada (Luz y Buzzer), con una RTC programada con un encoder y mostrada en un LCD16x2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
SSJprocesa 0:d9d18ee787ba 1 #include "mbed.h"
SSJprocesa 0:d9d18ee787ba 2 #include "Rtc_Ds1307.h"
SSJprocesa 0:d9d18ee787ba 3 #include "TextLCD.h"
SSJprocesa 0:d9d18ee787ba 4 #include "QEI.h"
SSJprocesa 0:d9d18ee787ba 5
SSJprocesa 0:d9d18ee787ba 6 TextLCD lcd(PTD5, PTD7, PTD6, PTD4, PTD2, PTC9); // rs, e, d4-d7
SSJprocesa 0:d9d18ee787ba 7 Rtc_Ds1307 rtc(PTE0, PTE1);//Dato,Reloj
SSJprocesa 0:d9d18ee787ba 8 QEI encoder (PTC0, PTC4, NC, 624);//pines de etrada de comparación del encoder
SSJprocesa 0:d9d18ee787ba 9 DigitalIn chan(PTD3);//botón del encoder
SSJprocesa 0:d9d18ee787ba 10 DigitalIn rlo(PTC3);//pulsador de la freescale para configurar la RTC
SSJprocesa 0:d9d18ee787ba 11 DigitalIn rl(PTC12);//pulsador de la freescale para configurar la Alarma
SSJprocesa 0:d9d18ee787ba 12 DigitalOut ledr(PTE29);//Led indicador de la alarma
SSJprocesa 0:d9d18ee787ba 13 DigitalOut buzz(PTA6);//Buzzer indiciador de la alarma
SSJprocesa 0:d9d18ee787ba 14 char buffer[128];
SSJprocesa 0:d9d18ee787ba 15 int readptr = 0,segundos =0,cambio=0,cont=0,pla=0,pla2=0,key=0;//variables del programa
SSJprocesa 0:d9d18ee787ba 16 int di=0,me=0,an=0,fle=0,mi=0,se=0,jod=0;//varaibles para la alarma
SSJprocesa 0:d9d18ee787ba 17 int main()
SSJprocesa 0:d9d18ee787ba 18 {
SSJprocesa 0:d9d18ee787ba 19 Rtc_Ds1307::Time_rtc tm = {};
SSJprocesa 0:d9d18ee787ba 20 ledr=1;//Led apagado
SSJprocesa 0:d9d18ee787ba 21 while(1){
SSJprocesa 0:d9d18ee787ba 22 sk: if(pla==1)//Rutina para la configuración de los parametros en la RCT (día,mes,año,hora,minutos,segundos,día de la samana)
SSJprocesa 0:d9d18ee787ba 23 {
SSJprocesa 0:d9d18ee787ba 24 buzz=0;//Buzzer apagado
SSJprocesa 0:d9d18ee787ba 25 ledr=1;//Led apagado
SSJprocesa 0:d9d18ee787ba 26 jod=0;
SSJprocesa 0:d9d18ee787ba 27 key=0;
SSJprocesa 0:d9d18ee787ba 28 while(rlo==1){}//anti-rebotes
SSJprocesa 0:d9d18ee787ba 29 lcd.cls();
SSJprocesa 0:d9d18ee787ba 30 while(cont==0)
SSJprocesa 0:d9d18ee787ba 31 {
SSJprocesa 0:d9d18ee787ba 32 rtc.stopClock();//para el clock de la RTC
SSJprocesa 0:d9d18ee787ba 33 lcd.locate(0,0);
SSJprocesa 0:d9d18ee787ba 34 lcd.printf("(Day 1..31)");//muestra en el LCD el parametro a asignar
SSJprocesa 0:d9d18ee787ba 35 cambio=encoder.getPulses();//valor del encoder
SSJprocesa 0:d9d18ee787ba 36 if(cambio<=1){cambio=1;}//limite inferior para este parametro
SSJprocesa 0:d9d18ee787ba 37 if(cambio>=31){cambio=31;}//limite superior para este parametro
SSJprocesa 0:d9d18ee787ba 38 lcd.locate(0,1);
SSJprocesa 0:d9d18ee787ba 39 lcd.printf(" ");
SSJprocesa 0:d9d18ee787ba 40 lcd.locate(0,1);
SSJprocesa 0:d9d18ee787ba 41 lcd.printf("%d",cambio);//valor acutal
SSJprocesa 0:d9d18ee787ba 42 while(chan==0){encoder.reset();cont=1;}//si presiona el botón del encoder salta al siguiente parametro
SSJprocesa 0:d9d18ee787ba 43 }
SSJprocesa 0:d9d18ee787ba 44 tm.date=cambio;//asignación del valor elegido al parametro que se desea asignar en la RTC
SSJprocesa 0:d9d18ee787ba 45 cambio=0;//limpia la variable
SSJprocesa 0:d9d18ee787ba 46 while(cont==1)
SSJprocesa 0:d9d18ee787ba 47 {
SSJprocesa 0:d9d18ee787ba 48 lcd.locate(0,0);
SSJprocesa 0:d9d18ee787ba 49 lcd.printf("(month 1..12)");
SSJprocesa 0:d9d18ee787ba 50 cambio=encoder.getPulses();
SSJprocesa 0:d9d18ee787ba 51 if(cambio<=1){cambio=1;}
SSJprocesa 0:d9d18ee787ba 52 if(cambio>=12){cambio=12;}
SSJprocesa 0:d9d18ee787ba 53 lcd.locate(0,1);
SSJprocesa 0:d9d18ee787ba 54 lcd.printf(" ");
SSJprocesa 0:d9d18ee787ba 55 lcd.locate(0,1);
SSJprocesa 0:d9d18ee787ba 56 lcd.printf("%d",cambio);
SSJprocesa 0:d9d18ee787ba 57 while(chan==0){encoder.reset();cont=2;}
SSJprocesa 0:d9d18ee787ba 58 }
SSJprocesa 0:d9d18ee787ba 59 tm.mon=cambio;
SSJprocesa 0:d9d18ee787ba 60 cambio=0;
SSJprocesa 0:d9d18ee787ba 61 while(cont==2)
SSJprocesa 0:d9d18ee787ba 62 {
SSJprocesa 0:d9d18ee787ba 63 lcd.locate(0,0);
SSJprocesa 0:d9d18ee787ba 64 lcd.printf("(year 0-99)");
SSJprocesa 0:d9d18ee787ba 65 cambio=encoder.getPulses();
SSJprocesa 0:d9d18ee787ba 66 if(cambio<=0){cambio=0;}
SSJprocesa 0:d9d18ee787ba 67 if(cambio>=99){cambio=99;}
SSJprocesa 0:d9d18ee787ba 68 lcd.locate(0,1);
SSJprocesa 0:d9d18ee787ba 69 lcd.printf(" ");
SSJprocesa 0:d9d18ee787ba 70 lcd.locate(0,1);
SSJprocesa 0:d9d18ee787ba 71 lcd.printf("%d",cambio);
SSJprocesa 0:d9d18ee787ba 72 while(chan==0){encoder.reset();cont=3;}
SSJprocesa 0:d9d18ee787ba 73 }
SSJprocesa 0:d9d18ee787ba 74 tm.year=cambio+2000;
SSJprocesa 0:d9d18ee787ba 75 cambio=0;
SSJprocesa 0:d9d18ee787ba 76 while(cont==3)
SSJprocesa 0:d9d18ee787ba 77 {
SSJprocesa 0:d9d18ee787ba 78 lcd.locate(0,0);
SSJprocesa 0:d9d18ee787ba 79 lcd.printf("(hours 0..23)");
SSJprocesa 0:d9d18ee787ba 80 cambio=encoder.getPulses();
SSJprocesa 0:d9d18ee787ba 81 if(cambio<=0){cambio=0;}
SSJprocesa 0:d9d18ee787ba 82 if(cambio>=23){cambio=23;}
SSJprocesa 0:d9d18ee787ba 83 lcd.locate(0,1);
SSJprocesa 0:d9d18ee787ba 84 lcd.printf(" ");
SSJprocesa 0:d9d18ee787ba 85 lcd.locate(0,1);
SSJprocesa 0:d9d18ee787ba 86 lcd.printf("%d",cambio);
SSJprocesa 0:d9d18ee787ba 87 while(chan==0){encoder.reset();cont=4;cambio=cambio;}
SSJprocesa 0:d9d18ee787ba 88 }
SSJprocesa 0:d9d18ee787ba 89 tm.hour=cambio;
SSJprocesa 0:d9d18ee787ba 90 cambio=0;
SSJprocesa 0:d9d18ee787ba 91 while(cont==4)
SSJprocesa 0:d9d18ee787ba 92 {
SSJprocesa 0:d9d18ee787ba 93 lcd.locate(0,0);
SSJprocesa 0:d9d18ee787ba 94 lcd.printf("(minutes 0..59)");
SSJprocesa 0:d9d18ee787ba 95 cambio=encoder.getPulses();
SSJprocesa 0:d9d18ee787ba 96 if(cambio<=0){cambio=0;}
SSJprocesa 0:d9d18ee787ba 97 if(cambio>=59){cambio=59;}
SSJprocesa 0:d9d18ee787ba 98 lcd.locate(0,1);
SSJprocesa 0:d9d18ee787ba 99 lcd.printf(" ");
SSJprocesa 0:d9d18ee787ba 100 lcd.locate(0,1);
SSJprocesa 0:d9d18ee787ba 101 lcd.printf("%d",cambio);
SSJprocesa 0:d9d18ee787ba 102 while(chan==0){encoder.reset();cont=5;}
SSJprocesa 0:d9d18ee787ba 103 }
SSJprocesa 0:d9d18ee787ba 104 tm.min=cambio;
SSJprocesa 0:d9d18ee787ba 105 cambio=0;
SSJprocesa 0:d9d18ee787ba 106 while(cont==5)
SSJprocesa 0:d9d18ee787ba 107 {
SSJprocesa 0:d9d18ee787ba 108 lcd.locate(0,0);
SSJprocesa 0:d9d18ee787ba 109 lcd.printf("(seconds 0..59)");
SSJprocesa 0:d9d18ee787ba 110 cambio=encoder.getPulses();
SSJprocesa 0:d9d18ee787ba 111 if(cambio<=0){cambio=0;}
SSJprocesa 0:d9d18ee787ba 112 if(cambio>=59){cambio=59;}
SSJprocesa 0:d9d18ee787ba 113 lcd.locate(0,1);
SSJprocesa 0:d9d18ee787ba 114 lcd.printf(" ");
SSJprocesa 0:d9d18ee787ba 115 lcd.locate(0,1);
SSJprocesa 0:d9d18ee787ba 116 lcd.printf("%d",cambio);
SSJprocesa 0:d9d18ee787ba 117 while(chan==0){encoder.reset();cont=6;lcd.locate(0,0);lcd.printf("( ");}
SSJprocesa 0:d9d18ee787ba 118 }
SSJprocesa 0:d9d18ee787ba 119 tm.sec=cambio;
SSJprocesa 0:d9d18ee787ba 120 cambio=1;
SSJprocesa 0:d9d18ee787ba 121 while(cont==6)
SSJprocesa 0:d9d18ee787ba 122 {
SSJprocesa 0:d9d18ee787ba 123 lcd.locate(0,0);
SSJprocesa 0:d9d18ee787ba 124 lcd.printf("(sunday=1)");
SSJprocesa 0:d9d18ee787ba 125 cambio=encoder.getPulses();
SSJprocesa 0:d9d18ee787ba 126 if(cambio<=1){cambio=1;}
SSJprocesa 0:d9d18ee787ba 127 if(cambio>=7){cambio=7;}
SSJprocesa 0:d9d18ee787ba 128 lcd.locate(0,1);
SSJprocesa 0:d9d18ee787ba 129 lcd.printf(" ");
SSJprocesa 0:d9d18ee787ba 130 lcd.locate(0,1);
SSJprocesa 0:d9d18ee787ba 131 lcd.printf("%d",cambio);
SSJprocesa 0:d9d18ee787ba 132 while(chan==0){encoder.reset();cont=7;}
SSJprocesa 0:d9d18ee787ba 133 }
SSJprocesa 0:d9d18ee787ba 134 tm.wday=cambio;
SSJprocesa 0:d9d18ee787ba 135 cambio=0;
SSJprocesa 0:d9d18ee787ba 136 rtc.setTime(tm, false, false);
SSJprocesa 0:d9d18ee787ba 137 rtc.startClock();//inicia el conteo en la RTC
SSJprocesa 0:d9d18ee787ba 138 pla=0;
SSJprocesa 0:d9d18ee787ba 139 }
SSJprocesa 0:d9d18ee787ba 140 cont=0;
SSJprocesa 0:d9d18ee787ba 141
SSJprocesa 0:d9d18ee787ba 142 sk2: if(pla2==1)//Rutina para la configuración de los parametros en la Alarma (día,mes,año,hora,minutos,segundos)
SSJprocesa 0:d9d18ee787ba 143 {
SSJprocesa 0:d9d18ee787ba 144 buzz=0;
SSJprocesa 0:d9d18ee787ba 145 ledr=1;
SSJprocesa 0:d9d18ee787ba 146 jod=0;
SSJprocesa 0:d9d18ee787ba 147 key=0;
SSJprocesa 0:d9d18ee787ba 148 while(rl==1){}
SSJprocesa 0:d9d18ee787ba 149 lcd.cls();
SSJprocesa 0:d9d18ee787ba 150 while(cont==0)
SSJprocesa 0:d9d18ee787ba 151 {
SSJprocesa 0:d9d18ee787ba 152 lcd.locate(0,0);
SSJprocesa 0:d9d18ee787ba 153 lcd.printf("alm(Day 1..31)");
SSJprocesa 0:d9d18ee787ba 154 cambio=encoder.getPulses();
SSJprocesa 0:d9d18ee787ba 155 if(cambio<=1){cambio=1;}
SSJprocesa 0:d9d18ee787ba 156 if(cambio>=31){cambio=31;}
SSJprocesa 0:d9d18ee787ba 157 lcd.locate(0,1);
SSJprocesa 0:d9d18ee787ba 158 lcd.printf(" ");
SSJprocesa 0:d9d18ee787ba 159 lcd.locate(0,1);
SSJprocesa 0:d9d18ee787ba 160 lcd.printf("%d",cambio);
SSJprocesa 0:d9d18ee787ba 161 while(chan==0){encoder.reset();cont=1;}
SSJprocesa 0:d9d18ee787ba 162 }
SSJprocesa 0:d9d18ee787ba 163 di=cambio;
SSJprocesa 0:d9d18ee787ba 164 cambio=0;
SSJprocesa 0:d9d18ee787ba 165 while(cont==1)
SSJprocesa 0:d9d18ee787ba 166 {
SSJprocesa 0:d9d18ee787ba 167 lcd.locate(0,0);
SSJprocesa 0:d9d18ee787ba 168 lcd.printf("alm(month 1..12)");
SSJprocesa 0:d9d18ee787ba 169 cambio=encoder.getPulses();
SSJprocesa 0:d9d18ee787ba 170 if(cambio<=1){cambio=1;}
SSJprocesa 0:d9d18ee787ba 171 if(cambio>=12){cambio=12;}
SSJprocesa 0:d9d18ee787ba 172 lcd.locate(0,1);
SSJprocesa 0:d9d18ee787ba 173 lcd.printf(" ");
SSJprocesa 0:d9d18ee787ba 174 lcd.locate(0,1);
SSJprocesa 0:d9d18ee787ba 175 lcd.printf("%d",cambio);
SSJprocesa 0:d9d18ee787ba 176 while(chan==0){encoder.reset();cont=2;}
SSJprocesa 0:d9d18ee787ba 177 }
SSJprocesa 0:d9d18ee787ba 178 me=cambio;
SSJprocesa 0:d9d18ee787ba 179 cambio=0;
SSJprocesa 0:d9d18ee787ba 180 while(cont==2)
SSJprocesa 0:d9d18ee787ba 181 {
SSJprocesa 0:d9d18ee787ba 182 lcd.locate(0,0);
SSJprocesa 0:d9d18ee787ba 183 lcd.printf("alm(year 0..99)");
SSJprocesa 0:d9d18ee787ba 184 cambio=encoder.getPulses();
SSJprocesa 0:d9d18ee787ba 185 if(cambio<=0){cambio=0;}
SSJprocesa 0:d9d18ee787ba 186 if(cambio>=99){cambio=99;}
SSJprocesa 0:d9d18ee787ba 187 lcd.locate(0,1);
SSJprocesa 0:d9d18ee787ba 188 lcd.printf(" ");
SSJprocesa 0:d9d18ee787ba 189 lcd.locate(0,1);
SSJprocesa 0:d9d18ee787ba 190 lcd.printf("%d",cambio);
SSJprocesa 0:d9d18ee787ba 191 while(chan==0){encoder.reset();cont=3;}
SSJprocesa 0:d9d18ee787ba 192 }
SSJprocesa 0:d9d18ee787ba 193 an=cambio+2000;
SSJprocesa 0:d9d18ee787ba 194 cambio=0;
SSJprocesa 0:d9d18ee787ba 195 while(cont==3)
SSJprocesa 0:d9d18ee787ba 196 {
SSJprocesa 0:d9d18ee787ba 197 lcd.locate(0,0);
SSJprocesa 0:d9d18ee787ba 198 lcd.printf("alm(hours 0..23)");
SSJprocesa 0:d9d18ee787ba 199 cambio=encoder.getPulses();
SSJprocesa 0:d9d18ee787ba 200 if(cambio<=0){cambio=0;}
SSJprocesa 0:d9d18ee787ba 201 if(cambio>=23){cambio=23;}
SSJprocesa 0:d9d18ee787ba 202 lcd.locate(0,1);
SSJprocesa 0:d9d18ee787ba 203 lcd.printf(" ");
SSJprocesa 0:d9d18ee787ba 204 lcd.locate(0,1);
SSJprocesa 0:d9d18ee787ba 205 lcd.printf("%d",cambio);
SSJprocesa 0:d9d18ee787ba 206 while(chan==0){encoder.reset();cont=4;}
SSJprocesa 0:d9d18ee787ba 207 }
SSJprocesa 0:d9d18ee787ba 208 fle=cambio;
SSJprocesa 0:d9d18ee787ba 209 cambio=0;
SSJprocesa 0:d9d18ee787ba 210 while(cont==4)
SSJprocesa 0:d9d18ee787ba 211 {
SSJprocesa 0:d9d18ee787ba 212 lcd.locate(0,0);
SSJprocesa 0:d9d18ee787ba 213 lcd.printf("alm(minutes 0..59)");
SSJprocesa 0:d9d18ee787ba 214 cambio=encoder.getPulses();
SSJprocesa 0:d9d18ee787ba 215 if(cambio<=0){cambio=0;}
SSJprocesa 0:d9d18ee787ba 216 if(cambio>=59){cambio=59;}
SSJprocesa 0:d9d18ee787ba 217 lcd.locate(0,1);
SSJprocesa 0:d9d18ee787ba 218 lcd.printf(" ");
SSJprocesa 0:d9d18ee787ba 219 lcd.locate(0,1);
SSJprocesa 0:d9d18ee787ba 220 lcd.printf("%d",cambio);
SSJprocesa 0:d9d18ee787ba 221 while(chan==0){encoder.reset();cont=5;}
SSJprocesa 0:d9d18ee787ba 222 }
SSJprocesa 0:d9d18ee787ba 223 mi=cambio;
SSJprocesa 0:d9d18ee787ba 224 cambio=0;
SSJprocesa 0:d9d18ee787ba 225 while(cont==5)
SSJprocesa 0:d9d18ee787ba 226 {
SSJprocesa 0:d9d18ee787ba 227 lcd.locate(0,0);
SSJprocesa 0:d9d18ee787ba 228 lcd.printf("alm(seconds 0..59)");
SSJprocesa 0:d9d18ee787ba 229 cambio=encoder.getPulses();
SSJprocesa 0:d9d18ee787ba 230 if(cambio<=0){cambio=0;}
SSJprocesa 0:d9d18ee787ba 231 if(cambio>=59){cambio=59;}
SSJprocesa 0:d9d18ee787ba 232 lcd.locate(0,1);
SSJprocesa 0:d9d18ee787ba 233 lcd.printf(" ");
SSJprocesa 0:d9d18ee787ba 234 lcd.locate(0,1);
SSJprocesa 0:d9d18ee787ba 235 lcd.printf("%d",cambio);
SSJprocesa 0:d9d18ee787ba 236 while(chan==0){encoder.reset();cont=6;lcd.locate(0,0);lcd.printf("( ");}
SSJprocesa 0:d9d18ee787ba 237 }
SSJprocesa 0:d9d18ee787ba 238 se=cambio;
SSJprocesa 0:d9d18ee787ba 239 cambio=0;
SSJprocesa 0:d9d18ee787ba 240 pla2=0;
SSJprocesa 0:d9d18ee787ba 241 }
SSJprocesa 0:d9d18ee787ba 242
SSJprocesa 0:d9d18ee787ba 243 cont=0;
SSJprocesa 0:d9d18ee787ba 244 cicl: if (rtc.getTime(tm) ) {
SSJprocesa 0:d9d18ee787ba 245 if(rlo==0){pla=1;goto sk;}//si se presiona va a la configuración de la RTC
SSJprocesa 0:d9d18ee787ba 246 if(rl==0){pla2=1;goto sk2;}//si se presiona va a la configuración de la Alarma
SSJprocesa 0:d9d18ee787ba 247 lcd.cls();
SSJprocesa 0:d9d18ee787ba 248 lcd.locate(0,0);//muestra el valor de todos los parametros actuales en la RTC
SSJprocesa 0:d9d18ee787ba 249 lcd.printf("%02d:%02d:%02d", tm.hour, tm.min, tm.sec);
SSJprocesa 0:d9d18ee787ba 250 lcd.locate(0,1);
SSJprocesa 0:d9d18ee787ba 251 lcd.printf("%s/%02d/%02d/%4d", rtc.weekdayToString(tm.wday), tm.date, tm.mon, tm.year);
SSJprocesa 0:d9d18ee787ba 252 if((tm.date==di)&&(tm.mon==me)&&(tm.year==an)&&(tm.hour==fle)&&(tm.min==mi)&&(tm.sec==se)){key=1;}//comparación de la Alarma
SSJprocesa 0:d9d18ee787ba 253 while(key==1)
SSJprocesa 0:d9d18ee787ba 254 {
SSJprocesa 0:d9d18ee787ba 255 jod++;
SSJprocesa 0:d9d18ee787ba 256 ledr=0;buzz=1;
SSJprocesa 0:d9d18ee787ba 257 wait(0.5);
SSJprocesa 0:d9d18ee787ba 258 ledr=1;buzz=0;
SSJprocesa 0:d9d18ee787ba 259 wait(0.5);
SSJprocesa 0:d9d18ee787ba 260 if(chan!=1){key=0;jod=0;goto cicl;}//botón que para la Alarma
SSJprocesa 0:d9d18ee787ba 261 if(jod==7){key=0;mi=mi+1;if(mi==60){mi=0;fle=fle+1;if(fle==24){fle=0;di=di+1;if(di==31){di=1;me=me+1;if(me==12){me=1;an=an+1;}}}}jod=0;//condiciones de salto
SSJprocesa 0:d9d18ee787ba 262
SSJprocesa 0:d9d18ee787ba 263 }
SSJprocesa 0:d9d18ee787ba 264 }
SSJprocesa 0:d9d18ee787ba 265 wait(0.2);
SSJprocesa 0:d9d18ee787ba 266 goto cicl;//blucle infinito hasta que suceda una interrupción
SSJprocesa 0:d9d18ee787ba 267 }
SSJprocesa 0:d9d18ee787ba 268
SSJprocesa 0:d9d18ee787ba 269 }
SSJprocesa 0:d9d18ee787ba 270
SSJprocesa 0:d9d18ee787ba 271
SSJprocesa 0:d9d18ee787ba 272
SSJprocesa 0:d9d18ee787ba 273 }
SSJprocesa 0:d9d18ee787ba 274