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