Reloj con alarma y snooze
Dependencies: RTC-DS1307-Modificada TextLCD mbed QEI
Revision 2:32f3a407a8ea, committed 2016-05-19
- Comitter:
- Susanaranjo
- Date:
- Thu May 19 19:18:49 2016 +0000
- Parent:
- 1:6a630400f473
- Commit message:
- Alarma con Snooze y encoder
Changed in this revision
QEI.lib | Show annotated file Show diff for this revision Revisions of this file |
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r 6a630400f473 -r 32f3a407a8ea QEI.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/QEI.lib Thu May 19 19:18:49 2016 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/aberk/code/QEI/#5c2ad81551aa
diff -r 6a630400f473 -r 32f3a407a8ea main.cpp --- a/main.cpp Tue May 17 03:54:48 2016 +0000 +++ b/main.cpp Thu May 19 19:18:49 2016 +0000 @@ -1,6 +1,7 @@ #include "mbed.h" #include "Rtc_Ds1307.h" #include "TextLCD.h" +#include "QEI.h" //Configuración de la pantalla TextLCD lcd(PTE20,PTE21,PTE22,PTE23,PTE29,PTE30, TextLCD::LCD16x2); //Rs, E, d4, d5, d6, d7 @@ -11,22 +12,36 @@ //Configuración del puerto Serial pc(USBTX, USBRX, "pc"); +//Configuración del encoder +QEI encoder(PTD5, PTD0, NC,624); + DigitalIn alarma(PTC12); DigitalIn snooze(PTC13); +DigitalIn alarmaE(PTC16); PwmOut speaker(PTA13); char buffer[128]; int readptr = 0; int hora=0; +int hora2=0; int minutos=0; +int minutos2=0; int seg=0; +int seg2=0; int mes=0; +int mes2=0; int fecha=0; +int fecha2=0; int anno=0; +int anno2=0; int pulsador; int pulsador2; int a=0; +int b=0; +int pulsos=0; +int diferencia=0; +int alarma2=0; int main() @@ -82,10 +97,11 @@ pulsador=alarma.read(); a=(abs(tm.hour-hora))+(abs(tm.min-minutos))+(abs(tm.sec-seg))+(abs(tm.mon-mes))+(abs(tm.date-fecha))+(abs(tm.year-anno)); // Compara la hora y la fecha actual con la fecha y hora de la alarma + b=(abs(tm.hour-hora2))+(abs(tm.min-minutos2))+(abs(tm.sec-seg2))+(abs(tm.mon-mes2))+(abs(tm.date-fecha2))+(abs(tm.year-anno2)); // Compara la hora y la fecha actual con la fecha y hora de la alarma //pc.printf("%d\n",a); - if (a==0) + if (a*b==0) { loop3: lcd.cls(); lcd.printf("ALARMA"); @@ -151,6 +167,7 @@ buffer[readptr++] = c; } buffer[readptr++] = 0; + // Configurar alarma desde el computador if (strncmp(buffer, "alarma", 6) == 0) { lcd.cls(); @@ -181,19 +198,38 @@ } else if (strncmp(buffer, "ver", 3) == 0) { if(anno==0){ - pc.printf("No hay alarma\n"); + pc.printf("No hay alarma 1\n"); lcd.cls(); - lcd.printf("No hay alarma"); + lcd.printf("No hay alarma 1"); wait_ms(500); }else{ pc.printf("Hora de la alarma : %02d:%02d:%02d\n", hora, minutos, seg); pc.printf("Fecha de la alarma : %02d/%02d/%04d\n", fecha, mes, anno); lcd.cls(); + lcd.printf("Alarma 1"); + wait (1); lcd.printf("%02d:%02d:%02d", hora, minutos, seg); lcd.locate(0,1); lcd.printf("%02d:%02d:%02d", fecha, mes, anno); wait(2);} + if(alarma2==0){ + pc.printf("No hay alarma 2\n"); + lcd.locate(0,1); + lcd.printf("No hay alarma 2"); + wait_ms(500); + }else{ + pc.printf("Hora de la alarma 2 : %02d:%02d:%02d\n", hora2, minutos2, seg2); + pc.printf("Fecha de la alarma 2: %02d/%02d/%04d\n", fecha2, mes2, anno2); + lcd.cls(); + lcd.printf("Alarma 2"); + wait (1); + lcd.printf("%02d:%02d:%02d", hora2, minutos2, seg2); + lcd.locate(0,1); + lcd.printf("%02d:%02d:%02d", fecha2, mes2, anno2); + wait(2);} + + goto loop1; } else { @@ -201,7 +237,270 @@ } - } else { + } + + // Configura alarma con encoder + else if (alarmaE==0){ + pc.printf("* Configurar alarma con encoder *\n"); + lcd.cls(); + lcd.printf("Alarma con"); + lcd.locate(0,1); + lcd.printf("encoder"); + wait (1); + + + //Configuración fecha + + pc.printf("Fecha de la alarma:\n"); + lcd.cls(); + lcd.printf("Fecha"); + +loop5: diferencia=encoder.getPulses()-pulsos; + pulsos=encoder.getPulses(); + if (!alarmaE){ + pc.printf("\n"); + pc.printf("Mes de la alarma:\n"); + lcd.cls(); + lcd.printf("Mes"); + diferencia=0; + pulsos=0; + wait(1); + goto loop6; + }else{ + if (diferencia==0){ + wait(0.1); + goto loop5; + }else if (diferencia+fecha2>=31){ + fecha2=31; + pc.printf("%02d\n", fecha2); + lcd.locate(0,1); + lcd.printf("%02d",fecha2); + wait(0.1); + goto loop5; + }else if(diferencia+fecha2<1) { + fecha2=1; + pc.printf("%02d\n", fecha2); + lcd.locate(0,1); + lcd.printf("%02d",fecha2); + wait(0.1); + goto loop5; + }else{ + fecha2+=diferencia; + pc.printf("%02d\n", fecha2); + lcd.locate(0,1); + lcd.printf("%02d",fecha2); + wait(0.1); + goto loop5; + }} + + + + //Configuración mes + + + loop6: diferencia=encoder.getPulses()-pulsos; + pulsos=encoder.getPulses(); + if (!alarmaE){ + pc.printf("\n"); + pc.printf("Anno de la alarma:\n"); + lcd.cls(); + lcd.printf("Anno"); + diferencia=0; + pulsos=0; + wait(1); + goto loop7; + }else{ + if (diferencia==0){ + wait(0.1); + goto loop6; + }else if (diferencia+mes2>=12){ + mes2=12; + pc.printf("%02d\n", mes2); + lcd.locate(0,1); + lcd.printf("%02d",mes2); + wait(0.1); + goto loop6; + }else if(diferencia+mes2<1) { + mes2=1; + pc.printf("%02d\n", mes2); + lcd.locate(0,1); + lcd.printf("%02d",mes2); + wait(0.1); + goto loop6; + }else{ + mes2+=diferencia; + pc.printf("%02d\n", mes2); + lcd.locate(0,1); + lcd.printf("%02d",mes2); + wait(0.1); + goto loop6 ; + }} + + + + //Configuración año + loop7: diferencia=encoder.getPulses()-pulsos; + pulsos=encoder.getPulses(); + if (!alarmaE){ + pc.printf("\n"); + pc.printf("Hora de la alarma:\n"); + lcd.cls(); + lcd.printf("Hora"); + diferencia=0; + pulsos=0; + wait(1); + goto loop8; + }else{ + if (diferencia==0){ + wait(0.1); + goto loop7; + }else if (diferencia+anno2>=2255){ + anno2=2255; + pc.printf("%04d\n", anno2); + lcd.locate(0,1); + lcd.printf("%04d", anno2); + wait(0.1); + goto loop7; + }else if(diferencia+anno2<2000) { + anno2=2000; + pc.printf("%04d\n", anno2); + lcd.locate(0,1); + lcd.printf("%04d",anno2); + wait(0.1); + goto loop7; + }else{ + anno2+=diferencia; + pc.printf("%04d\n", anno2); + lcd.locate(0,1); + lcd.printf("%04d",anno2); + wait(0.1); + goto loop7 ; + }} + + + //Configuración hora + + + loop8: diferencia=encoder.getPulses()-pulsos; + pulsos=encoder.getPulses(); + if (!alarmaE){ + pc.printf("\n"); + pc.printf("Minutos de la alarma:\n"); + lcd.cls(); + lcd.printf("Minutos"); + diferencia=0; + pulsos=0; + wait(1); + goto loop9; + }else{ + if (diferencia==0){ + wait(0.1); + goto loop8; + }else if (diferencia+hora2>=23){ + hora2=23; + pc.printf("%02d\n", hora2); + lcd.locate(0,1); + lcd.printf("%02d", hora2); + wait(0.1); + goto loop8; + }else if(diferencia+hora2<0) { + hora2=0; + pc.printf("%02d\n", hora2); + lcd.locate(0,1); + lcd.printf("%02d",hora2); + wait(0.1); + goto loop8; + }else{ + hora2+=diferencia; + pc.printf("%02d\n", hora2); + lcd.locate(0,1); + lcd.printf("%02d",hora2); + wait(0.1); + goto loop8 ; + }} + + //Configuración minutos +loop9: diferencia=encoder.getPulses()-pulsos; + pulsos=encoder.getPulses(); + if (!alarmaE){ + pc.printf("\n"); + pc.printf("Segundos de la alarma:\n"); + lcd.cls(); + lcd.printf("Segundos"); + diferencia=0; + pulsos=0; + wait(1); + goto loop10; + }else{ + if (diferencia==0){ + wait(0.1); + goto loop9; + }else if (diferencia+minutos2>=59){ + minutos2=59; + pc.printf("%02d\n", minutos2); + lcd.locate(0,1); + lcd.printf("%02d", minutos2); + wait(0.1); + goto loop9; + }else if(diferencia+minutos2<0) { + minutos2=0; + pc.printf("%02d\n", minutos2); + lcd.locate(0,1); + lcd.printf("%02d",minutos2); + wait(0.1); + goto loop9; + }else{ + minutos2+=diferencia; + pc.printf("%02d\n", minutos2); + lcd.locate(0,1); + lcd.printf("%02d",minutos2); + wait(0.1); + goto loop9 ; + }} + +//Configuración segundos + +loop10: diferencia=encoder.getPulses()-pulsos; + pulsos=encoder.getPulses(); + if (!alarmaE){ + pc.printf("\n"); + pc.printf("* Fin de la configuracion *\n"); + lcd.cls(); + lcd.printf("Fin de la configuracion"); + diferencia=0; + pulsos=0; + alarma2=1; + wait(1); + goto loop1; + }else{ + if (diferencia==0){ + wait(0.1); + goto loop10; + }else if (diferencia+seg2>=59){ + seg2=59; + pc.printf("%02d\n", seg2); + lcd.locate(0,1); + lcd.printf("%02d", seg2); + wait(0.1); + goto loop10; + }else if(diferencia+seg2<0) { + seg2=0; + pc.printf("%02d\n", seg2); + lcd.locate(0,1); + lcd.printf("%02d",seg2); + wait(0.1); + goto loop10; + }else{ + seg2+=diferencia; + pc.printf("%02d\n", seg2); + lcd.locate(0,1); + lcd.printf("%02d",seg2); + wait(0.1); + goto loop10 ; + }} + + + }else { //Actualizo la hora y la fecha lcd.cls(); lcd.locate(0,0); @@ -210,10 +509,10 @@ lcd.printf("%s/%02d/%02d/%4d", rtc.weekdayToString(tm.wday), tm.date, tm.mon, tm.year); wait_ms(200); goto loop1; - } + }//else } - } -} + }// while (1) +}// main