#include <Wire.h>
#include <stdio.h>
#include <RTClib.h>
#include <TM1637.h>
RTC_DS3231 rtc;
// RTC_DS1307 rtc;
int segundo,minuto,hora,dia,mes;
long anio; //variable año
DateTime HoraFecha;
// Pins definitions for TM1637 and can be changed to other ports
const int CLK = 5;
const int DIO = 4;
TM1637 tm1637(CLK, DIO);
// TM1637 tm1637;
void setup ()
{
tm1637.init();
tm1637.set(BRIGHT_TYPICAL);//BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7;
Serial.begin(9600);
pinMode(9, OUTPUT);
pinMode(7, OUTPUT);
pinMode(3, INPUT_PULLUP);
// char TIMEX[]={__TIME__[0],__TIME__[1]};
// int x;
// sscanf(TIMEX, "%d", &x);
// x -= 5;
// char str[9];
// sprintf(str, "%d:%c%c:%c%c", x,__TIME__[3],__TIME__[4],__TIME__[6],__TIME__[7]);
// Serial.println(str);
rtc.begin(); //Inicializamos el RTC
// Serial.println("Estableciendo Hora y fecha...");
// Serial.println(tm1637);
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// Serial.println("DS3231 actualizado con la hora y fecha que se compilo este programa:");
// Serial.print("Fecha = ");
// Serial.print(__DATE__);
// Serial.print(" Hora = ");
// Serial.println(__TIME__);
}
bool puntoActiva=false;
bool alarma=true;
bool tiempoAlarma=false;
void loop ()
{
HoraFecha = rtc.now(); //obtenemos la hora y fecha actual
// tm1637.jaj;
segundo=HoraFecha.second();
minuto=HoraFecha.minute();
hora=HoraFecha.hour()-5; // retorna hora de (0–23), usar para establecer alarma
dia=HoraFecha.day();
mes=HoraFecha.month();
anio=HoraFecha.year();
if((hora==9 && minuto==58) || (hora==21 && minuto==5 ))
{
if(alarma)
tiempoAlarma=true;
if(alarma)
{
digitalWrite(7, HIGH);
analogWrite(9,255/2);
delay(100);
analogWrite(9,0);
delay(100);
if(!digitalRead(3))
{
digitalWrite(7, LOW);
alarma=false;
tiempoAlarma=false;
}
}
}
else
{
digitalWrite(7, LOW);
alarma=true;
tiempoAlarma=false;
}
tm1637.display(0,hora/10);
tm1637.display(1,hora%10);
tm1637.display(2,minuto/10);
tm1637.display(3,minuto%10);
//Enviamos por el puerto serie la hora y fecha.
// Serial.print("hora = ");
// Serial.print(hora);
// Serial.print(":");
// Serial.print(minuto);
// Serial.print(":");
// Serial.print(segundo);
// Serial.print(" Fecha = ");
// Serial.print(dia);
// Serial.print("/");
// Serial.print(mes);
// Serial.print("/");
// Serial.print(anio);
// Serial.println();
puntoActiva = ! puntoActiva;
tm1637.point(puntoActiva);
if(!tiempoAlarma)
{
delay(1000);
}
}