Procesadores, 2016 - II. Tarea #2. Oswaldo Andrés Giraldo Giraldo, Héctor Andrés Hoyos Ceballos, Jose Fernando Montoya Vargas, María Fernanda Villa Tamayo. Programa para establecer alarmas con ayuda del reloj DS1307 por comunicación I2C.

Dependencies:   Debounced QEI RTC-DS1307 TextLCD mbed

Fork of Reloj_alarma by Gustavo Ramirez

Files at this revision

API Documentation at this revision

Comitter:
joshema216
Date:
Wed Nov 16 02:22:17 2016 +0000
Parent:
1:0639f31dd59f
Commit message:
Version 1.

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r 0639f31dd59f -r cb1f588caed7 main.cpp
--- a/main.cpp	Wed Sep 28 06:48:39 2016 +0000
+++ b/main.cpp	Wed Nov 16 02:22:17 2016 +0000
@@ -1,508 +1,817 @@
+// Programa para configurar 4 alarmas con el reloj DS1307 por comunicación I2C. Se configurarán los tiempos de
+// encendido y apagado de cada una de las alarmas y la acción de las mismas se verá representada por el estado
+// de un LED para cada una (cuando se active una alarma se deberá encender, cuando se desactive se deberá de
+// apagar), por lo que las alarmas son independientes. Luego, se deberá estar comparando constantemente el 
+// tiempo actual con cada una de las alarmas por a parte.
+
+// Oswaldo Andrés Giraldo Giraldo - C.C.: 1152458465
+// Héctor Andrés Hoyos Ceballos - C.C.: 1039466317
+// Jose Fernando Montoya Vargas - C.C.: 1039468676
+// María Fernanda Villa Tamayo - C.C.: 1152457490
+
 #include "mbed.h"
-#include "DebouncedIn.h"
+#include "DebouncedIn.h" // Librería para los botones.
 #include "TextLCD.h"
 #include "QEI.h"
 #include "Rtc_Ds1307.h"
 
-TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7
-Rtc_Ds1307 rtc(PTE0, PTE1);
-QEI wheel (PTA16, PTA17, NC, 48);
+TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // RS, E, D4 - D7
+Rtc_Ds1307 rtc(PTE0, PTE1); // Configura el reloj.
+QEI wheel (PTA13, PTD5, NC, 48); // Configura el encoder.
+DebouncedIn button_enco(PTC16); // Configura el botón del encoder.
+
+DigitalOut ALED1(PTA5);// Salida del LED de la alarma 1. 
+DigitalOut ALED2(PTA4);// Salida del LED de la alarma 2. 
+DigitalOut ALED3(PTA12);// Salida del LED de la alarma 3.
+DigitalOut ALED4(PTD4);// Salida del LED de la alarma 4.
 
-DebouncedIn button_enco(PTC5);
+Serial pc(USBTX, USBRX); // TX, RX.
 
-PwmOut Sonido(PTA5);
+int C1 = 0x0C;
+int m;
+int Conf = 0;  // 0: Reloj, 1: Alarmas.
+int Lugar = 0; // Definen el punto en el cual va el programa.
+int i = 0, ala = 1, a1 = 0, a2 = 0, a3 = 0, a4 = 0, cont = 0;
+int visual = 0;
+int alarma = 0;  
 
