trabajo de creacion de un despertador por i2c configurado por un encoder

Dependencies:   DebouncedIn QEI RTC-DS1307 mbed

Fork of I2C by German Camilo Diaz Mejia

Committer:
GermanD
Date:
Fri Nov 20 13:49:02 2015 +0000
Revision:
4:fa48e78e9bba
Parent:
3:9e5e0b8d0e2a
Child:
5:d38b972a1813
Despertador manejado por medio del I2C que cambia los datos con un encoder

Who changed what in which revision?

UserRevisionLine numberNew contents of line
leihen 0:431183c5b136 1 #include "mbed.h"
leihen 0:431183c5b136 2 #include "Rtc_Ds1307.h"
demo71 3:9e5e0b8d0e2a 3 #include "DebouncedIn.h"
demo71 3:9e5e0b8d0e2a 4 #include "QEI.h"
GermanD 4:fa48e78e9bba 5
GermanD 4:fa48e78e9bba 6 Rtc_Ds1307 rtc(PTE0,PTE1); //Puertos para el modulo
GermanD 4:fa48e78e9bba 7 Serial pc(USBTX, USBRX, "pc"); //Puertos para el PC
GermanD 4:fa48e78e9bba 8 QEI wheel (PTD5, PTD0, NC, 100); //Configuracion encoder
GermanD 4:fa48e78e9bba 9 DebouncedIn Boton(PTA13); //Boton Encoder
GermanD 4:fa48e78e9bba 10 DigitalOut led1(LED1); //Salida
demo71 3:9e5e0b8d0e2a 11
GermanD 4:fa48e78e9bba 12 int Dia=0;
GermanD 4:fa48e78e9bba 13 int Mes=0;
GermanD 4:fa48e78e9bba 14 int Anio=2015;
GermanD 4:fa48e78e9bba 15 int Horas=0;
GermanD 4:fa48e78e9bba 16 int Minutos=0;
GermanD 4:fa48e78e9bba 17 int Segundos=0;
GermanD 4:fa48e78e9bba 18
leihen 0:431183c5b136 19 char buffer[128];
leihen 0:431183c5b136 20 int readptr = 0;
GermanD 4:fa48e78e9bba 21
GermanD 4:fa48e78e9bba 22 int main()
GermanD 4:fa48e78e9bba 23 {
leihen 0:431183c5b136 24 char c;
leihen 2:3be003301107 25 Rtc_Ds1307::Time_rtc tm = {};
leihen 0:431183c5b136 26
GermanD 4:fa48e78e9bba 27 while(1)
GermanD 4:fa48e78e9bba 28 {
GermanD 4:fa48e78e9bba 29 pc.printf("*************************************\n");
GermanD 4:fa48e78e9bba 30 pc.printf("* Menu for RTC Test : *\n");
GermanD 4:fa48e78e9bba 31 pc.printf("* read - reads the clock *\n");
GermanD 4:fa48e78e9bba 32 pc.printf("* start - start the clock *\n");
GermanD 4:fa48e78e9bba 33 pc.printf("* stop - stop the clock *\n");
GermanD 4:fa48e78e9bba 34 pc.printf("* write - write the clock *\n");
GermanD 4:fa48e78e9bba 35 pc.printf("* ena - enable Square wave output *\n");
GermanD 4:fa48e78e9bba 36 pc.printf("* dis - disable square wave outp. *\n");
GermanD 4:fa48e78e9bba 37 pc.printf("*************************************\n");
demo71 3:9e5e0b8d0e2a 38
GermanD 4:fa48e78e9bba 39 while( (c = pc.getc()) != '\n')
GermanD 4:fa48e78e9bba 40 {
GermanD 4:fa48e78e9bba 41 buffer[readptr++] = c;
leihen 0:431183c5b136 42 }
leihen 0:431183c5b136 43 buffer[readptr++] = 0;
GermanD 4:fa48e78e9bba 44 if (strncmp(buffer, "read", 4) == 0)
GermanD 4:fa48e78e9bba 45 {
leihen 0:431183c5b136 46 pc.printf("Performing read operation\n");
GermanD 4:fa48e78e9bba 47 if (rtc.getTime(tm) )
GermanD 4:fa48e78e9bba 48 {
GermanD 4:fa48e78e9bba 49 pc.printf("La hora actual es: %02d:%02d:%02d\n", tm.hour, tm.min, tm.sec);
GermanD 4:fa48e78e9bba 50 pc.printf("La fecha actual es: %s, %02d/%02d/%04d\n", rtc.weekdayToString(tm.wday), tm.mon, tm.date, tm.year);
GermanD 4:fa48e78e9bba 51 }
leihen 0:431183c5b136 52
GermanD 4:fa48e78e9bba 53 }
GermanD 4:fa48e78e9bba 54 else if (strncmp(buffer, "write", 5) == 0)
GermanD 4:fa48e78e9bba 55 {
GermanD 4:fa48e78e9bba 56 pc.printf("Dia (0..31)");
leihen 1:6dbe51fe0737 57 pc.scanf("%d", &tm.date);
GermanD 4:fa48e78e9bba 58 pc.printf("Mes (1..12)");
leihen 1:6dbe51fe0737 59 pc.scanf("%d", &tm.mon);
GermanD 4:fa48e78e9bba 60 pc.printf("Anno");
leihen 1:6dbe51fe0737 61 pc.scanf("%d", &tm.year);
GermanD 4:fa48e78e9bba 62 pc.printf("Hora (0..23)");
leihen 1:6dbe51fe0737 63 pc.scanf("%d", &tm.hour);
GermanD 4:fa48e78e9bba 64 pc.printf("Minutos (0..59)");
leihen 1:6dbe51fe0737 65 pc.scanf("%d", &tm.min);
GermanD 4:fa48e78e9bba 66 pc.printf("Segundos (0..59)");
leihen 1:6dbe51fe0737 67 pc.scanf("%d", &tm.sec);
leihen 0:431183c5b136 68 pc.printf("Performing write operation\n");
leihen 1:6dbe51fe0737 69
leihen 1:6dbe51fe0737 70 while(pc.readable())
GermanD 4:fa48e78e9bba 71 pc.getc();
leihen 1:6dbe51fe0737 72 rtc.setTime(tm, false, false);
GermanD 4:fa48e78e9bba 73 }
GermanD 4:fa48e78e9bba 74 else if (strncmp(buffer, "start", 5) == 0)
GermanD 4:fa48e78e9bba 75 {
demo71 3:9e5e0b8d0e2a 76 readptr = 0;
demo71 3:9e5e0b8d0e2a 77 pc.printf("Dispositivo Iniciado\n");
leihen 1:6dbe51fe0737 78 rtc.startClock();
GermanD 4:fa48e78e9bba 79 goto set_alarma;
GermanD 4:fa48e78e9bba 80
leihen 0:431183c5b136 81 }
GermanD 4:fa48e78e9bba 82 else if (strncmp(buffer, "stop", 4) == 0)
GermanD 4:fa48e78e9bba 83 {
leihen 0:431183c5b136 84 pc.printf("Performing stop operation\n");
leihen 1:6dbe51fe0737 85 rtc.stopClock();
leihen 1:6dbe51fe0737 86 }
GermanD 4:fa48e78e9bba 87 else if (strncmp(buffer, "ena", 3) == 0)
GermanD 4:fa48e78e9bba 88 {
leihen 1:6dbe51fe0737 89 int rs;
leihen 1:6dbe51fe0737 90 pc.printf("Please specify the frequency : [0 = 1Hz, 1 = 4.096kHz, 2 = 8.192kHz, 3 = 32.768kHz] ");
leihen 1:6dbe51fe0737 91 scanf("%d", &rs);
leihen 1:6dbe51fe0737 92 pc.printf("Enabling the output with %d option\n", rs);
leihen 2:3be003301107 93 rtc.setSquareWaveOutput(true, (Rtc_Ds1307::SqwRateSelect_t)rs);
leihen 1:6dbe51fe0737 94 }
GermanD 4:fa48e78e9bba 95 else if (strncmp(buffer, "dis", 3) == 0)
GermanD 4:fa48e78e9bba 96 {
leihen 1:6dbe51fe0737 97 pc.printf("Disableing square wave output\n");
leihen 2:3be003301107 98 rtc.setSquareWaveOutput(false, Rtc_Ds1307::RS1Hz);
leihen 0:431183c5b136 99 }
GermanD 4:fa48e78e9bba 100 else
GermanD 4:fa48e78e9bba 101 {
leihen 0:431183c5b136 102 pc.printf("syntax error\n");
leihen 0:431183c5b136 103 }
leihen 0:431183c5b136 104 readptr = 0;
demo71 3:9e5e0b8d0e2a 105 }
GermanD 4:fa48e78e9bba 106
GermanD 4:fa48e78e9bba 107 set_alarma: //se inicia a configurar la alarma
GermanD 4:fa48e78e9bba 108 pc.printf("Configuracion de la alarma\n");
demo71 3:9e5e0b8d0e2a 109
demo71 3:9e5e0b8d0e2a 110
GermanD 4:fa48e78e9bba 111 set_Dia: //empieza con el dia
GermanD 4:fa48e78e9bba 112 while(1)
GermanD 4:fa48e78e9bba 113 {
GermanD 4:fa48e78e9bba 114 Dia=Dia+wheel.getPulses(); //con el encoder se aumenta el dia
demo71 3:9e5e0b8d0e2a 115 wheel.reset();
demo71 3:9e5e0b8d0e2a 116
GermanD 4:fa48e78e9bba 117 if(Dia>=31)
GermanD 4:fa48e78e9bba 118 { //como el dia no tiene mas de 31 dias, se mantiene en 31 al ingresar un valor diferente
GermanD 4:fa48e78e9bba 119 Dia=31;
demo71 3:9e5e0b8d0e2a 120 }
GermanD 4:fa48e78e9bba 121 else if (Dia<=0)
GermanD 4:fa48e78e9bba 122 { //no hay dias negativos, el valor se mantiene en 0 en caso de ingresar uno asi
GermanD 4:fa48e78e9bba 123 Dia=0;
demo71 3:9e5e0b8d0e2a 124 }
GermanD 4:fa48e78e9bba 125 pc.printf("Dia= %d\n",Dia); //muestra
demo71 3:9e5e0b8d0e2a 126
demo71 3:9e5e0b8d0e2a 127
GermanD 4:fa48e78e9bba 128 if(Boton.falling())
GermanD 4:fa48e78e9bba 129 { //con el enconder presionado pasamos a mes
GermanD 4:fa48e78e9bba 130 goto set_Mes;
demo71 3:9e5e0b8d0e2a 131 }
demo71 3:9e5e0b8d0e2a 132 }
demo71 3:9e5e0b8d0e2a 133
GermanD 4:fa48e78e9bba 134 set_Mes: //Configuracion del Mes para la alarma
GermanD 4:fa48e78e9bba 135
GermanD 4:fa48e78e9bba 136 while(1)
GermanD 4:fa48e78e9bba 137 {
demo71 3:9e5e0b8d0e2a 138
GermanD 4:fa48e78e9bba 139 Mes=Mes+wheel.getPulses(); //con el encoder aumentamos el mes
GermanD 4:fa48e78e9bba 140 wheel.reset();
GermanD 4:fa48e78e9bba 141
GermanD 4:fa48e78e9bba 142 if(Mes>=12)
GermanD 4:fa48e78e9bba 143 { //maximo a 12 meses si es mayor, matiene a 12
GermanD 4:fa48e78e9bba 144 Mes=12;
demo71 3:9e5e0b8d0e2a 145 }
GermanD 4:fa48e78e9bba 146 else if (Mes<=0)
GermanD 4:fa48e78e9bba 147 { //de igual forma mantiene en 0 a un valor menor
GermanD 4:fa48e78e9bba 148 Mes=0;
demo71 3:9e5e0b8d0e2a 149 }
GermanD 4:fa48e78e9bba 150 pc.printf("Mes= %d\n ",Mes); //muestra el mes
demo71 3:9e5e0b8d0e2a 151
demo71 3:9e5e0b8d0e2a 152
GermanD 4:fa48e78e9bba 153 if(Boton.falling())
GermanD 4:fa48e78e9bba 154 {
GermanD 4:fa48e78e9bba 155 goto set_Anio;
demo71 3:9e5e0b8d0e2a 156 }
GermanD 4:fa48e78e9bba 157
demo71 3:9e5e0b8d0e2a 158
demo71 3:9e5e0b8d0e2a 159 }
GermanD 4:fa48e78e9bba 160 set_Anio:
GermanD 4:fa48e78e9bba 161 while(1)
GermanD 4:fa48e78e9bba 162 {
GermanD 4:fa48e78e9bba 163 Anio=Anio+wheel.getPulses();
demo71 3:9e5e0b8d0e2a 164 wheel.reset();
GermanD 4:fa48e78e9bba 165
demo71 3:9e5e0b8d0e2a 166
GermanD 4:fa48e78e9bba 167 if(Anio>=3000) //se mantiene hasta el anio 3000 si se ingresa un anio mas grande
GermanD 4:fa48e78e9bba 168 {
GermanD 4:fa48e78e9bba 169 Anio=3000;
demo71 3:9e5e0b8d0e2a 170 }
GermanD 4:fa48e78e9bba 171 else if (Anio<=2015){ //como estamos en el 2015 una alarma no puede sonar antes de esa fecha
GermanD 4:fa48e78e9bba 172 Anio=2015;
demo71 3:9e5e0b8d0e2a 173 }
GermanD 4:fa48e78e9bba 174 pc.printf("Anno= %d\n",Anio);
demo71 3:9e5e0b8d0e2a 175
demo71 3:9e5e0b8d0e2a 176
GermanD 4:fa48e78e9bba 177 if(Boton.falling())
GermanD 4:fa48e78e9bba 178 {
GermanD 4:fa48e78e9bba 179 goto set_Horas;
leihen 0:431183c5b136 180 }
GermanD 4:fa48e78e9bba 181
demo71 3:9e5e0b8d0e2a 182 }
GermanD 4:fa48e78e9bba 183 set_Horas:
GermanD 4:fa48e78e9bba 184 while(1)
GermanD 4:fa48e78e9bba 185 {
GermanD 4:fa48e78e9bba 186
GermanD 4:fa48e78e9bba 187 Horas=Horas+wheel.getPulses();
demo71 3:9e5e0b8d0e2a 188 wheel.reset();
GermanD 4:fa48e78e9bba 189
demo71 3:9e5e0b8d0e2a 190
GermanD 4:fa48e78e9bba 191 if(Horas>=23)
GermanD 4:fa48e78e9bba 192 {
GermanD 4:fa48e78e9bba 193 Horas=23;
demo71 3:9e5e0b8d0e2a 194 }
GermanD 4:fa48e78e9bba 195 else if (Horas<=0)
GermanD 4:fa48e78e9bba 196 {
GermanD 4:fa48e78e9bba 197 Horas=0;
demo71 3:9e5e0b8d0e2a 198 }
GermanD 4:fa48e78e9bba 199 pc.printf(" Hora=%d\n ",Horas);
demo71 3:9e5e0b8d0e2a 200
demo71 3:9e5e0b8d0e2a 201
GermanD 4:fa48e78e9bba 202 if(Boton.falling()){
GermanD 4:fa48e78e9bba 203 goto set_Minutos;
demo71 3:9e5e0b8d0e2a 204 }
GermanD 4:fa48e78e9bba 205
demo71 3:9e5e0b8d0e2a 206
demo71 3:9e5e0b8d0e2a 207 }
GermanD 4:fa48e78e9bba 208 set_Minutos:
GermanD 4:fa48e78e9bba 209 while(1)
GermanD 4:fa48e78e9bba 210 {
demo71 3:9e5e0b8d0e2a 211
GermanD 4:fa48e78e9bba 212 Minutos=Minutos+wheel.getPulses();
demo71 3:9e5e0b8d0e2a 213 wheel.reset();
GermanD 4:fa48e78e9bba 214
demo71 3:9e5e0b8d0e2a 215
GermanD 4:fa48e78e9bba 216 if(Minutos>=59)
GermanD 4:fa48e78e9bba 217 {
GermanD 4:fa48e78e9bba 218 Minutos=59;
demo71 3:9e5e0b8d0e2a 219 }
GermanD 4:fa48e78e9bba 220 else if (Horas<=0)
GermanD 4:fa48e78e9bba 221 {
GermanD 4:fa48e78e9bba 222 Minutos=0;
demo71 3:9e5e0b8d0e2a 223 }
GermanD 4:fa48e78e9bba 224 pc.printf(" Min=%d\n ",Minutos);
demo71 3:9e5e0b8d0e2a 225
demo71 3:9e5e0b8d0e2a 226
GermanD 4:fa48e78e9bba 227 if(Boton.falling())
GermanD 4:fa48e78e9bba 228 {
demo71 3:9e5e0b8d0e2a 229 goto set_comp;
demo71 3:9e5e0b8d0e2a 230 }
GermanD 4:fa48e78e9bba 231
demo71 3:9e5e0b8d0e2a 232 }
demo71 3:9e5e0b8d0e2a 233
demo71 3:9e5e0b8d0e2a 234 set_comp:
demo71 3:9e5e0b8d0e2a 235
GermanD 4:fa48e78e9bba 236 pc.printf("La alarma se programara el: \n");
GermanD 4:fa48e78e9bba 237 pc.printf(" Dia=%d Mes=%d Anio=%d Hora=%d Min=%d Seg=%d\n ",Dia,Mes,Anio,Horas,Minutos,Segundos);
demo71 3:9e5e0b8d0e2a 238
GermanD 4:fa48e78e9bba 239 while(1)
GermanD 4:fa48e78e9bba 240 {
demo71 3:9e5e0b8d0e2a 241 rtc.getTime(tm);
GermanD 4:fa48e78e9bba 242 pc.printf("La hora actual es: %02d:%02d:%02d\n", tm.hour, tm.min, tm.sec);
GermanD 4:fa48e78e9bba 243 pc.printf("La fecha actual es: %02d/%02d/%04d\n", tm.mon, tm.date, tm.year);
GermanD 4:fa48e78e9bba 244 if(tm.hour>=Horas && tm.min>=Minutos &&tm.sec>=Segundos && tm.mon>=Mes && tm.date>=Dia && tm.year>=Anio){
GermanD 4:fa48e78e9bba 245 led1=0;
GermanD 4:fa48e78e9bba 246 pc.printf("La alarma se ha activado: \n");
demo71 3:9e5e0b8d0e2a 247 }
demo71 3:9e5e0b8d0e2a 248 else {
GermanD 4:fa48e78e9bba 249 led1=1;
demo71 3:9e5e0b8d0e2a 250 }
demo71 3:9e5e0b8d0e2a 251 wait(1);
GermanD 4:fa48e78e9bba 252 }
GermanD 4:fa48e78e9bba 253 }