![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Reloj Ds1307
Dependencies: DS1307 DebouncedIn TextLCD mbed
main.cpp
- Committer:
- mescobart22
- Date:
- 2014-05-14
- Revision:
- 0:121cbf1d2c0a
File content as of revision 0:121cbf1d2c0a:
#include "ds1307.h" #include "TextLCD.h" #include "mbed.h" #include "DebouncedIn.h" //Mauricio Escobar Tobon Breiner Choles 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 horas1; 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 horas = 06; int dia = 2; int date = 12; int mes = 5; int anio = 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, horas, dia, date, mes, anio)); // Set the time on the DS1307 while (loop>0){ // Loop continously test_rw(my1307.gettime( &sec, &min, &horas, &dia, &date, &mes, &anio)); lcd.locate(0,0); // Print and refresh data on line 2 of the LCD display lcd.printf("%.2D",horas); lcd.printf(":%.2D",min); lcd.printf(":%.2D",sec); lcd.locate(0,1); lcd.printf("%.2D",mes); lcd.printf("/%.2D",date); lcd.printf("/%.2D",anio); //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(" "); horas1=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); ++horas; if(horas>23){//ajuste de hora horas = 0; }//Fin if horas >23 //lcd.printf("Hora: %.2D ", hours); test_rw(my1307.settime( sec, min, horas, dia, date, mes, anio)); // 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, horas, dia, date, mes, anio)); // Set the time on the DS1307 } //Cierro if contador ==3 if(contador == 4){//configurar mes ++mes; if(mes > 12){ //ajuste de meses mes =1; }//cierro mont > 12 test_rw(my1307.settime( sec, min, horas, dia, date, mes, anio)); // Set the time on the DS1307 }//cierro contador ==4 if(contador ==5){ ++date; if(mes==1 || mes ==3 || mes == 5 || mes == 7 || mes ==8 || mes ==10 || mes ==12 ){//ajuste de 31 dias if(date > 31){ date=01; }//Cierro dia >31 }//cierro condicion meses con 31 dias if( mes ==4 || mes == 6 || mes == 9 || mes ==11){//ajuste de 30 dias if(date >30){ date=01; }//Cierro dia >30 }//Cierro condicion meses de 30 dias if(mes==2 ){//ajuste de 28 dias if((anio+2000) % 4 ==0){ //configuracion año viciesto if(date >29){ date=1; }//cierro if date> 29 }//Cierro año viciesto if((anio+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, horas, dia, date, mes, anio)); // Set the time on the DS1307 }//cierro if contador ==5 if(contador == 6){ //Aumentar años ++anio; test_rw(my1307.settime( sec, min, horas, dia, date, mes, anio)); // Set the time on the DS1307 }//cierro if contador ==6 //Configuracin De Alarma if(contador2==1){ horas1++; if(horas1>23){ horas1= 0; }//Cierro hours1>23 lcd.locate(9,0); lcd.printf("H.A: %.2d",horas1); }//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){ --anio; test_rw(my1307.settime( sec, min, horas, dia, date, mes, anio)); // 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(horas == horas1 && k == true && apagar ==false){ if(min == min1){ if(sec>=sec1 && sec<=(sec1+10)){ on = true; sound = 0; for(int i=1; i<= 1000; ++i){ //ONDA CUADRADA, OSCILACIONES A 10 KHZ.... A VER SI FUNCIONA sound = 0; wait(0.0001); // Medio ciclo de dureza Arriba sound=1; wait(0.0001); // Medio ciclo Abajo if(k==false){ break; }//cierro if on==false }//Cierro For }//Cierro Sec>=0 && sec <30 }//Cierro min == min1 }//cierro horas==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()