-float periodo;
-float Frecuencia=4000;
-int C1=0x0C;
-int m;
-int Conf=0;  // 0: Alarma y 1:Reloj
-int Lugar=0; // Definen el punto en el cual va el programa
-int i=0;
-int visual=0;
-int alarma=0;  
+int main(){
+    Rtc_Ds1307::Time_rtc tm = {}; // Inicializa el reloj.
+    Rtc_Ds1307::Time_rtc A1on = {}; // Inicializa el tiempo de encendido de la alarma 1.
+    Rtc_Ds1307::Time_rtc A2on = {}; // Inicializa el tiempo de encendido de la alarma 2.
+    Rtc_Ds1307::Time_rtc A3on = {}; // Inicializa el tiempo de encendido de la alarma 3.
+    Rtc_Ds1307::Time_rtc A4on = {}; // Inicializa el tiempo de encendido de la alarma 4.
+    Rtc_Ds1307::Time_rtc A1off = {}; // Inicializa el tiempo de apagado de la alarma 1.
+    Rtc_Ds1307::Time_rtc A2off = {}; // Inicializa el tiempo de apagado de la alarma 2.
+    Rtc_Ds1307::Time_rtc A3off = {}; // Inicializa el tiempo de apagado de la alarma 3. 
+    Rtc_Ds1307::Time_rtc A4off = {}; // Inicializa el tiempo de apagado de la alarma 4.
+    
+    lcd.cls(); // Borra la pantalla.
+    lcd.writeCommand(C1); // Escribimos un comando segun el manual del modulo LCD.
+    lcd.locate(0,0);
+    lcd.printf("** Reloj de");
+    lcd.locate(0,1);
+    lcd.printf("   4 alarmas **");
+    wait(2);
+    lcd.cls();
+    lcd.locate(0,0);
+    lcd.printf("--Reloj"); // Sin flechas.
+    lcd.locate(0,1);
+    lcd.printf("--Alarmas");
+        
+    rtc.getTime(tm); // Lee el tiempo del DS1307. Leyó todo el hijuemadre reloj de un golpe, hora, min, seg y lo mete en tm
+
+    while(1){
 
-int main()
-{
-    Rtc_Ds1307::Time_rtc tm = {};
-    Rtc_Ds1307::Time_rtc Alarm = {};
-    lcd.cls();
-    lcd.writeCommand(C1);//escribimos un comando segun el manual del modulo LCD
-    
-    lcd.locate(0,0);
-    lcd.printf("--Alarma  --Hora");
-    
-    periodo=(1/Frecuencia);
-    Sonido.period(periodo);
-    
-    rtc.getTime(tm); //lee el tiempo del DS1307
-
-    while(1)
-    {
-        switch (Lugar)
-        {
-            case 0:
-                m=wheel.getPulses();  // m son los datos del encoder
-                if(m!=0 && Conf==0){
-                    Conf=1;
-                    wheel.reset();  
-                    m=0;              
+        // Etapa de menú.
+        if (Lugar == 0){ // Varía entre reloj y alarma. Por el boton del encoder incrementa una variable que se llama lugar.
+            m = wheel.getPulses();  // m son los datos del encoder.
+            if(m!=0 && Conf == 0){// Si se movió el encoder y está en Reloj.
+                Conf = 1;           // Lo cambia a Alarmas.
+                wheel.reset();    // Si está en un estado inferior, la resetea.
+                m=0;
+                ala++;        
+                pc.printf("%d", ala, "\n");  
+            }
+            
+            if(m!=0 && Conf == 1){ // Si se movió el encoder y está en Alarmas.
+                Conf = 0;           // Lo pone en Reloj.
+                wheel.reset();    // Resetea.
+                m=0;
+                ala = 1;   
+                pc.printf("%d", ala, "\n");          
+            }
+            
+            if(Conf == 0){ // Si la configuración cambia pone la flechita en Reloj.
+                
+                lcd.locate(1,1);
+                lcd.printf("-");                    
+                lcd.locate(1,0);
+                lcd.printf(">");
+                lcd.locate(16,1);                    
+                wait(0.1);
+                
+            }
+            
+             if(Conf == 1){  // Poner la flechita en Alarmas.
+                lcd.locate(1,0);
+                lcd.printf("-");                    
+                lcd.locate(1,1); // Tira la flechita para abajo.
+                lcd.printf(">");
+                lcd.locate(16,1);                    
+                wait(0.1);
+            }
+            
+            if (button_enco.falling()){  // Si se pulsa botón del encoder.
+                Lugar++; //aumenta lugar
+                m = 0;
+                pc.printf("%d", Conf, "\n");      
+                pc.printf("%d", ala, "\n");
+            }
+        }
+        
+        // Etapa de llenado de variables (Reloj y Alarmas).
+        else if (Lugar == 1){
+            if (i == 0){                                    
+                if(Conf == 0){ // Empieza a configurar el Reloj.
+                    lcd.cls();
+                    lcd.locate(0,0);
+                    lcd.printf("Configurar reloj");
+                    wait(1.5);
+                    lcd.cls();
+                    i++;
+                    m = 0;                                                      
+                }
+        
+                if(Conf == 1 && ala == 2){ // Empieza a configurar inicialmente la alarma 1 encendido.
+                    lcd.cls();
+                    lcd.locate(0,0);
+                    lcd.printf("Config. Alarma 1");
+                    lcd.locate(0,1);
+                    lcd.printf("encendido");
+                    wait(1.5);
+                    lcd.cls();
+                    i++;
+                    m=0;
+                }   
+                
+                if(Conf == 1 && ala == 3){ // Configurar alarma 1 apagado.
+                    lcd.cls();
+                    lcd.locate(0,0);
+                    lcd.printf("Config. Alarma 1");
+                    lcd.locate(0,1);
+                    lcd.printf("apagado");
+                    wait(1.5);
+                    lcd.cls();
+                    i++;
+                    m=0;
                 }
                 
-                 if(m!=0 && Conf==1){
-                    Conf=0;
-                    wheel.reset();  
-                    m=0;              
+                if(Conf == 1 && ala == 4){ // Configurar alarma 3 encendido.
+                    lcd.cls();
+                    lcd.locate(0,0);
+                    lcd.printf("Config. Alarma 2");
+                    lcd.locate(0,1);
+                    lcd.printf("encendido");
+                    wait(1.5);
+                    lcd.cls();
+                    i++;
+                    m=0;
+                }
+                
+                if(Conf == 1 && ala == 5){ // Configurar alarma 2 apagado.
+                    lcd.cls();
+                    lcd.locate(0,0);
+                    lcd.printf("Config. Alarma 2");
+                    lcd.locate(0,1);
+                    lcd.printf("apagado");
+                    wait(1.5);
+                    lcd.cls();
+                    i++;
+                    m=0;
                 }
                 
-                if(Conf==0){
-                    
-                    lcd.locate(11,0);
-                    lcd.printf("-");                    
-                    lcd.locate(1,0);
-                    lcd.printf(">");
-                    lcd.locate(0,1);                    
-                    wait(0.1);
-                    
+                if(Conf == 1 && ala == 6){ // Configurar alarma 3 encendido.
+                    lcd.cls();
+                    lcd.locate(0,0);
+                    lcd.printf("Config. Alarma 3");
+                    lcd.locate(0,1);
+                    lcd.printf("encendido");
+                    wait(1.5);
+                    lcd.cls();
+                    i++;
+                    m=0;
                 }
                 
-                 if(Conf==1){
-                    
-                    lcd.locate(1,0);
-                    lcd.printf("-");                    
-                    lcd.locate(11,0);
-                    lcd.printf(">");
-                    lcd.locate(0,1);                    
-                    wait(0.1);
+                if(Conf == 1 && ala == 7){ // Configurar alarma 3 apagado.
+                    lcd.cls();
+                    lcd.locate(0,0);
+                    lcd.printf("Config. Alarma 3");
+                    lcd.locate(0,1);
+                    lcd.printf("apagado");
+                    wait(1.5);
+                    lcd.cls();
+                    i++;
+                    m=0;
+                }
+                if(Conf == 1 && ala == 8){ // Configurar alarma 4 encendido.
+                    lcd.cls();
+                    lcd.locate(0,0);
+                    lcd.printf("Config. Alarma 4");
+                    lcd.locate(0,1);
+                    lcd.printf("encendido");
+                    wait(1.5);
+                    lcd.cls();
+                    i++;
+                    m=0;
                 }
                 
-                if (button_enco.falling()){  //si se pulsa boton encoder
-                    Lugar++;
-                    m=0;       
+                if(Conf == 1 && ala == 9){ // Configurar alarma 4 apagado.
+                    lcd.cls();
+                    lcd.locate(0,0);
+                    lcd.printf("Config. Alarma 4");
+                    lcd.locate(0,1);
+                    lcd.printf("apagado");
+                    wait(1.5);
+                    lcd.cls();
+                    i++;
+                    m=0;
                 }
-            
-            break;
+            } 
             
-            case 1:
-                switch(i)
-                {
-                    case 0:
-                    
-                                              
-                        if(Conf==0)
-                        {
-                            lcd.cls();
-                            lcd.locate(0,0);
-                            lcd.printf("Config. Alarma ");
-                            wait(1);
-                            i++;
-                            m=0;
-                            lcd.cls();
-                            lcd.locate(0,0);
-                            lcd.printf("Dia: ");
-                            tm.date=1;                             
-                        }
-                
-                        if(Conf==1)
-                        {
-                            lcd.cls();
-                            lcd.locate(0,0);
-                            lcd.printf("Config. hora   ");
-                            wait(1);
-                            i++;
-                            m=0;
-                            lcd.cls();
-                            lcd.locate(0,0);
-                            lcd.printf("Dia: ");
-                            
-                        }    
-
-                    break;
-                    
-                    case 1:
-                        m=wheel.getPulses();        
-                        if (m!=0) 
-                        {
-                            tm.date=tm.date+m;
-                            if(tm.date>31)
-                            {
-                                tm.date=31;
-                            }
-                            if(tm.date<1)
-                            {
-                                tm.date=1;
-                            }
-                            
-                            wheel.reset();  
-                            m=0;
-                        }
-                        lcd.locate(5,0);
-                        lcd.printf("%02d",tm.date);
+            if (i == 1){ // Modificar Día.
+                //pc.printf("Estoy en el llenado.\n");   
+                m = wheel.getPulses();  
+                if (m!=0) {
+                    tm.date = tm.date+m; // modifica el dia, maximo en 31 y min en 1
+                    if(tm.date > 31){
+                        tm.date=1;
+                    }
+                    if(tm.date<1){
+                        tm.date=1;
+                    }
+                    wheel.reset();  
+                    m = 0;
+                }
+                lcd.locate(0,0);
+                lcd.printf("Dia: ");  
+                lcd.locate(5,0);
+                lcd.printf("%02d",tm.date);
+                if (button_enco.falling()){
+                    i++;
+                    m=0;
+                }
+            }
+                                  
+            else if (i == 2){ // Modificar Mes.
+                m = wheel.getPulses();  
+                if (m!=0) {
+                    tm.mon=tm.mon+m; 
+                    if(tm.mon>12){
+                        tm.mon=1;
+                    }
+                    if(tm.mon<1){
+                        tm.mon=1;
+                    }
+                    wheel.reset();  
+                    m=0;
+                }
+                lcd.locate(0,0);
+                lcd.printf("Mes: ");
+                lcd.locate(5,0);
+                lcd.printf("%02d",tm.mon);
+                if (button_enco.falling()){
+                    i++;
+                    m=0;   
+                }
+            }
+       
+            else if (i == 3){ // Modificar Año.
+                m = wheel.getPulses(); 
+                if (m!=0){
+                    tm.year=tm.year+m;
+                    if(tm.year>2032){
+                        tm.year=2016;
+                    }
+                    if(tm.year<2000){
+                        tm.year=2000;
+                    }
+                    wheel.reset();  
+                    m=0;
+                }
+                lcd.locate(0,0);
+                lcd.printf("Year: ");
+                lcd.locate(6,0);
+                lcd.printf("%02d",tm.year);
+                if (button_enco.falling()){
+                    i++;
+                    m = 0;
+                }
+            }
                         
-                        if (button_enco.falling())
-                        {
-                            i++;
-                            m=0;
-                            lcd.cls();
-                            lcd.locate(0,0);
-                            lcd.printf("Mes: ");
-                            //tm.mon=1;
-                        }
-                    
-                    break;
-                    
-                    case 2:
-                        m=wheel.getPulses();        
-                        if (m!=0) 
-                        {
-                            tm.mon=tm.mon+m;
-                            if(tm.mon>12)
-                            {
-                                tm.mon=12;
-                            }
-                            if(tm.mon<1)
-                            {
-                                tm.mon=1;
-                            }
+            else if (i == 4){ // Modificar Hora.
+                m = wheel.getPulses();
+                if (m!=0){
+                    tm.hour=tm.hour + m;
+                    if(tm.hour>23){
+                        tm.hour=0;
+                    }
+                    if(tm.hour<0){
+                        tm.hour=0;
+                    }
+                    wheel.reset();  
+                    m=0;
+                }
+                lcd.locate(0,0);
+                lcd.printf("Hora: ");
+                lcd.locate(6,0);
+                lcd.printf("%02d",tm.hour);
+                lcd.locate(8,0);
+                lcd.printf("  ");
+                if (button_enco.falling()){
+                    i++;
+                    m = 0;
+                }
+            }
                             
-                            wheel.reset();  
-                            m=0;
-                        }
-                        lcd.locate(5,0);
-                        lcd.printf("%02d",tm.mon);
+            else if (i == 5){ // Modificar Minuto.
+                m = wheel.getPulses();        
+                
+                if (m!=0){
+                    tm.min=tm.min+m;
+                    if(tm.min>59){
+                        tm.min=0;
+                    }
+                    if(tm.min<0){
+                        tm.min=0;
+                    }
+                    wheel.reset();  
+                    m = 0;
+                }
+                lcd.locate(0,0);
+                lcd.printf("Minuto: ");
+                lcd.locate(8,0);
+                lcd.printf("%02d",tm.min);
+                if (button_enco.falling()){
+                    i++;
+                    m = 0;
+                }
+            }
                         
-                        if (button_enco.falling())
-                        {
-                            i++;
-                            m=0;
-                            lcd.cls();
-                            lcd.locate(0,0);
-                            lcd.printf("Year: ");
-                            
-                        }
-                    
-                    break;
-                    
-                    case 3:
-                        m=wheel.getPulses();        
-                        if (m!=0) 
-                        {
-                            tm.year=tm.year+m;
-                            
-                            if(tm.year<2000)
-                            {
-                                tm.year=2000;
-                            }
-                            
-                            wheel.reset();  
-                            m=0;
-                        }
-                        lcd.locate(6,0);
-                        lcd.printf("%02d",tm.year);
-                        
-                        if (button_enco.falling())
-                        {
-                            i++;
-                            m=0;
-                            lcd.cls();
-                            lcd.locate(0,0);
-                            lcd.printf("Hora: ");
-                            
-                        }
-                    
-                    break;
+            else if (i == 6){ // Modificar Segundo.
+                m = wheel.getPulses();        
+                if (m!=0){
+                    tm.sec=tm.sec+m;
+                    if(tm.sec>59){
+                        tm.sec=0;
+                    }
+                    if(tm.sec<0){
+                        tm.sec=0;
+                    }
+                    wheel.reset();  
+                    m = 0;
+                }
+                lcd.locate(0,0);
+                lcd.printf("Segundo: ");
+                lcd.locate(9,0);
+                lcd.printf("%02d",tm.sec);
+                
+                if (button_enco.falling()){ // Empieza a asignar los datos del Reloj o las Alarmas.
+                    if(Conf == 0){ // Asignar datos del Reloj.
+                        rtc.setTime(tm, false, false);
+                        pc.printf("Actualice el Reloj.\n");  
+                        rtc.startClock();
+                        lcd.cls();
+                        lcd.locate(0,0);
+                        lcd.printf("Reloj");
+                        lcd.locate(0,1);
+                        lcd.printf("configurado");
+                        wait(1.5);
+                        i=0;
+                        m=0;
+                        Lugar = 0;
+                        lcd.cls();
+                        lcd.locate(0,0);
+                        lcd.printf("--Reloj");
+                        lcd.locate(0,1);
+                        lcd.printf("--Alarmas");      
+                        ala = 0;            
+                    } 
                     
-                     case 4:
-                        m=wheel.getPulses();
-                                
-                        if (m!=0) 
-                        {
-                            tm.hour=tm.hour + m;
-                            if(tm.hour>23)
-                            {
-                                tm.hour=23;
-                            }
-                            if(tm.hour<0)
-                            {
-                                tm.hour=0;
-                            }
-                            
-                            wheel.reset();  
-                            m=0;
-                        }
-                        lcd.locate(6,0);
-                        lcd.printf("%02d",tm.hour);
-                        
-                        if (button_enco.falling())
-                        {
-                            i++;
-                            m=0;
-                            lcd.cls();
-                            lcd.locate(0,0);
-                            lcd.printf("Minuto: ");
-                            //tm.min=0;
-                        }
-                    
-                    break;
+                    if(Conf == 1 && ala == 2){ // Asignar datos de la Alarma 1 encendido.
+                        A1on = tm; // A la alarma le pone todo eso.
+                        pc.printf("Actualice Alarma 1 on.\n");   
+                        lcd.cls();
+                        lcd.locate(0,0);
+                        lcd.printf("Alarma 1 (on)");
+                        lcd.locate(0,1);
+                        lcd.printf("configurada");
+                        wait(1.5);
+                        i=0;
+                        m=0;
+                        lcd.cls();                     
+                    }
                     
-                    case 5:
-                        m=wheel.getPulses();        
-                        if (m!=0) 
-                        {
-                            tm.min=tm.min+m;
-                            if(tm.min>59)
-                            {
-                                tm.min=59;
-                            }
-                            if(tm.min<0)
-                            {
-                                tm.min=0;
-                            }
-                            
-                            wheel.reset();  
-                            m=0;
-                        }
-                        lcd.locate(8,0);
-                        lcd.printf("%02d",tm.min);
-                        
-                        if (button_enco.falling())
-                        {
-                            i++;
-                            m=0;
-                            lcd.cls();
-                            lcd.locate(0,0);
-                            lcd.printf("Segundo: ");
-                            //tm.sec=0;
-                        }
+                    if(Conf == 1 && ala == 3){ // Asignar datos de la Alarma 1 apagado.
+                        A1off = tm; // A la alarma le pone todo eso.
+                        pc.printf("Actualice Alarma 1 off.\n"); 
+                        lcd.cls();
+                        lcd.locate(0,0);
+                        lcd.printf("Alarma 1 (off)");
+                        lcd.locate(0,1);
+                        lcd.printf("configurada");
+                        wait(1.5);
+                        i=0;
+                        m=0;
+                        lcd.cls();                      
+                    }
                     
-                    break;
-                    
+                    if(Conf == 1 && ala == 4){ // Asignar datos de la Alarma 2 encendido.
+                        A2on = tm; // A la alarma le pone todo eso.
+                        pc.printf("Actualice Alarma 2 on.\n"); 
+                        lcd.cls();
+                        lcd.locate(0,0);
+                        lcd.printf("Alarma 2 (on)");
+                        lcd.locate(0,1);
+                        lcd.printf("configurada");
+                        wait(1.5);
+                        i=0;
+                        m=0;
+                        lcd.cls();                        
+                    }
                     
-                    case 6:
-                        m=wheel.getPulses();        
-                        if (m!=0) 
-                        {
-                            tm.sec=tm.sec+m;
-                            if(tm.sec>59)
-                            {
-                                tm.sec=59;
-                            }
-                            if(tm.sec<0)
-                            {
-                                tm.sec=0;
-                            }
-                            
-                            wheel.reset();  
-                            m=0;
-                        }
-                        lcd.locate(9,0);
-                        lcd.printf("%02d",tm.sec);
-                        
-                        if (button_enco.falling())
-                        {
-                            ///////////////////
-                            if(Conf==0)
-                            {
-                                Alarm=tm;
-                                lcd.cls();
-                                lcd.locate(0,0);
-                                lcd.printf("Alarma config. ");
-                                wait(1);
-                                i=0;
-                                m=0;
-                                Lugar++;
-                                lcd.cls();
-                                                          
-                            }
-                
-                            if(Conf==1)
-                            {
-                                rtc.setTime(tm, false, false);
-                                rtc.startClock();
-                                lcd.cls();
-                                lcd.locate(0,0);
-                                lcd.printf("Hora Config.  ");
-                                wait(1);
-                                i=0;
-                                m=0;
-                                Lugar=0;
-                                lcd.locate(0,0);
-                                lcd.printf("--Alarma  --Hora");                                
-                            } 
-                           
-                           ///////////////////
-                        }
+                    if(Conf == 1 && ala == 5){ // Asignar datos de la Alarma 2 apagado.
+                        A2off = tm; // A la alarma le pone todo eso.
+                        pc.printf("Actualice Alarma 2 off.\n"); 
+                        lcd.cls();
+                        lcd.locate(0,0);
+                        lcd.printf("Alarma 2 (off)");
+                        lcd.locate(0,1);
+                        lcd.printf("configurada");
+                        wait(1.5);
+                        i=0;
+                        m=0;
+                        lcd.cls();                         
+                    }
                     
-                    break;
-                   
-                }            
-            break;
-            
-            case 2:
-            
-                rtc.getTime(tm);
-                           
-                if(visual==0)
-                {
+                    if(Conf == 1 && ala == 6){ // Asignar datos de la Alarma 3 encendido.
+                        A3on = tm; // A la alarma le pone todo eso.
+                        pc.printf("Actualice Alarma 3 on.\n"); 
+                        lcd.cls();
+                        lcd.locate(0,0);
+                        lcd.printf("Alarma 3 (on)");
+                        lcd.locate(0,1);
+                        lcd.printf("configurada");
+                        wait(1.5);
+                        i=0;
+                        m=0;
+                        lcd.cls();                       
+                    }
                     
-                    lcd.locate(0,0);                        
-                    lcd.printf("Hora:   ");
-                    lcd.locate(8,0);    
-                    lcd.printf("%02d:",tm.hour);
-                    lcd.printf("%02d:",tm.min);
-                    lcd.printf("%02d",tm.sec); 
-                       
-                    lcd.locate(0,1);
-                    lcd.printf("%02d/",tm.mon);
-                    lcd.printf("%02d/",tm.date);
-                    lcd.printf("%02d",tm.year);
-                    wait(0.1);
-                    //////////
-                    m=wheel.getPulses();
-                    if(m!=0)
-                    {
-                        visual=1;
-                        wheel.reset();  
+                    if(Conf == 1 && ala == 7){ // Asignar datos de la Alarma 3 apagado.
+                        A3off = tm; // A la alarma le pone todo eso.
+                        pc.printf("Actualice Alarma 3 off.\n"); 
+                        lcd.cls();
+                        lcd.locate(0,0);
+                        lcd.printf("Alarma 3 (off)");
+                        lcd.locate(0,1);
+                        lcd.printf("configurada");
+                        wait(1.5);
+                        i=0;
                         m=0;
+                        lcd.cls();                  
+                    }
+                    
+                    if(Conf == 1 && ala == 8){ // Asignar datos de la Alarma 4 encendido.
+                        A4on = tm; // A la alarma le pone todo eso.
+                        pc.printf("Actualice Alarma 4 on.\n"); 
+                        lcd.cls();
+                        lcd.locate(0,0);
+                        lcd.printf("Alarma 4 (on)");
+                        lcd.locate(0,1);
+                        lcd.printf("configurada");
+                        wait(1.5);
+                        i=0;
+                        m=0;
+                        lcd.cls();                       
                     }
                     
-                    //////
-                
-                }
-                
-                if(visual==1)
-                {
-                    lcd.locate(0,0);    
-                    lcd.printf("Alarma: ");
-                    lcd.locate(8,0);    
-                    lcd.printf("%02d:",Alarm.hour);
-                    lcd.printf("%02d:",Alarm.min);
-                    lcd.printf("%02d",Alarm.sec);
-                    
-                        
-                    lcd.locate(0,1);
-                    lcd.printf("%02d/",Alarm.mon);
-                    lcd.printf("%02d/",Alarm.date);
-                    lcd.printf("%02d",Alarm.year);
-                    wait(0.1);
-                    ////
-                    m=wheel.getPulses();
-                    if(m!=0)
-                    {                        
-                        visual=0;
-                        wheel.reset();  
-                        m=0;                                       
-                    }
-                    
-                    ////
-                }
-                
-                if( (tm.date==Alarm.date)&&(tm.mon==Alarm.mon)&&(tm.year==Alarm.year)&&(tm.hour==Alarm.hour)&&(tm.min==Alarm.min)&&(tm.sec==Alarm.sec) )
-                {
-                    Lugar++;
-                    lcd.cls();
-                    lcd.locate(0,0);                        
-                    lcd.printf("Alarma Activa!!!");
-                    wait(1);
-                    lcd.locate(0,0);
-                    lcd.printf("->Desactivar    ");                       
-                    lcd.locate(0,1);                        
-                    lcd.printf("--Aplazar       ");
-                    m=0;
-                }
-                 
-            break;
-            
-            case 3:
-                
-                if(alarma==0)
-                {
-                    Sonido.write(0.5);
-                    wait(0.2);
-                    Sonido.write(0);
-                    wait(0.2);
-                    Sonido.write(0.5);
-                    wait(0.2);
-                    Sonido.write(0);
-                    wait(0.2);
-                    
-                    m=wheel.getPulses();
-                    if(m!=0)
-                    {                        
-                        alarma=1;
-                        m=0;
-                        wheel.reset();
-                        
-                        lcd.locate(1,0);
-                        lcd.printf("-");                    
-                        lcd.locate(1,1);
-                        lcd.printf(">");                                          
-                    }
-                }
-                          
-                ///////////////////
-                
-                if(alarma==1)
-                {
-                    Sonido.write(0.5);
-                    wait(0.2);
-                    Sonido.write(0);
-                    wait(0.2);
-                    Sonido.write(0.5);
-                    wait(0.2);
-                    Sonido.write(0);
-                    wait(0.2);
-                    
-                    m=wheel.getPulses();
-                    if(m!=0)
-                    {                        
-                        alarma=0;
-                        m=0;
-                        wheel.reset();
-                        
-                        lcd.locate(1,0);
-                        lcd.printf(">");                    
-                        lcd.locate(1,1);
-                        lcd.printf("-");                                          
-                    }
-                }
-                
-                if (button_enco.falling())
-                {
-                    if(alarma==0)
-                    {
-                        Lugar=0;
-                        wheel.reset();
-                        m=0;
-                        Sonido.write(0);
+                    if(Conf == 1 && ala == 9){ // Asignar datos de la Alarma 4 apagado.
+                        A4off = tm; // A la alarma le pone todo eso.
+                        pc.printf("Actualice Alarma 4 off.\n"); 
                         lcd.cls();
                         lcd.locate(0,0);
-                        lcd.printf("--Alarma  --Hora");
-                        
+                        lcd.printf("Alarma 4 (off)");
+                        lcd.locate(0,1);
+                        lcd.printf("configurada");
+                        wait(1.5);
+                        i=0;
+                        m=0;
+                        lcd.cls();   
+                        Lugar++;             
                     }
-                    if(alarma==1)
-                    {
-                        Lugar=2;
-                        rtc.getTime(tm);
-                        if(tm.min!=58)
-                        {
-                            Alarm.min=tm.min+1;
-                        }
-                        if(tm.min==59)
-                        {
-                            Alarm.min=0;
-                            Alarm.hour=tm.hour+1;
-                        }
-                        Alarm.sec=tm.sec;
-                        lcd.cls();
-                        alarma=0;
-                        
-                    }
-                    
+                    ala++;
+                } // Cierre de if de mensaje de configuración.
+            } // Cierre de if de i == 6
+        } // Cierre de if de Lugar == 1
+    
+        // Etapa de comparación e impresión.
+        else if (Lugar == 2){ // La visualización del los tiempos de las alarmas y el reloj varían si se manipula en encoder.
+            rtc.getTime(tm);
+            if(visual == 0){ // Imprime el Reloj.
+                lcd.locate(0,0);                        
+                lcd.printf("Hora:   ");
+                lcd.locate(8,0);    
+                lcd.printf("%02d:",tm.hour);
+                lcd.printf("%02d:",tm.min);
+                lcd.printf("%02d",tm.sec); 
+                lcd.locate(0,1);
+                lcd.printf("%02d/",tm.mon);
+                lcd.printf("%02d/",tm.date);
+                lcd.printf("%02d",tm.year);
+                wait(0.1);
+                m = wheel.getPulses();
+                if(m!=0){
+                    visual++;
+                    wheel.reset();  
+                    m = 0;
+                }
+            }
+            
+            if(visual == 1){ // Imprime la alarma 1 encendido.
+                lcd.locate(0,0);    
+                lcd.printf("A1 on:  ");
+                lcd.locate(8,0);    
+                lcd.printf("%02d:",A1on.hour);
+                lcd.printf("%02d:",A1on.min);
+                lcd.printf("%02d",A1on.sec);
+                lcd.locate(0,1);
+                lcd.printf("%02d/",A1on.mon);
+                lcd.printf("%02d/",A1on.date);
+                lcd.printf("%02d",A1on.year);
+                wait(0.1);
+                m = wheel.getPulses();
+                if(m!=0){                        
+                    visual++;
+                    wheel.reset();  
+                    m=0;                                       
+                }
+            }
+            
+            if(visual == 2){ // Imprime la alarma 1 apagado.
+                lcd.locate(0,0);    
+                lcd.printf("A1 off: ");
+                lcd.locate(8,0);    
+                lcd.printf("%02d:",A1off.hour);
+                lcd.printf("%02d:",A1off.min);
+                lcd.printf("%02d",A1off.sec);
+                lcd.locate(0,1);
+                lcd.printf("%02d/",A1off.mon);
+                lcd.printf("%02d/",A1off.date);
+                lcd.printf("%02d",A1off.year);
+                wait(0.1);
+                m = wheel.getPulses();
+                if(m!=0){                        
+                    visual++;
+                    wheel.reset();  
+                    m=0;                                       
+                }
+            }
+            
+            if(visual == 3){ // Imprime la alarma 2 encendido.
+                lcd.locate(0,0);    
+                lcd.printf("A2 on:  ");
+                lcd.locate(8,0);    
+                lcd.printf("%02d:",A2on.hour);
+                lcd.printf("%02d:",A2on.min);
+                lcd.printf("%02d",A2on.sec);
+                lcd.locate(0,1);
+                lcd.printf("%02d/",A2on.mon);
+                lcd.printf("%02d/",A2on.date);
+                lcd.printf("%02d",A2on.year);
+                wait(0.1);
+                m = wheel.getPulses();
+                if(m!=0){                        
+                    visual++;
+                    wheel.reset();  
+                    m=0;                                       
+                }
+            }
+            
+            if(visual == 4){ // Imprime la alarma 2 apagado.
+                lcd.locate(0,0);    
+                lcd.printf("A2 off: ");
+                lcd.locate(8,0);    
+                lcd.printf("%02d:",A2off.hour);
+                lcd.printf("%02d:",A2off.min);
+                lcd.printf("%02d",A2off.sec);
+                lcd.locate(0,1);
+                lcd.printf("%02d/",A2off.mon);
+                lcd.printf("%02d/",A2off.date);
+                lcd.printf("%02d",A2off.year);
+                wait(0.1);
+                m = wheel.getPulses();
+                if(m!=0){                        
+                    visual++;
+                    wheel.reset();  
+                    m=0;                                       
+                }
+            }
+            
+            if(visual == 5){ // Imprime la alarma 3 encendido.
+                lcd.locate(0,0);    
+                lcd.printf("A3 on:  ");
+                lcd.locate(8,0);    
+                lcd.printf("%02d:",A3on.hour);
+                lcd.printf("%02d:",A3on.min);
+                lcd.printf("%02d",A3on.sec);
+                lcd.locate(0,1);
+                lcd.printf("%02d/",A3on.mon);
+                lcd.printf("%02d/",A3on.date);
+                lcd.printf("%02d",A3on.year);
+                wait(0.1);
+                m = wheel.getPulses();
+                if(m!=0){                        
+                    visual++;
+                    wheel.reset();  
+                    m=0;                                       
+                }
+            }
+            
+            if(visual == 6){ // Imprime la alarma 3 apagado.
+                lcd.locate(0,0);    
+                lcd.printf("A3 off: ");
+                lcd.locate(8,0);    
+                lcd.printf("%02d:",A3off.hour);
+                lcd.printf("%02d:",A3off.min);
+                lcd.printf("%02d",A3off.sec);
+                lcd.locate(0,1);
+                lcd.printf("%02d/",A3off.mon);
+                lcd.printf("%02d/",A3off.date);
+                lcd.printf("%02d",A3off.year);
+                wait(0.1);
+                m = wheel.getPulses();
+                if(m!=0){                        
+                    visual++;
+                    wheel.reset();  
+                    m=0;                                       
                 }
-                
+            }
+            
+            if(visual == 7){ // Imprime la alarma 4 encendido.
+                lcd.locate(0,0);    
+                lcd.printf("A4 on:  ");
+                lcd.locate(8,0);    
+                lcd.printf("%02d:",A4on.hour);
+                lcd.printf("%02d:",A4on.min);
+                lcd.printf("%02d",A4on.sec);
+                lcd.locate(0,1);
+                lcd.printf("%02d/",A4on.mon);
+                lcd.printf("%02d/",A4on.date);
+                lcd.printf("%02d",A4on.year);
+                wait(0.1);
+                m = wheel.getPulses();
+                if(m!=0){                        
+                    visual++;
+                    wheel.reset();  
+                    m=0;                                       
+                }
+            }
+            
+            if(visual == 8){ // Imprime la alarma 4 apagado.
+                lcd.locate(0,0);    
+                lcd.printf("A4 off: ");
+                lcd.locate(8,0);    
+                lcd.printf("%02d:",A4off.hour);
+                lcd.printf("%02d:",A4off.min);
+                lcd.printf("%02d",A4off.sec);
+                lcd.locate(0,1);
+                lcd.printf("%02d/",A4off.mon);
+                lcd.printf("%02d/",A4off.date);
+                lcd.printf("%02d",A4off.year);
+                wait(0.1);
+                m = wheel.getPulses();
+                if(m!=0){                        
+                    visual = 0;
+                    wheel.reset();  
+                    m=0;                                       
+                }
+            }
+            
+            // Compara el Reloj con la alarma 1 encendido.
+            if( (tm.date==A1on.date)&&(tm.mon==A1on.mon)&&(tm.year==A1on.year)&&(tm.hour==A1on.hour)&&(tm.min==A1on.min)&&(tm.sec==A1on.sec) ){
+                ALED1 = 1; // Prende el LED 1.
+                a1 = 1;
+                lcd.cls();
+                lcd.locate(0,0);                        
+                lcd.printf("Alarma 1");
+                lcd.locate(0,1);                        
+                lcd.printf("activada!");
+                wait(2);
+                lcd.cls();
+                visual = 0;
+                m = 0;
+            }
+            
+            // Compara el Reloj con la alarma 1 apagado.
+            if( (tm.date == A1off.date)&&(tm.mon == A1off.mon)&&(tm.year == A1off.year)&&(tm.hour == A1off.hour)&&(tm.min == A1off.min)&&(tm.sec == A1off.sec)&&(a1 == 1)){
+                ALED1 = 0; // Apaga el LED 1.
+                a1 = 0;
+                //Lugar++;
+                lcd.cls();
+                lcd.locate(0,0);                        
+                lcd.printf("Alarma 1");
+                lcd.locate(0,1);                        
+                lcd.printf("desactivada");
+                wait(2);
+                lcd.cls();
+                visual = 0;
+                m = 0;
+                cont++;
+            }
+            
+            // Compara el Reloj con la alarma 2 encendido.
+            if( (tm.date == A2on.date)&&(tm.mon == A2on.mon)&&(tm.year == A2on.year)&&(tm.hour == A2on.hour)&&(tm.min == A2on.min)&&(tm.sec == A2on.sec)){
+                ALED2= 2; // Prende el LED 2.
+                a2 = 1;
+                lcd.cls();
+                lcd.locate(0,0);                        
+                lcd.printf("Alarma 2");
+                lcd.locate(0,1);                        
+                lcd.printf("activada!");
+                wait(2);
+                lcd.cls();
+                visual = 0;
+                m = 0;
+            }
             
-            break;
-        }             
-    }       
-}
\ No newline at end of file
+            // Compara el Reloj con la alarma 2 apagado.
+            if( (tm.date == A2off.date)&&(tm.mon == A2off.mon)&&(tm.year == A2off.year)&&(tm.hour == A2off.hour)&&(tm.min == A2off.min)&&(tm.sec == A2off.sec)&&(a2 == 1)){
+                ALED2 = 0; // Apaga el LED 2.
+                a2 = 0;
+                lcd.cls();
+                lcd.locate(0,0);                        
+                lcd.printf("Alarma 2");
+                lcd.locate(0,1);                        
+                lcd.printf("desactivada");
+                wait(2);
+                lcd.cls();
+                visual = 0;
+                m = 0;
+                cont++;
+            }
+            
+            // Compara el Reloj con la alarma 3 encendido.
+            if( (tm.date == A3on.date)&&(tm.mon == A3on.mon)&&(tm.year == A3on.year)&&(tm.hour == A3on.hour)&&(tm.min == A3on.min)&&(tm.sec == A3on.sec)){
+                ALED3 = 1; // Prende el LED 3.
+                a3 = 1;
+                lcd.cls();
+                lcd.locate(0,0);                        
+                lcd.printf("Alarma 3");
+                lcd.locate(0,1);                        
+                lcd.printf("activada!");
+                wait(2);
+                lcd.cls();
+                visual = 0;
+                m = 0;
+            }
+            
+            // Compara el Reloj con la alarma 3 apagado.
+            if( (tm.date == A3off.date)&&(tm.mon == A3off.mon)&&(tm.year == A3off.year)&&(tm.hour == A3off.hour)&&(tm.min == A3off.min)&&(tm.sec == A3off.sec)&&(a3 == 1)){
+                ALED3 = 0; // Apaga el LED 3.
+                a3 = 0;
+                lcd.cls();
+                lcd.locate(0,0);                        
+                lcd.printf("Alarma 3");
+                lcd.locate(0,1);                        
+                lcd.printf("desactivada");
+                wait(2);
+                lcd.cls();
+                visual = 0;
+                m = 0;
+                cont++;
+            }
+            
+            // Compara el Reloj con la alarma 4 encendido.
+            if( (tm.date == A4on.date)&&(tm.mon == A4on.mon)&&(tm.year == A4on.year)&&(tm.hour == A4on.hour)&&(tm.min == A4on.min)&&(tm.sec == A4on.sec)){
+                ALED4 = 1; // Prende el LED 4.
+                a4 = 1;
+                lcd.cls();
+                lcd.locate(0,0);                        
+                lcd.printf("Alarma 4");
+                lcd.locate(0,1);                        
+                lcd.printf("activada!");
+                wait(2);
+                lcd.cls();
+                visual = 0;
+                m = 0;
+            }
+            
+            // Compara el Reloj con la alarma 4 apagado.
+            if( (tm.date == A4off.date)&&(tm.mon == A4off.mon)&&(tm.year == A4off.year)&&(tm.hour == A4off.hour)&&(tm.min == A4off.min)&&(tm.sec == A4off.sec)&&(a4 == 1)){
+                ALED4 = 0; // Apaga el LED 4.
+                a4 = 0;
+                lcd.cls();
+                lcd.locate(0,0);                        
+                lcd.printf("Alarma 4");
+                lcd.locate(0,1);                        
+                lcd.printf("desactivada");
+                wait(2);
+                lcd.cls();
+                visual = 0;
+                m = 0;
+                cont++;
+            }
+            
+            if(cont == 4){ // Cuando se cumplen todas las Alarmas se regresa al menú principal.
+                Lugar = 0;
+                lcd.cls();
+                lcd.locate(0,0);
+                lcd.printf("--Reloj"); // Sin flechitas.
+                lcd.locate(0,1);
+                lcd.printf("--Alarmas");
+                m = 0;
+            }
+        }
+    }             
+} 
\ No newline at end of file