encender y apagar aire acondicionado

Dependencies:   Debounced QEI RTC-DS1307 TextLCD mbed

Fork of Alarma_Tarea_I2C by Sebastian Quintero Zapata

Committer:
squinteroz
Date:
Mon Nov 23 02:56:33 2015 +0000
Revision:
0:640817dd805d
Child:
1:f79005971379
En este archivo se encuentra la programaci?n de la tarea de I2C, la cual consiste en una alarma.

Who changed what in which revision?

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