Código para programar una alarma por medio de un encoder y usando un LCD.

Dependencies:   DebouncedIn QEI TextLCD mbed

Committer:
gjusecheo
Date:
Wed Jun 01 15:29:05 2016 +0000
Revision:
0:d3ef5e53b6d3
Tarea_Alarma

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gjusecheo 0:d3ef5e53b6d3 1 #include "mbed.h"
gjusecheo 0:d3ef5e53b6d3 2 #include "Rtc_Ds1307.h"
gjusecheo 0:d3ef5e53b6d3 3 #include "TextLCD.h"
gjusecheo 0:d3ef5e53b6d3 4 #include "DebouncedIn.h"
gjusecheo 0:d3ef5e53b6d3 5 #include "QEI.h"
gjusecheo 0:d3ef5e53b6d3 6
gjusecheo 0:d3ef5e53b6d3 7 TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7
gjusecheo 0:d3ef5e53b6d3 8 //RtcCls rtc(p28, p27, p29, true);
gjusecheo 0:d3ef5e53b6d3 9 Rtc_Ds1307 rtc(PTE0, PTE1);
gjusecheo 0:d3ef5e53b6d3 10
gjusecheo 0:d3ef5e53b6d3 11 Serial pc(USBTX, USBRX, "pc");
gjusecheo 0:d3ef5e53b6d3 12
gjusecheo 0:d3ef5e53b6d3 13 QEI wheel (PTA13, PTD5, NC, 100); // Puertos del encoder
gjusecheo 0:d3ef5e53b6d3 14
gjusecheo 0:d3ef5e53b6d3 15 //Se programan los botones
gjusecheo 0:d3ef5e53b6d3 16 DebouncedIn BotonENC(PTC17); // botón propio del encoder
gjusecheo 0:d3ef5e53b6d3 17 DebouncedIn Boton2(PTE31); // boton utilizado para confirmar
gjusecheo 0:d3ef5e53b6d3 18
gjusecheo 0:d3ef5e53b6d3 19 //Salidas digitales para el uso de leds, los cuales simulan el sonido de la alarma
gjusecheo 0:d3ef5e53b6d3 20 DigitalOut myled(PTE20);
gjusecheo 0:d3ef5e53b6d3 21 DigitalOut myled2(PTE21);
gjusecheo 0:d3ef5e53b6d3 22
gjusecheo 0:d3ef5e53b6d3 23 //Se inicializan las variables
gjusecheo 0:d3ef5e53b6d3 24 int dia = 1,mes = 1,ano = 2016,hh = 0,mm = 0,ss = 0;
gjusecheo 0:d3ef5e53b6d3 25 char buffer[128];
gjusecheo 0:d3ef5e53b6d3 26 int readptr = 0;
gjusecheo 0:d3ef5e53b6d3 27 int start = 0;
gjusecheo 0:d3ef5e53b6d3 28 int Config;
gjusecheo 0:d3ef5e53b6d3 29 int contador = 0;
gjusecheo 0:d3ef5e53b6d3 30
gjusecheo 0:d3ef5e53b6d3 31
gjusecheo 0:d3ef5e53b6d3 32 int main() {
gjusecheo 0:d3ef5e53b6d3 33 char c;
gjusecheo 0:d3ef5e53b6d3 34 Rtc_Ds1307::Time_rtc tm = {};
gjusecheo 0:d3ef5e53b6d3 35
gjusecheo 0:d3ef5e53b6d3 36 while(1) {
gjusecheo 0:d3ef5e53b6d3 37 set_reloj:
gjusecheo 0:d3ef5e53b6d3 38 pc.printf("*************************************\n");
gjusecheo 0:d3ef5e53b6d3 39 pc.printf("* Menu for RTC Test : *\n");
gjusecheo 0:d3ef5e53b6d3 40 pc.printf("* read - reads the clock *\n");
gjusecheo 0:d3ef5e53b6d3 41 pc.printf("* start - start the clock *\n");
gjusecheo 0:d3ef5e53b6d3 42 pc.printf("* stop - stop the clock *\n");
gjusecheo 0:d3ef5e53b6d3 43 pc.printf("* write - write the clock *\n");
gjusecheo 0:d3ef5e53b6d3 44 pc.printf("*************************************\n");
gjusecheo 0:d3ef5e53b6d3 45
gjusecheo 0:d3ef5e53b6d3 46 while( (c = pc.getc()) != '\n') {
gjusecheo 0:d3ef5e53b6d3 47 buffer[readptr++] = c;
gjusecheo 0:d3ef5e53b6d3 48 }
gjusecheo 0:d3ef5e53b6d3 49 buffer[readptr++] = 0;
gjusecheo 0:d3ef5e53b6d3 50 if (strncmp(buffer, "read", 4) == 0) {
gjusecheo 0:d3ef5e53b6d3 51 //perform read
gjusecheo 0:d3ef5e53b6d3 52 pc.printf("Lectura del reloj\n");
gjusecheo 0:d3ef5e53b6d3 53
gjusecheo 0:d3ef5e53b6d3 54 lop1: if (rtc.getTime(tm) ) {
gjusecheo 0:d3ef5e53b6d3 55
gjusecheo 0:d3ef5e53b6d3 56 pc.printf("La hora actual es : %02d:%02d:%02d\n", tm.hour, tm.min, tm.sec); // Me entrega la hora actual
gjusecheo 0:d3ef5e53b6d3 57 pc.printf("La fecha actual es : %s, %02d/%02d/%04d\n", rtc.weekdayToString(tm.wday), tm.mon, tm.date, tm.year); // Me entrega la fecha actual
gjusecheo 0:d3ef5e53b6d3 58
gjusecheo 0:d3ef5e53b6d3 59 lcd.cls();
gjusecheo 0:d3ef5e53b6d3 60 lcd.locate(0,0);
gjusecheo 0:d3ef5e53b6d3 61 lcd.printf("%02d:%02d:%02d", tm.hour, tm.min, tm.sec); // Me entrega la hora actual
gjusecheo 0:d3ef5e53b6d3 62 lcd.locate(0,1);
gjusecheo 0:d3ef5e53b6d3 63 lcd.printf("%s/%02d/%02d/%4d", rtc.weekdayToString(tm.wday), tm.date, tm.mon, tm.year);// Me entrega la fecha actual
gjusecheo 0:d3ef5e53b6d3 64 wait_ms(200);
gjusecheo 0:d3ef5e53b6d3 65 if(BotonENC.falling()){
gjusecheo 0:d3ef5e53b6d3 66 goto set_prev;
gjusecheo 0:d3ef5e53b6d3 67 }
gjusecheo 0:d3ef5e53b6d3 68 goto lop1;
gjusecheo 0:d3ef5e53b6d3 69 }
gjusecheo 0:d3ef5e53b6d3 70
gjusecheo 0:d3ef5e53b6d3 71 }
gjusecheo 0:d3ef5e53b6d3 72 else if (strncmp(buffer, "write", 5) == 0) {
gjusecheo 0:d3ef5e53b6d3 73 // Se despliega el siguiente menú para configurar fecha y hora actual
gjusecheo 0:d3ef5e53b6d3 74
gjusecheo 0:d3ef5e53b6d3 75 pc.printf("Ingrese el dia (fecha 1..31):");// Se pide ingresar un número del 1 al 31 equivalente al día del mes
gjusecheo 0:d3ef5e53b6d3 76 pc.scanf("%d", &tm.date);
gjusecheo 0:d3ef5e53b6d3 77 pc.printf("Ingrese el mes (mes 1..12):"); // se pide ingresar un valor entre 1 y 12 que representa el mes
gjusecheo 0:d3ef5e53b6d3 78 pc.scanf("%d", &tm.mon);
gjusecheo 0:d3ef5e53b6d3 79 pc.printf("Ingrese el ano (2016):"); // a continuación se ingresa el valor del año
gjusecheo 0:d3ef5e53b6d3 80 pc.scanf("%d", &tm.year);
gjusecheo 0:d3ef5e53b6d3 81 pc.printf("Ingrese la hora (horas 0..23):");// Luego se ingresa la hora en formato 24 horas
gjusecheo 0:d3ef5e53b6d3 82 pc.scanf("%d", &tm.hour);
gjusecheo 0:d3ef5e53b6d3 83 pc.printf("Ingrese los minutos (minutos 0..59):");// Se ingresan los minutos
gjusecheo 0:d3ef5e53b6d3 84 pc.scanf("%d", &tm.min);
gjusecheo 0:d3ef5e53b6d3 85 pc.printf("Ingrese los segundos (segundos 0..59)"); //Y por último los segundos (cualquier valor, ya que es díficil su precisión)
gjusecheo 0:d3ef5e53b6d3 86 pc.scanf("%d", &tm.sec);
gjusecheo 0:d3ef5e53b6d3 87 pc.printf("Ingrese el dia(Sab=0, Dom=1, Lun=2, Mar=3, Mier=4, Juev=5, Vier=6):");
gjusecheo 0:d3ef5e53b6d3 88 pc.scanf("%d", &tm.wday);
gjusecheo 0:d3ef5e53b6d3 89 pc.printf("Realizando la operacion... Por favor espere\n"); // Se espera la configuración de esos valores
gjusecheo 0:d3ef5e53b6d3 90
gjusecheo 0:d3ef5e53b6d3 91 while(pc.readable())
gjusecheo 0:d3ef5e53b6d3 92 pc.getc();
gjusecheo 0:d3ef5e53b6d3 93 rtc.setTime(tm, false, false);
gjusecheo 0:d3ef5e53b6d3 94 }
gjusecheo 0:d3ef5e53b6d3 95 else if (strncmp(buffer, "start", 5) == 0) {
gjusecheo 0:d3ef5e53b6d3 96 // start
gjusecheo 0:d3ef5e53b6d3 97 readptr = 0;
gjusecheo 0:d3ef5e53b6d3 98 lcd.cls();
gjusecheo 0:d3ef5e53b6d3 99 lcd.locate(0,0);
gjusecheo 0:d3ef5e53b6d3 100 lcd.printf("Dispositivo");
gjusecheo 0:d3ef5e53b6d3 101 lcd.locate(0,1);
gjusecheo 0:d3ef5e53b6d3 102 lcd.printf("Iniciado");
gjusecheo 0:d3ef5e53b6d3 103 pc.printf("Dispositivo Iniciado\n");
gjusecheo 0:d3ef5e53b6d3 104 rtc.startClock();
gjusecheo 0:d3ef5e53b6d3 105
gjusecheo 0:d3ef5e53b6d3 106 }
gjusecheo 0:d3ef5e53b6d3 107 else if (strncmp(buffer, "stop", 4) == 0) {
gjusecheo 0:d3ef5e53b6d3 108 // stop
gjusecheo 0:d3ef5e53b6d3 109 pc.printf("Dispositivo detenido\n");
gjusecheo 0:d3ef5e53b6d3 110 rtc.stopClock();
gjusecheo 0:d3ef5e53b6d3 111 }
gjusecheo 0:d3ef5e53b6d3 112 else {
gjusecheo 0:d3ef5e53b6d3 113 pc.printf("syntax error\n");
gjusecheo 0:d3ef5e53b6d3 114 }
gjusecheo 0:d3ef5e53b6d3 115 readptr = 0;
gjusecheo 0:d3ef5e53b6d3 116 }
gjusecheo 0:d3ef5e53b6d3 117
gjusecheo 0:d3ef5e53b6d3 118 set_prev: /// Función de verificación, se usa para confirmar la hora y fecha del reloj y luego pasar a configurar la hora
gjusecheo 0:d3ef5e53b6d3 119
gjusecheo 0:d3ef5e53b6d3 120 pc.printf("Es correcto? Si = 1 No = 2\n"); // se habilita esta opción para que el usuario
gjusecheo 0:d3ef5e53b6d3 121 pc.scanf("%d", &Config); // verifique si la configuración ingresada es correcta o no
gjusecheo 0:d3ef5e53b6d3 122
gjusecheo 0:d3ef5e53b6d3 123 if (Config == 2){ // Si se presiona 2, hubo errores en la configuración
gjusecheo 0:d3ef5e53b6d3 124 readptr = 0;
gjusecheo 0:d3ef5e53b6d3 125 goto set_reloj; // se regresa a la función set_reloj para volver a configurar
gjusecheo 0:d3ef5e53b6d3 126 }
gjusecheo 0:d3ef5e53b6d3 127
gjusecheo 0:d3ef5e53b6d3 128
gjusecheo 0:d3ef5e53b6d3 129 else if (Config == 1){ // se si presiona 1, la configuración fue correcta
gjusecheo 0:d3ef5e53b6d3 130
gjusecheo 0:d3ef5e53b6d3 131 pc.printf("Dispositivo Configurado Correctamente Espere ....\n"); // se espera un tiempo
gjusecheo 0:d3ef5e53b6d3 132 wait(3);
gjusecheo 0:d3ef5e53b6d3 133 goto set_alarma; // y se va a la función correspondiente a la alarma
gjusecheo 0:d3ef5e53b6d3 134 }
gjusecheo 0:d3ef5e53b6d3 135 else {
gjusecheo 0:d3ef5e53b6d3 136 pc.printf("syntax error\n");
gjusecheo 0:d3ef5e53b6d3 137 goto set_prev;
gjusecheo 0:d3ef5e53b6d3 138 }
gjusecheo 0:d3ef5e53b6d3 139 //termina la función set_prev
gjusecheo 0:d3ef5e53b6d3 140
gjusecheo 0:d3ef5e53b6d3 141 // Aquí se encuentra la función ALARMA, en la cual se configura los valores para la activación de esta
gjusecheo 0:d3ef5e53b6d3 142 set_alarma:
gjusecheo 0:d3ef5e53b6d3 143 pc.printf("******* Configuracion Alarma *******\n");
gjusecheo 0:d3ef5e53b6d3 144
gjusecheo 0:d3ef5e53b6d3 145 set_dia: // Para que el usuario ingrese el día con el encoder
gjusecheo 0:d3ef5e53b6d3 146 while(1){
gjusecheo 0:d3ef5e53b6d3 147
gjusecheo 0:d3ef5e53b6d3 148 dia=dia+wheel.getPulses();
gjusecheo 0:d3ef5e53b6d3 149 wheel.reset();
gjusecheo 0:d3ef5e53b6d3 150
gjusecheo 0:d3ef5e53b6d3 151 if(dia>=31){ //En este if, se garantiza que los días esten entre 1 y 31
gjusecheo 0:d3ef5e53b6d3 152 dia=31;
gjusecheo 0:d3ef5e53b6d3 153 }
gjusecheo 0:d3ef5e53b6d3 154 else if (dia<=1){
gjusecheo 0:d3ef5e53b6d3 155 dia=1;
gjusecheo 0:d3ef5e53b6d3 156 }
gjusecheo 0:d3ef5e53b6d3 157
gjusecheo 0:d3ef5e53b6d3 158 pc.printf(">Dia=%d Mes=%d Ano=%d Hora=%d Min=%d Seg=%d\n ",dia,mes,ano,hh,mm,ss);
gjusecheo 0:d3ef5e53b6d3 159 wait(3);
gjusecheo 0:d3ef5e53b6d3 160
gjusecheo 0:d3ef5e53b6d3 161 // A continuación se programan los botones del encoder para configurar con este las diferentes necesidades de la alarma
gjusecheo 0:d3ef5e53b6d3 162
gjusecheo 0:d3ef5e53b6d3 163 if(BotonENC.falling()){ // Con el boton del encoder se pasa ingresar el siguiente dato necesario
gjusecheo 0:d3ef5e53b6d3 164 goto set_mes;
gjusecheo 0:d3ef5e53b6d3 165 }
gjusecheo 0:d3ef5e53b6d3 166 if(Boton2.falling()){ // Boton para aceptar la alarma y proceder a activarla
gjusecheo 0:d3ef5e53b6d3 167 goto set_comp;
gjusecheo 0:d3ef5e53b6d3 168 }
gjusecheo 0:d3ef5e53b6d3 169
gjusecheo 0:d3ef5e53b6d3 170
gjusecheo 0:d3ef5e53b6d3 171 }
gjusecheo 0:d3ef5e53b6d3 172
gjusecheo 0:d3ef5e53b6d3 173 set_mes:
gjusecheo 0:d3ef5e53b6d3 174 while(1){
gjusecheo 0:d3ef5e53b6d3 175
gjusecheo 0:d3ef5e53b6d3 176 mes=mes+wheel.getPulses();
gjusecheo 0:d3ef5e53b6d3 177 wheel.reset();
gjusecheo 0:d3ef5e53b6d3 178
gjusecheo 0:d3ef5e53b6d3 179 if(mes>=12){ // Se garantiza que el valor del mes se encuentre entre los valores 1 y 12
gjusecheo 0:d3ef5e53b6d3 180 mes=12;
gjusecheo 0:d3ef5e53b6d3 181 }
gjusecheo 0:d3ef5e53b6d3 182 else if (mes<=1){
gjusecheo 0:d3ef5e53b6d3 183 mes=1;
gjusecheo 0:d3ef5e53b6d3 184 }
gjusecheo 0:d3ef5e53b6d3 185 pc.printf(" Dia=%d >Mes=%d Ano=%d Hora=%d Min=%d Seg=%d\n ",dia,mes,ano,hh,mm,ss);
gjusecheo 0:d3ef5e53b6d3 186 wait(3);
gjusecheo 0:d3ef5e53b6d3 187
gjusecheo 0:d3ef5e53b6d3 188 if(BotonENC.falling()){
gjusecheo 0:d3ef5e53b6d3 189 goto set_ano;
gjusecheo 0:d3ef5e53b6d3 190 }
gjusecheo 0:d3ef5e53b6d3 191 if(Boton2.falling()){
gjusecheo 0:d3ef5e53b6d3 192 goto set_comp;
gjusecheo 0:d3ef5e53b6d3 193 }
gjusecheo 0:d3ef5e53b6d3 194
gjusecheo 0:d3ef5e53b6d3 195 }
gjusecheo 0:d3ef5e53b6d3 196 set_ano:
gjusecheo 0:d3ef5e53b6d3 197 while(1){
gjusecheo 0:d3ef5e53b6d3 198
gjusecheo 0:d3ef5e53b6d3 199 ano=ano+wheel.getPulses();
gjusecheo 0:d3ef5e53b6d3 200 wheel.reset();
gjusecheo 0:d3ef5e53b6d3 201
gjusecheo 0:d3ef5e53b6d3 202 if(ano>=2100){ //Se programan alarmas para los próximos 84 años (entre los años 2016 y 2030)
gjusecheo 0:d3ef5e53b6d3 203 ano=2100;
gjusecheo 0:d3ef5e53b6d3 204 }
gjusecheo 0:d3ef5e53b6d3 205 else if (ano<=2016){
gjusecheo 0:d3ef5e53b6d3 206 ano=2016;
gjusecheo 0:d3ef5e53b6d3 207 }
gjusecheo 0:d3ef5e53b6d3 208 pc.printf(" Dia=%d Mes=%d >Ano=%d Hora=%d Min=%d Seg=%d\n ",dia,mes,ano,hh,mm,ss);
gjusecheo 0:d3ef5e53b6d3 209 wait(3);
gjusecheo 0:d3ef5e53b6d3 210
gjusecheo 0:d3ef5e53b6d3 211 if(BotonENC.falling()){
gjusecheo 0:d3ef5e53b6d3 212 goto set_hh;
gjusecheo 0:d3ef5e53b6d3 213 }
gjusecheo 0:d3ef5e53b6d3 214 if(Boton2.falling()){
gjusecheo 0:d3ef5e53b6d3 215 goto set_comp;
gjusecheo 0:d3ef5e53b6d3 216 }
gjusecheo 0:d3ef5e53b6d3 217
gjusecheo 0:d3ef5e53b6d3 218 }
gjusecheo 0:d3ef5e53b6d3 219 set_hh:
gjusecheo 0:d3ef5e53b6d3 220 while(1){
gjusecheo 0:d3ef5e53b6d3 221
gjusecheo 0:d3ef5e53b6d3 222 hh=hh+wheel.getPulses();
gjusecheo 0:d3ef5e53b6d3 223 wheel.reset();
gjusecheo 0:d3ef5e53b6d3 224
gjusecheo 0:d3ef5e53b6d3 225 if(hh>=23){ // Las horas deben encontrarse siempre en el rango de 0 a 23 (La hora 24 = La hora 0)
gjusecheo 0:d3ef5e53b6d3 226 hh=23;
gjusecheo 0:d3ef5e53b6d3 227 }
gjusecheo 0:d3ef5e53b6d3 228 else if (hh<=0){
gjusecheo 0:d3ef5e53b6d3 229 hh=0;
gjusecheo 0:d3ef5e53b6d3 230 }
gjusecheo 0:d3ef5e53b6d3 231 pc.printf(" Dia=%d Mes=%d Ano=%d >Hora=%d Min=%d Seg=%d\n ",dia,mes,ano,hh,mm,ss);
gjusecheo 0:d3ef5e53b6d3 232 wait(3);
gjusecheo 0:d3ef5e53b6d3 233
gjusecheo 0:d3ef5e53b6d3 234 if(BotonENC.falling()){
gjusecheo 0:d3ef5e53b6d3 235 goto set_mm;
gjusecheo 0:d3ef5e53b6d3 236 }
gjusecheo 0:d3ef5e53b6d3 237 if(Boton2.falling()){
gjusecheo 0:d3ef5e53b6d3 238 goto set_comp;
gjusecheo 0:d3ef5e53b6d3 239 }
gjusecheo 0:d3ef5e53b6d3 240
gjusecheo 0:d3ef5e53b6d3 241 }
gjusecheo 0:d3ef5e53b6d3 242 set_mm:
gjusecheo 0:d3ef5e53b6d3 243 while(1){
gjusecheo 0:d3ef5e53b6d3 244
gjusecheo 0:d3ef5e53b6d3 245 mm=mm+wheel.getPulses();
gjusecheo 0:d3ef5e53b6d3 246 wheel.reset();
gjusecheo 0:d3ef5e53b6d3 247
gjusecheo 0:d3ef5e53b6d3 248 if(mm>=59){ //Minutos siempre positivos entre 0 y 59 (El minuto 60 es igual al 0)
gjusecheo 0:d3ef5e53b6d3 249 mm=59;
gjusecheo 0:d3ef5e53b6d3 250 }
gjusecheo 0:d3ef5e53b6d3 251 else if (mm<=0){
gjusecheo 0:d3ef5e53b6d3 252 mm=0;
gjusecheo 0:d3ef5e53b6d3 253 }
gjusecheo 0:d3ef5e53b6d3 254 pc.printf(" Dia=%d Mes=%d Ano=%d Hora=%d >Min=%d Seg=%d\n ",dia,mes,ano,hh,mm,ss);
gjusecheo 0:d3ef5e53b6d3 255 wait(3);
gjusecheo 0:d3ef5e53b6d3 256
gjusecheo 0:d3ef5e53b6d3 257 if(BotonENC.falling()){
gjusecheo 0:d3ef5e53b6d3 258 goto set_ss;
gjusecheo 0:d3ef5e53b6d3 259 }
gjusecheo 0:d3ef5e53b6d3 260 if(Boton2.falling()){
gjusecheo 0:d3ef5e53b6d3 261 goto set_comp;
gjusecheo 0:d3ef5e53b6d3 262 }
gjusecheo 0:d3ef5e53b6d3 263
gjusecheo 0:d3ef5e53b6d3 264 }
gjusecheo 0:d3ef5e53b6d3 265
gjusecheo 0:d3ef5e53b6d3 266 set_ss:
gjusecheo 0:d3ef5e53b6d3 267 while(1){
gjusecheo 0:d3ef5e53b6d3 268
gjusecheo 0:d3ef5e53b6d3 269 ss=ss+wheel.getPulses();
gjusecheo 0:d3ef5e53b6d3 270 wheel.reset();
gjusecheo 0:d3ef5e53b6d3 271
gjusecheo 0:d3ef5e53b6d3 272 if(ss>=59){ //De nuevo, en un minuto hay 60 segundos ( partiendo del 0 al 59)
gjusecheo 0:d3ef5e53b6d3 273 ss=59;
gjusecheo 0:d3ef5e53b6d3 274 }
gjusecheo 0:d3ef5e53b6d3 275 else if (ss<=0){
gjusecheo 0:d3ef5e53b6d3 276 ss=0;
gjusecheo 0:d3ef5e53b6d3 277 }
gjusecheo 0:d3ef5e53b6d3 278 pc.printf(" Dia=%d Mes=%d Ano=%d Hora=%d Min=%d >Seg=%d\n ",dia,mes,ano,hh,mm,ss);
gjusecheo 0:d3ef5e53b6d3 279 wait(3);
gjusecheo 0:d3ef5e53b6d3 280
gjusecheo 0:d3ef5e53b6d3 281 if(BotonENC.falling()){
gjusecheo 0:d3ef5e53b6d3 282 goto set_dia;
gjusecheo 0:d3ef5e53b6d3 283 }
gjusecheo 0:d3ef5e53b6d3 284 if(Boton2.falling()){
gjusecheo 0:d3ef5e53b6d3 285 goto set_comp;
gjusecheo 0:d3ef5e53b6d3 286 }
gjusecheo 0:d3ef5e53b6d3 287
gjusecheo 0:d3ef5e53b6d3 288 }
gjusecheo 0:d3ef5e53b6d3 289
gjusecheo 0:d3ef5e53b6d3 290 // Luego de tener totalmente ingresador los datos de la alarma, se ingresa a la sección donde se compara la fecha y hora actual con la fecha y hora de la alarma programada
gjusecheo 0:d3ef5e53b6d3 291 set_comp:
gjusecheo 0:d3ef5e53b6d3 292
gjusecheo 0:d3ef5e53b6d3 293 pc.printf("***Datos ingresados para alarma****\n");
gjusecheo 0:d3ef5e53b6d3 294 pc.printf(" Dia=%d Mes=%d Ano=%d Hora=%d Min=%d Seg=%d\n ",dia,mes,ano,hh,mm,ss);
gjusecheo 0:d3ef5e53b6d3 295
gjusecheo 0:d3ef5e53b6d3 296 while(1){
gjusecheo 0:d3ef5e53b6d3 297 rtc.getTime(tm);
gjusecheo 0:d3ef5e53b6d3 298 pc.printf("El tiempo actual es : %02d:%02d:%02d\n", tm.hour, tm.min, tm.sec);
gjusecheo 0:d3ef5e53b6d3 299 pc.printf("La fecha actual es %s, %02d/%02d/%04d\n", rtc.weekdayToString(tm.wday), tm.mon, tm.date, tm.year);
gjusecheo 0:d3ef5e53b6d3 300 lcd.cls();
gjusecheo 0:d3ef5e53b6d3 301 lcd.locate(0,0);
gjusecheo 0:d3ef5e53b6d3 302 lcd.printf("%02d:%02d:%02d", tm.hour, tm.min, tm.sec);
gjusecheo 0:d3ef5e53b6d3 303 lcd.locate(0,1);
gjusecheo 0:d3ef5e53b6d3 304 lcd.printf("%s/%02d/%02d/%4d", rtc.weekdayToString(tm.wday), tm.date, tm.mon, tm.year);
gjusecheo 0:d3ef5e53b6d3 305 wait_ms(200);
gjusecheo 0:d3ef5e53b6d3 306 if(tm.hour>=hh && tm.min>=mm &&tm.sec>=ss && tm.mon>=mes && tm.date>=dia && tm.year>=ano){
gjusecheo 0:d3ef5e53b6d3 307 alarma1:
gjusecheo 0:d3ef5e53b6d3 308
gjusecheo 0:d3ef5e53b6d3 309 myled=0; // En estas líneas de código se busca mostrar el funcionamiento de la alarma cuando
gjusecheo 0:d3ef5e53b6d3 310 myled2=1; // esta es encendida mediante el encendido y apagado alternado de dos diodos leds.
gjusecheo 0:d3ef5e53b6d3 311 wait(0.5); // con un pequeño tiempo de diferencia para lograr dicho efecto.
gjusecheo 0:d3ef5e53b6d3 312 myled=1;
gjusecheo 0:d3ef5e53b6d3 313 myled2=0;
gjusecheo 0:d3ef5e53b6d3 314 wait(0.5);
gjusecheo 0:d3ef5e53b6d3 315
gjusecheo 0:d3ef5e53b6d3 316 if(BotonENC.falling()){ // Si la alarma esta activada y se presiona el boton del encoder se pasa a la función snooze
gjusecheo 0:d3ef5e53b6d3 317 goto snooze;
gjusecheo 0:d3ef5e53b6d3 318 }
gjusecheo 0:d3ef5e53b6d3 319 if(Boton2.falling()){ // Si la alarma esta activada y se presiona el boton externo se desactiva la alarma y ya solo muestra la hora
gjusecheo 0:d3ef5e53b6d3 320 myled=0;
gjusecheo 0:d3ef5e53b6d3 321 myled2=0;
gjusecheo 0:d3ef5e53b6d3 322 goto lop1;
gjusecheo 0:d3ef5e53b6d3 323 }
gjusecheo 0:d3ef5e53b6d3 324
gjusecheo 0:d3ef5e53b6d3 325 }
gjusecheo 0:d3ef5e53b6d3 326 }
gjusecheo 0:d3ef5e53b6d3 327 snooze: // Se desactivan ambos leds representando que se detuvo la alarma
gjusecheo 0:d3ef5e53b6d3 328 myled=0;
gjusecheo 0:d3ef5e53b6d3 329 myled2=0;
gjusecheo 0:d3ef5e53b6d3 330 contador = contador+1; // El contador se usa para permitir que lafunción snooze solo se active 3 veces
gjusecheo 0:d3ef5e53b6d3 331 if (contador == 4){
gjusecheo 0:d3ef5e53b6d3 332 goto lop1; // Cuando se activa la cuarta vez, el boton del encoder la alarma se desactiva
gjusecheo 0:d3ef5e53b6d3 333 }
gjusecheo 0:d3ef5e53b6d3 334 wait(10); // Espera 10 segundos para volver a activar la alarma
gjusecheo 0:d3ef5e53b6d3 335 goto alarma1;
gjusecheo 0:d3ef5e53b6d3 336 }