![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
reloj de tiempo real con alarma aplazable
Dependencies: Debounced RTC-DS1307 TextLCD mbed
Fork of Rtc_Ds1307_Sample by
main.cpp
- Committer:
- Gregorio
- Date:
- 2014-05-02
- Revision:
- 3:cc43cc1af11a
- Parent:
- 2:3be003301107
- Child:
- 4:242b6afb651e
File content as of revision 3:cc43cc1af11a:
#include "mbed.h" #include "Rtc_Ds1307.h" #include "TextLCD.h" #include "DebouncedIn.h" Rtc_Ds1307 rtc(PTE0, PTE1); TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); Serial pc(USBTX, USBRX, "pc"); DebouncedIn button1(PTC12); //Incremental DebouncedIn button2(PTC13); //Decremental DebouncedIn button3(PTC16); //Cambiador de variable DebouncedIn button4(PTC17); //Configurador de modo PwmOut pw(PTA12); //se define la salida del pwm para hacer sonar la bocina //esta parte es para definir la frecuencia a la que suenan los botones float Tdo=1/2093.005; float Pdo=Tdo/2; float Tre=1/2637.02; float Pre=Tre/2; float Tmi=1/3135.963; float Pmi=Tmi/2; float Tfa=1/4186.009; float Pfa=Tfa/2; //********************************** int C1=0x0F; // comando para el lcd //************************************* int modo=0; //modo es para el boton 4. Indica: 0-mostrar datos, 1-configurar datos, 2-config alarma 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. //*************************************** //Definicion de variables para la configuración de alarma int houral=0,minal=0,secal=0,dateal=1,monal=1,yearal=2014; Timer t; // se define la variable t, contabilizadora del tiempo desde el inicio de la alarma //************************************* int main(){ //Definiciones del ds1307 Rtc_Ds1307::Time_rtc tm = {}; rtc.startClock(); //Comandos para la LCD lcd.cls(); //borrar pantalla lcd.writeCommand(C1); //************************************** while(1) { //Comienza el ciclo principal //PARTE PARA EL MODO 0: MUESTRA DE HORA Y FECHA if (modo==0) { while(modo==0) { rtc.getTime(tm); lcd.locate(0,0); //las coordenadas van del 0 al 15 en la primera entrada, y de 0 a 1 en la segunda casilla 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, lcd.locate(0,1); // el otro espacio que queda vacio debe llenarse con un cero (0) lcd.printf("Fech:%02d/%02d/%04d", tm.date, tm.mon, tm.year); //Verificación de hora alarma if (tm.hour==houral && tm.min==minal && tm.sec==secal && tm.date==dateal && tm.mon==monal && tm.year==yearal) { while(button1.falling() != 1) { pw.period(Tdo); // aqui se indica la frecuencia para el sonido al pulsar el boton 1 pw.pulsewidth(Pdo); wait(0.5); pw=0; pw.period(Tre); // aqui se indica la frecuencia para el sonido al pulsar el boton 1 pw.pulsewidth(Pre); wait(0.5); pw=0; pw.period(Tmi); // aqui se indica la frecuencia para el sonido al pulsar el boton 1 pw.pulsewidth(Pmi); wait(0.5); pw=0; pw.period(Tfa); // aqui se indica la frecuencia para el sonido al pulsar el boton 1 pw.pulsewidth(Pfa); wait(0.5); pw=0; } t.start();//comienza a contar el tiempo despues de apagar la alarma, para reiniciarla a los 30 seg if(t>=30){ t.stop(); while(button1.falling() != 1) { pw.period(Tdo); // aqui se indica la frecuencia para el sonido al pulsar el boton 1 pw.pulsewidth(Pdo); wait(0.5); pw=0; pw.period(Tre); // aqui se indica la frecuencia para el sonido al pulsar el boton 1 pw.pulsewidth(Pre); wait(0.5); pw=0; pw.period(Tmi); // aqui se indica la frecuencia para el sonido al pulsar el boton 1 pw.pulsewidth(Pmi); wait(0.5); pw=0; pw.period(Tfa); // aqui se indica la frecuencia para el sonido al pulsar el boton 1 pw.pulsewidth(Pfa); wait(0.5); pw=0; } } } if (button4.falling()) { pw.period(Tfa); // aqui se indica la frecuencia para el sonido al pulsar el boton 1 pw.pulsewidth(Pfa); wait(0.1); pw=0; ++modo; lcd.locate(0,0); lcd.printf("Conf"); } } }//fIN DEL MODO CERO if (modo==1) { rtc.getTime(tm); while(modo==1){ if (button4.falling()) { //CAMBIADOR DE MODO pw.period(Tfa); // aqui se indica la frecuencia para el sonido al pulsar el boton 1 pw.pulsewidth(Pfa); wait(0.1); pw=0; ++modo; lcd.locate(0,0); //las coordenadas van del 0 al 15 en la primera entrada, y de 0 a 1 en la segunda casilla 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, lcd.locate(0,1); // el otro espacio que queda vacio debe llenarse con un cero (0) lcd.printf("Fech:%02d/%02d/%04d", dateal, monal, yearal); } if (button1.falling()) { //INCREMENTAL if (p==0) {pw=0;} //Condicion: incremental no suena si no estoy ubicado en una variable else{ pw.period(Tdo); // aqui se indica la frecuencia para el sonido al pulsar el boton 1 pw.pulsewidth(Pdo); wait(0.1); pw=0; } if (p==1) { //posicion de variable hora if (tm.hour==23) { tm.hour=0; lcd.locate(5,0); lcd.printf(" "); lcd.locate(5,0); lcd.printf("%02d", tm.hour); } else { ++tm.hour; lcd.locate(5,0); lcd.printf(" "); lcd.locate(5,0); lcd.printf("%02d", tm.hour); } } else if (p==2) { //p=2: posicion de variable minutos if (tm.min==59) { tm.min=0; lcd.locate(8,0); lcd.printf(" "); lcd.locate(8,0); lcd.printf("%02d", tm.min); } else { ++tm.min; lcd.locate(8,0); lcd.printf(" "); lcd.locate(8,0); lcd.printf("%02d", tm.min); } } else if (p==3) {//p=3: posicion de variable segundos if (tm.sec==59) { tm.sec=0; lcd.locate(11,0); lcd.printf(" "); lcd.locate(11,0); lcd.printf("%02d", tm.sec); } else { ++tm.sec; lcd.locate(11,0); lcd.printf(" "); lcd.locate(11,0); lcd.printf("%02d", tm.sec); } } else if (p==4) {//p=4: posicion de variable dia del mes if (tm.date==31) { tm.date=1; lcd.locate(5,1); lcd.printf(" "); lcd.locate(5,1); lcd.printf("%02d", tm.date); } else { ++tm.date; lcd.locate(5,1); lcd.printf(" "); lcd.locate(5,1); lcd.printf("%02d", tm.date); } } else if (p==5) {//p=5: posicion de variable mes if (tm.mon==12) { tm.mon=1; lcd.locate(8,1); lcd.printf(" "); lcd.locate(8,1); lcd.printf("%02d", tm.mon); } else { ++tm.mon; lcd.locate(8,1); lcd.printf(" "); lcd.locate(8,1); lcd.printf("%02d", tm.mon); } } else if (p==6) { //p=6: posicion de variable años ++tm.year; lcd.locate(11,1); lcd.printf(" "); lcd.locate(11,1); lcd.printf("%04d", tm.year); } } if (button2.falling()) { //boton decremental if (p==0) {pw=0;} else{ pw.period(Tre); pw.pulsewidth(Pre); wait(0.1); pw=0; } if (p==1) { if (tm.hour==0) { tm.hour=24; lcd.locate(5,0); lcd.printf(" "); lcd.locate(5,0); lcd.printf("%02d", tm.hour); } else { --tm.hour; lcd.locate(5,0); lcd.printf(" "); lcd.locate(5,0); lcd.printf("%02d", tm.hour); } } else if (p==2) { if (tm.min==0) { // no mostrar nada tm.min=59; lcd.locate(8,0); lcd.printf(" "); lcd.locate(8,0); lcd.printf("%02d", tm.min); } else { --tm.min; lcd.locate(8,0); lcd.printf(" "); lcd.locate(8,0); lcd.printf("%02d", tm.min); } } else if (p==3) { if (tm.sec==0) { // no mostrar nada tm.sec=59; lcd.locate(11,0); lcd.printf(" "); lcd.locate(11,0); lcd.printf("%02d", tm.sec); } else { --tm.sec; lcd.locate(11,0); lcd.printf(" "); lcd.locate(11,0); lcd.printf("%02d", tm.sec); } } else if (p==4) { if (tm.date==1) { // no mostrar nada tm.date=31; lcd.locate(5,1); lcd.printf(" "); lcd.locate(5,1); lcd.printf("%02d", tm.date); } else { --tm.date; lcd.locate(5,1); lcd.printf(" "); lcd.locate(5,1); lcd.printf("%02d", tm.date); } } else if (p==5) { if (tm.mon==1) { tm.mon=12; lcd.locate(8,1); lcd.printf(" "); lcd.locate(8,1); lcd.printf("%02d", tm.mon); } else { --tm.mon; lcd.locate(8,1); lcd.printf(" "); lcd.locate(8,1); lcd.printf("%02d", tm.mon); } } else if (p==6) { if (tm.year==2000) { lcd.locate(11,1); lcd.printf(" "); lcd.locate(11,1); lcd.printf("%04d", tm.year); } else { --tm.year; lcd.locate(11,1); lcd.printf(" "); lcd.locate(11,1); lcd.printf("%04d", tm.year); } } } if (button3.falling()) { //boton 3: cambiador de variable pw.period(Tmi); pw.pulsewidth(Pmi); wait(0.1); pw=0; if (p==0) { //p=0: no esta parado en ninguna variable ++p; lcd.locate(5,0); lcd.printf(" "); lcd.locate(5,0); lcd.printf("%02d", tm.hour); } else if (p==1) { //p=1: ubicacion de variable hora ++p; lcd.locate(8,0); lcd.printf(" "); lcd.locate(8,0); lcd.printf("%02d", tm.min); } else if (p==2) { ++p; lcd.locate(11,0); lcd.printf(" "); lcd.locate(11,0); lcd.printf("%02d", tm.sec); } else if (p==3) { ++p; lcd.locate(5,1); lcd.printf(" "); lcd.locate(5,1); lcd.printf("%02d", tm.date); } else if (p==4) { ++p; lcd.locate(8,1); lcd.printf(" "); lcd.locate(8,1); lcd.printf("%02d", tm.mon); } else if (p==5) { ++p; lcd.locate(11,1); lcd.printf(" "); lcd.locate(11,1); lcd.printf("%04d", tm.year); } else if (p==6) { p=0; rtc.setTime(tm, true, false);//SOLO SI CONFIGURO TODAS LAS VARIOABLES Y RETORNO A P=0, LA HORA SE CONFIGURA } } } } //MODO 2: PROGRAMACION DE LA ALARMA if (modo==2) { rtc.getTime(tm); while(modo==2){ if (button1.falling()) { if (p==0) {pw=0;} else{ pw.period(Tdo); // aqui se indica la frecuencia para el sonido al pulsar el boton 1 pw.pulsewidth(Pdo); wait(0.1); pw=0; } if (p==0) { } else if (p==1) { if (houral==23) { houral=0; lcd.locate(5,0); lcd.printf(" "); lcd.locate(5,0); lcd.printf("%02d", houral); } else { ++houral; lcd.locate(5,0); lcd.printf(" "); lcd.locate(5,0); lcd.printf("%02d", houral); } } else if (p==2) { if (minal==59) { minal=0; lcd.locate(8,0); lcd.printf(" "); lcd.locate(8,0); lcd.printf("%02d", minal); } else { ++minal; lcd.locate(8,0); lcd.printf(" "); lcd.locate(8,0); lcd.printf("%02d", minal); } } else if (p==3) { if (secal==59) { secal=0; lcd.locate(11,0); lcd.printf(" "); lcd.locate(11,0); lcd.printf("%02d", secal); } else { ++secal; lcd.locate(11,0); lcd.printf(" "); lcd.locate(11,0); lcd.printf("%02d", secal); } } else if (p==4) { if (dateal==31) { dateal=1; lcd.locate(5,1); lcd.printf(" "); lcd.locate(5,1); lcd.printf("%02d", dateal); } else { ++dateal; lcd.locate(5,1); lcd.printf(" "); lcd.locate(5,1); lcd.printf("%02d", dateal); } } else if (p==5) { if (monal==12) { monal=1; lcd.locate(8,1); lcd.printf(" "); lcd.locate(8,1); lcd.printf("%02d", monal); } else { ++monal; lcd.locate(8,1); lcd.printf(" "); lcd.locate(8,1); lcd.printf("%02d", monal); } } else if (p==6) { ++yearal; lcd.locate(11,1); lcd.printf(" "); lcd.locate(11,1); lcd.printf("%04d", yearal); } } if (button2.falling()) { if (p==0) {pw=0;} else{ pw.period(Tre); pw.pulsewidth(Pre); wait(0.1); pw=0; } if (p==1) { if (houral==0) { // no mostrar nada houral=24; lcd.locate(5,0); lcd.printf(" "); lcd.locate(5,0); lcd.printf("%02d", houral); } else { --houral; lcd.locate(5,0); lcd.printf(" "); lcd.locate(5,0); lcd.printf("%02d", houral); } } if (p==2) { if (minal==0) { // no mostrar nada minal=59; lcd.locate(8,0); lcd.printf(" "); lcd.locate(8,0); lcd.printf("%02d", minal); } else { --minal; lcd.locate(8,0); lcd.printf(" "); lcd.locate(8,0); lcd.printf("%02d", minal); } } if (p==3) { if (secal==0) { // no mostrar nada secal=59; lcd.locate(11,0); lcd.printf(" "); lcd.locate(11,0); lcd.printf("%02d", secal); } else { --secal; lcd.locate(11,0); lcd.printf(" "); lcd.locate(11,0); lcd.printf("%02d", secal); } } if (p==4) { if (dateal==1) { // no mostrar nada dateal=31; lcd.locate(5,1); lcd.printf(" "); lcd.locate(5,1); lcd.printf("%02d", dateal); } else { --dateal; lcd.locate(5,1); lcd.printf(" "); lcd.locate(5,1); lcd.printf("%02d", dateal); } } if (p==5) { if (monal==1) { monal=12; lcd.locate(8,1); lcd.printf(" "); lcd.locate(8,1); lcd.printf("%02d", monal); } else { --monal; lcd.locate(8,1); lcd.printf(" "); lcd.locate(8,1); lcd.printf("%02d", monal); } } if (p==6) { if (yearal==2000) { lcd.locate(11,1); lcd.printf(" "); lcd.locate(11,1); lcd.printf("%04d", yearal); } else { --yearal; lcd.locate(11,1); lcd.printf(" "); lcd.locate(11,1); lcd.printf("%04d", yearal); } } } if (button3.falling()) {//BOTON 3: CAMBIADOR DE VARIABLE (POSICION EN LA LCD) pw.period(Tmi); pw.pulsewidth(Pmi); wait(0.1); pw=0; if (p==0) { ++p; lcd.locate(5,0); lcd.printf(" "); lcd.locate(5,0); lcd.printf("%02d", houral); } else if (p==1) { ++p; lcd.locate(8,0); lcd.printf(" "); lcd.locate(8,0); lcd.printf("%02d", minal); } else if (p==2) { ++p; lcd.locate(11,0); lcd.printf(" "); lcd.locate(11,0); lcd.printf("%02d", secal); } else if (p==3) { ++p; lcd.locate(5,1); lcd.printf(" "); lcd.locate(5,1); lcd.printf("%02d", dateal); } else if (p==4) { ++p; lcd.locate(8,1); lcd.printf(" "); lcd.locate(8,1); lcd.printf("%02d", monal); } else if (p==5) { ++p; lcd.locate(11,1); lcd.printf(" "); lcd.locate(11,1); lcd.printf("%04d", yearal); } else if (p==6) { p=0; } } if (button4.falling()) { //BOTON 4: CAMBIADOR DE MODO pw.period(Tfa); // aqui se indica la frecuencia para el sonido al pulsar el boton 1 pw.pulsewidth(Pfa); wait(0.1); pw=0; modo=0; lcd.locate(0,0); lcd.printf("Hora"); } } } } }