Se definen 7 alarmas de forma preestablecida y luego se escogen con un control remoto.

Dependencies:   Debounced Pulse1 QEI RTC-DS1307 TextLCD mbed

Fork of Reloj_alarma by Gustavo Ramirez

/media/uploads/seccastanova/alarma.jpeg

Revision:
2:8b79efdd0127
Parent:
1:0639f31dd59f
--- a/main.cpp	Wed Sep 28 06:48:39 2016 +0000
+++ b/main.cpp	Wed May 23 18:40:41 2018 +0000
@@ -1,44 +1,73 @@
+/*
+ESTE PROGRAMA PERMITE CONFIGURAR UNA SERIE DE ALARMAS (7) PREDEFINIDAS QUE LUEGO
+PODRÁN SER ESCOGIDAS CON UN CONTROL DE TELEVISOR MARCA LG CON LOS NÚMEROS DE 1 A 7
+SE USA UN RELOJ RTC 1307 Y UN RECEPTOR IRDA COMUN.
+ESTA TAREA FUE DESARROLLADA POR SEBASTIÁN CAMILO CASTAÑO VANEGAS Y CARLOS MAURICIO ALZATE TORRES
+PARA LA MATERIA DE PROCESADORES DE LA UNIVERSIDAD NACIONAL DE MEDELLÍN SEMESTRE I DEL AÑO 2018
+*/
 #include "mbed.h"
 #include "DebouncedIn.h"
 #include "TextLCD.h"
 #include "QEI.h"
 #include "Rtc_Ds1307.h"
+#include "string.h"
+#include <Pulse1.h>
 
+PulseInOut irda(PTB0);// en este puerto se pone el sensor infrarrojo
 TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7
 Rtc_Ds1307 rtc(PTE0, PTE1);
 QEI wheel (PTA16, PTA17, NC, 48);
-
 DebouncedIn button_enco(PTC5);
+DigitalOut myled(LED3);
 
-PwmOut Sonido(PTA5);
-
-float periodo;
-float Frecuencia=4000;
+int numN[35];//cadena para almacenar todos los tiempos que conforman los bits de datos
+int numP[35];//cadena para almacenar todos los tiempos que conforman los bits de datos
+int numbin[35];
+int bin[35];//cadena para almacenar todos los tiempos que conforman los bits de datos
+int dato; // tiempo de cada dato que se lee
+int pul_low;
+int i1,j1,k1,header,proL,proH; 
+char r;
+char cadena[33];
+char uno[33]="10110100101101001101110000100011";
+char dos[33]="10110100101101000011110011000011";
+char tres[33]="10110100101101001011110001000011";
+char cuatro[33]="10110100101101000111110010000011";
+char cinco[33]="10110100101101001111110000000011";
+char seis[33]="10110100101101000000001011111101";
+char siete[33]="10110100101101001000001001111101";
+char set[33]="00100000110111110001000011101111";
+int mode=0;
+int code;
+int numb=32;
+int s=0;
+//
 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 j=1;
+int IRDA=1;
+int irda_en=0;
 int visual=0;
-int alarma=0;  
-
+int alarma=0;
 int main()
 {
+    myled=1;
+    j=1;
+    Rtc_Ds1307::Time_rtc tm2 = {};
     Rtc_Ds1307::Time_rtc tm = {};
-    Rtc_Ds1307::Time_rtc Alarm = {};
+    Rtc_Ds1307::Time_rtc Alarm[8] = {};
     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);
