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

Dependencies:   DS1307 DebouncedIn TextLCD mbed

Fork of Tarea5-V1 by junior andres calle acevedo

main.cpp

Committer:
juniorACA
Date:
2014-05-15
Revision:
0:b6bd9c7c76f4
Child:
1:67f3f2439829

File content as of revision 0:b6bd9c7c76f4:

#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()