Despertador por rtc I2C, encoder, LCD y buzzer

Dependencies:   QEI RTC-DS1307 TextLCD mbed

Committer:
SSJprocesa
Date:
Sun May 29 17:52:00 2016 +0000
Revision:
0:e078f69875aa
Rtc con encoder y alarma

Who changed what in which revision?

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