Reloj con programacion de alarmas con control remoto

Dependencies:   Debounced Pulse1 QEI RTC-DS1307 TextLCD mbed

/media/uploads/EstebanLage/whatsapp_image_2018-06-02_at_10.50.16_am.jpeg

Files at this revision

API Documentation at this revision

Comitter:
EstebanLage
Date:
Sat Jun 02 15:54:16 2018 +0000
Commit message:
Tarea3

Changed in this revision

2main.cpp Show annotated file Show diff for this revision Revisions of this file
Debounced.lib Show annotated file Show diff for this revision Revisions of this file
Main.cpp Show annotated file Show diff for this revision Revisions of this file
Pulse1.lib Show annotated file Show diff for this revision Revisions of this file
QEI.lib Show annotated file Show diff for this revision Revisions of this file
RTC-DS1307.lib Show annotated file Show diff for this revision Revisions of this file
TextLCD.lib Show annotated file Show diff for this revision Revisions of this file
debug.h Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Debounced.lib	Sat Jun 02 15:54:16 2018 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/WarwickRacing/code/Debounced/#8992c13bbb9b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Main.cpp	Sat Jun 02 15:54:16 2018 +0000
@@ -0,0 +1,561 @@
+#include "mbed.h"
+#include "DebouncedIn.h"
+#include "TextLCD.h"
+#include "QEI.h"
+#include "Rtc_Ds1307.h"
+#include <Pulse1.h>
+ 
+TextLCD lcd(PTB0, PTB1, PTB2, PTB3, PTC2, PTC1); // rs, e, d4, d5, d6, d7
+Rtc_Ds1307 rtc(PTE0, PTE1);
+QEI wheel (PTD7, PTD6, NC, 30);
+DebouncedIn button_enco(PTC5);
+Serial pc(USBTX, USBRX);
+PwmOut Sonido(PTD1);
+PulseInOut irda(PTD5);// en este puerto se pone el sensor infrarrojo
+ 
+ 
+float periodo;
+float Frecuencia = 4000; 
+int C1 = 0x0C;
+int m = 0, flag = 0;
+uint8_t pot[7] = {1, 2, 4, 8, 16, 32, 64};
+uint8_t pot1[7] = {254, 253, 251, 248, 239, 223, 191};
+int Lugar = 0; // Definen el punto en el cual va el programa
+int i = 0, j = 0;
+int pos = 0;   // Reloj:0, Alarma1:1, Alarma2:2, ... , Alarma7:7
+uint8_t state_alarms = 0, pos_alarm = 0, alarma = 0; 
+ 
+//irda
+int header = 0; //tiempo de cabecera pulso abajo 
+const int head_H = 4550; //+20% medida con osciloscopio en microsegundos
+const int head_L = 4410;//-20%  medida con osciloscopio
+int g = 0, h = 0, count = 0, mostrar = 0;
+const int T_alto = 1600;//ponga su tiempo de la prueba
+const int T_bajo = 485;//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
+int dato; // tiempo de cada dato que se lee
+int boton_sel = 10;
+int boton[10][32]= {{1,1,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,0,1,0},
+                    {1,1,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0,0,1,0,0,1,1,1,1,1,0,0},
+                    {1,1,0,0,0,0,1,0,1,1,0,0,1,0,1,0,0,1,0,0,0,0,1,0,1,0,1,1,1,1,0,0},
+                    {1,1,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,0,0,0,1,0,0,0,1,1,1,1,0,0},
+                    {1,1,0,0,0,0,1,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,1,0,1,1,0,1,1,1,0,0},
+                    {1,1,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0},
+                    {1,1,0,0,0,0,1,0,1,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,0,1,1,1,0,0},
+                    {1,1,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,0,0,0,0,1,1,1,0,0},
+                    {1,1,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0},
+                    {1,1,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,0,1,0}};
+ 
+ 
+int main()
+{
+    Rtc_Ds1307::Time_rtc tm = {};
+    Rtc_Ds1307::Time_rtc Alarm[7] = {};
+    lcd.cls();
+    lcd.writeCommand(C1);//escribimos un comando segun el manual del modulo LCD
+    lcd.locate(0,0);
+    periodo=(1/Frecuencia);
+    Sonido.period(periodo);
+    rtc.getTime(tm); //lee el tiempo del DS1307
+    Sonido.write(255);
+ 
+ 
+    while(1)
+    {
+        switch (Lugar)
+        {   
+            case 0:
+            
+                rtc.getTime(tm);
+                m = wheel.getPulses();
+                if(m != 0)
+                    {                        
+                        wheel.reset();  
+                        pos = pos + m;
+                        m = 0;        
+                        lcd.cls();                               
+                    }
+                if(pos > 7)
+                    {                        
+                        pos = -1;                                       
+                    }
+                if(pos < -1)
+                    {                        
+                        pos = 7;                                       
+                    }    
+                if(pos == 0)
+                {   
+                    lcd.locate(0,0);                        
+                    lcd.printf("Time:   ");
+                    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);
+                    if (mostrar != 0){
+                    lcd.printf("%  d",mostrar);
+                    }
+                    
+                    wait(0.1);
+                }
+                
+                if(pos == -1)
+                {   
+                    lcd.locate(0,0);                        
+                    lcd.printf("Alarm Setup IRDA");
+                    wait(0.1);
+                }
+                
+                
+                if(pos > 0)
+                {
+                    lcd.locate(0,0);    
+                    lcd.printf("Alarm %d", pos);
+                    lcd.locate(8,0);    
+                    lcd.printf("%02d:",Alarm[pos - 1].hour);
+                    lcd.printf("%02d:",Alarm[pos - 1].min);
+                    lcd.printf("%02d",Alarm[pos - 1].sec);  
+                    lcd.locate(0,1);
+                    lcd.printf("%02d/",Alarm[pos - 1].mon);
+                    lcd.printf("%02d/",Alarm[pos - 1].date);
+                    lcd.printf("%02d",Alarm[pos - 1].year);
+                    lcd.locate(13,1);
+                    if((state_alarms&(pot[pos - 1])) == pot[pos - 1])
+                    {
+                        lcd.printf("On ");
+                    }
+                    else
+                    {
+                        lcd.printf("Off");
+                    }
+                    
+                    wait(0.1);
+                }
+                for(j=0;j<7;j++)
+                {
+                    if( (tm.date==Alarm[j].date)&&(tm.mon==Alarm[j].mon)&&(tm.year==Alarm[j].year)&&(tm.hour==Alarm[j].hour)&&(tm.min==Alarm[j].min)&&(tm.sec==Alarm[j].sec)&&((state_alarms&(pot[j])) == pot[j]))
+                    {
+                        Lugar = 2;
+                        lcd.cls();
+                        lcd.locate(0,0);                        
+                        lcd.printf("Active Alarm%d!!!",(j+1));
+                        lcd.locate(0,1);
+                        lcd.printf("->Disable ");                       
+                        lcd.locate(10,1);                   
+                        lcd.printf("--5min");
+                        pos_alarm = j;
+                    }
+                }
+                
+                if (button_enco.falling())      //si se pulsa boton encoder
+                {  
+                    if(pos == -1)
+                    {Lugar = 3;
+                    lcd.cls();}
+                    else
+                        {Lugar = 1;}
+                
+                }
+             
+            break;
+            
+            case 1:
+                switch(i)
+                {
+                    case 0:
+                        if(pos == 0)
+                        {
+                            lcd.cls();
+                            lcd.locate(0,0);
+                            lcd.printf("Time Setup");                           
+                        } 
+                                              
+                        if(pos > 0)
+                        {
+                            lcd.cls();
+                            lcd.locate(0,0);
+                            lcd.printf("Alarm %d Setup", pos);                             
+                        }  
+                        wait(1);
+                        i++;
+                        lcd.cls();
+                        lcd.locate(0,0);
+                        lcd.printf("Day: ");
+                    break;
+                    
+                    case 1:
+                        m = wheel.getPulses();        
+                        if (m != 0) 
+                        {
+                            tm.date = tm.date + m;
+                            if(tm.date > 31)
+                            {
+                                tm.date = 1;
+                            }
+                            if(tm.date < 1)
+                            {
+                                tm.date = 31;
+                            }
+                            wheel.reset();  
+                            m = 0;
+                        }
+                        lcd.locate(5,0);
+                        lcd.printf("%02d",tm.date);
+                        
+                        if (button_enco.falling())
+                        {
+                            i++;
+                            lcd.cls();
+                            lcd.locate(0,0);
+                            lcd.printf("Month: ");
+                        }
+                    break;
+                    
+                    case 2:
+                        m = wheel.getPulses();        
+                        if (m != 0) 
+                        {
+                            tm.mon = tm.mon + m;
+                            if(tm.mon > 12)
+                            {
+                                tm.mon = 1;
+                            }
+                            if(tm.mon < 1)
+                            {
+                                tm.mon = 12;
+                            }
+                            wheel.reset();  
+                            m = 0;
+                        }
+                        lcd.locate(7,0);
+                        lcd.printf("%02d",tm.mon);
+                        
+                        if (button_enco.falling())
+                        {
+                            i++;
+                            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++;
+                            lcd.cls();
+                            lcd.locate(0,0);
+                            lcd.printf("Hours: ");
+                        }
+                    break;
+                    
+                    case 4:
+                        m = wheel.getPulses();    
+                        if (m != 0) 
+                        {
+                            tm.hour = tm.hour + m;
+                            if(tm.hour > 23)
+                            {
+                                tm.hour = 0;
+                            }
+                            if(tm.hour < 0)
+                            {
+                                tm.hour = 23;
+                            }
+                            wheel.reset();  
+                            m = 0;
+                        }
+                        lcd.locate(7,0);
+                        lcd.printf("%02d",tm.hour);
+                        
+                        if (button_enco.falling())
+                        {
+                            i++;
+                            lcd.cls();
+                            lcd.locate(0,0);
+                            lcd.printf("Minutes: ");
+                        }
+                    
+                    break;
+                    
+                    case 5:
+                        m = wheel.getPulses();        
+                        if (m != 0) 
+                        {
+                            tm.min = tm.min + m;
+                            if(tm.min > 59)
+                            {
+                                tm.min = 0;
+                            }
+                            if(tm.min < 0)
+                            {
+                                tm.min = 59;
+                            }
+                            
+                            wheel.reset();  
+                            m = 0;
+                        }
+                        lcd.locate(9,0);
+                        lcd.printf("%02d",tm.min);
+                        
+                        if (button_enco.falling())
+                        {
+                            i++;
+                            lcd.cls();
+                            lcd.locate(0,0);
+                            lcd.printf("Seconds: ");
+                        }
+                    break;
+                    
+                    
+                    case 6:
+                        m = wheel.getPulses();        
+                        if (m != 0) 
+                        {
+                            tm.sec = tm.sec + m;
+                            if(tm.sec > 59)
+                            {
+                                tm.sec = 0;
+                            }
+                            if(tm.sec < 0)
+                            {
+                                tm.sec = 59;
+                            }
+                            wheel.reset();  
+                            m = 0;
+                        }
+                        lcd.locate(9,0);
+                        lcd.printf("%02d",tm.sec);
+                        
+                        if (button_enco.falling())
+                        {
+                            if(pos==0)
+                            {
+                                rtc.setTime(tm, false, false);
+                                rtc.startClock();
+                                lcd.cls();
+                                lcd.locate(0, 0);
+                                lcd.printf("Time Set");      
+                                wait(1);
+                                i = 0;
+                                Lugar = 0;
+                                lcd.cls();                      
+                            } 
+                            if(pos > 0)
+                            {
+                                i++;
+                                lcd.cls();
+                                lcd.locate(0,0);
+                                lcd.printf("Enable: Off");
+                            }                          
+                        }
+                    break;
+                    
+                    case 7:
+                        m = wheel.getPulses();        
+                        if (m != 0) 
+                        {
+                            if(flag == 0)
+                            {
+                                lcd.locate(8,0);
+                                lcd.printf("On ");
+                                flag = 1;           //se activa la alarma
+                            }
+                            else 
+                            if(flag == 1)
+                            {
+                                lcd.locate(8,0);
+                                lcd.printf("Off");
+                                flag = 0;           //se desactiva la alarma
+                            }
+                            wheel.reset();  
+                            m = 0;
+                        }
+                        
+                        if (button_enco.falling())
+                        {
+                            if(flag == 1)
+                            {
+                                state_alarms = state_alarms | pot[(pos - 1)];
+                            }
+                            if(flag == 0)
+                            {
+                                state_alarms = state_alarms & pot1[(pos - 1)];
+                            }
+                            Alarm[pos - 1] = tm;
+                            lcd.cls();
+                            lcd.locate(0,0);
+                            lcd.printf("Alarm %d Set", pos);
+                            wait(1);
+                            i = 0;
+                            Lugar = 0;
+                            flag = 0;
+                            lcd.cls();
+                        }
+                    break;
+                }            
+            break;
+            
+            case 2:
+                Sonido.write(0.5);
+                wait(0.2);
+                Sonido.write(255);
+                wait(0.2);
+                Sonido.write(0.5);
+                wait(0.2);
+                Sonido.write(255);
+                wait(0.2);
+                
+                m = wheel.getPulses();
+                    
+                if(alarma == 0)       //pos_alarm
+                {   
+                    if(m != 0)
+                    {                        
+                        alarma = 1;
+                        wheel.reset();
+                        m = 0;
+                        lcd.locate(1,1);
+                        lcd.printf("-");                    
+                        lcd.locate(11,1);
+                        lcd.printf(">");                                          
+                    }
+                }
+                
+                if(alarma == 1)
+                {
+                    if(m != 0)
+                    {                        
+                        alarma = 0;
+                        wheel.reset();
+                        m = 0;
+                        lcd.locate(1,1);
+                        lcd.printf(">");                    
+                        lcd.locate(11,1);
+                        lcd.printf("-");                                          
+                    }
+                }
+                
+                if (button_enco.falling())
+                {
+                    if(alarma == 0)
+                    {
+                        wheel.reset();
+                        m=0;
+                        Sonido.write(255);
+                        lcd.cls();
+                        wait(0.5);
+                        
+                    }
+                    if(alarma==1)
+                    {
+                        rtc.getTime(tm);
+                        if(tm.min >= 55)
+                        {
+                            Alarm[pos_alarm].min = (tm.min + 5) - 60;
+                            Alarm[pos_alarm].hour = tm.hour + 1;
+                        }
+                        else
+                        {
+                            Alarm[pos_alarm].min = tm.min + 5;
+                        }
+                        lcd.cls();
+                        alarma=0;
+                        
+                    }
+                    Lugar = 0;
+                }
+            break;
+            
+            case 3:
+        lcd.locate(0,0);
+        lcd.printf("Waiting IRDA");    
+        header = 0;
+        header = irda.read_low_us();    //funcion para leer un pulso de caida o bajo
+        if (header > head_L && header < head_H)//verificar que este en la tolerancia +-20%
+        {
+            //leo los datos de la trama y se meten a un arreglo
+            wait_us(2000);
+            for(g = 0; g<(num_bits-1); g++) // 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[g]=dato;
+                wait_us(332);
+            }
+            for(g = 0; g<num_bits; g++)       // guardo la secuancia en binario
+            {
+                if(num[g] > ((T_alto+T_bajo)/2)){sec[g]=1;}
+                else {sec[g]=0;}
+                pc.printf("%d", sec[g]);   
+            }
+            pc.printf("\n");
+            for(h = 0; h < 8; h++)
+            {
+                for(g = 0; g < 32; g++)
+                {
+                    if(sec[g]==boton[h][g]) //en caso de que un bit no coincida se descarta el boton 1
+                    {
+                        count++;
+                        if(count==32)
+                        {
+                            boton_sel = h - 1;
+                            lcd.cls();
+                            lcd.locate(0,0);
+                            lcd.printf("Alarm %d: ",(boton_sel+1));
+                            if(boton_sel >= 0)
+                            {
+                                if((state_alarms&(pot[boton_sel])) == pot[boton_sel])
+                                {
+                                    state_alarms = state_alarms & pot1[boton_sel];
+                                    lcd.locate(10,0);
+                                    lcd.printf("Off");
+                                    wait(1.5);
+                                    lcd.cls();                      
+                                }
+                                else
+                                {
+                                    state_alarms = state_alarms | pot[boton_sel];
+                                    lcd.locate(10,0);
+                                    lcd.printf("On ");
+                                    wait(1.5);
+                                    lcd.cls();
+                                    mostrar = boton_sel+1;
+                                }
+                            }
+                            else
+                            {
+                                Lugar = 0;
+                                pos = 0;
+                                lcd.cls();
+                            }
+                        }
+                    }
+                }
+                count = 0;
+            }
+        }
+        
+            
+            break;
+        }             
+    }       
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Pulse1.lib	Sat Jun 02 15:54:16 2018 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/tony63/code/Pulse1/#48651f86a80c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QEI.lib	Sat Jun 02 15:54:16 2018 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/users/aberk/code/QEI/#5c2ad81551aa
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RTC-DS1307.lib	Sat Jun 02 15:54:16 2018 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/leihen/code/RTC-DS1307/#5627b407e097
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TextLCD.lib	Sat Jun 02 15:54:16 2018 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/amarincan/code/TextLCD/#d692719a4c59
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/debug.h	Sat Jun 02 15:54:16 2018 +0000
@@ -0,0 +1,16 @@
+#ifndef __DEBUG_H__
+#define __DEBUG_H__
+
+
+#ifdef DEBUG
+#define INFO(x, ...) std::printf("[INFO: %s:%d]"x"\r\n", __FILE__, __LINE__, ##__VA_ARGS__);
+#define WARN(x, ...) std::printf("[WARN: %s:%d]"x"\r\n", __FILE__, __LINE__, ##__VA_ARGS__);
+#define ERR(x, ...) std::printf("[ERR: %s:%d]"x"\r\n", __FILE__, __LINE__, ##__VA_ARGS__);
+#else
+#define INFO(x, ...)
+#define WARN(x, ...)
+#define ERR(x, ...)
+#endif
+
+
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Sat Jun 02 15:54:16 2018 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/5aab5a7997ee
\ No newline at end of file