Reloj con alarma programado por enconder. Luna es gay

Dependencies:   mbed QEI Debounced ds3231 TextLCD RTC-DS1307 Pulse1

Revision:
0:fd394f5c0449
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Aug 13 19:25:23 2019 +0000
@@ -0,0 +1,561 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include "mbed.h"
+#include "DebouncedIn.h"
+#include "TextLCD.h"
+#include "QEI.h"
+#include "ds3231.h"
+#include "Rtc_Ds1307.h"
+#include "string.h"
+#include <Pulse1.h>
+#define ESC 0x1B
+
+/////////////////////////////////     LIB LCD
+TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7 
+// Se debe conectar Vss a GND; VDD a 5V; V0 a pot con otro lado conectado a GND
+// El puerto A va hacia una resistencia de 200 hom a 5 V
+// EL puerto K va a GND 
+
+Serial pc(USBTX, USBRX); 
+/////////////////////////////////   LIB RELOJ 3231
+//Ds3231 rtc(PTE0, PTE1); // SDA SCL
+
+Rtc_Ds1307 rtc(PTE0, PTE1);//SCL,SDA
+Rtc_Ds1307::Time_rtc tm = {};
+time_t epoch_time;
+/////////////////////////////////   LIB Encoder
+
+QEI wheel (PTD7, PTD6, NC, 50);
+DebouncedIn button_enco(PTC5);
+int EncoderInput;
+int EncoderBoton;
+//////////////////////////////////     Sensor IRDA  
+PulseInOut irda(PTD5);// en este puerto se pone el sensor infrarrojo
+BusOut leds(LED1,LED2,LED3);
+int IRDAInput;
+int IRDAOpcion;
+/////////////////////////////////////////// Declarar Variables globales 
+int OpcionMenu;
+
+
+void ImprimirHora(){
+                    int Hora=0;
+                    while(Hora==0){
+                    lcd.cls();
+                    Rtc_Ds1307::Time_rtc tm = {};
+                    rtc.getTime(tm);
+                    lcd.locate(0,0);                        
+                    lcd.printf("Hora :");
+                    lcd.locate(7,0);    
+                    lcd.printf("%02d:",tm.hour);
+                    lcd.printf("%02d:",tm.min);
+                    lcd.printf("%02d",tm.sec); 
+                    lcd.locate(0,1);
+                    lcd.printf("BY Procesadores ");
+                    wait_ms(100);
+                        if(button_enco.falling()){
+                            Hora=1;
+                            }
+                    //epoch_time = rtc.get_epoch();
+                    //lcd.cls();
+                    //lcd.locate(0,0);
+                    //lcd.printf(" CLK %s", ctime(&epoch_time));
+                    }
+}
+
+
+int LeerEncoder(){
+        wheel.reset();
+        int Valor=0;
+        while(Valor==0){
+            EncoderInput=wheel.getPulses();
+            lcd.cls();
+            lcd.locate(0,0);
+            lcd.printf("Leyendo Encoder");
+            lcd.locate(0,5);
+            lcd.printf("Val : %i",wheel.getPulses());
+            if(button_enco.falling()){
+                EncoderBoton=1;
+                EncoderInput=wheel.getPulses();
+                pc.printf("Boton %i\n", wheel.getPulses());
+                Valor=1;
+                }
+           wait_ms(50);
+        }
+        return EncoderInput;
+    }
+
+void LeerIRDA(){        
+        ////////////////////////  Declaro Variables
+                
+        int header =0; //tiempo de cabecera pulso abajo
+        const int head_H = 10884; //+20% medida con osciloscopio en microsegundos
+        const int head_L = 7256;//-20%  medida con osciloscopio
+        int i=0;
+        const int T_alto=1570;//ponga su tiempo de la prueba
+        const int T_bajo=467;//ponga su tiempo de la prueba
+        const int num_bits = 32;//ponga su numero de bits
+        int num[num_bits];//cadena para almacenar todos los tiempos que conforman los bits de datos
+        int sec[num_bits];//cadena para almacenar la cadena codificada en binario           00100000110111111000100001110111
+        int boton1[]= {0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,1,0,1,1,0};    //00100000110111111000100001110110  Boton 1
+        int boton2[]= {0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,0,1,0,1,1,0,1,1,0};    //00100000110111110100100010110110  Boton 2
+        int boton3[]= {0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0,1,1,0,1,1,0};    //00100000110111111100100000110110  Boton 3
+        int boton4[]= {0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,0,0,1,0,1,0,0,0,1,1,0,1,0,1,1,0};    //00100000110111110010100011010110  Boton 4
+        int boton5[]= {0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,1,0,1,0,0,0,0,1,0,1,0,1,1,0};    //00100000110111111010100001010110  Boton 5
+        int boton6[]= {0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,0,1,1,0,1,0,0,0,1,0,0,1,0,1,1,0};    //00100000110111110110100010010110  Boton 6
+        int boton7[]= {0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,0};    //00100000110111111110100000010110  Boton 7
+        int boton8[]= {0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,0};    //00100000110111110001100011100110  Boton 8
+        int boton9[]= {0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0};    //00100000110111111001100001100110  Boton 9
+        int boton0[]= {0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,0,0,1,1,1,1,0,1,1,0};    //00100000110111110000100011110110  Boton 0
+        int botonEnt[]= {0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,0,1,1,1,0,0};    //00100000110111110010001011011100  Boton Ent
+        int botonIzq[]= {0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,0};    //00100000110111111110000000011110  Boton Izq
+        int botonDer[]= {0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,0,0,1,1,1,1,0};    //00100000110111110110000010011110  Boton Der
+        
+        
+        int flag1,flag2,flag3,flag4,flag5,flag6,flag7,flag8,flag9,flag0,flagEnt,flagIzq,flagDer; //Banderas de boton presionado
+        int dato; // tiempo de cada dato que se lee
+        int LeerIRDA=1;
+        ////////////////////////////////////////////////////////   Funcion leer datos IRDA
+        
+        
+    leds = 1; // Color en LED Azul
+        
+        lcd.locate(0,0);
+    while(LeerIRDA==1)
+    {
+ini1:
+        pc.printf("Esperando entrada control remoto: \n");
+        header=0;
+        header = irda.read_low_us();    //funcion para leer un pulso de caida o bajo
+        if (header > head_L && header < head_H) goto seguir;//verificar que este en la tolerancia +-20%
+        else goto ini1;
+ 
+seguir:
+        //leo los datos de la trama y se meten a un arreglo
+        wait_us(2000);
+        for(i=0; i<(num_bits-1); ++i) // POR OSCILOSCOPIO se determina que llegan (num_bits),datos
+        {
+            dato = irda.read_high_us(); //leer un bit de datos que es pulso arriba en este control
+            num[i]=dato;
+            wait_us(332);
+        }
+        //wait(0.5); //espero un poquito antes de leer todo el arreglo y ponerlo en pantalla
+        pc.printf(",%d",header);
+        for(i=0; i<num_bits; ++i)
+        {
+            pc.printf(",%d",num[i]);
+        }
+        //wait(0.1);  //espero e imprimo en binario
+        pc.printf("\n\n");
+        for(i=0; i<num_bits; ++i)
+        {
+            if(num[i] > ((T_alto+T_bajo)/2))
+            {
+                pc.printf("1");
+                sec[i]=1; // guardo la secuancia en binario
+            }
+            else
+            {
+                sec[i]=0; //guardo la secuencia en binario
+                pc.printf("0");
+            }
+        }
+ 
+        flag1=1;flag4=1;flag7=1;flag0=1;flagDer=1;
+        flag2=1;flag5=1;flag8=1;flagEnt=1;
+        flag3=1;flag6=1;flag9=1;flagIzq=1;
+        
+        for(i=0; i<32; ++i)
+        {
+            if(sec[i]!=boton1[i]) //en caso de que un bit no coincida se descarta el boton 1
+            {
+                //pc.printf("NO   Presionaste 1");
+                flag1=0;
+            }
+            if(sec[i]!=boton2[i]) //en caso de que un bit no coincida se descarta el boton 2
+            {
+                //pc.printf("NO   Presionaste 2");
+                flag2=0;
+            }
+            if(sec[i]!=boton3[i]) //en caso de que un bit no coincida se descarta el boton 3
+            {
+                //pc.printf("NO   Presionaste 3");
+                flag3=0;
+            }
+            if(sec[i]!=boton4[i]) //en caso de que un bit no coincida se descarta el boton 3
+            {
+                //pc.printf("NO   Presionaste 3");
+                flag4=0;
+            }
+            if(sec[i]!=boton5[i]) //en caso de que un bit no coincida se descarta el boton 3
+            {
+                //pc.printf("NO   Presionaste 3");
+                flag5=0;
+            }
+            if(sec[i]!=boton6[i]) //en caso de que un bit no coincida se descarta el boton 3
+            {
+                //pc.printf("NO   Presionaste 3");
+                flag6=0;
+            }
+            if(sec[i]!=boton7[i]) //en caso de que un bit no coincida se descarta el boton 3
+            {
+                //pc.printf("NO   Presionaste 3");
+                flag7=0;
+            }
+            if(sec[i]!=boton8[i]) //en caso de que un bit no coincida se descarta el boton 3
+            {
+                //pc.printf("NO   Presionaste 3");
+                flag8=0;
+            }
+            if(sec[i]!=boton9[i]) //en caso de que un bit no coincida se descarta el boton 3
+            {
+                //pc.printf("NO   Presionaste 3");
+                flag9=0;
+            }
+            if(sec[i]!=boton0[i]) //en caso de que un bit no coincida se descarta el boton 3
+            {
+                //pc.printf("NO   Presionaste 3");
+                flag0=0;
+            }
+            if(sec[i]!=botonEnt[i]) //en caso de que un bit no coincida se descarta el boton 3
+            {
+                //pc.printf("NO   Presionaste 3");
+                flagEnt=0;
+            }
+            if(sec[i]!=botonIzq[i]) //en caso de que un bit no coincida se descarta el boton 3
+            {
+                //pc.printf("NO   Presionaste 3");
+                flagIzq=0;
+            }
+            if(sec[i]!=botonDer[i]) //en caso de que un bit no coincida se descarta el boton 3
+            {
+                //pc.printf("NO   Presionaste 3");
+                flagDer=0;
+            }
+        }
+        if(flag1==1)
+        {
+            
+            lcd.printf("\n Presionaste 1 \n"); //si coincidieron todos los bits del boton 1
+            leds = 2; // Led Color Rosa 
+            IRDAInput=1;
+            LeerIRDA=0;
+        }
+        else if(flag2==1)
+        {
+            leds=2; // Led Color Amarillo
+            lcd.printf("\n Presionaste 2 \n"); //si coincidieron todos los bits del boton 1
+            IRDAInput=2;
+            LeerIRDA=0;
+        }
+        else if(flag3==1)
+        {
+            leds=2; // Led Color Verde 
+            lcd.printf("\n Presionaste 3 \n"); //si coincidieron todos los bits del boton 1
+            IRDAInput=3;
+            LeerIRDA=0;
+        }
+        else if(flag4==1)
+        {
+            leds=2; // Led Color Verde 
+            lcd.printf("\n Presionaste 4 \n"); //si coincidieron todos los bits del boton 1
+            IRDAInput=4;
+            LeerIRDA=0;
+        }
+        else if(flag5==1)
+        {
+            leds=2; // Led Color Verde 
+            lcd.printf("\n Presionaste 5 \n"); //si coincidieron todos los bits del boton 1
+            IRDAInput=5;
+            LeerIRDA=0;
+        }
+        else if(flag6==1)
+        {
+            leds=2; // Led Color Verde 
+            lcd.printf("\n Presionaste 6 \n"); //si coincidieron todos los bits del boton 1
+            IRDAInput=6;
+            LeerIRDA=0;
+        }
+        else if(flag7==1)
+        {
+            leds=2; // Led Color Verde 
+            lcd.printf("\n Presionaste 7 \n"); //si coincidieron todos los bits del boton 1
+            IRDAInput=7;
+            LeerIRDA=0;
+        }
+        else if(flag8==1)
+        {
+            leds=2; // Led Color Verde 
+            lcd.printf("\n Presionaste 8 \n"); //si coincidieron todos los bits del boton 1
+            IRDAInput=8;
+            LeerIRDA=0;
+        }
+        else if(flag9==1)
+        {
+            leds=2; // Led Color Verde 
+            lcd.printf("\n Presionaste 9 \n"); //si coincidieron todos los bits del boton 1
+            IRDAInput=9;
+            LeerIRDA=0;
+        }
+        else if(flag0==1)
+        {
+            leds=2; // Led Color Verde 
+            lcd.printf("\n Presionaste 0 \n"); //si coincidieron todos los bits del boton 1
+            IRDAInput=0;
+            LeerIRDA=0;
+        }
+        else if(flagEnt==1)
+        {
+            leds=5; // Led Color Verde 
+            lcd.printf("\n Presionaste Ent \n"); //si coincidieron todos los bits del boton 1
+            IRDAInput=3;
+            LeerIRDA=0;
+        }else if(flagIzq==1)
+        {
+            leds=5; // Led Color Verde 
+            lcd.printf("\n Presionaste Izq \n"); //si coincidieron todos los bits del boton 1
+            IRDAInput=3;
+            LeerIRDA=0;
+        }
+        else if(flagDer==1)
+        {
+            leds=5; 
+            lcd.printf("\n Presionaste Der \n"); //si coincidieron todos los bits del boton 1
+            IRDAInput=3;
+            LeerIRDA=0;
+        }
+        else
+        {
+            leds=8; // Led Color Blanco 
+            lcd.printf("boton no reconocido"); //si coincidieron todos los bits del boton 1
+            IRDAInput=4;
+            LeerIRDA=0;
+        }
+    }
+    wait_ms(1000);
+    }    
+    
+    
+void Menu(){
+    lcd.cls();
+    lcd.locate(0,0);
+    lcd.printf("1_Hora");
+    lcd.locate(8,0);
+    lcd.printf("3_Alarma");
+    lcd.locate(0,1);
+    lcd.printf("2_Config Hora");
+
+    wait_ms(1000);
+    }    
+    
+    //////////////////////////////////////// Configurar Reloj /////////////////
+void ConfiReloj(){  
+            Rtc_Ds1307::Time_rtc tm = {};
+            //;config = 0,config = 0,config = 0,ano = 2019,hora = 0, min = 0,
+            int configR = 0, cont = 1, set = 0;
+            int estado = 1;
+            leds=2;
+            wait(0.2);
+while(estado == 1){
+            if(configR == 0) {
+                lcd.cls();
+                lcd.locate(0,0);
+                lcd.printf("Configurar reloj");
+                set = set + wheel.getPulses();
+                pc.printf("%i",set);
+                wheel.reset();
+                if(set > 1) {
+                    set = 0;
+                }
+                if(set < 0) {
+                    set = 1;
+                }
+                lcd.locate(0, 1);
+                if(set == 0) {
+                    lcd.printf("       NO       ");
+                    //wait_ms(10);
+                    
+                } else if(set == 1) {
+                    lcd.printf("       SI       ");
+                    //wait_ms(10);
+                }
+                if(button_enco.falling()){
+                    if(set==1){
+                        configR=1;
+                    }else if(set!=1){
+                        configR=0;
+                        estado=0;
+                        }
+            }
+            }
+            if(configR == 1) {
+                cont = cont + wheel.getPulses();
+                wheel.reset();
+                if(cont > 31) {
+                    cont = 1;
+                }
+                if(cont < 1) {
+                    cont = 31;
+                }
+                lcd.locate(0, 1);
+                lcd.printf("Dia: %02d        ", cont);
+                tm.date = cont;
+                if(button_enco.falling()){
+                    
+                    configR=2;
+                    }
+            }
+            if(configR == 2) {
+                cont = cont + wheel.getPulses();
+                wheel.reset();
+                if(cont > 12) {
+                    cont = 1;
+                }
+                if(cont < 1) {
+                    cont = 12;
+                }
+                lcd.locate(0, 1);
+                lcd.printf("Mes: %02d        ", cont);
+                
+                if(button_enco.falling()){
+                    tm.mon = cont;    
+                    configR = 3;
+                    }
+            }
+            if(configR == 3) {
+                cont = cont + wheel.getPulses();
+                wheel.reset();
+                if(cont > 3000) {
+                    cont = 2016;
+                }
+                if(cont < 2016) {
+                    cont = 2016;
+                }
+                lcd.locate(0, 1);
+                lcd.printf("Anno: %02d    ", cont);
+                
+                if(button_enco.falling()){
+                    tm.year = cont;    
+                    configR = 4;
+                    }
+            }
+            if(configR == 4) {
+                cont = cont + wheel.getPulses();
+                wheel.reset();
+                if(cont > 7) {
+                    cont = 1;
+                }
+                if(cont < 1) {
+                    cont = 7;
+                }
+                lcd.locate(0, 1);
+                lcd.printf("Dia semana: %1d", cont);
+                //tm.wday = cont;
+                
+                if(button_enco.falling()){
+                    tm.wday = cont;    
+                    configR = 5;
+                    }
+            }
+            if(configR == 5) {
+                cont = cont + wheel.getPulses();
+                wheel.reset();
+                if(cont > 23) {
+                    cont = 0;
+                }
+                if(cont < 0) {
+                    cont = 23;
+                }
+                lcd.locate(0, 1);
+                lcd.printf("Hora: %02d       ", cont);
+                //tm.hour = cont;
+                if(button_enco.falling()){
+                    tm.hour = cont;    
+                    configR = 6;
+                    }
+            }
+            if(configR == 6) {
+                cont = cont + wheel.getPulses();
+                wheel.reset();
+                if(cont > 59) {
+                    cont = 0;
+                }
+                if(cont < 0) {
+                    cont = 59;
+                }
+                lcd.locate(0, 1);
+                lcd.printf("Minutos: %02d  ", cont);
+                //tm.min = cont;
+                if(button_enco.falling()){
+                    tm.min = cont;    
+                    configR = 7;
+                    }
+            }
+            if(configR == 7) {
+                cont = cont + wheel.getPulses();
+                wheel.reset();
+                if(cont > 59) {
+                    cont = 0;
+                }
+                if(cont < 0) {
+                    cont = 59;
+                }
+                lcd.locate(0, 1);
+                lcd.printf("Segundos: %02d  ", cont);
+                tm.sec = cont;
+                if(button_enco.falling()){
+                    tm.sec = cont;    
+                    configR = 8;
+                    }
+            }
+            if(configR == 8) {
+                lcd.locate(0, 1);
+                lcd.printf("  Establecido   ");
+                rtc.setTime(tm, false, false);
+                rtc.startClock();
+                //estado = 0;
+                configR = 0;
+                estado=0;
+                wait(2);
+            }
+        }
+        }
+    
+    
+int main(){
+    while(1) {
+        pc.printf("Corriendo ...\n");
+
+        Menu();
+        wait_ms(1000);
+        OpcionMenu = LeerEncoder();
+        pc.printf("%i",OpcionMenu);
+        switch(OpcionMenu){
+            //pc.printf("%i",OpcionMenu);
+            case 1:
+                // 1 HORA
+                ImprimirHora();
+            case 2:
+                //Configurar hora
+                ConfiReloj();
+                break;
+            case 3:
+                // Alarmas
+                 break;
+            case 4:
+                lcd.cls();
+                lcd.locate(0,0);
+                lcd.printf("Esperando trama");
+                lcd.locate(0,1);
+                lcd.printf("control remoto");
+                LeerIRDA();
+                break;
+        }        
+        //ImprimirHora();
+        wait_ms(500);
+        //LeerEncoder();
+        //wait_ms(50);
+        //LeerIRDA();
+    }
+}