Santiago muñoz / Mbed 2 deprecated Despertador_Rtc_Encoder_LCD_KL25Z

Dependencies:   QEI RTC-DS1307 TextLCD mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "Rtc_Ds1307.h"
00003 #include "TextLCD.h"
00004 #include "QEI.h"
00005 
00006 TextLCD lcd(PTC7, PTC0, PTC3, PTC4, PTC5, PTC6); // rs, e, d4-d7
00007 Rtc_Ds1307 rtc(PTE0, PTE1);//Dato,Reloj
00008 QEI encoder (PTC12, PTC13, NC, 624);//pines de etrada de comparación del encoder
00009 DigitalIn chan(PTA13);//botón del encoder
00010 DigitalIn rlo(PTD0);//pulsador de la freescale para configurar la RTC
00011 DigitalIn rl(PTD5);//pulsador de la freescale para configurar la Alarma
00012 DigitalOut ledr(PTD1);//Led indicador de la alarma
00013 DigitalOut buzz(PTA17);//Buzzer indiciador de la alarma
00014 char buffer[128];
00015 int readptr = 0,segundos =0,cambio=0,cont=0,pla=0,pla2=0,key=0;//variables del programa
00016 int di=0,me=0,an=0,fle=0,mi=0,se=0,jod=0;//varaibles para la alarma
00017 int main() 
00018 {
00019 Rtc_Ds1307::Time_rtc tm = {};
00020 ledr=1;//Led apagado
00021 while(1){
00022 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)
00023             {
00024             buzz=0;//Buzzer apagado
00025             ledr=1;//Led apagado
00026             jod=0;
00027             key=0;
00028             while(rlo==1){}//anti-rebotes
00029             lcd.cls();
00030             while(cont==0)
00031             {
00032             rtc.stopClock();//para el clock de la RTC
00033             lcd.locate(0,0);
00034             lcd.printf("(Day 1..31)");//muestra en el LCD el parametro a asignar
00035             cambio=encoder.getPulses();//valor del encoder
00036             if(cambio<=1){cambio=1;}//limite inferior para este parametro
00037             if(cambio>=31){cambio=31;}//limite superior para este parametro
00038             lcd.locate(0,1);
00039             lcd.printf("    ");
00040             lcd.locate(0,1);
00041             lcd.printf("%d",cambio);//valor acutal
00042             while(chan==0){encoder.reset();cont=1;}//si presiona el botón del encoder salta al siguiente parametro
00043             }
00044             tm.date=cambio;//asignación del valor elegido al parametro que se desea asignar en la RTC
00045             cambio=0;//limpia la variable
00046             while(cont==1)
00047             {            
00048             lcd.locate(0,0);
00049             lcd.printf("(month 1..12)");
00050             cambio=encoder.getPulses();
00051             if(cambio<=1){cambio=1;}
00052             if(cambio>=12){cambio=12;}
00053             lcd.locate(0,1);
00054             lcd.printf("    ");
00055             lcd.locate(0,1);
00056             lcd.printf("%d",cambio);
00057             while(chan==0){encoder.reset();cont=2;}                  
00058             }
00059             tm.mon=cambio;
00060             cambio=0;            
00061             while(cont==2)
00062             {            
00063             lcd.locate(0,0);
00064             lcd.printf("(year   0-99)");
00065             cambio=encoder.getPulses();
00066             if(cambio<=0){cambio=0;}
00067             if(cambio>=99){cambio=99;}
00068             lcd.locate(0,1);
00069             lcd.printf("    ");
00070             lcd.locate(0,1);
00071             lcd.printf("%d",cambio);
00072             while(chan==0){encoder.reset();cont=3;}                  
00073             }
00074             tm.year=cambio+2000;
00075             cambio=0;
00076             while(cont==3)
00077             {            
00078             lcd.locate(0,0);
00079             lcd.printf("(hours 0..23)");
00080             cambio=encoder.getPulses();
00081             if(cambio<=0){cambio=0;}
00082             if(cambio>=23){cambio=23;}
00083             lcd.locate(0,1);
00084             lcd.printf("    ");
00085             lcd.locate(0,1);
00086             lcd.printf("%d",cambio);
00087             while(chan==0){encoder.reset();cont=4;cambio=cambio;}                  
00088             }
00089             tm.hour=cambio;
00090             cambio=0;
00091             while(cont==4)
00092             {            
00093             lcd.locate(0,0);
00094             lcd.printf("(minutes 0..59)");
00095             cambio=encoder.getPulses();
00096             if(cambio<=0){cambio=0;}
00097             if(cambio>=59){cambio=59;}
00098             lcd.locate(0,1);
00099             lcd.printf("    ");
00100             lcd.locate(0,1);
00101             lcd.printf("%d",cambio);
00102             while(chan==0){encoder.reset();cont=5;}                  
00103             }
00104             tm.min=cambio;
00105             cambio=0;
00106             while(cont==5)
00107             {            
00108             lcd.locate(0,0);
00109             lcd.printf("(seconds 0..59)");
00110             cambio=encoder.getPulses();
00111             if(cambio<=0){cambio=0;}
00112             if(cambio>=59){cambio=59;}
00113             lcd.locate(0,1);
00114             lcd.printf("    ");
00115             lcd.locate(0,1);
00116             lcd.printf("%d",cambio);
00117             while(chan==0){encoder.reset();cont=6;lcd.locate(0,0);lcd.printf("(              ");}                  
00118             }
00119             tm.sec=cambio;
00120             cambio=1;
00121             while(cont==6)
00122             {            
00123             lcd.locate(0,0);
00124             lcd.printf("(sunday=1)");
00125             cambio=encoder.getPulses();
00126             if(cambio<=1){cambio=1;}
00127             if(cambio>=7){cambio=7;}
00128             lcd.locate(0,1);
00129             lcd.printf("    ");
00130             lcd.locate(0,1);
00131             lcd.printf("%d",cambio);
00132             while(chan==0){encoder.reset();cont=7;}                  
00133             }
00134             tm.wday=cambio;
00135             cambio=0;
00136             rtc.setTime(tm, false, false);
00137             rtc.startClock();//inicia el conteo en la RTC
00138             pla=0;
00139             }
00140             cont=0;
00141             
00142 sk2:         if(pla2==1)//Rutina para la configuración de los parametros en la Alarma (día,mes,año,hora,minutos,segundos)
00143             {
00144             buzz=0;
00145             ledr=1;
00146             jod=0;
00147             key=0;   
00148             while(rl==1){}
00149             lcd.cls();
00150             while(cont==0)
00151             {
00152             lcd.locate(0,0);
00153             lcd.printf("alm(Day 1..31)");
00154             cambio=encoder.getPulses();
00155             if(cambio<=1){cambio=1;}
00156             if(cambio>=31){cambio=31;}
00157             lcd.locate(0,1);
00158             lcd.printf("    ");
00159             lcd.locate(0,1);
00160             lcd.printf("%d",cambio);
00161             while(chan==0){encoder.reset();cont=1;}
00162             }
00163             di=cambio;
00164             cambio=0;
00165             while(cont==1)
00166             {            
00167             lcd.locate(0,0);
00168             lcd.printf("alm(month 1..12)");
00169             cambio=encoder.getPulses();
00170             if(cambio<=1){cambio=1;}
00171             if(cambio>=12){cambio=12;}
00172             lcd.locate(0,1);
00173             lcd.printf("    ");
00174             lcd.locate(0,1);
00175             lcd.printf("%d",cambio);
00176             while(chan==0){encoder.reset();cont=2;}                  
00177             }
00178             me=cambio;
00179             cambio=0;            
00180             while(cont==2)
00181             {            
00182             lcd.locate(0,0);
00183             lcd.printf("alm(year  0..99)");
00184             cambio=encoder.getPulses();
00185             if(cambio<=0){cambio=0;}
00186             if(cambio>=99){cambio=99;}
00187             lcd.locate(0,1);
00188             lcd.printf("    ");
00189             lcd.locate(0,1);
00190             lcd.printf("%d",cambio);
00191             while(chan==0){encoder.reset();cont=3;}                  
00192             }
00193             an=cambio+2000;
00194             cambio=0;
00195             while(cont==3)
00196             {            
00197             lcd.locate(0,0);
00198             lcd.printf("alm(hours 0..23)");
00199             cambio=encoder.getPulses();
00200             if(cambio<=0){cambio=0;}
00201             if(cambio>=23){cambio=23;}
00202             lcd.locate(0,1);
00203             lcd.printf("    ");
00204             lcd.locate(0,1);
00205             lcd.printf("%d",cambio);
00206             while(chan==0){encoder.reset();cont=4;}                  
00207             }
00208             fle=cambio;
00209             cambio=0;
00210             while(cont==4)
00211             {            
00212             lcd.locate(0,0);
00213             lcd.printf("alm(minutes 0..59)");
00214             cambio=encoder.getPulses();
00215             if(cambio<=0){cambio=0;}
00216             if(cambio>=59){cambio=59;}
00217             lcd.locate(0,1);
00218             lcd.printf("    ");
00219             lcd.locate(0,1);
00220             lcd.printf("%d",cambio);
00221             while(chan==0){encoder.reset();cont=5;}                  
00222             }
00223             mi=cambio;
00224             cambio=0;
00225             while(cont==5)
00226             {            
00227             lcd.locate(0,0);
00228             lcd.printf("alm(seconds 0..59)");
00229             cambio=encoder.getPulses();
00230             if(cambio<=0){cambio=0;}
00231             if(cambio>=59){cambio=59;}
00232             lcd.locate(0,1);
00233             lcd.printf("    ");
00234             lcd.locate(0,1);
00235             lcd.printf("%d",cambio);
00236             while(chan==0){encoder.reset();cont=6;lcd.locate(0,0);lcd.printf("(              ");}                  
00237             }
00238             se=cambio;
00239             cambio=0;
00240             pla2=0;
00241             }
00242 
00243             cont=0;
00244    cicl:        if (rtc.getTime(tm) ) {
00245                 if(rlo==0){pla=1;goto sk;}//si se presiona va a la configuración de la RTC
00246                 if(rl==0){pla2=1;goto sk2;}//si se presiona va a la configuración de la Alarma 
00247                 lcd.cls();
00248                 lcd.locate(0,0);//muestra el valor de todos los parametros actuales en la RTC
00249                 lcd.printf("%02d:%02d:%02d", tm.hour, tm.min, tm.sec);
00250                 lcd.locate(0,1);
00251                 lcd.printf("%s/%02d/%02d/%4d", rtc.weekdayToString(tm.wday), tm.date, tm.mon, tm.year);       
00252                 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
00253                 while(key==1)
00254                     {
00255                         jod++;
00256                         ledr=0;buzz=1;
00257                         wait(1);
00258                         ledr=1;buzz=0;
00259                         wait(0.5);
00260                         if(chan!=1){key=0;jod=0;goto cicl;}//botón que para la Alarma
00261                         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 
00262     
00263                         }
00264                     }
00265                 wait(0.2);
00266                 goto cicl;//blucle infinito hasta que suceda una interrupción
00267                 }
00268 
00269          }
00270             
00271 
00272 
00273 }
00274