reloj de tiempo real con alarma aplazable

Dependencies:   Debounced RTC-DS1307 TextLCD mbed

Fork of Rtc_Ds1307_Sample by Henry Leinen

Revision:
3:cc43cc1af11a
Parent:
2:3be003301107
Child:
4:242b6afb651e
--- a/main.cpp	Wed Jun 26 21:07:13 2013 +0000
+++ b/main.cpp	Fri May 02 18:19:57 2014 +0000
@@ -1,87 +1,616 @@
 #include "mbed.h"
 #include "Rtc_Ds1307.h"
+#include "TextLCD.h"
+#include "DebouncedIn.h"
 
-//RtcCls rtc(p28, p27, p29, true);
-Rtc_Ds1307 rtc(p28, p27);
-
+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
 
-char buffer[128];
-int readptr = 0;
-
-int main() {
-    char c;
+//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 = {};
-    
-    while(1) {
-        pc.printf("*************************************\n");
-        pc.printf("* Menu for RTC Test :               *\n");
-        pc.printf("* read  - reads the clock           *\n");
-        pc.printf("* start - start the clock           *\n");
-        pc.printf("* stop  - stop the clock            *\n");
-        pc.printf("* write - write the clock           *\n");
-        pc.printf("* ena   - enable Square wave output *\n");
-        pc.printf("* dis   - disable square wave outp. *\n");
-        pc.printf("*************************************\n");
-        
-        while( (c = pc.getc()) != '\n') {
-            buffer[readptr++] = c;
-        }
-        buffer[readptr++] = 0;
-        if (strncmp(buffer, "read", 4) == 0) {
-            //  perform read
-            pc.printf("Performing read operation\n");
-            if (rtc.getTime(tm) ) {
-                pc.printf("The current time is : %02d:%02d:%02d\n", tm.hour, tm.min, tm.sec);
-                pc.printf("The current date is : %s, %02d/%02d/%04d\n", rtc.weekdayToString(tm.wday), tm.mon, tm.date, tm.year);
+    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");
+                }
             }
-            
-        }
-        else if (strncmp(buffer, "write", 5) == 0) {
-            //  perform write
-            pc.printf("Enter the date (date 0..31)");
-            pc.scanf("%d", &tm.date);
-            pc.printf("Enter the date (month 1..12)");
-            pc.scanf("%d", &tm.mon);
-            pc.printf("Enter the date (year)");
-            pc.scanf("%d", &tm.year);
-            pc.printf("Enter the time (hours 0..23)");
-            pc.scanf("%d", &tm.hour);
-            pc.printf("Enter the time (minutes 0..59)");
-            pc.scanf("%d", &tm.min);
-            pc.printf("Enter the time (seconds 0..59)");
-            pc.scanf("%d", &tm.sec);
-            pc.printf("Performing write operation\n");
-            
-            while(pc.readable()) 
-                pc.getc();
-            rtc.setTime(tm, false, false);
-        }
-        else if (strncmp(buffer, "start", 5) == 0) {
-            //  start
-            pc.printf("Performing start operation\n");
-            rtc.startClock();
-        }
-        else if (strncmp(buffer, "stop", 4) == 0) {
-            //  stop
-            pc.printf("Performing stop operation\n");
-            rtc.stopClock();
-        }
-        else if (strncmp(buffer, "ena", 3) == 0) {
-            int rs;
-            pc.printf("Please specify the frequency : [0 = 1Hz, 1 = 4.096kHz, 2 = 8.192kHz, 3 = 32.768kHz] ");
-            scanf("%d", &rs);
-            pc.printf("Enabling the output with %d option\n", rs);
-            rtc.setSquareWaveOutput(true, (Rtc_Ds1307::SqwRateSelect_t)rs);
-        }
-        else if (strncmp(buffer, "dis", 3) == 0) {
-            pc.printf("Disableing square wave output\n");
-            rtc.setSquareWaveOutput(false, Rtc_Ds1307::RS1Hz);
-        }
-        else {
-            pc.printf("syntax error\n");
-        }
-        readptr = 0;
-        pc.printf("\n\n\n");
-    }
+        }//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");
+                    }
+                }
+              }
+            }       
+    
 }