Despertador

Dependencies:   QEI RTC-DS1307 TextLCD mbed

main.cpp

Committer:
SSJprocesa
Date:
2016-05-21
Revision:
0:d9d18ee787ba

File content as of revision 0:d9d18ee787ba:

#include "mbed.h"
#include "Rtc_Ds1307.h"
#include "TextLCD.h"
#include "QEI.h"

TextLCD lcd(PTD5, PTD7, PTD6, PTD4, PTD2, PTC9); // rs, e, d4-d7
Rtc_Ds1307 rtc(PTE0, PTE1);//Dato,Reloj
QEI encoder (PTC0, PTC4, NC, 624);//pines de etrada de comparación del encoder
DigitalIn chan(PTD3);//botón del encoder
DigitalIn rlo(PTC3);//pulsador de la freescale para configurar la RTC
DigitalIn rl(PTC12);//pulsador de la freescale para configurar la Alarma
DigitalOut ledr(PTE29);//Led indicador de la alarma
DigitalOut buzz(PTA6);//Buzzer indiciador de la alarma
char buffer[128];
int readptr = 0,segundos =0,cambio=0,cont=0,pla=0,pla2=0,key=0;//variables del programa
int di=0,me=0,an=0,fle=0,mi=0,se=0,jod=0;//varaibles para la alarma
int main() 
{
Rtc_Ds1307::Time_rtc tm = {};
ledr=1;//Led apagado
while(1){
sk:         if(pla==1)//Rutina para la configuración de los parametros en la RCT (día,mes,año,hora,minutos,segundos,día de la samana)
            {
            buzz=0;//Buzzer apagado
            ledr=1;//Led apagado
            jod=0;
            key=0;
            while(rlo==1){}//anti-rebotes
            lcd.cls();
            while(cont==0)
            {
            rtc.stopClock();//para el clock de la RTC
            lcd.locate(0,0);
            lcd.printf("(Day 1..31)");//muestra en el LCD el parametro a asignar
            cambio=encoder.getPulses();//valor del encoder
            if(cambio<=1){cambio=1;}//limite inferior para este parametro
            if(cambio>=31){cambio=31;}//limite superior para este parametro
            lcd.locate(0,1);
            lcd.printf("    ");
            lcd.locate(0,1);
            lcd.printf("%d",cambio);//valor acutal
            while(chan==0){encoder.reset();cont=1;}//si presiona el botón del encoder salta al siguiente parametro
            }
            tm.date=cambio;//asignación del valor elegido al parametro que se desea asignar en la RTC
            cambio=0;//limpia la variable
            while(cont==1)
            {            
            lcd.locate(0,0);
            lcd.printf("(month 1..12)");
            cambio=encoder.getPulses();
            if(cambio<=1){cambio=1;}
            if(cambio>=12){cambio=12;}
            lcd.locate(0,1);
            lcd.printf("    ");
            lcd.locate(0,1);
            lcd.printf("%d",cambio);
            while(chan==0){encoder.reset();cont=2;}                  
            }
            tm.mon=cambio;
            cambio=0;            
            while(cont==2)
            {            
            lcd.locate(0,0);
            lcd.printf("(year   0-99)");
            cambio=encoder.getPulses();
            if(cambio<=0){cambio=0;}
            if(cambio>=99){cambio=99;}
            lcd.locate(0,1);
            lcd.printf("    ");
            lcd.locate(0,1);
            lcd.printf("%d",cambio);
            while(chan==0){encoder.reset();cont=3;}                  
            }
            tm.year=cambio+2000;
            cambio=0;
            while(cont==3)
            {            
            lcd.locate(0,0);
            lcd.printf("(hours 0..23)");
            cambio=encoder.getPulses();
            if(cambio<=0){cambio=0;}
            if(cambio>=23){cambio=23;}
            lcd.locate(0,1);
            lcd.printf("    ");
            lcd.locate(0,1);
            lcd.printf("%d",cambio);
            while(chan==0){encoder.reset();cont=4;cambio=cambio;}                  
            }
            tm.hour=cambio;
            cambio=0;
            while(cont==4)
            {            
            lcd.locate(0,0);
            lcd.printf("(minutes 0..59)");
            cambio=encoder.getPulses();
            if(cambio<=0){cambio=0;}
            if(cambio>=59){cambio=59;}
            lcd.locate(0,1);
            lcd.printf("    ");
            lcd.locate(0,1);
            lcd.printf("%d",cambio);
            while(chan==0){encoder.reset();cont=5;}                  
            }
            tm.min=cambio;
            cambio=0;
            while(cont==5)
            {            
            lcd.locate(0,0);
            lcd.printf("(seconds 0..59)");
            cambio=encoder.getPulses();
            if(cambio<=0){cambio=0;}
            if(cambio>=59){cambio=59;}
            lcd.locate(0,1);
            lcd.printf("    ");
            lcd.locate(0,1);
            lcd.printf("%d",cambio);
            while(chan==0){encoder.reset();cont=6;lcd.locate(0,0);lcd.printf("(              ");}                  
            }
            tm.sec=cambio;
            cambio=1;
            while(cont==6)
            {            
            lcd.locate(0,0);
            lcd.printf("(sunday=1)");
            cambio=encoder.getPulses();
            if(cambio<=1){cambio=1;}
            if(cambio>=7){cambio=7;}
            lcd.locate(0,1);
            lcd.printf("    ");
            lcd.locate(0,1);
            lcd.printf("%d",cambio);
            while(chan==0){encoder.reset();cont=7;}                  
            }
            tm.wday=cambio;
            cambio=0;
            rtc.setTime(tm, false, false);
            rtc.startClock();//inicia el conteo en la RTC
            pla=0;
            }
            cont=0;
            
sk2:         if(pla2==1)//Rutina para la configuración de los parametros en la Alarma (día,mes,año,hora,minutos,segundos)
            {
            buzz=0;
            ledr=1;
            jod=0;
            key=0;   
            while(rl==1){}
            lcd.cls();
            while(cont==0)
            {
            lcd.locate(0,0);
            lcd.printf("alm(Day 1..31)");
            cambio=encoder.getPulses();
            if(cambio<=1){cambio=1;}
            if(cambio>=31){cambio=31;}
            lcd.locate(0,1);
            lcd.printf("    ");
            lcd.locate(0,1);
            lcd.printf("%d",cambio);
            while(chan==0){encoder.reset();cont=1;}
            }
            di=cambio;
            cambio=0;
            while(cont==1)
            {            
            lcd.locate(0,0);
            lcd.printf("alm(month 1..12)");
            cambio=encoder.getPulses();
            if(cambio<=1){cambio=1;}
            if(cambio>=12){cambio=12;}
            lcd.locate(0,1);
            lcd.printf("    ");
            lcd.locate(0,1);
            lcd.printf("%d",cambio);
            while(chan==0){encoder.reset();cont=2;}                  
            }
            me=cambio;
            cambio=0;            
            while(cont==2)
            {            
            lcd.locate(0,0);
            lcd.printf("alm(year  0..99)");
            cambio=encoder.getPulses();
            if(cambio<=0){cambio=0;}
            if(cambio>=99){cambio=99;}
            lcd.locate(0,1);
            lcd.printf("    ");
            lcd.locate(0,1);
            lcd.printf("%d",cambio);
            while(chan==0){encoder.reset();cont=3;}                  
            }
            an=cambio+2000;
            cambio=0;
            while(cont==3)
            {            
            lcd.locate(0,0);
            lcd.printf("alm(hours 0..23)");
            cambio=encoder.getPulses();
            if(cambio<=0){cambio=0;}
            if(cambio>=23){cambio=23;}
            lcd.locate(0,1);
            lcd.printf("    ");
            lcd.locate(0,1);
            lcd.printf("%d",cambio);
            while(chan==0){encoder.reset();cont=4;}                  
            }
            fle=cambio;
            cambio=0;
            while(cont==4)
            {            
            lcd.locate(0,0);
            lcd.printf("alm(minutes 0..59)");
            cambio=encoder.getPulses();
            if(cambio<=0){cambio=0;}
            if(cambio>=59){cambio=59;}
            lcd.locate(0,1);
            lcd.printf("    ");
            lcd.locate(0,1);
            lcd.printf("%d",cambio);
            while(chan==0){encoder.reset();cont=5;}                  
            }
            mi=cambio;
            cambio=0;
            while(cont==5)
            {            
            lcd.locate(0,0);
            lcd.printf("alm(seconds 0..59)");
            cambio=encoder.getPulses();
            if(cambio<=0){cambio=0;}
            if(cambio>=59){cambio=59;}
            lcd.locate(0,1);
            lcd.printf("    ");
            lcd.locate(0,1);
            lcd.printf("%d",cambio);
            while(chan==0){encoder.reset();cont=6;lcd.locate(0,0);lcd.printf("(              ");}                  
            }
            se=cambio;
            cambio=0;
            pla2=0;
            }

            cont=0;
   cicl:        if (rtc.getTime(tm) ) {
                if(rlo==0){pla=1;goto sk;}//si se presiona va a la configuración de la RTC
                if(rl==0){pla2=1;goto sk2;}//si se presiona va a la configuración de la Alarma 
                lcd.cls();
                lcd.locate(0,0);//muestra el valor de todos los parametros actuales en la RTC
                lcd.printf("%02d:%02d:%02d", tm.hour, tm.min, tm.sec);
                lcd.locate(0,1);
                lcd.printf("%s/%02d/%02d/%4d", rtc.weekdayToString(tm.wday), tm.date, tm.mon, tm.year);       
                if((tm.date==di)&&(tm.mon==me)&&(tm.year==an)&&(tm.hour==fle)&&(tm.min==mi)&&(tm.sec==se)){key=1;}//comparación de la Alarma
                while(key==1)
                    {
                        jod++;
                        ledr=0;buzz=1;
                        wait(0.5);
                        ledr=1;buzz=0;
                        wait(0.5);
                        if(chan!=1){key=0;jod=0;goto cicl;}//botón que para la Alarma
                        if(jod==7){key=0;mi=mi+1;if(mi==60){mi=0;fle=fle+1;if(fle==24){fle=0;di=di+1;if(di==31){di=1;me=me+1;if(me==12){me=1;an=an+1;}}}}jod=0;//condiciones de salto 
    
                        }
                    }
                wait(0.2);
                goto cicl;//blucle infinito hasta que suceda una interrupción
                }

         }
            


}