.

Dependencies:   Debounced QEI RTC-DS1307 TextLCD mbed

Fork of Reloj_alarma by Gustavo Ramirez

main.cpp

Committer:
alejom23
Date:
2017-11-30
Revision:
2:2f8b2690d757
Parent:
1:0639f31dd59f

File content as of revision 2:2f8b2690d757:

#include "mbed.h"
#include "DebouncedIn.h"
#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);
 
DigitalOut led(PTE31);
 DigitalOut led1(LED1);
 DigitalOut led2(LED2);
 DigitalOut led3(LED3);
DebouncedIn button_enco(PTC5);
int C1=0x0C;
int mes=0, dia=0, ano=0, hora=0,minuto=0,seg=0;
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 j=0,k=0;
int x=1;
void pwr();
bool alarma_existe=false;
bool control = false;
int configurada=0;
int d=0;
int cabeceraL=9000;
int cabeceraH=4555;
int Tdescanso=500;
int Tlow=630;
int Thigh=1750;
int duracion; //duracion de un pulso bajo
int numb = 33;
int code[65];
const unsigned pwrHY[]={575,548,548,575,549,549,575,548,1686,1686,1686,1687,1685,1687,549,1686,
                         1686,1686,576,548,549,576,549,549,576,549,1687,1687,1686,1686,1687,1686};
