Tarea_I2C_Alarma

Dependencies:   DebouncedIn QEI RTC-DS1307 mbed

Committer:
szapataa
Date:
Mon Nov 23 15:12:03 2015 +0000
Revision:
0:642fe2aac275
Tarea_I2C_Alarma

Who changed what in which revision?

UserRevisionLine numberNew contents of line
szapataa 0:642fe2aac275 1 #include "mbed.h"
szapataa 0:642fe2aac275 2 #include "Rtc_Ds1307.h"
szapataa 0:642fe2aac275 3 #include "DebouncedIn.h"
szapataa 0:642fe2aac275 4 #include "QEI.h"
szapataa 0:642fe2aac275 5
szapataa 0:642fe2aac275 6 //RtcCls rtc(p28, p27, p29, true);
szapataa 0:642fe2aac275 7 Rtc_Ds1307 rtc(PTE0,PTE1); /*modulo I2C*/
szapataa 0:642fe2aac275 8
szapataa 0:642fe2aac275 9 Serial pc(USBTX, USBRX, "pc");
szapataa 0:642fe2aac275 10
szapataa 0:642fe2aac275 11
szapataa 0:642fe2aac275 12 //Configuracion encoder
szapataa 0:642fe2aac275 13 QEI wheel (PTA5, PTA4, NC, 100);
szapataa 0:642fe2aac275 14
szapataa 0:642fe2aac275 15 //Botones
szapataa 0:642fe2aac275 16 DebouncedIn BotonENC(PTD5); //Boton Encoder
szapataa 0:642fe2aac275 17
szapataa 0:642fe2aac275 18 DebouncedIn Boton2(PTE2); //Boton para confirmar
szapataa 0:642fe2aac275 19
szapataa 0:642fe2aac275 20 //salida led
szapataa 0:642fe2aac275 21 DigitalOut myled(LED1);
szapataa 0:642fe2aac275 22 int dia=0,mes=0,anno=2015,hor=0,min=0,seg=0;
szapataa 0:642fe2aac275 23
szapataa 0:642fe2aac275 24 char buffer[128];
szapataa 0:642fe2aac275 25 int readptr = 0;
szapataa 0:642fe2aac275 26 int start=0;
szapataa 0:642fe2aac275 27 int Config;
szapataa 0:642fe2aac275 28
szapataa 0:642fe2aac275 29 int main() {
szapataa 0:642fe2aac275 30 char c;
szapataa 0:642fe2aac275 31 Rtc_Ds1307::Time_rtc tm = {};
szapataa 0:642fe2aac275 32
szapataa 0:642fe2aac275 33 while(1) {
szapataa 0:642fe2aac275 34
szapataa 0:642fe2aac275 35 set_reloj:
szapataa 0:642fe2aac275 36
szapataa 0:642fe2aac275 37 pc.printf("*************************************\n");
szapataa 0:642fe2aac275 38 pc.printf("* Menu for RTC Test : *\n");
szapataa 0:642fe2aac275 39 pc.printf("* read - reads the clock *\n");
szapataa 0:642fe2aac275 40 pc.printf("* start - start the clock *\n");
szapataa 0:642fe2aac275 41 pc.printf("* stop - stop the clock *\n");
szapataa 0:642fe2aac275 42 pc.printf("* write - write the clock *\n");
szapataa 0:642fe2aac275 43 pc.printf("* ena - enable Square wave output *\n");
szapataa 0:642fe2aac275 44 pc.printf("* dis - disable square wave outp. *\n");
szapataa 0:642fe2aac275 45 pc.printf("*************************************\n");
szapataa 0:642fe2aac275 46
szapataa 0:642fe2aac275 47 while( (c = pc.getc()) != '\n') {
szapataa 0:642fe2aac275 48 buffer[readptr++] = c;
szapataa 0:642fe2aac275 49 }
szapataa 0:642fe2aac275 50 buffer[readptr++] = 0;
szapataa 0:642fe2aac275 51 if (strncmp(buffer, "read", 4) == 0) {
szapataa 0:642fe2aac275 52 // perform read
szapataa 0:642fe2aac275 53 pc.printf("Performing read operation\n");
szapataa 0:642fe2aac275 54 if (rtc.getTime(tm) ) {
szapataa 0:642fe2aac275 55 pc.printf("The current time is : %02d:%02d:%02d\n", tm.hour, tm.min, tm.sec);
szapataa 0:642fe2aac275 56 pc.printf("The current date is : %s, %02d/%02d/%04d\n", rtc.weekdayToString(tm.wday), tm.mon, tm.date, tm.year);
szapataa 0:642fe2aac275 57 }
szapataa 0:642fe2aac275 58
szapataa 0:642fe2aac275 59 }
szapataa 0:642fe2aac275 60 else if (strncmp(buffer, "write", 5) == 0) {
szapataa 0:642fe2aac275 61 // perform write
szapataa 0:642fe2aac275 62 pc.printf("Enter the date (date 0..31)");
szapataa 0:642fe2aac275 63 pc.scanf("%d", &tm.date);
szapataa 0:642fe2aac275 64 pc.printf("Enter the date (month 1..12)");
szapataa 0:642fe2aac275 65 pc.scanf("%d", &tm.mon);
szapataa 0:642fe2aac275 66 pc.printf("Enter the date (year)");
szapataa 0:642fe2aac275 67 pc.scanf("%d", &tm.year);
szapataa 0:642fe2aac275 68 pc.printf("Enter the time (hours 0..23)");
szapataa 0:642fe2aac275 69 pc.scanf("%d", &tm.hour);
szapataa 0:642fe2aac275 70 pc.printf("Enter the time (minutes 0..59)");
szapataa 0:642fe2aac275 71 pc.scanf("%d", &tm.min);
szapataa 0:642fe2aac275 72 pc.printf("Enter the time (seconds 0..59)");
szapataa 0:642fe2aac275 73 pc.scanf("%d", &tm.sec);
szapataa 0:642fe2aac275 74 pc.printf("Performing write operation\n");
szapataa 0:642fe2aac275 75
szapataa 0:642fe2aac275 76 while(pc.readable())
szapataa 0:642fe2aac275 77 pc.getc();
szapataa 0:642fe2aac275 78 rtc.setTime(tm, false, false);
szapataa 0:642fe2aac275 79 }
szapataa 0:642fe2aac275 80 else if (strncmp(buffer, "start", 5) == 0) {
szapataa 0:642fe2aac275 81 // start
szapataa 0:642fe2aac275 82 readptr = 0;
szapataa 0:642fe2aac275 83 pc.printf("Dispositivo Iniciado\n");
szapataa 0:642fe2aac275 84 rtc.startClock();
szapataa 0:642fe2aac275 85 goto set_prev;
szapataa 0:642fe2aac275 86
szapataa 0:642fe2aac275 87
szapataa 0:642fe2aac275 88 }
szapataa 0:642fe2aac275 89 else if (strncmp(buffer, "stop", 4) == 0) {
szapataa 0:642fe2aac275 90 // stop
szapataa 0:642fe2aac275 91 pc.printf("Performing stop operation\n");
szapataa 0:642fe2aac275 92 rtc.stopClock();
szapataa 0:642fe2aac275 93 }
szapataa 0:642fe2aac275 94 else if (strncmp(buffer, "ena", 3) == 0) {
szapataa 0:642fe2aac275 95 int rs;
szapataa 0:642fe2aac275 96 pc.printf("Please specify the frequency : [0 = 1Hz, 1 = 4.096kHz, 2 = 8.192kHz, 3 = 32.768kHz] ");
szapataa 0:642fe2aac275 97 scanf("%d", &rs);
szapataa 0:642fe2aac275 98 pc.printf("Enabling the output with %d option\n", rs);
szapataa 0:642fe2aac275 99 rtc.setSquareWaveOutput(true, (Rtc_Ds1307::SqwRateSelect_t)rs);
szapataa 0:642fe2aac275 100 }
szapataa 0:642fe2aac275 101 else if (strncmp(buffer, "dis", 3) == 0) {
szapataa 0:642fe2aac275 102 pc.printf("Disableing square wave output\n");
szapataa 0:642fe2aac275 103 rtc.setSquareWaveOutput(false, Rtc_Ds1307::RS1Hz);
szapataa 0:642fe2aac275 104 }
szapataa 0:642fe2aac275 105 else {
szapataa 0:642fe2aac275 106 pc.printf("syntax error\n");
szapataa 0:642fe2aac275 107 }
szapataa 0:642fe2aac275 108 readptr = 0;
szapataa 0:642fe2aac275 109 //pc.printf("\n\n\n");
szapataa 0:642fe2aac275 110 }
szapataa 0:642fe2aac275 111
szapataa 0:642fe2aac275 112
szapataa 0:642fe2aac275 113 set_prev:
szapataa 0:642fe2aac275 114
szapataa 0:642fe2aac275 115
szapataa 0:642fe2aac275 116 if (Config ==1){
szapataa 0:642fe2aac275 117 readptr = 0;
szapataa 0:642fe2aac275 118 goto set_reloj;
szapataa 0:642fe2aac275 119 }
szapataa 0:642fe2aac275 120
szapataa 0:642fe2aac275 121
szapataa 0:642fe2aac275 122
szapataa 0:642fe2aac275 123
szapataa 0:642fe2aac275 124 set_alarma:
szapataa 0:642fe2aac275 125 pc.printf("******* Configuracion Alarma *******\n");
szapataa 0:642fe2aac275 126
szapataa 0:642fe2aac275 127
szapataa 0:642fe2aac275 128 /*inicia seleccion anno*/
szapataa 0:642fe2aac275 129 set_anno:
szapataa 0:642fe2aac275 130 while(1){
szapataa 0:642fe2aac275 131
szapataa 0:642fe2aac275 132 anno=anno+wheel.getPulses();
szapataa 0:642fe2aac275 133 wheel.reset();
szapataa 0:642fe2aac275 134
szapataa 0:642fe2aac275 135 /*restriccion del año--no se puede config alarma hacia el pasado*/
szapataa 0:642fe2aac275 136
szapataa 0:642fe2aac275 137 if(anno>=2100){
szapataa 0:642fe2aac275 138 anno=2100;
szapataa 0:642fe2aac275 139 }
szapataa 0:642fe2aac275 140 else if (anno<=2015){
szapataa 0:642fe2aac275 141 anno=2015;
szapataa 0:642fe2aac275 142 }
szapataa 0:642fe2aac275 143 pc.printf("*Anno=%d\n ",anno);
szapataa 0:642fe2aac275 144
szapataa 0:642fe2aac275 145
szapataa 0:642fe2aac275 146 if(BotonENC.falling()){
szapataa 0:642fe2aac275 147 goto set_mes;
szapataa 0:642fe2aac275 148 }
szapataa 0:642fe2aac275 149 if(Boton2.falling()){
szapataa 0:642fe2aac275 150 goto set_comp;
szapataa 0:642fe2aac275 151 }
szapataa 0:642fe2aac275 152
szapataa 0:642fe2aac275 153 }
szapataa 0:642fe2aac275 154 /*termina seleccion anno*/
szapataa 0:642fe2aac275 155
szapataa 0:642fe2aac275 156 /*seleccion mes*/
szapataa 0:642fe2aac275 157 set_mes:
szapataa 0:642fe2aac275 158 while(1){
szapataa 0:642fe2aac275 159
szapataa 0:642fe2aac275 160 mes=mes+wheel.getPulses();
szapataa 0:642fe2aac275 161 wheel.reset();
szapataa 0:642fe2aac275 162
szapataa 0:642fe2aac275 163 /*restricción mes--maximo 12 meses*/
szapataa 0:642fe2aac275 164
szapataa 0:642fe2aac275 165 if(mes>=12){
szapataa 0:642fe2aac275 166 mes=12;}
szapataa 0:642fe2aac275 167 else if (mes<=0){
szapataa 0:642fe2aac275 168 mes=0;}
szapataa 0:642fe2aac275 169 pc.printf("*Mes=%d\n ",mes);
szapataa 0:642fe2aac275 170
szapataa 0:642fe2aac275 171 if(BotonENC.falling()){
szapataa 0:642fe2aac275 172 goto set_dia;}
szapataa 0:642fe2aac275 173 if(Boton2.falling()){
szapataa 0:642fe2aac275 174 goto set_comp;}
szapataa 0:642fe2aac275 175
szapataa 0:642fe2aac275 176 }
szapataa 0:642fe2aac275 177 /*termina seleccion mes*/
szapataa 0:642fe2aac275 178
szapataa 0:642fe2aac275 179 /*inicia dia*/
szapataa 0:642fe2aac275 180 set_dia:
szapataa 0:642fe2aac275 181 while(1){
szapataa 0:642fe2aac275 182
szapataa 0:642fe2aac275 183 dia=dia+wheel.getPulses();
szapataa 0:642fe2aac275 184 wheel.reset();
szapataa 0:642fe2aac275 185 /*restricción al numero de dias--maximo 31--*/
szapataa 0:642fe2aac275 186 if(dia>=31){
szapataa 0:642fe2aac275 187 dia=31;}
szapataa 0:642fe2aac275 188 else if (dia<=0){
szapataa 0:642fe2aac275 189 dia=0;}
szapataa 0:642fe2aac275 190
szapataa 0:642fe2aac275 191 pc.printf("*Dia=%d\n ",dia);
szapataa 0:642fe2aac275 192
szapataa 0:642fe2aac275 193 if(BotonENC.falling()){
szapataa 0:642fe2aac275 194 goto set_hor;
szapataa 0:642fe2aac275 195 }
szapataa 0:642fe2aac275 196 if(Boton2.falling()){
szapataa 0:642fe2aac275 197 goto set_comp;
szapataa 0:642fe2aac275 198 }
szapataa 0:642fe2aac275 199 }
szapataa 0:642fe2aac275 200 /*termine dia*/
szapataa 0:642fe2aac275 201 /*inicia seleccion hora*/
szapataa 0:642fe2aac275 202 set_hor:
szapataa 0:642fe2aac275 203 while(1){
szapataa 0:642fe2aac275 204
szapataa 0:642fe2aac275 205 hor=hor+wheel.getPulses();
szapataa 0:642fe2aac275 206 wheel.reset();
szapataa 0:642fe2aac275 207
szapataa 0:642fe2aac275 208 /*restriccion de la hora--no puede ser mayor de 23*/
szapataa 0:642fe2aac275 209
szapataa 0:642fe2aac275 210 if(hor>=23){
szapataa 0:642fe2aac275 211 hor=23;
szapataa 0:642fe2aac275 212 }
szapataa 0:642fe2aac275 213 else if (hor<=0){
szapataa 0:642fe2aac275 214 hor=0;
szapataa 0:642fe2aac275 215 }
szapataa 0:642fe2aac275 216 pc.printf("*Hora=%d\n ",hor);
szapataa 0:642fe2aac275 217
szapataa 0:642fe2aac275 218
szapataa 0:642fe2aac275 219 if(BotonENC.falling()){
szapataa 0:642fe2aac275 220 goto set_min;
szapataa 0:642fe2aac275 221 }
szapataa 0:642fe2aac275 222 if(Boton2.falling()){
szapataa 0:642fe2aac275 223 goto set_comp;
szapataa 0:642fe2aac275 224 }
szapataa 0:642fe2aac275 225
szapataa 0:642fe2aac275 226
szapataa 0:642fe2aac275 227 }
szapataa 0:642fe2aac275 228 /*finaliza la seleccion de la hora*/
szapataa 0:642fe2aac275 229
szapataa 0:642fe2aac275 230 /*seleccion min*/
szapataa 0:642fe2aac275 231 set_min:
szapataa 0:642fe2aac275 232 while(1){
szapataa 0:642fe2aac275 233
szapataa 0:642fe2aac275 234 min=min+wheel.getPulses();
szapataa 0:642fe2aac275 235 wheel.reset();
szapataa 0:642fe2aac275 236
szapataa 0:642fe2aac275 237 /*restriccion de la hora--no puede ser mayor a 59*/
szapataa 0:642fe2aac275 238
szapataa 0:642fe2aac275 239 if(min>=59){
szapataa 0:642fe2aac275 240 min=59;
szapataa 0:642fe2aac275 241 }
szapataa 0:642fe2aac275 242 else if (min<=0){
szapataa 0:642fe2aac275 243 min=0;
szapataa 0:642fe2aac275 244 }
szapataa 0:642fe2aac275 245 pc.printf("*Min=%d\n ",min);
szapataa 0:642fe2aac275 246
szapataa 0:642fe2aac275 247 if(BotonENC.falling()){
szapataa 0:642fe2aac275 248 goto set_seg;
szapataa 0:642fe2aac275 249 }
szapataa 0:642fe2aac275 250 if(Boton2.falling()){
szapataa 0:642fe2aac275 251 goto set_comp;
szapataa 0:642fe2aac275 252 }
szapataa 0:642fe2aac275 253
szapataa 0:642fe2aac275 254 }
szapataa 0:642fe2aac275 255 /*termina la seleccion de los minutos*/
szapataa 0:642fe2aac275 256
szapataa 0:642fe2aac275 257 /*seleccionar segundos*/
szapataa 0:642fe2aac275 258 set_seg:
szapataa 0:642fe2aac275 259 while(1){
szapataa 0:642fe2aac275 260
szapataa 0:642fe2aac275 261 seg=seg+wheel.getPulses();
szapataa 0:642fe2aac275 262 wheel.reset();
szapataa 0:642fe2aac275 263
szapataa 0:642fe2aac275 264 /*restriccion de los segundos--no puede ser mas de 59*/
szapataa 0:642fe2aac275 265
szapataa 0:642fe2aac275 266 if(seg>=59){
szapataa 0:642fe2aac275 267 seg=59;
szapataa 0:642fe2aac275 268 }
szapataa 0:642fe2aac275 269 else if (seg<=0){
szapataa 0:642fe2aac275 270 seg=0;
szapataa 0:642fe2aac275 271 }
szapataa 0:642fe2aac275 272 pc.printf("*Seg=%d\n ",seg);
szapataa 0:642fe2aac275 273
szapataa 0:642fe2aac275 274 if(BotonENC.falling()){
szapataa 0:642fe2aac275 275 goto set_anno;
szapataa 0:642fe2aac275 276 }
szapataa 0:642fe2aac275 277 if(Boton2.falling()){
szapataa 0:642fe2aac275 278 goto set_comp;
szapataa 0:642fe2aac275 279 }
szapataa 0:642fe2aac275 280
szapataa 0:642fe2aac275 281
szapataa 0:642fe2aac275 282 }
szapataa 0:642fe2aac275 283 /*termina la seleccion de los segundos*/
szapataa 0:642fe2aac275 284
szapataa 0:642fe2aac275 285 set_comp:
szapataa 0:642fe2aac275 286
szapataa 0:642fe2aac275 287 pc.printf("Alarma configurada para: \n");
szapataa 0:642fe2aac275 288 pc.printf(" Anno=%d\n ",anno); /* imprime el año */
szapataa 0:642fe2aac275 289 pc.printf(" Mes=%d\n ",mes); /* imprime el mes */
szapataa 0:642fe2aac275 290 pc.printf(" Dia=%d\n ",dia); /* imprime el dia */
szapataa 0:642fe2aac275 291 pc.printf(" Hora=%d\n ",hor); /* imprime la hora */
szapataa 0:642fe2aac275 292 pc.printf(" Min=%d\n ",min); /* imprime los minutos */
szapataa 0:642fe2aac275 293 pc.printf(" Seg=%d\n ",seg); /* imprime los segundos */
szapataa 0:642fe2aac275 294 wait(3);
szapataa 0:642fe2aac275 295
szapataa 0:642fe2aac275 296 /*comparamos la alarma programada con la hora del reloj, si coincide
szapataa 0:642fe2aac275 297 prende el led*/
szapataa 0:642fe2aac275 298 while(1){
szapataa 0:642fe2aac275 299 rtc.getTime(tm);
szapataa 0:642fe2aac275 300 pc.printf("The current time is : %02d:%02d:%02d\n", tm.hour, tm.min, tm.sec);
szapataa 0:642fe2aac275 301
szapataa 0:642fe2aac275 302 if(tm.hour>=hor && tm.min>=min &&tm.sec>=seg && tm.mon>=mes && tm.date>=dia && tm.year>=anno){
szapataa 0:642fe2aac275 303 myled=0;
szapataa 0:642fe2aac275 304 }
szapataa 0:642fe2aac275 305 else {
szapataa 0:642fe2aac275 306 myled=1;
szapataa 0:642fe2aac275 307 }
szapataa 0:642fe2aac275 308 wait(1);
szapataa 0:642fe2aac275 309 }
szapataa 0:642fe2aac275 310 ////
szapataa 0:642fe2aac275 311
szapataa 0:642fe2aac275 312 }