Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: QEI RTC-DS1307 TextLCD mbed
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
Generated on Thu Jul 14 2022 15:22:40 by
1.7.2