trabajo de creacion de un despertador por i2c configurado por un encoder
Dependencies: DebouncedIn QEI RTC-DS1307 mbed
Fork of I2C by
main.cpp
00001 #include "mbed.h" 00002 #include "Rtc_Ds1307.h" 00003 #include "DebouncedIn.h" 00004 #include "QEI.h" 00005 00006 Rtc_Ds1307 rtc(PTE0,PTE1); //Puertos para el modulo 00007 Serial pc(USBTX, USBRX, "pc"); //Puertos para el PC 00008 QEI wheel (PTD5, PTD0, NC, 100); //Configuracion encoder 00009 DebouncedIn Boton(PTA13); //Boton Encoder 00010 DigitalOut led1(PTD2); //Salida 00011 00012 int Dia=0; 00013 int Mes=0; 00014 int Anio=2015; 00015 int Horas=0; 00016 int Minutos=0; 00017 int Segundos=0; 00018 00019 char buffer[128]; 00020 int readptr = 0; 00021 00022 int main() 00023 { 00024 char c; 00025 Rtc_Ds1307::Time_rtc tm = {}; 00026 00027 while(1) 00028 { 00029 pc.printf("*************************************\n"); 00030 pc.printf("* Menu for RTC Test : *\n"); 00031 pc.printf("* leer - reads the clock *\n"); 00032 pc.printf("* empezar - start the clock *\n"); 00033 pc.printf("* parar - stop the clock *\n"); 00034 pc.printf("* configurar - write the clock *\n"); 00035 pc.printf("* ena - enable Square wave output *\n"); 00036 pc.printf("* dis - disable square wave outp. *\n"); 00037 pc.printf("*************************************\n"); 00038 00039 while( (c = pc.getc()) != '\n') 00040 { 00041 buffer[readptr++] = c; 00042 } 00043 buffer[readptr++] = 0; 00044 00045 // para leer los valores que tiene el reloj 00046 00047 if (strncmp(buffer, "leer", 4) == 0) 00048 { 00049 pc.printf("Performing read operation\n"); 00050 if (rtc.getTime(tm) ) 00051 { 00052 pc.printf("La hora es: %02d:%02d:%02d\n", tm.hour, tm.min, tm.sec); // coloca en pantalla la hora actual que hay almacenada 00053 pc.printf("La fecha es: %s, %02d/%02d/%04d\n", rtc.weekdayToString(tm.wday), tm.mon, tm.date, tm.year); // coloca en pantalla la fecha actual que hay almacenada 00054 } 00055 00056 } 00057 else if (strncmp(buffer, "configurar", 5) == 0) // se empieza por configurar el reloj interno 00058 pc.printf("Dia (0..31)"); 00059 pc.scanf("%d", &tm.date); // coloca lo que uno le ingrese como dia 00060 pc.printf("Mes (1..12)"); 00061 pc.scanf("%d", &tm.mon); // coloca lo que uno le ingrese como mes 00062 pc.printf("Anio"); 00063 pc.scanf("%d", &tm.year); // coloca lo que uno le ingrese como año 00064 pc.printf("Hora (0..23)"); 00065 pc.scanf("%d", &tm.hour); // coloca lo que uno le ingrese como hora 00066 pc.printf("Minutos (0..59)"); 00067 pc.scanf("%d", &tm.min); // coloca lo que uno le ingrese como minutos 00068 pc.printf("Segundos (0..59)"); 00069 pc.scanf("%d", &tm.sec); // coloca lo que uno le ingrese como segundos 00070 pc.printf("Performing write operation\n"); 00071 00072 while(pc.readable()) 00073 pc.getc(); 00074 rtc.setTime(tm, false, false); 00075 } 00076 00077 // para empezar a correr el reloj que se programó arriba 00078 00079 else if (strncmp(buffer, "empezar", 5) == 0) 00080 { 00081 readptr = 0; 00082 pc.printf("Dispositivo Iniciado\n"); 00083 rtc.startClock(); 00084 goto alarma; 00085 00086 } 00087 else if (strncmp(buffer, "parar", 4) == 0) // para parar el reloj 00088 { 00089 pc.printf("Performing stop operation\n"); 00090 rtc.stopClock(); 00091 } 00092 else if (strncmp(buffer, "ena", 3) == 0) 00093 { 00094 int rs; 00095 pc.printf("Please specify the frequency : [0 = 1Hz, 1 = 4.096kHz, 2 = 8.192kHz, 3 = 32.768kHz] "); 00096 scanf("%d", &rs); 00097 pc.printf("Enabling the output with %d option\n", rs); 00098 rtc.setSquareWaveOutput(true, (Rtc_Ds1307::SqwRateSelect_t)rs); 00099 } 00100 else if (strncmp(buffer, "dis", 3) == 0) 00101 { 00102 pc.printf("Disableing square wave output\n"); 00103 rtc.setSquareWaveOutput(false, Rtc_Ds1307::RS1Hz); 00104 } 00105 else 00106 { 00107 pc.printf("syntax error\n"); 00108 } 00109 readptr = 0; 00110 } 00111 00112 //se inicia a configurar la alarma 00113 00114 alarma: 00115 pc.printf("Configuracion de la alarma\n"); 00116 00117 00118 Dia: //empieza con el dia 00119 while(1) 00120 { 00121 Dia=Dia+wheel.getPulses(); //con el encoder se aumenta el dia 00122 wheel.reset(); 00123 00124 if(Dia>=31) 00125 { //como el dia no tiene mas de 31 dias, se mantiene en 31 al ingresar un valor diferente 00126 Dia=31; 00127 } 00128 else if (Dia<=0) 00129 { //no se pueden ingresar numeros negativos 00130 Dia=0; 00131 } 00132 pc.printf("Dia= %d\n",Dia); //muestra el valor 00133 00134 00135 if(Boton.falling()) 00136 { //presionando el encoder cambiamos al configurar el mes 00137 goto Mes; 00138 } 00139 } 00140 00141 Mes: //Configuracion del Mes para la alarma 00142 00143 while(1) 00144 { 00145 00146 Mes=Mes+wheel.getPulses(); //con el encoder aumentamos el mes 00147 wheel.reset(); 00148 00149 if(Mes>=12) 00150 { //maximo a 12 meses si es mayor, matiene a 12 00151 Mes=12; 00152 } 00153 else if (Mes<=0) 00154 { //se mantiene en 0 00155 Mes=0; 00156 } 00157 pc.printf("Mes= %d\n ",Mes); //muestra el mes 00158 00159 00160 if(Boton.falling()) 00161 { 00162 goto Anio; 00163 } 00164 00165 00166 } 00167 00168 Anio: 00169 while(1) 00170 { 00171 Anio=Anio+wheel.getPulses(); 00172 wheel.reset(); 00173 00174 00175 if(Anio>=3000) //se mantiene hasta el año 3000 si se ingresa un año mas grande 00176 { 00177 Anio=3000; 00178 } 00179 else if (Anio<=2015){ //como estamos en el 2015 una alarma no puede sonar antes de esa fecha 00180 Anio=2015; 00181 } 00182 pc.printf("Anio= %d\n",Anio); 00183 00184 00185 if(Boton.falling()) //presionando el encoder cambiamos a configurar la hora 00186 { 00187 goto Horas; 00188 } 00189 00190 } 00191 Horas: 00192 while(1) 00193 { 00194 00195 Horas=Horas+wheel.getPulses(); 00196 wheel.reset(); 00197 00198 00199 if(Horas>=23) 00200 { 00201 Horas=23; 00202 } 00203 else if (Horas<=0) 00204 { 00205 Horas=0; 00206 } 00207 pc.printf(" Hora=%d\n ",Horas); 00208 00209 00210 if(Boton.falling()){ //presionando el encoder cambiamos a configurar los minutos 00211 goto Minutos; 00212 } 00213 00214 00215 } 00216 Minutos: 00217 while(1) 00218 { 00219 00220 Minutos=Minutos+wheel.getPulses(); 00221 wheel.reset(); 00222 00223 00224 if(Minutos>=59) 00225 { 00226 Minutos=59; 00227 } 00228 else if (Horas<=0) 00229 { 00230 Minutos=0; 00231 } 00232 pc.printf(" Minuto=%d\n ",Minutos); 00233 00234 00235 if(Boton.falling()) 00236 { 00237 goto comp; 00238 } 00239 00240 } 00241 00242 comp: // para que muestre cuándo quedó configurada la alarma 00243 00244 pc.printf("La alarma se programara el: \n"); 00245 pc.printf(" Dia=%d Mes=%d Anio=%d Hora=%d Minuto=%d Segundo=%d\n ",Dia,Mes,Anio,Horas,Minutos,Segundos); 00246 00247 wait (3); 00248 00249 while(1) 00250 { 00251 rtc.getTime(tm); 00252 pc.printf("Hora actual: %02d:%02d:%02d\n", tm.hour, tm.min, tm.sec); 00253 pc.printf("Fecha actual: %02d/%02d/%04d\n", tm.mon, tm.date, tm.year); 00254 if(tm.hour>=Horas && tm.min>=Minutos &&tm.sec>=Segundos && tm.mon>=Mes && tm.date>=Dia && tm.year>=Anio){ 00255 led1=0; 00256 // pc.printf("La alarma se ha activado: \n"); 00257 } 00258 else { 00259 led1=1; 00260 } 00261 wait(1); 00262 } 00263 }
Generated on Sat Jul 16 2022 02:15:51 by 1.7.2