Reloj con alarma y snooze

Dependencies:   RTC-DS1307-Modificada TextLCD mbed QEI

/media/uploads/Susanaranjo/img_20160519_141804.jpg

Files at this revision

API Documentation at this revision

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