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