int main()
{
     led1=1;led2=1;led3=1;
    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);
    lcd.printf("--Alarma  --Hora");

    rtc.getTime(tm); 
 
    while(1)
    {
        rtc.getTime(tm);
        if(alarma_existe==true){
        while(x==1){
            if((Alarm[k].date==tm.date && Alarm[k].mon==tm.mon && Alarm[k].year==tm.year && Alarm[k].hour==tm.hour && Alarm[k].min==tm.min && Alarm[k].sec==tm.sec)){
                lcd.cls();
                lcd.locate(0,0);
                led1=0;led2=0;led3=0;
                lcd.printf("Alarma Activada!");
                lcd.locate(0,1);
                lcd.printf("Prendido");
                control=true;
                while(d==0){
                if(button_enco.falling()){
                    pwr();
                    x=0;
                    lcd.cls();
                    lcd.locate(0,0);
                    lcd.printf("--Alarma  --Hora");
                    Lugar=0;
                    i=0;
                    led1=1;led2=1;led3=1;
                    control = false;
                    d=1;
                    }
                }
            }
            if(k==j){
                break;
            }
            k++;
                    }
        k=0;
       }
       d=0;
        x=1;         
        switch (Lugar)
        {
            case 0:
                m = wheel.getPulses();
                if(m!=0 && Conf==0){
                    Conf=1;
                    wheel.reset();  
                    m=0;              
                }
                
                 if(m!=0 && Conf==1){
                    Conf=0;
                    wheel.reset();  
                    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){
                    
                    lcd.locate(1,0);
                    lcd.printf("-");                    
                    lcd.locate(11,0);
                    lcd.printf(">");
                    lcd.locate(0,1);                    
                    wait(0.1);
                }
                
                if (button_enco.falling()){
                    Lugar++;
                    m=0;       
                }
            
            break;
            
            case 1:
                switch(i)
                {
                    case 0:
                    
                                              
                        if(Conf==0 && j<6)
                        {
                            lcd.cls();
                            lcd.locate(0,0);
                            lcd.printf("Config. Alarma ");
                            wait(1);
                            i++;
                            m=0;
                            lcd.cls();
                            lcd.locate(0,0);
                            lcd.printf("Dia: ");
                            dia=1;                             
                        }
                        if(Conf==0 && j==6)
                        {
                            j=0;
                            while(j<7){
                            lcd.cls();
                            lcd.locate(0,0);
                            lcd.printf("H: ");
                            lcd.printf("%02d:",Alarm[j].hour);
                            lcd.printf("%02d:",Alarm[j].min);
                            lcd.printf("%02d",Alarm[j].sec);
                            lcd.locate(0,1);
                            lcd.printf("F: ");
                            lcd.printf("%02d:",Alarm[j].date);
                            lcd.printf("%02d:",Alarm[j].mon);
                            lcd.printf("%02d",Alarm[j].year);
                            wait(0.25);
                            if(button_enco.falling()){
                                j++;
                            }
                            }  
                            Lugar=0;
                            i=0;
                            j=0;
                            lcd.cls();
                            lcd.locate(0,0);
                            lcd.printf("--Alarma  --Hora");                           
                        }
                
                        if(Conf==1 && configurada==0)
                        {
                            lcd.cls();
                            lcd.locate(0,0);
                            lcd.printf("Config. hora   ");
                            wait(1);
                            i++;
                            m=0;
                            lcd.cls();
                            lcd.locate(0,0);
                            lcd.printf("Dia: ");
                            //tm.date=1;
                        } 
                           
                        if(Conf==1 && configurada==1)
                        {
                            rtc.getTime(tm);
                            lcd.cls();
                            lcd.locate(0,0);
                            lcd.printf("H: ");
                            lcd.printf("%02d:",tm.hour);
                            lcd.printf("%02d:",tm.min);
                            lcd.printf("%02d",tm.sec);
                            lcd.locate(0,1);
                            lcd.printf("F: ");
                            lcd.printf("%02d:",tm.date);
                            lcd.printf("%02d:",tm.mon);
                            lcd.printf("%02d",tm.year);
                            wait(0.25);
                            if(button_enco.falling()){
                                Lugar=0;
                                i=0;
                                }
                            lcd.cls();
                            lcd.locate(0,0);
                            lcd.printf("--Alarma  --Hora");
                        }  
                    break;
                    
                    case 1:
                    if(Conf==1){
                        m=wheel.getPulses();        
                        if (m!=0) 
                        {
                            dia=dia+m;
                            if(dia>31)
                            {
                                dia=31;
                            }
                            if(dia<1)
                            {
                                dia=1;
                            }
                            
                            wheel.reset();  
                            m=0;
                        }
                        lcd.locate(5,0);
                        lcd.printf("%02d",dia);
                        }   
                        
                    if(Conf==0){
                        m=wheel.getPulses();        
                        if (m!=0) 
                        {
                            dia = dia + m;
                            if(dia>31)
                            {
                                dia=31;
                            }
                            if(dia<1)
                            {
                                dia=1;
                            }
                            
                            wheel.reset();  
                            m=0;
                        }
                        lcd.locate(5,0);
                        lcd.printf("%02d",dia);
                        }    
                      
                        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(Conf==1){      
                        if (m!=0) 
                        {
                            mes=mes+m;
                            if(mes>12)
                            {
                                mes=12;
                            }
                            if(mes<1)
                            {
                                mes=1;
                            }
                            
                            wheel.reset();  
                            m=0;
                        }
                        lcd.locate(5,0);
                        lcd.printf("%02d",mes);
                        }
                        if(Conf==0){      
                        if (m!=0) 
                        {
                            mes=mes+m;
                            if(mes>12)
                            {
                                mes=12;
                            }
                            if(mes<1)
                            {
                                mes=1;
                            }
                            
                            wheel.reset();  
                            m=0;
                        }
                        lcd.locate(5,0);
                        lcd.printf("%02d",mes);
                        }
                        if (button_enco.falling())
                        {
                            i++;
                            m=0;
                            lcd.cls();
                            lcd.locate(0,0);
                            lcd.printf("Year: ");
                            //tm.year=2000;
                        }
                    
                    break;
                    
                    case 3:
                        m=wheel.getPulses();
                        if(Conf==1){
                        if (m!=0) 
                        {
                            ano=ano+m;
                            
                            if(ano<2000)
                            {
                                ano=2000;
                            }
                            
                            wheel.reset();  
                            m=0;
                        }
                        lcd.locate(6,0);
                        lcd.printf("%02d",ano);
                        }
                         if(Conf==0){
                        if (m!=0) 
                        {
                            ano=ano + m;
                            
                            if(ano<2000)
                            {
                                ano=2000;
                            }
                            
                            wheel.reset();  
                            m=0;
                        }
                        lcd.locate(6,0);
                        lcd.printf("%02d",ano);
                        }
                        if (button_enco.falling())
                        {
                            i++;
                            m=0;
                            lcd.cls();
                            lcd.locate(0,0);
                            lcd.printf("Hora: ");
                            //tm.hour=5;
                        }
                    
                    break;
                    
                     case 4:
                        m=wheel.getPulses();
                        if(Conf==1){        
                        if (m!=0) 
                        {
                            hora=hora+ m;
                            if(hora>23)
                            {
                                hora=23;
                            }
                            if(hora<0)
                            {
                                hora=0;
                            }
                            
                            wheel.reset();  
                            m=0;
                        }
                        lcd.locate(6,0);
                        lcd.printf("%02d",hora);
                        }
                        if(Conf==0){        
                        if (m!=0) 
                        {
                            hora=hora + m;
                            if(hora>23)
                            {
                                hora=23;
                            }
                            if(hora<0)
                            {
                                hora=0;
                            }
                            
                            wheel.reset();  
                            m=0;
                        }
                        lcd.locate(6,0);
                        lcd.printf("%02d",hora);
                        }
                        if (button_enco.falling())
                        {
                            i++;
                            m=0;
                            lcd.cls();
                            lcd.locate(0,0);
                            lcd.printf("Minuto: ");
                            //tm.min=0;
                        }
                    
                    break;
                    
                    case 5:
                        m=wheel.getPulses();
                        if(Conf==1){        
                        if (m!=0) 
                        {
                            minuto=minuto+m;
                            if(minuto>59)
                            {
                                minuto=59;
                            }
                            if(minuto<0)
                            {
                                minuto=0;
                            }
                            
                            wheel.reset();  
                            m=0;
                        }
                        lcd.locate(8,0);
                        lcd.printf("%02d",minuto);
                        }
                        if(Conf==0){        
                        if (m!=0) 
                        {
                            minuto=minuto+m;
                            if(minuto>59)
                            {
                                minuto=59;
                            }
                            if(minuto<0)
                            {
                                minuto=0;
                            }
                            
                            wheel.reset();  
                            m=0;
                        }
                        lcd.locate(8,0);
                        lcd.printf("%02d",minuto);
                        }
                        if (button_enco.falling())
                        {
                            i++;
                            m=0;
                            lcd.cls();
                            lcd.locate(0,0);
                            lcd.printf("Segundo: ");
                            //tm.sec=0;
                        }
                    
                    break;
                    
                    
                    case 6:
                        m=wheel.getPulses();
                        if(Conf==1){        
                        if (m!=0) 
                        {
                            seg=seg+m;
                            if(seg>59)
                            {
                                seg=59;
                            }
                            if(seg<0)
                            {
                                seg=0;
                            }
                            
                            wheel.reset();  
                            m=0;
                        }
                        lcd.locate(9,0);
                        lcd.printf("%02d",seg);
                        }
                        if(Conf==0){        
                        if (m!=0) 
                        {
                            seg=seg+m;
                            if(seg>59)
                            {
                                seg=59;
                            }
                            if(seg<0)
                            {
                                seg=0;
                            }
                            
                            wheel.reset();  
                            m=0;
                        }
                        lcd.locate(9,0);
                        lcd.printf("%02d",seg);
                        }
                        if (button_enco.falling())
                        {
                            ///////////////////
                            if(Conf==0)
                            {
                                lcd.cls();
                                lcd.locate(0,0);
                                lcd.printf("Alarma config. ");
                                wait(1);
                                i=0;
                                m=0;
                                Lugar=0;
                                lcd.cls();
                                alarma_existe=true;
                                Alarm[j].year=ano;
                                Alarm[j].mon=mes;
                                Alarm[j].date=dia;
                                Alarm[j].min=minuto;
                                Alarm[j].sec=seg;
                                Alarm[j].hour=hora;
                                j++;
                                lcd.cls();
                                lcd.locate(0,0);
                                lcd.printf("--Alarma  --Hora");                          
                            }
                
                            if(Conf==1)
                            {
                                tm.year=ano;
                                tm.mon=mes;
                                tm.date=dia;
                                tm.min=minuto;
                                tm.sec=seg;
                                tm.hour=hora;
                                rtc.setTime(tm, false, false);
                                rtc.startClock();
                                lcd.cls();
                                lcd.locate(0,0);
                                lcd.printf("Hora Config.  ");
                                wait(1);
                                i=0;
                                m=0;
                                configurada=1;
                                Lugar=0;
                                lcd.locate(0,0);
                                lcd.printf("--Alarma  --Hora");                                
                            } 
                           
                           ///////////////////
                        }
                    
                    break;
                   
                }            
   
            
    }       
}
}

int descanso(int duracion){
     Timer t;
     t.reset();
     t.start();
     while(1) 
     {
      led=1;
      wait_us(8);
      led=0;
      led=0;
      wait_us(9);
      if(t.read_us() > duracion) return 0;
          
      } 
      }   
                     
int sendcode(int numb, int *code, int cabeceraL, int cabeceraH, int Tdescanso, int Tlow, int Thigh)
{
      led=0;
      wait_ms(100);
      descanso(cabeceraL);
      wait_us(cabeceraH);
      
      for(i=0;i<numb;i++){
          if (code[i]>1000){
              led=1;
              descanso(Tdescanso);
              wait_us(Thigh);
              }
         if (code[i]<1000){
               led=0;
              descanso(Tdescanso);             
              wait_us(Tlow);
              }     
                            }
              descanso(Tdescanso);                
              return 0;
}

void pwr(){
  for(i=0;i<numb;i++){
       code[i]=pwrHY[i];
       }   
sendcode(numb,code,cabeceraL, cabeceraH, Tdescanso, Tlow, Thigh);
}
//****************************
 
void repeat(){
    wait_ms(42);
    descanso(8800);
    wait_us(2240);
    descanso(560);
    }