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

Committer:
lopjohn_26
Date:
Tue May 06 02:40:21 2014 +0000
Revision:
0:98d22ab8a13c
reloj y alarma

Who changed what in which revision?

UserRevisionLine numberNew 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