-    
+    lcd.printf("--Alarms  --Time"); 
     rtc.getTime(tm); //lee el tiempo del DS1307
 
     while(1)
     {
+        
         switch (Lugar)
         {
             case 0:
@@ -49,7 +78,7 @@
                     m=0;              
                 }
                 
-                 if(m!=0 && Conf==1){
+                if(m!=0 && Conf==1){
                     Conf=0;
                     wheel.reset();  
                     m=0;              
@@ -86,40 +115,111 @@
             case 1:
                 switch(i)
                 {
-                    case 0:
-                    
-                                              
-                        if(Conf==0)
+                    case 0:                     
+                        if(Conf==0) // ALARMA
                         {
                             lcd.cls();
                             lcd.locate(0,0);
-                            lcd.printf("Config. Alarma ");
+                            lcd.printf("Config. Alarms ");
                             wait(1);
+                            lcd.cls();
                             i++;
-                            m=0;
-                            lcd.cls();
                             lcd.locate(0,0);
-                            lcd.printf("Dia: ");
-                            tm.date=1;                             
+                            lcd.printf("Day: ");
+                            m=0;                             
                         }
                 
-                        if(Conf==1)
+                        if(Conf==1) //RELOJ
                         {
                             lcd.cls();
                             lcd.locate(0,0);
-                            lcd.printf("Config. hora   ");
+                            lcd.printf("Config. Time   ");
                             wait(1);
                             i++;
-                            m=0;
                             lcd.cls();
                             lcd.locate(0,0);
-                            lcd.printf("Dia: ");
+                            lcd.printf("Day: ");
+                            m=0;
                             
                         }    
 
                     break;
                     
-                    case 1:
+                    case 1: //DAY OF WEEK
+                        m=wheel.getPulses();        
+                        if (m!=0) 
+                        {
+                            tm.wday=tm.wday+m;
+                            if(tm.wday>7)
+                            {
+                                tm.wday=7;
+                            }
+                            if(tm.wday<1)
+                            {
+                                tm.wday=1;
+                            }
+                            
+                            wheel.reset();  
+                            m=0;
+                        }
+                        
+                        switch(tm.wday){
+                            case (1):
+                                lcd.locate(5,0);
+                                lcd.printf("Sunday    ");
+                            break;    
+                            case (2):
+                                lcd.locate(5,0);
+                                lcd.printf("Monday    ");
+                            break;     
+                            case (3):
+                                lcd.locate(5,0);
+                                lcd.printf("Tuesday   ");
+                            break;     
+                            case (4):
+                                lcd.locate(5,0);
+                                lcd.printf("Wednesday");
+                            break;                                        
+                            case (5):
+                                lcd.locate(5,0);
+                                lcd.printf("Thursday ");
+                            break;     
+                            case (6):
+                                lcd.locate(5,0);
+                                lcd.printf("Friday   ");
+                            break;     
+                            case (7):
+                                lcd.locate(5,0);
+                                lcd.printf("Saturday ");
+                            break;                                    
+                            }  
+                        
+                        
+                        if (button_enco.falling())
+                        {
+                            switch(Conf)
+                            {
+                                case 0:
+                                    i=5;
+                                    m=0;
+                                    lcd.cls();
+                                    lcd.locate(0,0);
+                                    lcd.printf("Hour: ");
+                                    m=0;
+                                break;    
+                                case 1:
+                                    i=2;
+                                    m=0;
+                                    lcd.cls();
+                                    lcd.locate(0,0);
+                                    lcd.printf("Day: ");
+                                break;
+                            }           
+                        }
+                    
+                    break;
+                    case 2: // DAY OF DATE
+                        m=0;
                         m=wheel.getPulses();        
                         if (m!=0) 
                         {
@@ -137,7 +237,7 @@
                             m=0;
                         }
                         lcd.locate(5,0);
-                        lcd.printf("%02d",tm.date);
+                        lcd.printf("%02d   ",tm.date);
                         
                         if (button_enco.falling())
                         {
@@ -145,13 +245,11 @@
                             m=0;
                             lcd.cls();
                             lcd.locate(0,0);
-                            lcd.printf("Mes: ");
-                            //tm.mon=1;
+                            lcd.printf("Month: ");
+                            
                         }
-                    
                     break;
-                    
-                    case 2:
+                    case 3: // MONTH
                         m=wheel.getPulses();        
                         if (m!=0) 
                         {
@@ -168,7 +266,7 @@
                             wheel.reset();  
                             m=0;
                         }
-                        lcd.locate(5,0);
+                        lcd.locate(7,0);
                         lcd.printf("%02d",tm.mon);
                         
                         if (button_enco.falling())
@@ -183,7 +281,7 @@
                     
                     break;
                     
-                    case 3:
+                    case 4: //YEAR
                         m=wheel.getPulses();        
                         if (m!=0) 
                         {
@@ -202,22 +300,23 @@
                         
                         if (button_enco.falling())
                         {
-                            i++;
+                            i=5;
                             m=0;
                             lcd.cls();
                             lcd.locate(0,0);
-                            lcd.printf("Hora: ");
+                            lcd.printf("Hour: ");
+                            
                             
                         }
                     
                     break;
                     
-                     case 4:
-                        m=wheel.getPulses();
-                                
+                    case 5: //HOUR
+                        m=0;
+                        m=wheel.getPulses();       
                         if (m!=0) 
                         {
-                            tm.hour=tm.hour + m;
+                            tm.hour+= m;
                             if(tm.hour>23)
                             {
                                 tm.hour=23;
@@ -235,17 +334,18 @@
                         
                         if (button_enco.falling())
                         {
-                            i++;
+                            i=6;
                             m=0;
                             lcd.cls();
                             lcd.locate(0,0);
-                            lcd.printf("Minuto: ");
+                            lcd.printf("Minute: ");
                             //tm.min=0;
                         }
                     
                     break;
                     
-                    case 5:
+                    case 6: //MINUTE
+                        m=0;
                         m=wheel.getPulses();        
                         if (m!=0) 
                         {
@@ -267,18 +367,18 @@
                         
                         if (button_enco.falling())
                         {
-                            i++;
+                            i=7;
                             m=0;
                             lcd.cls();
                             lcd.locate(0,0);
-                            lcd.printf("Segundo: ");
+                            lcd.printf("Second: ");
                             //tm.sec=0;
                         }
                     
                     break;
                     
                     
-                    case 6:
+                    case 7: //SECOND
                         m=wheel.getPulses();        
                         if (m!=0) 
                         {
@@ -295,7 +395,7 @@
                             wheel.reset();  
                             m=0;
                         }
-                        lcd.locate(9,0);
+                        lcd.locate(8,0);
                         lcd.printf("%02d",tm.sec);
                         
                         if (button_enco.falling())
@@ -303,31 +403,34 @@
                             ///////////////////
                             if(Conf==0)
                             {
-                                Alarm=tm;
+                                Alarm[j]=tm;
                                 lcd.cls();
                                 lcd.locate(0,0);
-                                lcd.printf("Alarma config. ");
+                                lcd.printf("Alarm %d config. ",j);
                                 wait(1);
                                 i=0;
                                 m=0;
+                                if(j>=7)
+                                {
                                 Lugar++;
+                                }
+                                j++;
                                 lcd.cls();
                                                           
                             }
                 
                             if(Conf==1)
-                            {
-                                rtc.setTime(tm, false, false);
-                                rtc.startClock();
+                            {   
+                                rtc.setTime(tm, true, false);
                                 lcd.cls();
                                 lcd.locate(0,0);
-                                lcd.printf("Hora Config.  ");
+                                lcd.printf("Time config.  ");
                                 wait(1);
                                 i=0;
                                 m=0;
                                 Lugar=0;
                                 lcd.locate(0,0);
-                                lcd.printf("--Alarma  --Hora");                                
+                                lcd.printf("--Alarms  --Time");                                
                             } 
                            
                            ///////////////////
@@ -338,24 +441,53 @@
                 }            
             break;
             
-            case 2:
-            
-                rtc.getTime(tm);
+            case 2: // SHOW THE TIME AND ALARM AND COMPROBATE THE ALARM STATE
+                rtc.getTime(tm2); //READING THE RTC
+                
                            
                 if(visual==0)
-                {
-                    
+                {    
                     lcd.locate(0,0);                        
-                    lcd.printf("Hora:   ");
+                    lcd.printf("Hour:   ");
                     lcd.locate(8,0);    
-                    lcd.printf("%02d:",tm.hour);
-                    lcd.printf("%02d:",tm.min);
-                    lcd.printf("%02d",tm.sec); 
-                       
+                    lcd.printf("%02d:",tm2.hour);
+                    lcd.printf("%02d:",tm2.min);
+                    lcd.printf("%02d",tm2.sec); 
                     lcd.locate(0,1);
-                    lcd.printf("%02d/",tm.mon);
-                    lcd.printf("%02d/",tm.date);
-                    lcd.printf("%02d",tm.year);
+                    switch(tm2.wday){
+                            case (1):
+                                lcd.locate(0,1);
+                                lcd.printf("Sun   ");
+                            break;    
+                            case (2):
+                                lcd.locate(0,1);
+                                lcd.printf("Mon   ");
+                            break;     
+                            case (3):
+                                lcd.locate(0,1);
+                                lcd.printf("Tue   ");
+                            break;     
+                            case (4):
+                                lcd.locate(0,1);
+                                lcd.printf("Wed   ");
+                            break;                                        
+                            case (5):
+                                lcd.locate(0,1);
+                                lcd.printf("Thu   ");
+                            break;     
+                            case (6):
+                                lcd.locate(0,1);
+                                lcd.printf("Fri   ");
+                            break;     
+                            case (7):
+                                lcd.locate(0,1);
+                                lcd.printf("Sat   ");
+                            break;                                    
+                    }
+                    lcd.locate(6,1);          
+                    lcd.printf("%02d/",tm2.date);
+                    lcd.printf("%02d/",tm2.mon);
+                    lcd.printf("%02d",tm2.year);
                     wait(0.1);
                     //////////
                     m=wheel.getPulses();
@@ -365,25 +497,49 @@
                         wheel.reset();  
                         m=0;
                     }
-                    
-                    //////
-                
                 }
                 
                 if(visual==1)
                 {
-                    lcd.locate(0,0);    
-                    lcd.printf("Alarma: ");
+                    lcd.locate(0,1);    
+                    lcd.printf("     ");
                     lcd.locate(8,0);    
-                    lcd.printf("%02d:",Alarm.hour);
-                    lcd.printf("%02d:",Alarm.min);
-                    lcd.printf("%02d",Alarm.sec);
+                    lcd.printf("%02d:",Alarm[IRDA].hour);
+                    lcd.printf("%02d:",Alarm[IRDA].min);
+                    lcd.printf("%02d",Alarm[IRDA].sec);
                     
-                        
-                    lcd.locate(0,1);
-                    lcd.printf("%02d/",Alarm.mon);
-                    lcd.printf("%02d/",Alarm.date);
-                    lcd.printf("%02d",Alarm.year);
+                    switch(Alarm[IRDA].wday){
+                            case (1):
+                                lcd.locate(0,0);
+                                lcd.printf("Sun     ");
+                            break;    
+                            case (2):
+                                lcd.locate(0,0);
+                                lcd.printf("Mon     ");
+                            break;     
+                            case (3):
+                                lcd.locate(0,0);
+                                lcd.printf("Tue     ");
+                            break;     
+                            case (4):
+                                lcd.locate(0,0);
+                                lcd.printf("Wed     ");
+                            break;                                        
+                            case (5):
+                                lcd.locate(0,0);
+                                lcd.printf("Thu     ");
+                            break;     
+                            case (6):
+                                lcd.locate(0,0);
+                                lcd.printf("Fri     ");
+                            break;     
+                            case (7):
+                                lcd.locate(0,0);
+                                lcd.printf("Sat     ");
+                            break;                                    
+                    }
+                    lcd.locate(5,1);
+                    lcd.printf("Alarm %d Set",IRDA);    
                     wait(0.1);
                     ////
                     m=wheel.getPulses();
@@ -393,39 +549,42 @@
                         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) )
+/////////////////////////////////// ALARM COMPROBATION /////////////////////////////////////////////////////////////////////////////                
+                if( (tm2.wday==Alarm[IRDA].wday)&&((tm2.hour)==Alarm[IRDA].hour)&&(tm2.min==Alarm[IRDA].min)&&(tm2.sec==Alarm[IRDA].sec) )
                 {
                     Lugar++;
                     lcd.cls();
                     lcd.locate(0,0);                        
-                    lcd.printf("Alarma Activa!!!");
+                    lcd.printf("Active Alarm!!!");
                     wait(1);
                     lcd.locate(0,0);
-                    lcd.printf("->Desactivar    ");                       
+                    lcd.printf("->Turn off     ");                       
                     lcd.locate(0,1);                        
-                    lcd.printf("--Aplazar       ");
+                    lcd.printf("--Postpone     ");
                     m=0;
                 }
+////////////////// IRDA WAITING ///////////////////////////////////////////////////////////////////////////////////////////////////                
+                if (button_enco.falling())
+                        {
+                            irda_en=1;
+                            lcd.cls();
+                            lcd.locate(0,0);
+                            lcd.printf("  IRDA Waiting  ");
+                            
+                        }
                  
             break;
             
-            case 3:
+            case 3: //TURN OFF OR POSTPONE THE ALARM
                 
-                if(alarma==0)
+                if(alarma==0) //CHOICE OF POSTPONE
                 {
-                    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);
-                    
+                    myled=1;
+                    wait(0.5);
+                    myled=0;
+                    wait(0.5);
+                                        
                     m=wheel.getPulses();
                     if(m!=0)
                     {                        
@@ -442,17 +601,13 @@
                           
                 ///////////////////
                 
-                if(alarma==1)
+                if(alarma==1) //CHOICE OF TURN OFF
                 {
-                    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);
-                    
+                    myled=1;
+                    wait(0.5);
+                    myled=0;
+                    wait(0.5);
+                                        
                     m=wheel.getPulses();
                     if(m!=0)
                     {                        
@@ -471,38 +626,98 @@
                 {
                     if(alarma==0)
                     {
-                        Lugar=0;
+                        Lugar=2; //RETURN TO SHOW THE TIME
                         wheel.reset();
                         m=0;
-                        Sonido.write(0);
-                        lcd.cls();
-                        lcd.locate(0,0);
-                        lcd.printf("--Alarma  --Hora");
-                        
+                        myled=1;
+                        lcd.cls();                          
                     }
                     if(alarma==1)
                     {
-                        Lugar=2;
-                        rtc.getTime(tm);
+                        Lugar=2;  //RETURN TO SHOW THE TIME WITH CURRENT ALARM UPDATED
+                        rtc.getTime(tm2);
                         if(tm.min!=58)
                         {
-                            Alarm.min=tm.min+1;
+                            Alarm[IRDA].min=tm2.min+1;
                         }
                         if(tm.min==59)
                         {
-                            Alarm.min=0;
-                            Alarm.hour=tm.hour+1;
+                            Alarm[IRDA].min=0;
+                            Alarm[IRDA].hour=tm2.hour+1;
                         }
-                        Alarm.sec=tm.sec;
+                        Alarm[IRDA].sec=tm2.sec;
                         lcd.cls();
                         alarma=0;
-                        
-                    }
-                    
+                        myled=1;   
+                    }                    
                 }
-                
-            
             break;
-        }             
-    }       
+        }
+///////////////////////////////// IRDA READING //////////////////////////////////////////////////////////////////////////////////                     
+        while (irda_en)
+        {
+        fflush( stdin );     
+        lop2:  if(!mode){
+               header = irda.read_high_us(); 
+               if(header>3500) goto seguir2;
+               goto lop2;
+               }
+                  
+        seguir2:
+              for(i1=0;i1<numb;++i1){  
+              numP[i1] = irda.read_high_us();    //funcion para leer un pulso alto
+              if (numP[i1]<1000){
+                s=0;
+                r='0';
+              }else{
+                s=1;
+                r='1';
+              }
+              numbin[i1]=s;
+              cadena[i1]=r;                                    
+              }
+              if (!strcmp(cadena,uno)){
+              IRDA=1;    
+              lcd.locate(8,1);
+              lcd.printf("%d",IRDA);
+              goto seguir2;
+              }else if (!strcmp(cadena,dos)){
+              IRDA=2;
+              lcd.locate(8,1);
+              lcd.printf("%d",IRDA);
+              goto seguir2;
+              }else if (!strcmp(cadena,tres)){
+              IRDA=3;
+              lcd.locate(8,1);
+              lcd.printf("%d",IRDA);
+              goto seguir2;
+              }else if (!strcmp(cadena,cuatro)){
+              IRDA=4;
+              lcd.locate(8,1);
+              lcd.printf("%d",IRDA);
+              goto seguir2;
+              }else if (!strcmp(cadena,cinco)){
+              IRDA=5;
+              lcd.locate(8,1);
+              lcd.printf("%d",IRDA);
+              goto seguir2;
+              }else if (!strcmp(cadena,seis)){
+              IRDA=6;
+              lcd.locate(8,1);
+              lcd.printf("%d",IRDA);
+              goto seguir2;
+              }else if (!strcmp(cadena,siete)){
+              IRDA=7;
+              lcd.locate(8,1);
+              lcd.printf("%d",IRDA);
+              goto seguir2;   
+              }else if(!strcmp(cadena,set)){
+              goto lop3;   
+              }    
+        lop3: Lugar=2;
+              irda_en=0;
+              lcd.cls();
+              break;  
+        }
+    }          
 }
\ No newline at end of file