Tarea5-Versión1. Reloj con alarma, Usando el integrado DS1307

Dependencies:   DS1307 DebouncedIn TextLCD mbed

Fork of Tarea5-V1 by junior andres calle acevedo

Revision:
0:b6bd9c7c76f4
Child:
1:67f3f2439829
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu May 15 04:41:00 2014 +0000
@@ -0,0 +1,376 @@
+#include "ds1307.h"
+#include "TextLCD.h"
+#include "mbed.h"
+#include "DebouncedIn.h" 
+Serial pc(USBTX, USBRX); // tx, rx  
+TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); //Pines de conexión Modulo LCD
+DS1307 my1307(PTE0,PTE1); // Pines de conexión Ds1307
+DebouncedIn p1(PTC12);
+DebouncedIn p2(PTC13);
+DebouncedIn p3(PTC16);
+DebouncedIn p4(PTC17);
+int cont=1;
+int cont2 = 0;
+int hours1;
+int min1=-1;
+int sec1=0; 
+int column;
+int fila;
+int C2=0x18; // desplaza izquierda
+int C3=0x1A; // desplaza derecha
+int C4=0x0C; // quito cursor bajo
+int C1=0x0F;
+
+float Dd=10;
+float pp=30;
+float Fi;
+
+PwmOut sonido(PTA12);
+DigitalOut led1(LED1);
+//DigitalOut sound(PTA12); //Salida de Audio Digital
+
+bool k      = false;  //bandera que indica que la alarma esta o no activada
+bool on     = false;  //Bandera que indica que la alarma esta o no sonando
+bool apagar = false;
+int sec    = 30;       
+int min    = 01;
+int hours  = 01;
+int day    =  2;
+int date   = 12;
+ int month =  5;
+ int year  = 14;
+ int loop  = 10;     
+ 
+ 
+void test_rw(int test) {
+if (test == 0) pc.printf("Last R/W operation passed!\n\r");
+else pc.printf("Last R/W operation failed!\n\r");}
+ 
+ 
+int main() {  
+ 
+test_rw(my1307.settime( sec, min, hours, day, date, month, year));    // Set the time on the DS1307
+ 
+ 
+        while (loop>0){        // Loop continously
+        test_rw(my1307.gettime( &sec, &min, &hours, &day, &date, &month, &year));
+        lcd.locate(4,0);            // Print and refresh data on line 2 of the LCD display     
+        lcd.printf("%.2D",hours);
+        lcd.printf(":%.2D",min);
+        lcd.printf(":%.2D",sec);
+        lcd.locate(4,1);  
+        lcd.printf("%.2D",month);
+        lcd.printf("-%.2D",date);
+        lcd.printf("-%.2D",year);
+        
+        
+        // Al Presionar el  Pulsador 1
+        if(p1.falling()){  //Configurar Hora 
+                                         
+          if(k==true & apagar==false){ //Stop Alarm, recuerda agregar mensaje de pausa
+            k =false;
+            wait(1);
+               if(p1==0){
+               apagar = true;
+               lcd.locate(0,0);
+               lcd.printf("Alarma Desactivada"); 
+               wait(1);
+               lcd.locate(0,0);
+               lcd.printf("                  "); 
+               lcd.locate(0,1);
+               lcd.printf("Alarma Desactivada"); 
+               wait(1);
+               lcd.locate(0,1);
+               lcd.printf("                  "); 
+               hours1=0;
+               min1=0;
+               sec1=0;
+               }//cierro p1==0
+            if(apagar==false){     
+            sec1=sec+10;
+               if(sec1>59){
+               min1 = min1 +1;
+               sec1 = sec1-60;
+               lcd.printf("     ");
+               lcd.locate(1,0); 
+               lcd.printf("Min.Alarm: %.2d",min1); //actualiza, Minutos de Alarma En pantalla
+               wait(0.5);
+                                                        
+                }//cierro if sec > 59
+                                             
+            }//cierro Apagar == false
+            
+         }//cierro k = true && apagar == false
+                                         
+                                         
+        if(cont ==2){
+        ++hours;
+                                        
+           if(hours>23){//ajuste de hora
+           hours = 0;
+           }//Fin if hoours >23
+                                            
+        test_rw(my1307.settime( sec, min, hours, day, date, month, year)); // Set the time on the DS1307
+                                        
+                                         
+        }//Cierro if contador ==2
+                                
+        if(cont == 3){
+        ++min;
+                                    
+           if(min>59){ //Ajuste de minutos
+           min = 0;
+           } //cierro if min > 59
+           
+         test_rw(my1307.settime( sec, min, hours, day, date, month, year)); // Set the time on the DS1307
+                                   
+        } //Cierro if contador ==3
+                        
+        if(cont == 4){//configurar mes
+        ++month; 
+        
+            if(month > 12){ //ajuste de meses
+            month =1;
+            }//cierro mont > 12
+                                    
+        test_rw(my1307.settime( sec, min, hours, day, date, month, year)); // Set the time on the DS1307
+                                
+        }//cierro contador ==4
+                        
+                                
+        if(cont ==5){
+        ++date;
+                                        
+            if(month==1 || month ==3 || month == 5 || month == 7 || month ==8 || month ==10 || month ==12 ){//ajuste de 31 dias 
+            
+                if(date > 31){
+                date=01;
+                }//Cierro day >31
+            }//cierro condicion meses con 31 dias   
+                                    
+            if( month ==4 || month == 6 || month == 9 || month ==11){//ajuste de 30 dias 
+                                    
+                if(date >30){
+                date=01;
+                }//Cierro day >30
+             }//Cierro condicion meses de 30 dias
+                                          
+          if(month==2 ){//ajuste de 28 dias 
+                                                
+             if((year+2000) % 4 ==0){ //configuracion año viciesto
+                                                
+                 if(date >29){
+                 date=1;
+                 }//cierro if date> 29        
+                                                                                               
+             }//Cierro año viciesto
+                                                        
+             if((year+2000) % 4 != 0){ //configuracion año viciesto
+                                                           
+                 if(date >28){
+                 date=1;
+                 }//cierro if date> 28        
+                                                                                               
+                                                        
+      }//Cierro año NO viciesto
+                                                    
+                                        
+          }//cierro if month ==2 
+                                    
+    test_rw(my1307.settime( sec, min, hours, day, date, month, year)); // Set the time on the DS1307
+        
+         }//cierro if contador ==5
+                                
+         if(cont == 6){ //Aumentar años
+         ++year;
+   test_rw(my1307.settime( sec, min, hours, day, date, month, year)); // Set the time on the DS1307   
+                                    
+        }//cierro if contador ==6
+                 
+                    
+                //Configuracin De Alarma
+                 if(cont2==1){
+                 hours1++;
+                    if(hours1>23){
+                    hours1= 0;
+                    }//Cierro hours1>23    
+                                                           
+                lcd.locate(0,0);
+                lcd.printf("Hora.Alarma: %.2d ",hours1);
+                wait(1);
+                lcd.locate(0,0);
+                lcd.printf("                  ");
+                 }//Cierro if cont2==1
+                                
+                if(cont2==2){
+                min1++;
+                if(min1>59){
+                min1= 0;
+                     }//Cierro min1>59                                        
+                lcd.locate(0,0);
+                lcd.printf("Min.Alarma: %.2d ",min1);
+                wait(1);
+                lcd.locate(0,0);
+                lcd.printf("                  ");
+                                    
+                }//Cierro if cont2==1
+                                
+                    
+}//Fin p1.falling 
+                    
+    //Presionar Pulsador 2
+    if(p2.falling()){ //Reset
+    cont = cont+1;
+                        
+        if(cont>0){
+        cont2=0;}
+                 
+        if(cont ==1){
+        lcd.locate(0,0);
+        lcd.printf("1-Reset");
+        wait(2);
+        lcd.printf("               ");
+        }//cierro if cont ==1
+                                    
+        if(cont==2){ //configuración de la Hora
+        lcd.locate(2,0);
+        lcd.printf("Config. hora");
+        wait(2);
+        lcd.locate(2,0);
+        lcd.printf("                 ");
+        }//Cierro if cont ==2
+                                    
+        if(cont==3){ //configurar minutos
+        lcd.locate(1,0);
+        lcd.printf("Config. Minutos");
+        wait(2);
+        lcd.locate(1,0);
+        lcd.printf("                   ");
+        }//Cierro if cont ==3
+                                    
+        if(cont ==4){
+        lcd.locate(2,0);
+        lcd.printf("Config. Mes");
+        wait(2);
+        lcd.locate(2,0);
+        lcd.printf("                   ");
+        }//cierro if contador ==4
+                                        
+        if(cont == 5){
+        lcd.locate(2,0);
+        lcd.printf("Config. Dia");
+        wait(2);
+        lcd.locate(2,0);
+        lcd.printf("                   ");
+        }//Cierro if cont == 5
+                            
+        if(cont ==6){
+        lcd.locate(3,0);
+        lcd.printf("Conf. anio"); //Se aumentan años en p1 y se disminuyen con p3 (ver p3 debajo)
+        wait(2);
+        lcd.locate(3,0);
+        lcd.printf("                   ");
+        }//Cierro if cont ==6
+                                        
+        if(cont>6){ //Reset Cont
+        cont =1;
+        lcd.locate(0,0);
+        lcd.printf("Conf.Establecida");
+        wait(2);
+        lcd.locate(0,0);
+        lcd.printf("                   ");
+        }//Cierro cont > 6
+                                        
+ }//Cierro if p2.falling()
+                        
+                        
+//Presionar Pulsador 3
+       if(p3.falling()){
+                         
+            if(cont==6){
+            --year;
+            test_rw(my1307.settime( sec, min, hours, day, date, month, year)); // Set the time on the DS1307   
+            cont2=0;    
+                                        
+            }//Cierro if cont == 6
+                            
+            if(cont != 6){
+                            
+            cont=1; //Se asegura que no interceda a configurar la hora como loco cuando se configura la alarma
+            cont2++; 
+            
+            if(cont2==1){      
+            lcd.locate(1,0);
+            lcd.printf("Hora de Alarma");
+            wait(1);
+            lcd.locate(1,0);
+            lcd.printf("                  ");                         
+            } //cierro cont2 ==1
+                                  
+             if(cont2==2){      
+             lcd.locate(2,0);
+             lcd.printf("Min de Alarma");
+             wait(1);
+             lcd.locate(2,0);
+             lcd.printf("                  ");                         
+             } //cierro cont2 ==1
+                                  
+             if(cont2>2){
+             cont2=0;
+             lcd.locate(0,0);
+             lcd.printf(" Alarma Activa ");
+             wait(1);
+             lcd.locate(0,0);
+             lcd.printf("                  ");
+             k = true; //alarma activada
+             apagar=false;
+             }//cierro if cont2 >2
+                                    
+    }//Cierro cont != 6
+                            
+}//cierro if p3.falling()
+                    
+    //Activacion De Alarma
+    if(hours == hours1 && k == true && apagar ==false){
+         if(min == min1){
+             if(sec>=sec1 && sec<=(sec1+10)){
+                               
+             Fi=(Dd)*100;
+             pp=(1/Fi);
+             sonido.period(pp);
+             sonido.write(0.1);
+             wait(0.1);
+             sonido.write(0);
+             wait(0.1);
+             led1 =!led1;
+             
+              if(p4.falling()){
+              sonido=0.0;
+                        
+                    
+              //on = true;
+             //for(int i=1; i<= 1000; ++i){ //ONDA CUADRADA, OSCILACIONES A 10 KHZ.... A VER SI FUNCIONA
+            //sound = 0;
+           //wait(0.00001);  // Medio ciclo de dureza Arriba
+          //sound=1;
+         //wait(0.0002); // Medio ciclo Abajo
+                                
+             if(k==false){
+             break; 
+     }//cierro if on==false
+ }//Cierro For
+                                
+}//Cierro Sec>=0 && sec <30
+}//Cierro min == min1
+                        
+}//cierro hours==hours1
+                   
+        if(sec1>0 & k==false){ //alarma encendida, reactiva k para poder iniciar nuevamente cuando el tiempo se alcance otra vez
+        k = true;
+    }//Cierro if sec1>0
+                    
+} //Cierro While loop >0
+        
+        
+        
+  }  //Cierro Main()