reloj de tiempo real con alarma aplazable
Dependencies: Debounced RTC-DS1307 TextLCD mbed
Fork of Rtc_Ds1307_Sample by
main.cpp
00001 #include "mbed.h" 00002 #include "Rtc_Ds1307.h" 00003 #include "TextLCD.h" 00004 #include "DebouncedIn.h" 00005 00006 Rtc_Ds1307 rtc(PTE0, PTE1); 00007 TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5);// rs, e, d4-d7 00008 Serial pc(USBTX, USBRX, "pc"); 00009 DebouncedIn button1(PTC12); //Incremental 00010 DebouncedIn button2(PTC13); //Decremental 00011 DebouncedIn button3(PTC16); //Cambiador de variable 00012 DebouncedIn button4(PTC17); //Configurador de modo 00013 PwmOut pw(PTA12); //se define la salida del pwm para hacer sonar la bocina 00014 00015 //esta parte es para definir la frecuencia a la que suenan los botones 00016 float Tdo=1/2093.005; 00017 float Pdo=Tdo/2; 00018 float Tre=1/2637.02; 00019 float Pre=Tre/2; 00020 float Tmi=1/3135.963; 00021 float Pmi=Tmi/2; 00022 float Tfa=1/4186.009; 00023 float Pfa=Tfa/2; 00024 //********************************** 00025 int C1=0x0F; // comando para el lcd 00026 //************************************* 00027 int modo=0; //modo es para el boton 4. Indica: 0-mostrar datos, 1-configurar datos, 2-config alarma 00028 int p=0; //p es el valor del boton 3 para la ubicación del modificador de variables 0-no aparece, 1-h, 2-m, 3-s, 4-D, 5-M, 6-Y. 00029 //*************************************** 00030 //Definicion de variables para la configuración de alarma 00031 int houral=2,minal=4,secal=0,dateal=8,monal=5,yearal=2014; 00032 Timer t; // se define la variable t, contabilizadora del tiempo desde el inicio de la alarma 00033 //************************************* 00034 int main(){ 00035 //Definiciones del ds1307 00036 Rtc_Ds1307::Time_rtc tm = {}; 00037 rtc.startClock(); 00038 //Comandos para la LCD 00039 lcd.cls(); //borrar pantalla 00040 lcd.writeCommand(C1); 00041 //************************************** 00042 while(1) { //Comienza el ciclo principal 00043 //PARTE PARA EL MODO 0: MUESTRA DE HORA Y FECHA 00044 if (modo==0) { 00045 while(modo==0) { 00046 rtc.getTime(tm); 00047 lcd.locate(0,0); //las coordenadas van del 0 al 15 en la primera entrada, y de 0 a 1 en la segunda casilla 00048 lcd.printf("Hora:%02d:%02d:%02d",tm.hour, tm.min, tm.sec); //%02d indica que la variable tiene maximo dos (2) digitos y si en algun caso solo tiene 1 digito, 00049 lcd.locate(0,1); // el otro espacio que queda vacio debe llenarse con un cero (0) 00050 lcd.printf("Fech:%02d/%02d/%04d", tm.date, tm.mon, tm.year); 00051 //Verificación de hora alarma 00052 if (tm.hour==houral && tm.min==minal && tm.sec==secal && tm.date==dateal && tm.mon==monal && tm.year==yearal) { 00053 00054 while( button2==1) { // si el boton 2 se deja presionado sale del while lo que implica que apaga la alarma 00055 00056 pw.period(Tdo); // aqui se indica la frecuencia para el sonido al pulsar el boton 1 00057 pw.pulsewidth(Pdo); 00058 wait(0.5); 00059 pw=0; 00060 pw.period(Tre); // aqui se indica la frecuencia para el sonido al pulsar el boton 1 00061 pw.pulsewidth(Pre); 00062 wait(0.5); 00063 pw=0; 00064 pw.period(Tmi); // aqui se indica la frecuencia para el sonido al pulsar el boton 1 00065 pw.pulsewidth(Pmi); 00066 wait(0.5); 00067 pw=0; 00068 pw.period(Tfa); // aqui se indica la frecuencia para el sonido al pulsar el boton 1 00069 pw.pulsewidth(Pfa); 00070 wait(0.5); 00071 pw=0; 00072 if(button1.falling() ==1) { // si dentro del while se produce una interrupción en el boton 1 retrasa la alarma 1 min 00073 minal=minal+1; 00074 pw=0; 00075 } 00076 } 00077 00078 00079 } 00080 00081 00082 if (button4.falling()) { 00083 pw.period(Tfa); // aqui se indica la frecuencia para el sonido al pulsar el boton 1 00084 pw.pulsewidth(Pfa); 00085 wait(0.1); 00086 pw=0; 00087 ++modo; 00088 lcd.locate(0,0); 00089 lcd.printf("Conf"); 00090 } 00091 } 00092 }//fIN DEL MODO CERO 00093 if (modo==1) { 00094 rtc.getTime(tm); 00095 while(modo==1){ 00096 if (button4.falling()) { //CAMBIADOR DE MODO 00097 pw.period(Tfa); // aqui se indica la frecuencia para el sonido al pulsar el boton 1 00098 pw.pulsewidth(Pfa); 00099 wait(0.1); 00100 pw=0; 00101 ++modo; 00102 lcd.locate(0,0); //las coordenadas van del 0 al 15 en la primera entrada, y de 0 a 1 en la segunda casilla 00103 lcd.printf("Alrm:%02d:%02d:%02d",houral, minal, secal); //%02d indica que la variable tiene maximo dos (2) digitos y si en algun caso solo tiene 1 digito, 00104 lcd.locate(0,1); // el otro espacio que queda vacio debe llenarse con un cero (0) 00105 lcd.printf("Fech:%02d/%02d/%04d", dateal, monal, yearal); 00106 } 00107 if (button1.falling()) { //INCREMENTAL 00108 if (p==0) {pw=0;} //Condicion: incremental no suena si no estoy ubicado en una variable 00109 else{ 00110 pw.period(Tdo); // aqui se indica la frecuencia para el sonido al pulsar el boton 1 00111 pw.pulsewidth(Pdo); 00112 wait(0.1); 00113 pw=0; 00114 } 00115 if (p==1) { //posicion de variable hora 00116 if (tm.hour==23) { 00117 tm.hour=0; 00118 lcd.locate(5,0); 00119 lcd.printf(" "); 00120 lcd.locate(5,0); 00121 lcd.printf("%02d", tm.hour); 00122 } else { 00123 ++tm.hour; 00124 lcd.locate(5,0); 00125 lcd.printf(" "); 00126 lcd.locate(5,0); 00127 lcd.printf("%02d", tm.hour); 00128 } 00129 } 00130 else if (p==2) { //p=2: posicion de variable minutos 00131 if (tm.min==59) { 00132 tm.min=0; 00133 lcd.locate(8,0); 00134 lcd.printf(" "); 00135 lcd.locate(8,0); 00136 lcd.printf("%02d", tm.min); 00137 } 00138 else { 00139 ++tm.min; 00140 lcd.locate(8,0); 00141 lcd.printf(" "); 00142 lcd.locate(8,0); 00143 lcd.printf("%02d", tm.min); 00144 } 00145 } 00146 else if (p==3) {//p=3: posicion de variable segundos 00147 if (tm.sec==59) { 00148 tm.sec=0; 00149 lcd.locate(11,0); 00150 lcd.printf(" "); 00151 lcd.locate(11,0); 00152 lcd.printf("%02d", tm.sec); 00153 } 00154 else { 00155 ++tm.sec; 00156 lcd.locate(11,0); 00157 lcd.printf(" "); 00158 lcd.locate(11,0); 00159 lcd.printf("%02d", tm.sec); 00160 } 00161 } 00162 else if (p==4) {//p=4: posicion de variable dia del mes 00163 if (tm.date==31) { 00164 tm.date=1; 00165 lcd.locate(5,1); 00166 lcd.printf(" "); 00167 lcd.locate(5,1); 00168 lcd.printf("%02d", tm.date); 00169 } 00170 else { 00171 ++tm.date; 00172 lcd.locate(5,1); 00173 lcd.printf(" "); 00174 lcd.locate(5,1); 00175 lcd.printf("%02d", tm.date); 00176 } 00177 } 00178 else if (p==5) {//p=5: posicion de variable mes 00179 if (tm.mon==12) { 00180 tm.mon=1; 00181 lcd.locate(8,1); 00182 lcd.printf(" "); 00183 lcd.locate(8,1); 00184 lcd.printf("%02d", tm.mon); 00185 } 00186 else { 00187 ++tm.mon; 00188 lcd.locate(8,1); 00189 lcd.printf(" "); 00190 lcd.locate(8,1); 00191 lcd.printf("%02d", tm.mon); 00192 } 00193 } 00194 else if (p==6) { //p=6: posicion de variable años 00195 ++tm.year; 00196 lcd.locate(11,1); 00197 lcd.printf(" "); 00198 lcd.locate(11,1); 00199 lcd.printf("%04d", tm.year); 00200 } 00201 } 00202 if (button2.falling()) { //boton decremental 00203 if (p==0) {pw=0;} 00204 else{ 00205 pw.period(Tre); 00206 pw.pulsewidth(Pre); 00207 wait(0.1); 00208 pw=0; 00209 } 00210 if (p==1) { 00211 if (tm.hour==0) { 00212 tm.hour=24; 00213 lcd.locate(5,0); 00214 lcd.printf(" "); 00215 lcd.locate(5,0); 00216 lcd.printf("%02d", tm.hour); 00217 } 00218 else { 00219 --tm.hour; 00220 lcd.locate(5,0); 00221 lcd.printf(" "); 00222 lcd.locate(5,0); 00223 lcd.printf("%02d", tm.hour); 00224 } 00225 } 00226 else if (p==2) { 00227 if (tm.min==0) { // no mostrar nada 00228 tm.min=59; 00229 lcd.locate(8,0); 00230 lcd.printf(" "); 00231 lcd.locate(8,0); 00232 lcd.printf("%02d", tm.min); 00233 } 00234 else { 00235 --tm.min; 00236 lcd.locate(8,0); 00237 lcd.printf(" "); 00238 lcd.locate(8,0); 00239 lcd.printf("%02d", tm.min); 00240 } 00241 } 00242 else if (p==3) { 00243 if (tm.sec==0) { // no mostrar nada 00244 tm.sec=59; 00245 lcd.locate(11,0); 00246 lcd.printf(" "); 00247 lcd.locate(11,0); 00248 lcd.printf("%02d", tm.sec); 00249 } 00250 else { 00251 --tm.sec; 00252 lcd.locate(11,0); 00253 lcd.printf(" "); 00254 lcd.locate(11,0); 00255 lcd.printf("%02d", tm.sec); 00256 } 00257 } 00258 else if (p==4) { 00259 if (tm.date==1) { // no mostrar nada 00260 tm.date=31; 00261 lcd.locate(5,1); 00262 lcd.printf(" "); 00263 lcd.locate(5,1); 00264 lcd.printf("%02d", tm.date); 00265 } 00266 else { 00267 --tm.date; 00268 lcd.locate(5,1); 00269 lcd.printf(" "); 00270 lcd.locate(5,1); 00271 lcd.printf("%02d", tm.date); 00272 } 00273 } 00274 else if (p==5) { 00275 if (tm.mon==1) { 00276 tm.mon=12; 00277 lcd.locate(8,1); 00278 lcd.printf(" "); 00279 lcd.locate(8,1); 00280 lcd.printf("%02d", tm.mon); 00281 } 00282 else { 00283 --tm.mon; 00284 lcd.locate(8,1); 00285 lcd.printf(" "); 00286 lcd.locate(8,1); 00287 lcd.printf("%02d", tm.mon); 00288 } 00289 } 00290 else if (p==6) { 00291 if (tm.year==2000) { 00292 lcd.locate(11,1); 00293 lcd.printf(" "); 00294 lcd.locate(11,1); 00295 lcd.printf("%04d", tm.year); 00296 } 00297 else { 00298 --tm.year; 00299 lcd.locate(11,1); 00300 lcd.printf(" "); 00301 lcd.locate(11,1); 00302 lcd.printf("%04d", tm.year); 00303 } 00304 } 00305 } 00306 if (button3.falling()) { //boton 3: cambiador de variable 00307 pw.period(Tmi); 00308 pw.pulsewidth(Pmi); 00309 wait(0.1); 00310 pw=0; 00311 00312 if (p==0) { //p=0: no esta parado en ninguna variable 00313 ++p; 00314 lcd.locate(5,0); 00315 lcd.printf(" "); 00316 lcd.locate(5,0); 00317 lcd.printf("%02d", tm.hour); 00318 } else if (p==1) { //p=1: ubicacion de variable hora 00319 ++p; 00320 lcd.locate(8,0); 00321 lcd.printf(" "); 00322 lcd.locate(8,0); 00323 lcd.printf("%02d", tm.min); 00324 } else if (p==2) { 00325 ++p; 00326 lcd.locate(11,0); 00327 lcd.printf(" "); 00328 lcd.locate(11,0); 00329 lcd.printf("%02d", tm.sec); 00330 } else if (p==3) { 00331 ++p; 00332 lcd.locate(5,1); 00333 lcd.printf(" "); 00334 lcd.locate(5,1); 00335 lcd.printf("%02d", tm.date); 00336 } else if (p==4) { 00337 ++p; 00338 lcd.locate(8,1); 00339 lcd.printf(" "); 00340 lcd.locate(8,1); 00341 lcd.printf("%02d", tm.mon); 00342 } else if (p==5) { 00343 ++p; 00344 lcd.locate(11,1); 00345 lcd.printf(" "); 00346 lcd.locate(11,1); 00347 lcd.printf("%04d", tm.year); 00348 } else if (p==6) { 00349 p=0; 00350 rtc.setTime(tm, true, false);//SOLO SI CONFIGURO TODAS LAS VARIOABLES Y RETORNO A P=0, LA HORA SE CONFIGURA 00351 } 00352 } 00353 } 00354 } 00355 //MODO 2: PROGRAMACION DE LA ALARMA 00356 if (modo==2) { 00357 rtc.getTime(tm); 00358 while(modo==2){ 00359 if (button1.falling()) { 00360 if (p==0) {pw=0;} 00361 else{ 00362 pw.period(Tdo); // aqui se indica la frecuencia para el sonido al pulsar el boton 1 00363 pw.pulsewidth(Pdo); 00364 wait(0.1); 00365 pw=0; 00366 } 00367 if (p==0) { 00368 } else if (p==1) { 00369 if (houral==23) { 00370 houral=0; 00371 lcd.locate(5,0); 00372 lcd.printf(" "); 00373 lcd.locate(5,0); 00374 lcd.printf("%02d", houral); 00375 } else { 00376 ++houral; 00377 lcd.locate(5,0); 00378 lcd.printf(" "); 00379 lcd.locate(5,0); 00380 lcd.printf("%02d", houral); 00381 } 00382 } else if (p==2) { 00383 if (minal==59) { 00384 minal=0; 00385 lcd.locate(8,0); 00386 lcd.printf(" "); 00387 lcd.locate(8,0); 00388 lcd.printf("%02d", minal); 00389 } else { 00390 ++minal; 00391 lcd.locate(8,0); 00392 lcd.printf(" "); 00393 lcd.locate(8,0); 00394 lcd.printf("%02d", minal); 00395 } 00396 } else if (p==3) { 00397 if (secal==59) { 00398 secal=0; 00399 lcd.locate(11,0); 00400 lcd.printf(" "); 00401 lcd.locate(11,0); 00402 lcd.printf("%02d", secal); 00403 } else { 00404 ++secal; 00405 lcd.locate(11,0); 00406 lcd.printf(" "); 00407 lcd.locate(11,0); 00408 lcd.printf("%02d", secal); 00409 } 00410 } else if (p==4) { 00411 if (dateal==31) { 00412 dateal=1; 00413 lcd.locate(5,1); 00414 lcd.printf(" "); 00415 lcd.locate(5,1); 00416 lcd.printf("%02d", dateal); 00417 } else { 00418 ++dateal; 00419 lcd.locate(5,1); 00420 lcd.printf(" "); 00421 lcd.locate(5,1); 00422 lcd.printf("%02d", dateal); 00423 } 00424 } else if (p==5) { 00425 if (monal==12) { 00426 monal=1; 00427 lcd.locate(8,1); 00428 lcd.printf(" "); 00429 lcd.locate(8,1); 00430 lcd.printf("%02d", monal); 00431 } else { 00432 ++monal; 00433 lcd.locate(8,1); 00434 lcd.printf(" "); 00435 lcd.locate(8,1); 00436 lcd.printf("%02d", monal); 00437 } 00438 } else if (p==6) { 00439 ++yearal; 00440 lcd.locate(11,1); 00441 lcd.printf(" "); 00442 lcd.locate(11,1); 00443 lcd.printf("%04d", yearal); 00444 } 00445 } 00446 if (button2.falling()) { 00447 if (p==0) {pw=0;} 00448 else{ 00449 pw.period(Tre); 00450 pw.pulsewidth(Pre); 00451 wait(0.1); 00452 pw=0; 00453 } 00454 if (p==1) { 00455 if (houral==0) { // no mostrar nada 00456 houral=24; 00457 lcd.locate(5,0); 00458 lcd.printf(" "); 00459 lcd.locate(5,0); 00460 lcd.printf("%02d", houral); 00461 } else { 00462 --houral; 00463 lcd.locate(5,0); 00464 lcd.printf(" "); 00465 lcd.locate(5,0); 00466 lcd.printf("%02d", houral); 00467 } 00468 } 00469 if (p==2) { 00470 if (minal==0) { // no mostrar nada 00471 minal=59; 00472 lcd.locate(8,0); 00473 lcd.printf(" "); 00474 lcd.locate(8,0); 00475 lcd.printf("%02d", minal); 00476 } else { 00477 --minal; 00478 lcd.locate(8,0); 00479 lcd.printf(" "); 00480 lcd.locate(8,0); 00481 lcd.printf("%02d", minal); 00482 } 00483 } 00484 if (p==3) { 00485 if (secal==0) { // no mostrar nada 00486 secal=59; 00487 lcd.locate(11,0); 00488 lcd.printf(" "); 00489 lcd.locate(11,0); 00490 lcd.printf("%02d", secal); 00491 } else { 00492 --secal; 00493 lcd.locate(11,0); 00494 lcd.printf(" "); 00495 lcd.locate(11,0); 00496 lcd.printf("%02d", secal); 00497 } 00498 } 00499 if (p==4) { 00500 if (dateal==1) { // no mostrar nada 00501 dateal=31; 00502 lcd.locate(5,1); 00503 lcd.printf(" "); 00504 lcd.locate(5,1); 00505 lcd.printf("%02d", dateal); 00506 } else { 00507 --dateal; 00508 lcd.locate(5,1); 00509 lcd.printf(" "); 00510 lcd.locate(5,1); 00511 lcd.printf("%02d", dateal); 00512 } 00513 } 00514 if (p==5) { 00515 if (monal==1) { 00516 monal=12; 00517 lcd.locate(8,1); 00518 lcd.printf(" "); 00519 lcd.locate(8,1); 00520 lcd.printf("%02d", monal); 00521 } else { 00522 --monal; 00523 lcd.locate(8,1); 00524 lcd.printf(" "); 00525 lcd.locate(8,1); 00526 lcd.printf("%02d", monal); 00527 } 00528 } 00529 if (p==6) { 00530 if (yearal==2000) { 00531 lcd.locate(11,1); 00532 lcd.printf(" "); 00533 lcd.locate(11,1); 00534 lcd.printf("%04d", yearal); 00535 } else { 00536 --yearal; 00537 lcd.locate(11,1); 00538 lcd.printf(" "); 00539 lcd.locate(11,1); 00540 lcd.printf("%04d", yearal); 00541 } 00542 } 00543 } 00544 if (button3.falling()) {//BOTON 3: CAMBIADOR DE VARIABLE (POSICION EN LA LCD) 00545 pw.period(Tmi); 00546 pw.pulsewidth(Pmi); 00547 wait(0.1); 00548 pw=0; 00549 00550 if (p==0) { 00551 ++p; 00552 lcd.locate(5,0); 00553 lcd.printf(" "); 00554 lcd.locate(5,0); 00555 lcd.printf("%02d", houral); 00556 } else if (p==1) { 00557 ++p; 00558 lcd.locate(8,0); 00559 lcd.printf(" "); 00560 lcd.locate(8,0); 00561 lcd.printf("%02d", minal); 00562 } else if (p==2) { 00563 ++p; 00564 lcd.locate(11,0); 00565 lcd.printf(" "); 00566 lcd.locate(11,0); 00567 lcd.printf("%02d", secal); 00568 } else if (p==3) { 00569 ++p; 00570 lcd.locate(5,1); 00571 lcd.printf(" "); 00572 lcd.locate(5,1); 00573 lcd.printf("%02d", dateal); 00574 } else if (p==4) { 00575 ++p; 00576 lcd.locate(8,1); 00577 lcd.printf(" "); 00578 lcd.locate(8,1); 00579 lcd.printf("%02d", monal); 00580 } else if (p==5) { 00581 ++p; 00582 lcd.locate(11,1); 00583 lcd.printf(" "); 00584 lcd.locate(11,1); 00585 lcd.printf("%04d", yearal); 00586 } else if (p==6) { 00587 p=0; 00588 } 00589 } 00590 if (button4.falling()) { //BOTON 4: CAMBIADOR DE MODO 00591 pw.period(Tfa); // aqui se indica la frecuencia para el sonido al pulsar el boton 1 00592 pw.pulsewidth(Pfa); 00593 wait(0.1); 00594 pw=0; 00595 modo=0; 00596 lcd.locate(0,0); 00597 lcd.printf("Hora"); 00598 } 00599 } 00600 } 00601 } 00602 00603 }
Generated on Mon Jul 18 2022 00:06:10 by 1.7.2