Tarea5-Versión1. Reloj con alarma, Usando el integrado DS1307
Dependencies: DS1307 DebouncedIn TextLCD mbed
Fork of Tarea5-V1 by
Diff: main.cpp
- 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()