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

Revision:
0:98d22ab8a13c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue May 06 02:40:21 2014 +0000
@@ -0,0 +1,264 @@
+#include "mbed.h"
+#include "Rtc_Ds1307.h"
+#include "TextLCD.h"
+#include "DebouncedIn.h"
+#include "QEI.h"
+
+//RtcCls rtc(p28, p27, p29, true);
+Rtc_Ds1307 rtc(PTC9, PTC8);
+TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); //Puertos LCD rs, e, d4, d5, d6, d7
+PwmOut sound(PTA12);
+   
+   
+DigitalOut led1(LED1);      
+DigitalOut led2(LED2);      
+DigitalOut led3(LED3);      
+int a, kp, sp, kd, ki, valor;
+int hr, mn, se, di, me, an, ho;
+int loop = 10;
+
+int encod(int);
+
+int encod(){
+    sp=0;
+    QEI Encoder (PTA1, PTA2, NC, 624);
+    DebouncedIn bot1(PTC12);    //cambiar la posición (CONECTO ESTA ENTRADA A LA ULTIMA SALIDA DEL ENCONDER, ASI SE UTILIZARA EL BOTON DEL ENCODER)
+    DebouncedIn bot4(PTC17);
+    int C1=0x0E;
+    //int C4=0x0C;
+    
+
+    
+    led1=led2=1;
+    
+    lcd.writeCommand(C1);   //comando para mostrar el cursor en el LCD
+                       
+    lcd.locate(0,0);        // Ubica e imprime nombre de los parámetros en del PID en la pantalla LCD
+    lcd.printf("dato=");
+   
+    
+   
+     //Inicio del ciclo
+     
+while(1) {
+           if (bot1.falling()) {            //----------------- Aumenta de posición el cursor a la primera línea de menu
+               
+            sound=1.0f;
+            wait(0.1);
+            sound=0;
+               
+               break;
+               }
+         
+                        valor = Encoder.getPulses();    //------------- Asigna el valor de los pulsos del encoder a una variable llamada "valor"                                                
+                       
+                       
+                        sp = sp + valor;                //------------- Asigna el valor del encoder al parámetro sp y tiene en cuenta el valor anterior
+                        Encoder.reset();                //------------- Resetea el valor del encoder
+                        if (sp<0){
+                            sp=0;                       //------------- No se admite valores negativos
+                            }
+                        
+                        lcd.locate(4,0);                //------------- Ubica e imprime el parámetro "sp" en la pantalla LCD
+                        lcd.printf("=    ",sp);
+                        lcd.locate(5,0);
+                        lcd.printf("%i",sp);
+                        wait(0.15);
+                        
+                                                
+                                                
+         }
+       
+return sp;
+    }
+
+
+
+
+
+
+
+
+int main() {
+
+inicio:
+
+DebouncedIn bot1(PTC10);    
+DebouncedIn bot2(PTC11);
+DebouncedIn bot3(PTC16); 
+DebouncedIn bot4(PTC17); 
+
+    Rtc_Ds1307::Time_rtc tm = {};
+    
+    while(1) {
+        
+        lcd.printf("configuracion   reloj y alarma  \n");
+        wait(1.5);
+        lcd.cls();
+        lcd.printf("oprima uno de   los botones \n");
+        wait(1.5);
+        lcd.cls();
+        lcd.printf("a: configurar el reloj\n");
+        wait(2);
+        lcd.cls();
+        lcd.printf("b: configurar laalarma\n");
+        wait(2);
+        lcd.cls();
+        lcd.printf("c: iniciar  el reloj\n");
+        wait(2);
+        lcd.cls();
+        lcd.printf("d: salir de  configuracion \n");
+        wait(2);
+        lcd.cls();
+        lcd.printf("digite la opcion     elegida\n");
+        wait(5);
+        
+        lcd.cls();
+        
+
+            if (bot1.falling()) {
+            lcd.cls();
+            
+            lcd.printf("ingrese hora\n");
+            wait(1);
+            lcd.cls();
+            tm.hour = encod();
+            lcd.cls();
+            lcd.printf("ingrese minutos\n");
+            wait(1);
+            lcd.cls();
+            tm.min = encod();
+            lcd.cls();
+            lcd.printf("ingrese segundos\n");
+            wait(1);
+            lcd.cls();
+            tm.sec = encod();
+            lcd.cls();
+            lcd.printf("ingrese ano\n");
+            wait(1);
+            lcd.cls();
+            tm.year = encod();
+            lcd.cls();
+            lcd.printf("ingrese mes\n");
+            wait(1);
+            lcd.cls();
+            tm.mon = encod();
+            lcd.cls();
+            lcd.printf("ingrese dia\n");
+            wait(1);
+            lcd.cls();
+            tm.date = encod();
+            lcd.cls();
+            
+            rtc.setTime(tm, false, false);
+            }
+        
+            if (bot2.falling()) {
+            lcd.cls();
+
+            lcd.printf("ingrese hora\n");
+            wait(1);
+            lcd.cls();
+            hr = encod();
+            lcd.cls();
+            lcd.printf("ingrese minutos\n");
+            wait(1);
+            lcd.cls();
+            mn = encod();
+            lcd.cls();
+            lcd.printf("ingrese segundos\n");
+            wait(1);
+            lcd.cls();
+            se = encod();
+            lcd.cls();
+            lcd.printf("ingrese ano\n");
+            wait(1);
+            lcd.cls();
+            an = encod();
+            lcd.cls();
+            lcd.printf("ingrese mes\n");
+            wait(1);
+            lcd.cls();
+            me = encod();
+            lcd.cls();
+            lcd.printf("ingrese dia\n");
+            wait(1);
+            lcd.cls();
+            di= encod();
+            lcd.cls();
+            
+            } 
+        
+            if (bot3.falling()) {
+            //  start
+            lcd.printf("realizando      inicializacion\n");
+            wait(3);
+            lcd.cls();
+            rtc.startClock();
+            }
+        
+                if (bot4.falling()) {
+                //exit
+                led1=led2=led3=1;       //------------- Flash para salir del bucle
+                wait(0.25);
+                led1=led2=led3=0;
+                lcd.printf("saliendo del      menu\n");
+                wait(1.5);
+                lcd.cls();
+                break;
+           
+                }
+            
+         
+    }
+    
+    //------------------------------sonido alarma-----------------------------------------------------------------------------------------------
+    
+    while (loop>0){        // Loop continously  
+        
+        if (rtc.getTime(tm) ) {
+                lcd.locate(0,0);
+                lcd.printf("%02d:%02d:%02d\n", tm.hour, tm.min, tm.sec);
+                lcd.printf("%02d:%02d:%02d\n", hr, mn,se);
+                wait(0.1);
+                lcd.cls();
+            }
+      
+      if ((tm.hour==hr) && (tm.min==mn) && (tm.sec==se)){
+            
+            while (1){
+                
+                sound=1.0f;
+                wait(0.3);
+                sound=0;
+                wait(0.2);
+                
+                if(bot1.falling()){
+                    se= se+20;
+                       if(se>=60){
+                        mn++;
+                        se=se-60;
+                           }
+                       if(mn>=60){
+                        hr++;
+                        mn=mn-60;
+                           }          
+                    break;       
+                }
+                
+                if(bot2.falling()){
+                    break;
+                    }
+            }
+          
+        }
+     if(bot1.falling()){
+        lcd.printf("regresando a configuracion\n");
+        break;
+        }
+    }             
+   goto inicio;     
+}
+
+
+