Tarea 5 - Configurar Reloj Y Alarma Juan Salvador Payares Ernesto Guevara

Dependencies:   DS1307 DebouncedIn TextLCD mbed

main.cpp

Committer:
payarito32
Date:
2014-05-07
Revision:
0:d84f2d9bbeba

File content as of revision 0:d84f2d9bbeba:

#include "ds1307.h"
 #include "TextLCD.h"
 #include "mbed.h"
#include "DebouncedIn.h"
 
 Serial pc(USBTX, USBRX); // tx, rx  for debug and usb pc comunications
 //TextLCD lcd(p15, p16, p17, p18, p19, p20, TextLCD::LCD40x2); // rs, e, d4-d7
 TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); 
 DS1307 my1307(PTE0,PTE1); // start DS1307 class and give it pins for connections of the DS1307 device
DebouncedIn p1(PTE20);
DebouncedIn p2(PTE21);
DebouncedIn p3(PTE22);
int contador=1;
int contador2 = 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;

 DigitalOut sound(PTC5); //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 = 48;       // Values to set time with
 int min = 59;
 int hours = 06;
 int day = 2;
 int date = 12;
 int month = 5;
 int year = 16;
 int loop = 10;     // Non zero value for the while loop
 
 
 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(0,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(0,1);  
        lcd.printf("%.2D",month);
        lcd.printf("/%.2D",date);
        lcd.printf("/%.2D",year);
        
        
                    //Presionar 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("Alarm Desact"); 
                                                         wait(1);
                                                         lcd.locate(0,0);
                                                         lcd.printf("                  "); 
                                                         lcd.locate(0,1);
                                                         lcd.printf("Alarm Desact"); 
                                                         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.locate(9,1); 
                                                        lcd.printf("M.A: %.2d",min1); //actualiza, Minutos de Alarma En pantalla
                                                     }//cierro if sec > 59
                                             
                                                 }//cierro Apagar == false
                                             }//cierro k = true && apagar == false
                                         
                                         
                                         if(contador ==2){
                                        
                                        //lcd.locate(9,0);
                                        ++hours;
                                        
                                        if(hours>23){//ajuste de hora
                                            hours = 0;
                                            }//Fin if hoours >23
                                            
                                        //lcd.printf("Hora: %.2D ", hours);
                                        test_rw(my1307.settime( sec, min, hours, day, date, month, year)); // Set the time on the DS1307
                                        //wait(0.5);
                                         
                                         
                                }//Cierro if contador ==2
                                
                                if(contador == 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(contador == 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(contador ==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(contador == 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(contador2==1){
                                    hours1++;
                                    if(hours1>23){
                                    hours1= 0;
                                    }//Cierro hours1>23                                        
                                    lcd.locate(9,0);
                                    lcd.printf("H.A: %.2d",hours1);
                                    }//Cierro if contador2==1
                                
                                if(contador2==2){
                                    min1++;
                                    if(min1>59){
                                    min1= 0;
                                    }//Cierro hours1>23                                        
                                    lcd.locate(9,1);
                                    lcd.printf("M.A: %.2d",min1);
                                    
                                    }//Cierro if contador2==1
                                
                    
                    }//Fin p1.falling 
                    
                    //Presionar Pulsador 2
                    if(p2.falling()){ //Reset
                        contador = contador+1;
                        
                        
                                if(contador>0){
                                    contador2=0;
                                    }
                                    
                                if(contador ==1){
                                    lcd.locate(0,0);
                                    lcd.printf("1-Reset");
                                    wait(0.6);
                                    lcd.printf("               ");
                                    }//cierro if contador ==1
                                    
                                if(contador==2){ //configurar Hora
                                    lcd.locate(0,0);
                                    
                                    lcd.printf("2-Conf. hora");
                                    wait(0.6);
                                    lcd.locate(0,0);
                                    lcd.printf("                 ");
                                    
                                    }//Cierro if contador ==2
                                    
                                    if(contador==3){ //configurar minutos
                                    lcd.locate(0,0);
                                    
                                    lcd.printf("3-Conf. Min");
                                    wait(0.6);
                                    lcd.locate(0,0);
                                    lcd.printf("                   ");
                                    
                                    }//Cierro if contador ==3
                                    
                                    if(contador ==4){
                                        lcd.locate(0,0);
                                        lcd.printf("4-Conf. Mes");
                                        
                                        wait(0.6);
                                        lcd.locate(0,0);
                                        lcd.printf("                   ");
                                        }//cierro if contador ==4
                                        
                                    if(contador == 5){
                                        lcd.locate(0,0);
                                        lcd.printf("5-Conf. Dia");
                                        
                                        wait(0.6);
                                        lcd.locate(0,0);
                                        lcd.printf("                   ");
                                        
                                        }//Cierro if contador == 5
                            
                                    if(contador ==6){
                                        lcd.locate(0,0);
                                        lcd.printf("5-Conf. año"); //Se aumentan años en p1 y se disminuyen con p3 (ver p3 debajo)
                                        
                                        wait(0.6);
                                        lcd.locate(0,0);
                                        lcd.printf("                   ");
                                        }//Cierro if contador ==6
                                        
                                        if(contador>6){ //Reset Contador
                                            contador =1;
                                            lcd.locate(0,0);
                                            lcd.printf("Config. Correct");
                                            wait(0.6);
                                            lcd.locate(0,0);
                                            lcd.printf("                   ");
                                            }//Cierro contador > 6
                                        
                        }//Cierro if p2.falling()
                        
                        //Presionar Pulsador 3
                        if(p3.falling()){
                            
                            if(contador==6){
                                --year;
                                test_rw(my1307.settime( sec, min, hours, day, date, month, year)); // Set the time on the DS1307   
                                contador2=0;    
                                        
                                }//Cierro if contador == 6
                            
                            if(contador != 6){
                            
                            contador=1; //Se asegura que no interceda a configurar la hora como loco cuando se configura la alarma
                            contador2++; 
                                  if(contador2==1){      
                                  lcd.locate(0,0);
                                  lcd.printf("Alarm Hour");
                                  wait(0.6);
                                  lcd.locate(0,0);
                                  lcd.printf("                  ");                         
                                  } //cierro contador2 ==1
                                  
                                  if(contador2==2){      
                                  lcd.locate(0,1);
                                  lcd.printf("Alarm Minutes");
                                  wait(0.6);
                                  lcd.locate(0,1);
                                  lcd.printf("                  ");                         
                                  } //cierro contador2 ==1
                                  
                                  if(contador2>2){
                                    contador2=0;
                                    lcd.locate(0,0);
                                    lcd.printf("Activate");
                                    wait(0.6);
                                    k = true; //alarma activada
                                    apagar=false;
                                    }//cierro if contador2 >2
                                    
                            }//Cierro contador != 6
                            
                            }//cierro if p3.falling()
                    
                    //Activacion De Alarma
                    if(hours == hours1 && k == true && apagar ==false){
                        if(min == min1){
                            if(sec>=sec1 && sec<=(sec1+10)){
                                on = true;
                                for(int i=1; i<= 1000; ++i){ //ONDA CUADRADA, OSCILACIONES A 10 KHZ.... A VER SI FUNCIONA
                                sound = 0;
                                wait(0.00015);  // Medio ciclo de dureza Arriba
                                sound=1;
                                wait(0.0005); // 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()