reloj despertador con snoze y un ds1307

Dependencies:   PinDetect QEI RTC-DS1307 TextLCD mbed

Fork of Tarea_Reloj by Hernán Maya

Files at this revision

API Documentation at this revision

Comitter:
satelite
Date:
Tue May 24 14:02:08 2016 +0000
Commit message:
Reloj despertador con snooze.; El sistema esta conformado por la tarjeta kl25z, un m?dulo con el RTC DS-1307, un encoder con boton central, un boton, un LCD 2x16 y un buzzer.

Changed in this revision

PinDetect.lib Show annotated file Show diff for this revision Revisions of this file
QEI.lib Show annotated file Show diff for this revision Revisions of this file
RTC-DS1307.lib Show annotated file Show diff for this revision Revisions of this file
TextLCD.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 29267341170e PinDetect.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PinDetect.lib	Tue May 24 14:02:08 2016 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/users/xeta05/code/PinDetect/#cb6051b90a52
diff -r 000000000000 -r 29267341170e QEI.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QEI.lib	Tue May 24 14:02:08 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/aberk/code/QEI/#5c2ad81551aa
diff -r 000000000000 -r 29267341170e RTC-DS1307.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RTC-DS1307.lib	Tue May 24 14:02:08 2016 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/users/satelite/code/RTC-DS1307/#50b6eff06b1c
diff -r 000000000000 -r 29267341170e TextLCD.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TextLCD.lib	Tue May 24 14:02:08 2016 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/users/satelite/code/TextLCD/#3624f726cd07
diff -r 000000000000 -r 29267341170e main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue May 24 14:02:08 2016 +0000
@@ -0,0 +1,336 @@
+/*Reloj despertador con módulo DS1307
+*/
+
+#include "mbed.h"
+#include "PinDetect.h"
+#include "QEI.h"
+#include "Rtc_Ds1307.h"
+#include "TextLCD.h"
+
+// Configuracion puertos del microcontrolador
+Rtc_Ds1307 rtc(PTE0, PTE1);                 // pines para la comunicacion I2C, SDA, SCL
+Serial pc(USBTX, USBRX, "pc");              // puerto serie (USB)
+QEI wheel(PTD5, PTD0, NC, 100);             // pines para el encoder
+PinDetect Boton(PTA13, PullUp);             // boton encoder
+PinDetect BotonA(PTE20, PullUp);            // boton apagar alarma
+DigitalOut led1(LED_RED);                   // led rojo
+DigitalOut led2(LED_GREEN);                 // led verde
+DigitalOut led3(LED_BLUE);                  // led azul
+DigitalOut buzzer(PTD3);                    // alarma
+TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // RS, E, D4, D5, D6, D7
+
+// Declaracion de variables globales
+int estado = 0, config = 0, dia = 1, mes = 1, ano = 2016, hora = 0, min = 0, configR = 0, cont = 1, set = 0, alarma = 0;
+
+// Rutina presion boton
+void keyPressed(void)
+{
+    if(estado == 0 && alarma == 1) {
+        min++;
+    }
+    if(estado == 1 && set == 1) {
+        config++;
+    }
+    if(estado == 2 && set == 1) {
+        configR++;
+        cont = 1;
+    }
+}
+
+// Rutina presion sostenida boton
+void keyPressedHeld(void)
+{
+    //wait(0.5);
+    lcd.locate(0, 0);
+    lcd.printf("                ");
+    lcd.locate(0, 1);
+    lcd.printf("                ");
+    estado++;
+    //lcd.cls();
+    if(estado > 2) {
+        estado = 0;
+    }
+}
+
+// Rutina para apagar la alarma
+void apagarAlarma(void)
+{
+    min--;
+}
+// Rutina principal
+int main()
+{
+    // Configuracion de inicio y bienvenida
+    Rtc_Ds1307::Time_rtc tm = {};
+    Boton.setAssertValue(0);
+    Boton.attach_asserted(&keyPressed);
+    Boton.attach_asserted_held(&keyPressedHeld);
+    Boton.setSamplesTillHeld(200);
+    Boton.setSampleFrequency();
+    BotonA.setAssertValue(0);
+    BotonA.attach_asserted_held(&apagarAlarma);
+    BotonA.setSamplesTillHeld(200);
+    BotonA.setSampleFrequency();
+    led1 = 1;
+    led2 = 1;
+    led3 = 1;
+    buzzer = 0;
+    lcd.printf("     Reloj");
+    lcd.locate(0, 1);
+    lcd.printf("  despertador");
+    wait(3);
+    lcd.locate(0, 0);
+    lcd.printf("                ");
+    lcd.locate(0, 1);
+    lcd.printf("                ");
+    wait(0.5);
+
+    // Ciclo infinito
+    while(1) {
+        // Reloj en funcionamiento
+        while(estado == 0) {
+            led1 = 1;
+            led2 = 0;
+            led3 = 1;
+            rtc.getTime(tm);
+            lcd.locate(0, 0);
+            lcd.printf("    %02d:%02d:%02d   ", tm.hour, tm.min, tm.sec);
+            lcd.locate(0, 1);
+            lcd.printf(" %s %02d/%02d/%04d", rtc.weekdayToString(tm.wday), tm.date, tm.mon, tm.year);
+            if(tm.hour == hora && tm.min == min && tm.mon == mes && tm.date == dia && tm.year == ano) {
+                buzzer = !buzzer;
+                alarma = 1;
+            } else {
+                buzzer = 0;
+                alarma = 0;
+            }
+            if(tm.hour <= hora && tm.min <= min && tm.mon <= mes && tm.date <= dia && tm.year <= ano) {
+                lcd.locate(15, 0);
+                lcd.printf("@");
+            } else {
+                lcd.locate(15, 0);
+                lcd.printf(" ");
+            }
+            wait(1);
+        }
+        // Configuracion de la alarma
+        while(estado == 1) {
+            led1 = 1;
+            led2 = 1;
+            led3 = 0;
+            wait(0.2);
+            if(config == 0) {
+                lcd.locate(0, 0);
+                lcd.printf("   Establecer");
+                lcd.locate(0, 1);
+                lcd.printf("alarma: ");
+                set = set + wheel.getPulses();
+                wheel.reset();
+                if(set > 1) {
+                    set = 0;
+                }
+                if(set < 0) {
+                    set = 1;
+                }
+                lcd.locate(8, 1);
+                if(set == 0) {
+                    lcd.printf("NO       ");
+                } else if(set == 1) {
+                    lcd.printf("SI       ");
+                }
+            }
+            if(config == 1) {
+                dia = dia + wheel.getPulses();
+                wheel.reset();
+                if(dia > 31) {
+                    dia = 1;
+                }
+                if(dia < 1) {
+                    dia = 31;
+                }
+                lcd.locate(0, 1);
+                lcd.printf("Dia: %02d           ", dia);
+            }
+            if(config == 2) {
+                mes = mes + wheel.getPulses();
+                wheel.reset();
+                if(mes > 12) {
+                    mes = 1;
+                }
+                if(mes < 1) {
+                    mes = 12;
+                }
+                lcd.locate(0, 1);
+                lcd.printf("Mes: %02d           ", mes);
+            }
+            if(config == 3) {
+                ano = ano + wheel.getPulses();
+                wheel.reset();
+                if(ano > 3000) {
+                    ano = 2016;
+                }
+                if(ano < 2016) {
+                    ano = 3000;
+                }
+                lcd.locate(0, 1);
+                lcd.printf("Anno: %02d       ", ano);
+            }
+            if(config == 4) {
+                hora = hora + wheel.getPulses();
+                wheel.reset();
+                if(hora > 23) {
+                    hora = 0;
+                }
+                if(hora < 0) {
+                    hora = 23;
+                }
+                lcd.locate(0, 1);
+                lcd.printf("Hora: %02d       ", hora);
+            }
+            if(config == 5) {
+                min = min + wheel.getPulses();
+                wheel.reset();
+                if(min > 59) {
+                    min = 0;
+                }
+                if(min < 0) {
+                    min = 59;
+                }
+                lcd.locate(0, 1);
+                lcd.printf("Minutos: %02d        ", min);
+            }
+            if(config == 6) {
+                lcd.locate(0, 1);
+                lcd.printf("  Establecida   ");
+                estado = 0;
+                config = 0;
+                wait(2);
+            }
+        }
+        // Configuracion del reloj
+        while(estado == 2) {
+            led1 = 0;
+            led2 = 1;
+            led3 = 1;
+            wait(0.2);
+            if(configR == 0) {
+                lcd.locate(0, 0);
+                lcd.printf("Configurar reloj");
+                set = set + wheel.getPulses();
+                wheel.reset();
+                if(set > 1) {
+                    set = 0;
+                }
+                if(set < 0) {
+                    set = 1;
+                }
+                lcd.locate(0, 1);
+                if(set == 0) {
+                    lcd.printf("       NO       ");
+                } else if(set == 1) {
+                    lcd.printf("       SI       ");
+                }
+            }
+            if(configR == 1) {
+                cont = cont + wheel.getPulses();
+                wheel.reset();
+                if(cont > 31) {
+                    cont = 1;
+                }
+                if(cont < 1) {
+                    cont = 31;
+                }
+                lcd.locate(0, 1);
+                lcd.printf("Dia: %02d        ", cont);
+                tm.date = cont;
+            }
+            if(configR == 2) {
+                cont = cont + wheel.getPulses();
+                wheel.reset();
+                if(cont > 12) {
+                    cont = 1;
+                }
+                if(cont < 1) {
+                    cont = 12;
+                }
+                lcd.locate(0, 1);
+                lcd.printf("Mes: %02d        ", cont);
+                tm.mon = cont;
+            }
+            if(configR == 3) {
+                cont = cont + wheel.getPulses();
+                wheel.reset();
+                if(cont > 3000) {
+                    cont = 2016;
+                }
+                if(cont < 2016) {
+                    cont = 2016;
+                }
+                lcd.locate(0, 1);
+                lcd.printf("Anno: %02d    ", cont);
+                tm.year = cont;
+            }
+            if(configR == 4) {
+                cont = cont + wheel.getPulses();
+                wheel.reset();
+                if(cont > 7) {
+                    cont = 1;
+                }
+                if(cont < 1) {
+                    cont = 7;
+                }
+                lcd.locate(0, 1);
+                lcd.printf("Dia semana: %1d", cont);
+                tm.wday = cont;
+            }
+            if(configR == 5) {
+                cont = cont + wheel.getPulses();
+                wheel.reset();
+                if(cont > 23) {
+                    cont = 0;
+                }
+                if(cont < 0) {
+                    cont = 23;
+                }
+                lcd.locate(0, 1);
+                lcd.printf("Hora: %02d       ", cont);
+                tm.hour = cont;
+            }
+            if(configR == 6) {
+                cont = cont + wheel.getPulses();
+                wheel.reset();
+                if(cont > 59) {
+                    cont = 0;
+                }
+                if(cont < 0) {
+                    cont = 59;
+                }
+                lcd.locate(0, 1);
+                lcd.printf("Minutos: %02d  ", cont);
+                tm.min = cont;
+            }
+            if(configR == 7) {
+                cont = cont + wheel.getPulses();
+                wheel.reset();
+                if(cont > 59) {
+                    cont = 0;
+                }
+                if(cont < 0) {
+                    cont = 59;
+                }
+                lcd.locate(0, 1);
+                lcd.printf("Segundos: %02d  ", cont);
+                tm.sec = cont;
+            }
+            if(configR == 8) {
+                lcd.locate(0, 1);
+                lcd.printf("  Establecido   ");
+                rtc.setTime(tm, false, false);
+                rtc.startClock();
+                estado = 0;
+                configR = 0;
+                wait(2);
+            }
+        }
+    }
+}
\ No newline at end of file
diff -r 000000000000 -r 29267341170e mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Tue May 24 14:02:08 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/aae6fcc7d9bb
\ No newline at end of file