por medio del modulo i2c se realizo un reloj con alarma al cual se el configura la hora actual y la alarma por medio de botones y un encoder.
Dependencies: Debounced QEI RTC-DS1307 TextLCD mbed
main.cpp@0:98d22ab8a13c, 2014-05-06 (annotated)
- Committer:
- lopjohn_26
- Date:
- Tue May 06 02:40:21 2014 +0000
- Revision:
- 0:98d22ab8a13c
reloj y alarma
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lopjohn_26 | 0:98d22ab8a13c | 1 | #include "mbed.h" |
lopjohn_26 | 0:98d22ab8a13c | 2 | #include "Rtc_Ds1307.h" |
lopjohn_26 | 0:98d22ab8a13c | 3 | #include "TextLCD.h" |
lopjohn_26 | 0:98d22ab8a13c | 4 | #include "DebouncedIn.h" |
lopjohn_26 | 0:98d22ab8a13c | 5 | #include "QEI.h" |
lopjohn_26 | 0:98d22ab8a13c | 6 | |
lopjohn_26 | 0:98d22ab8a13c | 7 | //RtcCls rtc(p28, p27, p29, true); |
lopjohn_26 | 0:98d22ab8a13c | 8 | Rtc_Ds1307 rtc(PTC9, PTC8); |
lopjohn_26 | 0:98d22ab8a13c | 9 | TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); //Puertos LCD rs, e, d4, d5, d6, d7 |
lopjohn_26 | 0:98d22ab8a13c | 10 | PwmOut sound(PTA12); |
lopjohn_26 | 0:98d22ab8a13c | 11 | |
lopjohn_26 | 0:98d22ab8a13c | 12 | |
lopjohn_26 | 0:98d22ab8a13c | 13 | DigitalOut led1(LED1); |
lopjohn_26 | 0:98d22ab8a13c | 14 | DigitalOut led2(LED2); |
lopjohn_26 | 0:98d22ab8a13c | 15 | DigitalOut led3(LED3); |
lopjohn_26 | 0:98d22ab8a13c | 16 | int a, kp, sp, kd, ki, valor; |
lopjohn_26 | 0:98d22ab8a13c | 17 | int hr, mn, se, di, me, an, ho; |
lopjohn_26 | 0:98d22ab8a13c | 18 | int loop = 10; |
lopjohn_26 | 0:98d22ab8a13c | 19 | |
lopjohn_26 | 0:98d22ab8a13c | 20 | int encod(int); |
lopjohn_26 | 0:98d22ab8a13c | 21 | |
lopjohn_26 | 0:98d22ab8a13c | 22 | int encod(){ |
lopjohn_26 | 0:98d22ab8a13c | 23 | sp=0; |
lopjohn_26 | 0:98d22ab8a13c | 24 | QEI Encoder (PTA1, PTA2, NC, 624); |
lopjohn_26 | 0:98d22ab8a13c | 25 | DebouncedIn bot1(PTC12); //cambiar la posición (CONECTO ESTA ENTRADA A LA ULTIMA SALIDA DEL ENCONDER, ASI SE UTILIZARA EL BOTON DEL ENCODER) |
lopjohn_26 | 0:98d22ab8a13c | 26 | DebouncedIn bot4(PTC17); |
lopjohn_26 | 0:98d22ab8a13c | 27 | int C1=0x0E; |
lopjohn_26 | 0:98d22ab8a13c | 28 | //int C4=0x0C; |
lopjohn_26 | 0:98d22ab8a13c | 29 | |
lopjohn_26 | 0:98d22ab8a13c | 30 | |
lopjohn_26 | 0:98d22ab8a13c | 31 | |
lopjohn_26 | 0:98d22ab8a13c | 32 | led1=led2=1; |
lopjohn_26 | 0:98d22ab8a13c | 33 | |
lopjohn_26 | 0:98d22ab8a13c | 34 | lcd.writeCommand(C1); //comando para mostrar el cursor en el LCD |
lopjohn_26 | 0:98d22ab8a13c | 35 | |
lopjohn_26 | 0:98d22ab8a13c | 36 | lcd.locate(0,0); // Ubica e imprime nombre de los parámetros en del PID en la pantalla LCD |
lopjohn_26 | 0:98d22ab8a13c | 37 | lcd.printf("dato="); |
lopjohn_26 | 0:98d22ab8a13c | 38 | |
lopjohn_26 | 0:98d22ab8a13c | 39 | |
lopjohn_26 | 0:98d22ab8a13c | 40 | |
lopjohn_26 | 0:98d22ab8a13c | 41 | //Inicio del ciclo |
lopjohn_26 | 0:98d22ab8a13c | 42 | |
lopjohn_26 | 0:98d22ab8a13c | 43 | while(1) { |
lopjohn_26 | 0:98d22ab8a13c | 44 | if (bot1.falling()) { //----------------- Aumenta de posición el cursor a la primera línea de menu |
lopjohn_26 | 0:98d22ab8a13c | 45 | |
lopjohn_26 | 0:98d22ab8a13c | 46 | sound=1.0f; |
lopjohn_26 | 0:98d22ab8a13c | 47 | wait(0.1); |
lopjohn_26 | 0:98d22ab8a13c | 48 | sound=0; |
lopjohn_26 | 0:98d22ab8a13c | 49 | |
lopjohn_26 | 0:98d22ab8a13c | 50 | break; |
lopjohn_26 | 0:98d22ab8a13c | 51 | } |
lopjohn_26 | 0:98d22ab8a13c | 52 | |
lopjohn_26 | 0:98d22ab8a13c | 53 | valor = Encoder.getPulses(); //------------- Asigna el valor de los pulsos del encoder a una variable llamada "valor" |
lopjohn_26 | 0:98d22ab8a13c | 54 | |
lopjohn_26 | 0:98d22ab8a13c | 55 | |
lopjohn_26 | 0:98d22ab8a13c | 56 | sp = sp + valor; //------------- Asigna el valor del encoder al parámetro sp y tiene en cuenta el valor anterior |
lopjohn_26 | 0:98d22ab8a13c | 57 | Encoder.reset(); //------------- Resetea el valor del encoder |
lopjohn_26 | 0:98d22ab8a13c | 58 | if (sp<0){ |
lopjohn_26 | 0:98d22ab8a13c | 59 | sp=0; //------------- No se admite valores negativos |
lopjohn_26 | 0:98d22ab8a13c | 60 | } |
lopjohn_26 | 0:98d22ab8a13c | 61 | |
lopjohn_26 | 0:98d22ab8a13c | 62 | lcd.locate(4,0); //------------- Ubica e imprime el parámetro "sp" en la pantalla LCD |
lopjohn_26 | 0:98d22ab8a13c | 63 | lcd.printf("= ",sp); |
lopjohn_26 | 0:98d22ab8a13c | 64 | lcd.locate(5,0); |
lopjohn_26 | 0:98d22ab8a13c | 65 | lcd.printf("%i",sp); |
lopjohn_26 | 0:98d22ab8a13c | 66 | wait(0.15); |
lopjohn_26 | 0:98d22ab8a13c | 67 | |
lopjohn_26 | 0:98d22ab8a13c | 68 | |
lopjohn_26 | 0:98d22ab8a13c | 69 | |
lopjohn_26 | 0:98d22ab8a13c | 70 | } |
lopjohn_26 | 0:98d22ab8a13c | 71 | |
lopjohn_26 | 0:98d22ab8a13c | 72 | return sp; |
lopjohn_26 | 0:98d22ab8a13c | 73 | } |
lopjohn_26 | 0:98d22ab8a13c | 74 | |
lopjohn_26 | 0:98d22ab8a13c | 75 | |
lopjohn_26 | 0:98d22ab8a13c | 76 | |
lopjohn_26 | 0:98d22ab8a13c | 77 | |
lopjohn_26 | 0:98d22ab8a13c | 78 | |
lopjohn_26 | 0:98d22ab8a13c | 79 | |
lopjohn_26 | 0:98d22ab8a13c | 80 | |
lopjohn_26 | 0:98d22ab8a13c | 81 | |
lopjohn_26 | 0:98d22ab8a13c | 82 | int main() { |
lopjohn_26 | 0:98d22ab8a13c | 83 | |
lopjohn_26 | 0:98d22ab8a13c | 84 | inicio: |
lopjohn_26 | 0:98d22ab8a13c | 85 | |
lopjohn_26 | 0:98d22ab8a13c | 86 | DebouncedIn bot1(PTC10); |
lopjohn_26 | 0:98d22ab8a13c | 87 | DebouncedIn bot2(PTC11); |
lopjohn_26 | 0:98d22ab8a13c | 88 | DebouncedIn bot3(PTC16); |
lopjohn_26 | 0:98d22ab8a13c | 89 | DebouncedIn bot4(PTC17); |
lopjohn_26 | 0:98d22ab8a13c | 90 | |
lopjohn_26 | 0:98d22ab8a13c | 91 | Rtc_Ds1307::Time_rtc tm = {}; |
lopjohn_26 | 0:98d22ab8a13c | 92 | |
lopjohn_26 | 0:98d22ab8a13c | 93 | while(1) { |
lopjohn_26 | 0:98d22ab8a13c | 94 | |
lopjohn_26 | 0:98d22ab8a13c | 95 | lcd.printf("configuracion reloj y alarma \n"); |
lopjohn_26 | 0:98d22ab8a13c | 96 | wait(1.5); |
lopjohn_26 | 0:98d22ab8a13c | 97 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 98 | lcd.printf("oprima uno de los botones \n"); |
lopjohn_26 | 0:98d22ab8a13c | 99 | wait(1.5); |
lopjohn_26 | 0:98d22ab8a13c | 100 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 101 | lcd.printf("a: configurar el reloj\n"); |
lopjohn_26 | 0:98d22ab8a13c | 102 | wait(2); |
lopjohn_26 | 0:98d22ab8a13c | 103 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 104 | lcd.printf("b: configurar laalarma\n"); |
lopjohn_26 | 0:98d22ab8a13c | 105 | wait(2); |
lopjohn_26 | 0:98d22ab8a13c | 106 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 107 | lcd.printf("c: iniciar el reloj\n"); |
lopjohn_26 | 0:98d22ab8a13c | 108 | wait(2); |
lopjohn_26 | 0:98d22ab8a13c | 109 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 110 | lcd.printf("d: salir de configuracion \n"); |
lopjohn_26 | 0:98d22ab8a13c | 111 | wait(2); |
lopjohn_26 | 0:98d22ab8a13c | 112 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 113 | lcd.printf("digite la opcion elegida\n"); |
lopjohn_26 | 0:98d22ab8a13c | 114 | wait(5); |
lopjohn_26 | 0:98d22ab8a13c | 115 | |
lopjohn_26 | 0:98d22ab8a13c | 116 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 117 | |
lopjohn_26 | 0:98d22ab8a13c | 118 | |
lopjohn_26 | 0:98d22ab8a13c | 119 | if (bot1.falling()) { |
lopjohn_26 | 0:98d22ab8a13c | 120 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 121 | |
lopjohn_26 | 0:98d22ab8a13c | 122 | lcd.printf("ingrese hora\n"); |
lopjohn_26 | 0:98d22ab8a13c | 123 | wait(1); |
lopjohn_26 | 0:98d22ab8a13c | 124 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 125 | tm.hour = encod(); |
lopjohn_26 | 0:98d22ab8a13c | 126 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 127 | lcd.printf("ingrese minutos\n"); |
lopjohn_26 | 0:98d22ab8a13c | 128 | wait(1); |
lopjohn_26 | 0:98d22ab8a13c | 129 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 130 | tm.min = encod(); |
lopjohn_26 | 0:98d22ab8a13c | 131 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 132 | lcd.printf("ingrese segundos\n"); |
lopjohn_26 | 0:98d22ab8a13c | 133 | wait(1); |
lopjohn_26 | 0:98d22ab8a13c | 134 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 135 | tm.sec = encod(); |
lopjohn_26 | 0:98d22ab8a13c | 136 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 137 | lcd.printf("ingrese ano\n"); |
lopjohn_26 | 0:98d22ab8a13c | 138 | wait(1); |
lopjohn_26 | 0:98d22ab8a13c | 139 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 140 | tm.year = encod(); |
lopjohn_26 | 0:98d22ab8a13c | 141 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 142 | lcd.printf("ingrese mes\n"); |
lopjohn_26 | 0:98d22ab8a13c | 143 | wait(1); |
lopjohn_26 | 0:98d22ab8a13c | 144 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 145 | tm.mon = encod(); |
lopjohn_26 | 0:98d22ab8a13c | 146 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 147 | lcd.printf("ingrese dia\n"); |
lopjohn_26 | 0:98d22ab8a13c | 148 | wait(1); |
lopjohn_26 | 0:98d22ab8a13c | 149 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 150 | tm.date = encod(); |
lopjohn_26 | 0:98d22ab8a13c | 151 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 152 | |
lopjohn_26 | 0:98d22ab8a13c | 153 | rtc.setTime(tm, false, false); |
lopjohn_26 | 0:98d22ab8a13c | 154 | } |
lopjohn_26 | 0:98d22ab8a13c | 155 | |
lopjohn_26 | 0:98d22ab8a13c | 156 | if (bot2.falling()) { |
lopjohn_26 | 0:98d22ab8a13c | 157 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 158 | |
lopjohn_26 | 0:98d22ab8a13c | 159 | lcd.printf("ingrese hora\n"); |
lopjohn_26 | 0:98d22ab8a13c | 160 | wait(1); |
lopjohn_26 | 0:98d22ab8a13c | 161 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 162 | hr = encod(); |
lopjohn_26 | 0:98d22ab8a13c | 163 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 164 | lcd.printf("ingrese minutos\n"); |
lopjohn_26 | 0:98d22ab8a13c | 165 | wait(1); |
lopjohn_26 | 0:98d22ab8a13c | 166 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 167 | mn = encod(); |
lopjohn_26 | 0:98d22ab8a13c | 168 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 169 | lcd.printf("ingrese segundos\n"); |
lopjohn_26 | 0:98d22ab8a13c | 170 | wait(1); |
lopjohn_26 | 0:98d22ab8a13c | 171 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 172 | se = encod(); |
lopjohn_26 | 0:98d22ab8a13c | 173 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 174 | lcd.printf("ingrese ano\n"); |
lopjohn_26 | 0:98d22ab8a13c | 175 | wait(1); |
lopjohn_26 | 0:98d22ab8a13c | 176 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 177 | an = encod(); |
lopjohn_26 | 0:98d22ab8a13c | 178 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 179 | lcd.printf("ingrese mes\n"); |
lopjohn_26 | 0:98d22ab8a13c | 180 | wait(1); |
lopjohn_26 | 0:98d22ab8a13c | 181 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 182 | me = encod(); |
lopjohn_26 | 0:98d22ab8a13c | 183 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 184 | lcd.printf("ingrese dia\n"); |
lopjohn_26 | 0:98d22ab8a13c | 185 | wait(1); |
lopjohn_26 | 0:98d22ab8a13c | 186 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 187 | di= encod(); |
lopjohn_26 | 0:98d22ab8a13c | 188 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 189 | |
lopjohn_26 | 0:98d22ab8a13c | 190 | } |
lopjohn_26 | 0:98d22ab8a13c | 191 | |
lopjohn_26 | 0:98d22ab8a13c | 192 | if (bot3.falling()) { |
lopjohn_26 | 0:98d22ab8a13c | 193 | // start |
lopjohn_26 | 0:98d22ab8a13c | 194 | lcd.printf("realizando inicializacion\n"); |
lopjohn_26 | 0:98d22ab8a13c | 195 | wait(3); |
lopjohn_26 | 0:98d22ab8a13c | 196 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 197 | rtc.startClock(); |
lopjohn_26 | 0:98d22ab8a13c | 198 | } |
lopjohn_26 | 0:98d22ab8a13c | 199 | |
lopjohn_26 | 0:98d22ab8a13c | 200 | if (bot4.falling()) { |
lopjohn_26 | 0:98d22ab8a13c | 201 | //exit |
lopjohn_26 | 0:98d22ab8a13c | 202 | led1=led2=led3=1; //------------- Flash para salir del bucle |
lopjohn_26 | 0:98d22ab8a13c | 203 | wait(0.25); |
lopjohn_26 | 0:98d22ab8a13c | 204 | led1=led2=led3=0; |
lopjohn_26 | 0:98d22ab8a13c | 205 | lcd.printf("saliendo del menu\n"); |
lopjohn_26 | 0:98d22ab8a13c | 206 | wait(1.5); |
lopjohn_26 | 0:98d22ab8a13c | 207 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 208 | break; |
lopjohn_26 | 0:98d22ab8a13c | 209 | |
lopjohn_26 | 0:98d22ab8a13c | 210 | } |
lopjohn_26 | 0:98d22ab8a13c | 211 | |
lopjohn_26 | 0:98d22ab8a13c | 212 | |
lopjohn_26 | 0:98d22ab8a13c | 213 | } |
lopjohn_26 | 0:98d22ab8a13c | 214 | |
lopjohn_26 | 0:98d22ab8a13c | 215 | //------------------------------sonido alarma----------------------------------------------------------------------------------------------- |
lopjohn_26 | 0:98d22ab8a13c | 216 | |
lopjohn_26 | 0:98d22ab8a13c | 217 | while (loop>0){ // Loop continously |
lopjohn_26 | 0:98d22ab8a13c | 218 | |
lopjohn_26 | 0:98d22ab8a13c | 219 | if (rtc.getTime(tm) ) { |
lopjohn_26 | 0:98d22ab8a13c | 220 | lcd.locate(0,0); |
lopjohn_26 | 0:98d22ab8a13c | 221 | lcd.printf("%02d:%02d:%02d\n", tm.hour, tm.min, tm.sec); |
lopjohn_26 | 0:98d22ab8a13c | 222 | lcd.printf("%02d:%02d:%02d\n", hr, mn,se); |
lopjohn_26 | 0:98d22ab8a13c | 223 | wait(0.1); |
lopjohn_26 | 0:98d22ab8a13c | 224 | lcd.cls(); |
lopjohn_26 | 0:98d22ab8a13c | 225 | } |
lopjohn_26 | 0:98d22ab8a13c | 226 | |
lopjohn_26 | 0:98d22ab8a13c | 227 | if ((tm.hour==hr) && (tm.min==mn) && (tm.sec==se)){ |
lopjohn_26 | 0:98d22ab8a13c | 228 | |
lopjohn_26 | 0:98d22ab8a13c | 229 | while (1){ |
lopjohn_26 | 0:98d22ab8a13c | 230 | |
lopjohn_26 | 0:98d22ab8a13c | 231 | sound=1.0f; |
lopjohn_26 | 0:98d22ab8a13c | 232 | wait(0.3); |
lopjohn_26 | 0:98d22ab8a13c | 233 | sound=0; |
lopjohn_26 | 0:98d22ab8a13c | 234 | wait(0.2); |
lopjohn_26 | 0:98d22ab8a13c | 235 | |
lopjohn_26 | 0:98d22ab8a13c | 236 | if(bot1.falling()){ |
lopjohn_26 | 0:98d22ab8a13c | 237 | se= se+20; |
lopjohn_26 | 0:98d22ab8a13c | 238 | if(se>=60){ |
lopjohn_26 | 0:98d22ab8a13c | 239 | mn++; |
lopjohn_26 | 0:98d22ab8a13c | 240 | se=se-60; |
lopjohn_26 | 0:98d22ab8a13c | 241 | } |
lopjohn_26 | 0:98d22ab8a13c | 242 | if(mn>=60){ |
lopjohn_26 | 0:98d22ab8a13c | 243 | hr++; |
lopjohn_26 | 0:98d22ab8a13c | 244 | mn=mn-60; |
lopjohn_26 | 0:98d22ab8a13c | 245 | } |
lopjohn_26 | 0:98d22ab8a13c | 246 | break; |
lopjohn_26 | 0:98d22ab8a13c | 247 | } |
lopjohn_26 | 0:98d22ab8a13c | 248 | |
lopjohn_26 | 0:98d22ab8a13c | 249 | if(bot2.falling()){ |
lopjohn_26 | 0:98d22ab8a13c | 250 | break; |
lopjohn_26 | 0:98d22ab8a13c | 251 | } |
lopjohn_26 | 0:98d22ab8a13c | 252 | } |
lopjohn_26 | 0:98d22ab8a13c | 253 | |
lopjohn_26 | 0:98d22ab8a13c | 254 | } |
lopjohn_26 | 0:98d22ab8a13c | 255 | if(bot1.falling()){ |
lopjohn_26 | 0:98d22ab8a13c | 256 | lcd.printf("regresando a configuracion\n"); |
lopjohn_26 | 0:98d22ab8a13c | 257 | break; |
lopjohn_26 | 0:98d22ab8a13c | 258 | } |
lopjohn_26 | 0:98d22ab8a13c | 259 | } |
lopjohn_26 | 0:98d22ab8a13c | 260 | goto inicio; |
lopjohn_26 | 0:98d22ab8a13c | 261 | } |
lopjohn_26 | 0:98d22ab8a13c | 262 | |
lopjohn_26 | 0:98d22ab8a13c | 263 | |
lopjohn_26 | 0:98d22ab8a13c | 264 |