Reloj con programacion de alarmas con control remoto

Dependencies:   Debounced Pulse1 QEI RTC-DS1307 TextLCD mbed

/media/uploads/EstebanLage/whatsapp_image_2018-06-02_at_10.50.16_am.jpeg

Committer:
EstebanLage
Date:
Sat Jun 02 15:54:16 2018 +0000
Revision:
0:60db34a2735c
Tarea3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
EstebanLage 0:60db34a2735c 1 #include "mbed.h"
EstebanLage 0:60db34a2735c 2 #include "DebouncedIn.h"
EstebanLage 0:60db34a2735c 3 #include "TextLCD.h"
EstebanLage 0:60db34a2735c 4 #include "QEI.h"
EstebanLage 0:60db34a2735c 5 #include "Rtc_Ds1307.h"
EstebanLage 0:60db34a2735c 6 #include <Pulse1.h>
EstebanLage 0:60db34a2735c 7
EstebanLage 0:60db34a2735c 8 TextLCD lcd(PTB0, PTB1, PTB2, PTB3, PTC2, PTC1); // rs, e, d4, d5, d6, d7
EstebanLage 0:60db34a2735c 9 Rtc_Ds1307 rtc(PTE0, PTE1);
EstebanLage 0:60db34a2735c 10 QEI wheel (PTD7, PTD6, NC, 30);
EstebanLage 0:60db34a2735c 11 DebouncedIn button_enco(PTC5);
EstebanLage 0:60db34a2735c 12 Serial pc(USBTX, USBRX);
EstebanLage 0:60db34a2735c 13 PwmOut Sonido(PTD1);
EstebanLage 0:60db34a2735c 14 PulseInOut irda(PTD5);// en este puerto se pone el sensor infrarrojo
EstebanLage 0:60db34a2735c 15
EstebanLage 0:60db34a2735c 16
EstebanLage 0:60db34a2735c 17 float periodo;
EstebanLage 0:60db34a2735c 18 float Frecuencia = 4000;
EstebanLage 0:60db34a2735c 19 int C1 = 0x0C;
EstebanLage 0:60db34a2735c 20 int m = 0, flag = 0;
EstebanLage 0:60db34a2735c 21 uint8_t pot[7] = {1, 2, 4, 8, 16, 32, 64};
EstebanLage 0:60db34a2735c 22 uint8_t pot1[7] = {254, 253, 251, 248, 239, 223, 191};
EstebanLage 0:60db34a2735c 23 int Lugar = 0; // Definen el punto en el cual va el programa
EstebanLage 0:60db34a2735c 24 int i = 0, j = 0;
EstebanLage 0:60db34a2735c 25 int pos = 0; // Reloj:0, Alarma1:1, Alarma2:2, ... , Alarma7:7
EstebanLage 0:60db34a2735c 26 uint8_t state_alarms = 0, pos_alarm = 0, alarma = 0;
EstebanLage 0:60db34a2735c 27
EstebanLage 0:60db34a2735c 28 //irda
EstebanLage 0:60db34a2735c 29 int header = 0; //tiempo de cabecera pulso abajo
EstebanLage 0:60db34a2735c 30 const int head_H = 4550; //+20% medida con osciloscopio en microsegundos
EstebanLage 0:60db34a2735c 31 const int head_L = 4410;//-20% medida con osciloscopio
EstebanLage 0:60db34a2735c 32 int g = 0, h = 0, count = 0, mostrar = 0;
EstebanLage 0:60db34a2735c 33 const int T_alto = 1600;//ponga su tiempo de la prueba
EstebanLage 0:60db34a2735c 34 const int T_bajo = 485;//ponga su tiempo de la prueba
EstebanLage 0:60db34a2735c 35 const int num_bits = 32;//ponga su numero de bits
EstebanLage 0:60db34a2735c 36 int num[num_bits];//cadena para almacenar todos los tiempos que conforman los bits de datos
EstebanLage 0:60db34a2735c 37 int sec[num_bits];//cadena para almacenar la cadena codificada en binario
EstebanLage 0:60db34a2735c 38 int dato; // tiempo de cada dato que se lee
EstebanLage 0:60db34a2735c 39 int boton_sel = 10;
EstebanLage 0:60db34a2735c 40 int boton[10][32]= {{1,1,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,0,1,0},
EstebanLage 0:60db34a2735c 41 {1,1,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0,0,1,0,0,1,1,1,1,1,0,0},
EstebanLage 0:60db34a2735c 42 {1,1,0,0,0,0,1,0,1,1,0,0,1,0,1,0,0,1,0,0,0,0,1,0,1,0,1,1,1,1,0,0},
EstebanLage 0:60db34a2735c 43 {1,1,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,0,0,0,1,0,0,0,1,1,1,1,0,0},
EstebanLage 0:60db34a2735c 44 {1,1,0,0,0,0,1,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,1,0,1,1,0,1,1,1,0,0},
EstebanLage 0:60db34a2735c 45 {1,1,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,0,0,1,0,1,1,1,0,0},
EstebanLage 0:60db34a2735c 46 {1,1,0,0,0,0,1,0,1,1,0,0,1,0,1,0,0,1,1,0,0,0,1,0,1,0,0,1,1,1,0,0},
EstebanLage 0:60db34a2735c 47 {1,1,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,0,0,0,1,0,0,0,0,1,1,1,0,0},
EstebanLage 0:60db34a2735c 48 {1,1,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0},
EstebanLage 0:60db34a2735c 49 {1,1,0,0,0,0,1,0,1,1,0,0,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,0,1,0}};
EstebanLage 0:60db34a2735c 50
EstebanLage 0:60db34a2735c 51
EstebanLage 0:60db34a2735c 52 int main()
EstebanLage 0:60db34a2735c 53 {
EstebanLage 0:60db34a2735c 54 Rtc_Ds1307::Time_rtc tm = {};
EstebanLage 0:60db34a2735c 55 Rtc_Ds1307::Time_rtc Alarm[7] = {};
EstebanLage 0:60db34a2735c 56 lcd.cls();
EstebanLage 0:60db34a2735c 57 lcd.writeCommand(C1);//escribimos un comando segun el manual del modulo LCD
EstebanLage 0:60db34a2735c 58 lcd.locate(0,0);
EstebanLage 0:60db34a2735c 59 periodo=(1/Frecuencia);
EstebanLage 0:60db34a2735c 60 Sonido.period(periodo);
EstebanLage 0:60db34a2735c 61 rtc.getTime(tm); //lee el tiempo del DS1307
EstebanLage 0:60db34a2735c 62 Sonido.write(255);
EstebanLage 0:60db34a2735c 63
EstebanLage 0:60db34a2735c 64
EstebanLage 0:60db34a2735c 65 while(1)
EstebanLage 0:60db34a2735c 66 {
EstebanLage 0:60db34a2735c 67 switch (Lugar)
EstebanLage 0:60db34a2735c 68 {
EstebanLage 0:60db34a2735c 69 case 0:
EstebanLage 0:60db34a2735c 70
EstebanLage 0:60db34a2735c 71 rtc.getTime(tm);
EstebanLage 0:60db34a2735c 72 m = wheel.getPulses();
EstebanLage 0:60db34a2735c 73 if(m != 0)
EstebanLage 0:60db34a2735c 74 {
EstebanLage 0:60db34a2735c 75 wheel.reset();
EstebanLage 0:60db34a2735c 76 pos = pos + m;
EstebanLage 0:60db34a2735c 77 m = 0;
EstebanLage 0:60db34a2735c 78 lcd.cls();
EstebanLage 0:60db34a2735c 79 }
EstebanLage 0:60db34a2735c 80 if(pos > 7)
EstebanLage 0:60db34a2735c 81 {
EstebanLage 0:60db34a2735c 82 pos = -1;
EstebanLage 0:60db34a2735c 83 }
EstebanLage 0:60db34a2735c 84 if(pos < -1)
EstebanLage 0:60db34a2735c 85 {
EstebanLage 0:60db34a2735c 86 pos = 7;
EstebanLage 0:60db34a2735c 87 }
EstebanLage 0:60db34a2735c 88 if(pos == 0)
EstebanLage 0:60db34a2735c 89 {
EstebanLage 0:60db34a2735c 90 lcd.locate(0,0);
EstebanLage 0:60db34a2735c 91 lcd.printf("Time: ");
EstebanLage 0:60db34a2735c 92 lcd.locate(8,0);
EstebanLage 0:60db34a2735c 93 lcd.printf("%02d:",tm.hour);
EstebanLage 0:60db34a2735c 94 lcd.printf("%02d:",tm.min);
EstebanLage 0:60db34a2735c 95 lcd.printf("%02d",tm.sec);
EstebanLage 0:60db34a2735c 96 lcd.locate(0,1);
EstebanLage 0:60db34a2735c 97 lcd.printf("%02d/",tm.mon);
EstebanLage 0:60db34a2735c 98 lcd.printf("%02d/",tm.date);
EstebanLage 0:60db34a2735c 99 lcd.printf("%02d",tm.year);
EstebanLage 0:60db34a2735c 100 if (mostrar != 0){
EstebanLage 0:60db34a2735c 101 lcd.printf("% d",mostrar);
EstebanLage 0:60db34a2735c 102 }
EstebanLage 0:60db34a2735c 103
EstebanLage 0:60db34a2735c 104 wait(0.1);
EstebanLage 0:60db34a2735c 105 }
EstebanLage 0:60db34a2735c 106
EstebanLage 0:60db34a2735c 107 if(pos == -1)
EstebanLage 0:60db34a2735c 108 {
EstebanLage 0:60db34a2735c 109 lcd.locate(0,0);
EstebanLage 0:60db34a2735c 110 lcd.printf("Alarm Setup IRDA");
EstebanLage 0:60db34a2735c 111 wait(0.1);
EstebanLage 0:60db34a2735c 112 }
EstebanLage 0:60db34a2735c 113
EstebanLage 0:60db34a2735c 114
EstebanLage 0:60db34a2735c 115 if(pos > 0)
EstebanLage 0:60db34a2735c 116 {
EstebanLage 0:60db34a2735c 117 lcd.locate(0,0);
EstebanLage 0:60db34a2735c 118 lcd.printf("Alarm %d", pos);
EstebanLage 0:60db34a2735c 119 lcd.locate(8,0);
EstebanLage 0:60db34a2735c 120 lcd.printf("%02d:",Alarm[pos - 1].hour);
EstebanLage 0:60db34a2735c 121 lcd.printf("%02d:",Alarm[pos - 1].min);
EstebanLage 0:60db34a2735c 122 lcd.printf("%02d",Alarm[pos - 1].sec);
EstebanLage 0:60db34a2735c 123 lcd.locate(0,1);
EstebanLage 0:60db34a2735c 124 lcd.printf("%02d/",Alarm[pos - 1].mon);
EstebanLage 0:60db34a2735c 125 lcd.printf("%02d/",Alarm[pos - 1].date);
EstebanLage 0:60db34a2735c 126 lcd.printf("%02d",Alarm[pos - 1].year);
EstebanLage 0:60db34a2735c 127 lcd.locate(13,1);
EstebanLage 0:60db34a2735c 128 if((state_alarms&(pot[pos - 1])) == pot[pos - 1])
EstebanLage 0:60db34a2735c 129 {
EstebanLage 0:60db34a2735c 130 lcd.printf("On ");
EstebanLage 0:60db34a2735c 131 }
EstebanLage 0:60db34a2735c 132 else
EstebanLage 0:60db34a2735c 133 {
EstebanLage 0:60db34a2735c 134 lcd.printf("Off");
EstebanLage 0:60db34a2735c 135 }
EstebanLage 0:60db34a2735c 136
EstebanLage 0:60db34a2735c 137 wait(0.1);
EstebanLage 0:60db34a2735c 138 }
EstebanLage 0:60db34a2735c 139 for(j=0;j<7;j++)
EstebanLage 0:60db34a2735c 140 {
EstebanLage 0:60db34a2735c 141 if( (tm.date==Alarm[j].date)&&(tm.mon==Alarm[j].mon)&&(tm.year==Alarm[j].year)&&(tm.hour==Alarm[j].hour)&&(tm.min==Alarm[j].min)&&(tm.sec==Alarm[j].sec)&&((state_alarms&(pot[j])) == pot[j]))
EstebanLage 0:60db34a2735c 142 {
EstebanLage 0:60db34a2735c 143 Lugar = 2;
EstebanLage 0:60db34a2735c 144 lcd.cls();
EstebanLage 0:60db34a2735c 145 lcd.locate(0,0);
EstebanLage 0:60db34a2735c 146 lcd.printf("Active Alarm%d!!!",(j+1));
EstebanLage 0:60db34a2735c 147 lcd.locate(0,1);
EstebanLage 0:60db34a2735c 148 lcd.printf("->Disable ");
EstebanLage 0:60db34a2735c 149 lcd.locate(10,1);
EstebanLage 0:60db34a2735c 150 lcd.printf("--5min");
EstebanLage 0:60db34a2735c 151 pos_alarm = j;
EstebanLage 0:60db34a2735c 152 }
EstebanLage 0:60db34a2735c 153 }
EstebanLage 0:60db34a2735c 154
EstebanLage 0:60db34a2735c 155 if (button_enco.falling()) //si se pulsa boton encoder
EstebanLage 0:60db34a2735c 156 {
EstebanLage 0:60db34a2735c 157 if(pos == -1)
EstebanLage 0:60db34a2735c 158 {Lugar = 3;
EstebanLage 0:60db34a2735c 159 lcd.cls();}
EstebanLage 0:60db34a2735c 160 else
EstebanLage 0:60db34a2735c 161 {Lugar = 1;}
EstebanLage 0:60db34a2735c 162
EstebanLage 0:60db34a2735c 163 }
EstebanLage 0:60db34a2735c 164
EstebanLage 0:60db34a2735c 165 break;
EstebanLage 0:60db34a2735c 166
EstebanLage 0:60db34a2735c 167 case 1:
EstebanLage 0:60db34a2735c 168 switch(i)
EstebanLage 0:60db34a2735c 169 {
EstebanLage 0:60db34a2735c 170 case 0:
EstebanLage 0:60db34a2735c 171 if(pos == 0)
EstebanLage 0:60db34a2735c 172 {
EstebanLage 0:60db34a2735c 173 lcd.cls();
EstebanLage 0:60db34a2735c 174 lcd.locate(0,0);
EstebanLage 0:60db34a2735c 175 lcd.printf("Time Setup");
EstebanLage 0:60db34a2735c 176 }
EstebanLage 0:60db34a2735c 177
EstebanLage 0:60db34a2735c 178 if(pos > 0)
EstebanLage 0:60db34a2735c 179 {
EstebanLage 0:60db34a2735c 180 lcd.cls();
EstebanLage 0:60db34a2735c 181 lcd.locate(0,0);
EstebanLage 0:60db34a2735c 182 lcd.printf("Alarm %d Setup", pos);
EstebanLage 0:60db34a2735c 183 }
EstebanLage 0:60db34a2735c 184 wait(1);
EstebanLage 0:60db34a2735c 185 i++;
EstebanLage 0:60db34a2735c 186 lcd.cls();
EstebanLage 0:60db34a2735c 187 lcd.locate(0,0);
EstebanLage 0:60db34a2735c 188 lcd.printf("Day: ");
EstebanLage 0:60db34a2735c 189 break;
EstebanLage 0:60db34a2735c 190
EstebanLage 0:60db34a2735c 191 case 1:
EstebanLage 0:60db34a2735c 192 m = wheel.getPulses();
EstebanLage 0:60db34a2735c 193 if (m != 0)
EstebanLage 0:60db34a2735c 194 {
EstebanLage 0:60db34a2735c 195 tm.date = tm.date + m;
EstebanLage 0:60db34a2735c 196 if(tm.date > 31)
EstebanLage 0:60db34a2735c 197 {
EstebanLage 0:60db34a2735c 198 tm.date = 1;
EstebanLage 0:60db34a2735c 199 }
EstebanLage 0:60db34a2735c 200 if(tm.date < 1)
EstebanLage 0:60db34a2735c 201 {
EstebanLage 0:60db34a2735c 202 tm.date = 31;
EstebanLage 0:60db34a2735c 203 }
EstebanLage 0:60db34a2735c 204 wheel.reset();
EstebanLage 0:60db34a2735c 205 m = 0;
EstebanLage 0:60db34a2735c 206 }
EstebanLage 0:60db34a2735c 207 lcd.locate(5,0);
EstebanLage 0:60db34a2735c 208 lcd.printf("%02d",tm.date);
EstebanLage 0:60db34a2735c 209
EstebanLage 0:60db34a2735c 210 if (button_enco.falling())
EstebanLage 0:60db34a2735c 211 {
EstebanLage 0:60db34a2735c 212 i++;
EstebanLage 0:60db34a2735c 213 lcd.cls();
EstebanLage 0:60db34a2735c 214 lcd.locate(0,0);
EstebanLage 0:60db34a2735c 215 lcd.printf("Month: ");
EstebanLage 0:60db34a2735c 216 }
EstebanLage 0:60db34a2735c 217 break;
EstebanLage 0:60db34a2735c 218
EstebanLage 0:60db34a2735c 219 case 2:
EstebanLage 0:60db34a2735c 220 m = wheel.getPulses();
EstebanLage 0:60db34a2735c 221 if (m != 0)
EstebanLage 0:60db34a2735c 222 {
EstebanLage 0:60db34a2735c 223 tm.mon = tm.mon + m;
EstebanLage 0:60db34a2735c 224 if(tm.mon > 12)
EstebanLage 0:60db34a2735c 225 {
EstebanLage 0:60db34a2735c 226 tm.mon = 1;
EstebanLage 0:60db34a2735c 227 }
EstebanLage 0:60db34a2735c 228 if(tm.mon < 1)
EstebanLage 0:60db34a2735c 229 {
EstebanLage 0:60db34a2735c 230 tm.mon = 12;
EstebanLage 0:60db34a2735c 231 }
EstebanLage 0:60db34a2735c 232 wheel.reset();
EstebanLage 0:60db34a2735c 233 m = 0;
EstebanLage 0:60db34a2735c 234 }
EstebanLage 0:60db34a2735c 235 lcd.locate(7,0);
EstebanLage 0:60db34a2735c 236 lcd.printf("%02d",tm.mon);
EstebanLage 0:60db34a2735c 237
EstebanLage 0:60db34a2735c 238 if (button_enco.falling())
EstebanLage 0:60db34a2735c 239 {
EstebanLage 0:60db34a2735c 240 i++;
EstebanLage 0:60db34a2735c 241 lcd.cls();
EstebanLage 0:60db34a2735c 242 lcd.locate(0,0);
EstebanLage 0:60db34a2735c 243 lcd.printf("Year: ");
EstebanLage 0:60db34a2735c 244 }
EstebanLage 0:60db34a2735c 245 break;
EstebanLage 0:60db34a2735c 246
EstebanLage 0:60db34a2735c 247 case 3:
EstebanLage 0:60db34a2735c 248 m = wheel.getPulses();
EstebanLage 0:60db34a2735c 249 if (m != 0)
EstebanLage 0:60db34a2735c 250 {
EstebanLage 0:60db34a2735c 251 tm.year = tm.year + m;
EstebanLage 0:60db34a2735c 252 if(tm.year < 2000)
EstebanLage 0:60db34a2735c 253 {
EstebanLage 0:60db34a2735c 254 tm.year = 2000;
EstebanLage 0:60db34a2735c 255 }
EstebanLage 0:60db34a2735c 256 wheel.reset();
EstebanLage 0:60db34a2735c 257 m = 0;
EstebanLage 0:60db34a2735c 258 }
EstebanLage 0:60db34a2735c 259 lcd.locate(6,0);
EstebanLage 0:60db34a2735c 260 lcd.printf("%02d",tm.year);
EstebanLage 0:60db34a2735c 261
EstebanLage 0:60db34a2735c 262 if (button_enco.falling())
EstebanLage 0:60db34a2735c 263 {
EstebanLage 0:60db34a2735c 264 i++;
EstebanLage 0:60db34a2735c 265 lcd.cls();
EstebanLage 0:60db34a2735c 266 lcd.locate(0,0);
EstebanLage 0:60db34a2735c 267 lcd.printf("Hours: ");
EstebanLage 0:60db34a2735c 268 }
EstebanLage 0:60db34a2735c 269 break;
EstebanLage 0:60db34a2735c 270
EstebanLage 0:60db34a2735c 271 case 4:
EstebanLage 0:60db34a2735c 272 m = wheel.getPulses();
EstebanLage 0:60db34a2735c 273 if (m != 0)
EstebanLage 0:60db34a2735c 274 {
EstebanLage 0:60db34a2735c 275 tm.hour = tm.hour + m;
EstebanLage 0:60db34a2735c 276 if(tm.hour > 23)
EstebanLage 0:60db34a2735c 277 {
EstebanLage 0:60db34a2735c 278 tm.hour = 0;
EstebanLage 0:60db34a2735c 279 }
EstebanLage 0:60db34a2735c 280 if(tm.hour < 0)
EstebanLage 0:60db34a2735c 281 {
EstebanLage 0:60db34a2735c 282 tm.hour = 23;
EstebanLage 0:60db34a2735c 283 }
EstebanLage 0:60db34a2735c 284 wheel.reset();
EstebanLage 0:60db34a2735c 285 m = 0;
EstebanLage 0:60db34a2735c 286 }
EstebanLage 0:60db34a2735c 287 lcd.locate(7,0);
EstebanLage 0:60db34a2735c 288 lcd.printf("%02d",tm.hour);
EstebanLage 0:60db34a2735c 289
EstebanLage 0:60db34a2735c 290 if (button_enco.falling())
EstebanLage 0:60db34a2735c 291 {
EstebanLage 0:60db34a2735c 292 i++;
EstebanLage 0:60db34a2735c 293 lcd.cls();
EstebanLage 0:60db34a2735c 294 lcd.locate(0,0);
EstebanLage 0:60db34a2735c 295 lcd.printf("Minutes: ");
EstebanLage 0:60db34a2735c 296 }
EstebanLage 0:60db34a2735c 297
EstebanLage 0:60db34a2735c 298 break;
EstebanLage 0:60db34a2735c 299
EstebanLage 0:60db34a2735c 300 case 5:
EstebanLage 0:60db34a2735c 301 m = wheel.getPulses();
EstebanLage 0:60db34a2735c 302 if (m != 0)
EstebanLage 0:60db34a2735c 303 {
EstebanLage 0:60db34a2735c 304 tm.min = tm.min + m;
EstebanLage 0:60db34a2735c 305 if(tm.min > 59)
EstebanLage 0:60db34a2735c 306 {
EstebanLage 0:60db34a2735c 307 tm.min = 0;
EstebanLage 0:60db34a2735c 308 }
EstebanLage 0:60db34a2735c 309 if(tm.min < 0)
EstebanLage 0:60db34a2735c 310 {
EstebanLage 0:60db34a2735c 311 tm.min = 59;
EstebanLage 0:60db34a2735c 312 }
EstebanLage 0:60db34a2735c 313
EstebanLage 0:60db34a2735c 314 wheel.reset();
EstebanLage 0:60db34a2735c 315 m = 0;
EstebanLage 0:60db34a2735c 316 }
EstebanLage 0:60db34a2735c 317 lcd.locate(9,0);
EstebanLage 0:60db34a2735c 318 lcd.printf("%02d",tm.min);
EstebanLage 0:60db34a2735c 319
EstebanLage 0:60db34a2735c 320 if (button_enco.falling())
EstebanLage 0:60db34a2735c 321 {
EstebanLage 0:60db34a2735c 322 i++;
EstebanLage 0:60db34a2735c 323 lcd.cls();
EstebanLage 0:60db34a2735c 324 lcd.locate(0,0);
EstebanLage 0:60db34a2735c 325 lcd.printf("Seconds: ");
EstebanLage 0:60db34a2735c 326 }
EstebanLage 0:60db34a2735c 327 break;
EstebanLage 0:60db34a2735c 328
EstebanLage 0:60db34a2735c 329
EstebanLage 0:60db34a2735c 330 case 6:
EstebanLage 0:60db34a2735c 331 m = wheel.getPulses();
EstebanLage 0:60db34a2735c 332 if (m != 0)
EstebanLage 0:60db34a2735c 333 {
EstebanLage 0:60db34a2735c 334 tm.sec = tm.sec + m;
EstebanLage 0:60db34a2735c 335 if(tm.sec > 59)
EstebanLage 0:60db34a2735c 336 {
EstebanLage 0:60db34a2735c 337 tm.sec = 0;
EstebanLage 0:60db34a2735c 338 }
EstebanLage 0:60db34a2735c 339 if(tm.sec < 0)
EstebanLage 0:60db34a2735c 340 {
EstebanLage 0:60db34a2735c 341 tm.sec = 59;
EstebanLage 0:60db34a2735c 342 }
EstebanLage 0:60db34a2735c 343 wheel.reset();
EstebanLage 0:60db34a2735c 344 m = 0;
EstebanLage 0:60db34a2735c 345 }
EstebanLage 0:60db34a2735c 346 lcd.locate(9,0);
EstebanLage 0:60db34a2735c 347 lcd.printf("%02d",tm.sec);
EstebanLage 0:60db34a2735c 348
EstebanLage 0:60db34a2735c 349 if (button_enco.falling())
EstebanLage 0:60db34a2735c 350 {
EstebanLage 0:60db34a2735c 351 if(pos==0)
EstebanLage 0:60db34a2735c 352 {
EstebanLage 0:60db34a2735c 353 rtc.setTime(tm, false, false);
EstebanLage 0:60db34a2735c 354 rtc.startClock();
EstebanLage 0:60db34a2735c 355 lcd.cls();
EstebanLage 0:60db34a2735c 356 lcd.locate(0, 0);
EstebanLage 0:60db34a2735c 357 lcd.printf("Time Set");
EstebanLage 0:60db34a2735c 358 wait(1);
EstebanLage 0:60db34a2735c 359 i = 0;
EstebanLage 0:60db34a2735c 360 Lugar = 0;
EstebanLage 0:60db34a2735c 361 lcd.cls();
EstebanLage 0:60db34a2735c 362 }
EstebanLage 0:60db34a2735c 363 if(pos > 0)
EstebanLage 0:60db34a2735c 364 {
EstebanLage 0:60db34a2735c 365 i++;
EstebanLage 0:60db34a2735c 366 lcd.cls();
EstebanLage 0:60db34a2735c 367 lcd.locate(0,0);
EstebanLage 0:60db34a2735c 368 lcd.printf("Enable: Off");
EstebanLage 0:60db34a2735c 369 }
EstebanLage 0:60db34a2735c 370 }
EstebanLage 0:60db34a2735c 371 break;
EstebanLage 0:60db34a2735c 372
EstebanLage 0:60db34a2735c 373 case 7:
EstebanLage 0:60db34a2735c 374 m = wheel.getPulses();
EstebanLage 0:60db34a2735c 375 if (m != 0)
EstebanLage 0:60db34a2735c 376 {
EstebanLage 0:60db34a2735c 377 if(flag == 0)
EstebanLage 0:60db34a2735c 378 {
EstebanLage 0:60db34a2735c 379 lcd.locate(8,0);
EstebanLage 0:60db34a2735c 380 lcd.printf("On ");
EstebanLage 0:60db34a2735c 381 flag = 1; //se activa la alarma
EstebanLage 0:60db34a2735c 382 }
EstebanLage 0:60db34a2735c 383 else
EstebanLage 0:60db34a2735c 384 if(flag == 1)
EstebanLage 0:60db34a2735c 385 {
EstebanLage 0:60db34a2735c 386 lcd.locate(8,0);
EstebanLage 0:60db34a2735c 387 lcd.printf("Off");
EstebanLage 0:60db34a2735c 388 flag = 0; //se desactiva la alarma
EstebanLage 0:60db34a2735c 389 }
EstebanLage 0:60db34a2735c 390 wheel.reset();
EstebanLage 0:60db34a2735c 391 m = 0;
EstebanLage 0:60db34a2735c 392 }
EstebanLage 0:60db34a2735c 393
EstebanLage 0:60db34a2735c 394 if (button_enco.falling())
EstebanLage 0:60db34a2735c 395 {
EstebanLage 0:60db34a2735c 396 if(flag == 1)
EstebanLage 0:60db34a2735c 397 {
EstebanLage 0:60db34a2735c 398 state_alarms = state_alarms | pot[(pos - 1)];
EstebanLage 0:60db34a2735c 399 }
EstebanLage 0:60db34a2735c 400 if(flag == 0)
EstebanLage 0:60db34a2735c 401 {
EstebanLage 0:60db34a2735c 402 state_alarms = state_alarms & pot1[(pos - 1)];
EstebanLage 0:60db34a2735c 403 }
EstebanLage 0:60db34a2735c 404 Alarm[pos - 1] = tm;
EstebanLage 0:60db34a2735c 405 lcd.cls();
EstebanLage 0:60db34a2735c 406 lcd.locate(0,0);
EstebanLage 0:60db34a2735c 407 lcd.printf("Alarm %d Set", pos);
EstebanLage 0:60db34a2735c 408 wait(1);
EstebanLage 0:60db34a2735c 409 i = 0;
EstebanLage 0:60db34a2735c 410 Lugar = 0;
EstebanLage 0:60db34a2735c 411 flag = 0;
EstebanLage 0:60db34a2735c 412 lcd.cls();
EstebanLage 0:60db34a2735c 413 }
EstebanLage 0:60db34a2735c 414 break;
EstebanLage 0:60db34a2735c 415 }
EstebanLage 0:60db34a2735c 416 break;
EstebanLage 0:60db34a2735c 417
EstebanLage 0:60db34a2735c 418 case 2:
EstebanLage 0:60db34a2735c 419 Sonido.write(0.5);
EstebanLage 0:60db34a2735c 420 wait(0.2);
EstebanLage 0:60db34a2735c 421 Sonido.write(255);
EstebanLage 0:60db34a2735c 422 wait(0.2);
EstebanLage 0:60db34a2735c 423 Sonido.write(0.5);
EstebanLage 0:60db34a2735c 424 wait(0.2);
EstebanLage 0:60db34a2735c 425 Sonido.write(255);
EstebanLage 0:60db34a2735c 426 wait(0.2);
EstebanLage 0:60db34a2735c 427
EstebanLage 0:60db34a2735c 428 m = wheel.getPulses();
EstebanLage 0:60db34a2735c 429
EstebanLage 0:60db34a2735c 430 if(alarma == 0) //pos_alarm
EstebanLage 0:60db34a2735c 431 {
EstebanLage 0:60db34a2735c 432 if(m != 0)
EstebanLage 0:60db34a2735c 433 {
EstebanLage 0:60db34a2735c 434 alarma = 1;
EstebanLage 0:60db34a2735c 435 wheel.reset();
EstebanLage 0:60db34a2735c 436 m = 0;
EstebanLage 0:60db34a2735c 437 lcd.locate(1,1);
EstebanLage 0:60db34a2735c 438 lcd.printf("-");
EstebanLage 0:60db34a2735c 439 lcd.locate(11,1);
EstebanLage 0:60db34a2735c 440 lcd.printf(">");
EstebanLage 0:60db34a2735c 441 }
EstebanLage 0:60db34a2735c 442 }
EstebanLage 0:60db34a2735c 443
EstebanLage 0:60db34a2735c 444 if(alarma == 1)
EstebanLage 0:60db34a2735c 445 {
EstebanLage 0:60db34a2735c 446 if(m != 0)
EstebanLage 0:60db34a2735c 447 {
EstebanLage 0:60db34a2735c 448 alarma = 0;
EstebanLage 0:60db34a2735c 449 wheel.reset();
EstebanLage 0:60db34a2735c 450 m = 0;
EstebanLage 0:60db34a2735c 451 lcd.locate(1,1);
EstebanLage 0:60db34a2735c 452 lcd.printf(">");
EstebanLage 0:60db34a2735c 453 lcd.locate(11,1);
EstebanLage 0:60db34a2735c 454 lcd.printf("-");
EstebanLage 0:60db34a2735c 455 }
EstebanLage 0:60db34a2735c 456 }
EstebanLage 0:60db34a2735c 457
EstebanLage 0:60db34a2735c 458 if (button_enco.falling())
EstebanLage 0:60db34a2735c 459 {
EstebanLage 0:60db34a2735c 460 if(alarma == 0)
EstebanLage 0:60db34a2735c 461 {
EstebanLage 0:60db34a2735c 462 wheel.reset();
EstebanLage 0:60db34a2735c 463 m=0;
EstebanLage 0:60db34a2735c 464 Sonido.write(255);
EstebanLage 0:60db34a2735c 465 lcd.cls();
EstebanLage 0:60db34a2735c 466 wait(0.5);
EstebanLage 0:60db34a2735c 467
EstebanLage 0:60db34a2735c 468 }
EstebanLage 0:60db34a2735c 469 if(alarma==1)
EstebanLage 0:60db34a2735c 470 {
EstebanLage 0:60db34a2735c 471 rtc.getTime(tm);
EstebanLage 0:60db34a2735c 472 if(tm.min >= 55)
EstebanLage 0:60db34a2735c 473 {
EstebanLage 0:60db34a2735c 474 Alarm[pos_alarm].min = (tm.min + 5) - 60;
EstebanLage 0:60db34a2735c 475 Alarm[pos_alarm].hour = tm.hour + 1;
EstebanLage 0:60db34a2735c 476 }
EstebanLage 0:60db34a2735c 477 else
EstebanLage 0:60db34a2735c 478 {
EstebanLage 0:60db34a2735c 479 Alarm[pos_alarm].min = tm.min + 5;
EstebanLage 0:60db34a2735c 480 }
EstebanLage 0:60db34a2735c 481 lcd.cls();
EstebanLage 0:60db34a2735c 482 alarma=0;
EstebanLage 0:60db34a2735c 483
EstebanLage 0:60db34a2735c 484 }
EstebanLage 0:60db34a2735c 485 Lugar = 0;
EstebanLage 0:60db34a2735c 486 }
EstebanLage 0:60db34a2735c 487 break;
EstebanLage 0:60db34a2735c 488
EstebanLage 0:60db34a2735c 489 case 3:
EstebanLage 0:60db34a2735c 490 lcd.locate(0,0);
EstebanLage 0:60db34a2735c 491 lcd.printf("Waiting IRDA");
EstebanLage 0:60db34a2735c 492 header = 0;
EstebanLage 0:60db34a2735c 493 header = irda.read_low_us(); //funcion para leer un pulso de caida o bajo
EstebanLage 0:60db34a2735c 494 if (header > head_L && header < head_H)//verificar que este en la tolerancia +-20%
EstebanLage 0:60db34a2735c 495 {
EstebanLage 0:60db34a2735c 496 //leo los datos de la trama y se meten a un arreglo
EstebanLage 0:60db34a2735c 497 wait_us(2000);
EstebanLage 0:60db34a2735c 498 for(g = 0; g<(num_bits-1); g++) // POR OSCILOSCOPIO se determina que llegan (num_bits),datos
EstebanLage 0:60db34a2735c 499 {
EstebanLage 0:60db34a2735c 500 dato = irda.read_high_us(); //leer un bit de datos que es pulso arriba en este control
EstebanLage 0:60db34a2735c 501 num[g]=dato;
EstebanLage 0:60db34a2735c 502 wait_us(332);
EstebanLage 0:60db34a2735c 503 }
EstebanLage 0:60db34a2735c 504 for(g = 0; g<num_bits; g++) // guardo la secuancia en binario
EstebanLage 0:60db34a2735c 505 {
EstebanLage 0:60db34a2735c 506 if(num[g] > ((T_alto+T_bajo)/2)){sec[g]=1;}
EstebanLage 0:60db34a2735c 507 else {sec[g]=0;}
EstebanLage 0:60db34a2735c 508 pc.printf("%d", sec[g]);
EstebanLage 0:60db34a2735c 509 }
EstebanLage 0:60db34a2735c 510 pc.printf("\n");
EstebanLage 0:60db34a2735c 511 for(h = 0; h < 8; h++)
EstebanLage 0:60db34a2735c 512 {
EstebanLage 0:60db34a2735c 513 for(g = 0; g < 32; g++)
EstebanLage 0:60db34a2735c 514 {
EstebanLage 0:60db34a2735c 515 if(sec[g]==boton[h][g]) //en caso de que un bit no coincida se descarta el boton 1
EstebanLage 0:60db34a2735c 516 {
EstebanLage 0:60db34a2735c 517 count++;
EstebanLage 0:60db34a2735c 518 if(count==32)
EstebanLage 0:60db34a2735c 519 {
EstebanLage 0:60db34a2735c 520 boton_sel = h - 1;
EstebanLage 0:60db34a2735c 521 lcd.cls();
EstebanLage 0:60db34a2735c 522 lcd.locate(0,0);
EstebanLage 0:60db34a2735c 523 lcd.printf("Alarm %d: ",(boton_sel+1));
EstebanLage 0:60db34a2735c 524 if(boton_sel >= 0)
EstebanLage 0:60db34a2735c 525 {
EstebanLage 0:60db34a2735c 526 if((state_alarms&(pot[boton_sel])) == pot[boton_sel])
EstebanLage 0:60db34a2735c 527 {
EstebanLage 0:60db34a2735c 528 state_alarms = state_alarms & pot1[boton_sel];
EstebanLage 0:60db34a2735c 529 lcd.locate(10,0);
EstebanLage 0:60db34a2735c 530 lcd.printf("Off");
EstebanLage 0:60db34a2735c 531 wait(1.5);
EstebanLage 0:60db34a2735c 532 lcd.cls();
EstebanLage 0:60db34a2735c 533 }
EstebanLage 0:60db34a2735c 534 else
EstebanLage 0:60db34a2735c 535 {
EstebanLage 0:60db34a2735c 536 state_alarms = state_alarms | pot[boton_sel];
EstebanLage 0:60db34a2735c 537 lcd.locate(10,0);
EstebanLage 0:60db34a2735c 538 lcd.printf("On ");
EstebanLage 0:60db34a2735c 539 wait(1.5);
EstebanLage 0:60db34a2735c 540 lcd.cls();
EstebanLage 0:60db34a2735c 541 mostrar = boton_sel+1;
EstebanLage 0:60db34a2735c 542 }
EstebanLage 0:60db34a2735c 543 }
EstebanLage 0:60db34a2735c 544 else
EstebanLage 0:60db34a2735c 545 {
EstebanLage 0:60db34a2735c 546 Lugar = 0;
EstebanLage 0:60db34a2735c 547 pos = 0;
EstebanLage 0:60db34a2735c 548 lcd.cls();
EstebanLage 0:60db34a2735c 549 }
EstebanLage 0:60db34a2735c 550 }
EstebanLage 0:60db34a2735c 551 }
EstebanLage 0:60db34a2735c 552 }
EstebanLage 0:60db34a2735c 553 count = 0;
EstebanLage 0:60db34a2735c 554 }
EstebanLage 0:60db34a2735c 555 }
EstebanLage 0:60db34a2735c 556
EstebanLage 0:60db34a2735c 557
EstebanLage 0:60db34a2735c 558 break;
EstebanLage 0:60db34a2735c 559 }
EstebanLage 0:60db34a2735c 560 }
EstebanLage 0:60db34a2735c 561 }