#include <Wire.h>
#define DS1307_I2C_ADDRESS 0x68
#include <SLCD.h> //LCD
#define numRows 2 //LCD filas
#define numCols 16 //LCD columnas
SLCD lcd = SLCD(numRows, numCols); //LCD
byte decToBcd(byte val)//RELOJ
{
return ( (val/10*16) + (val%10) );
}
byte bcdToDec(byte val)
{
return ( (val/16*10) + (val%16) );
}
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;//RELOJ
void setup()
{
Wire.begin(); //RELOJ
lcd.init(); //LCD
Serial.begin(9600); //LCD
}
//BUCLE PRINCIPAL
void loop ()
{
getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); // LEEMOS LA HORA
InfoLcd(); //Informacion cada hora en pantalla lcd
}
// FUNCIONES PRINCIPALES
// Establece la fecha y el tiempo del ds1307
void getDateDs1307(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
// Resetea el registro puntero
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.send(0);
Wire.endTransmission();
Wire.requestFrom(DS1307_I2C_ADDRESS, 7);
// Alguno de estos necesitan enmascarar porque ciertos bits son bits de control
*second = bcdToDec(Wire.receive() & 0x7f);
*minute = bcdToDec(Wire.receive());
*hour = bcdToDec(Wire.receive() & 0x3f); // Need to change this if 12 hour am/pm
*dayOfWeek = bcdToDec(Wire.receive());
*dayOfMonth = bcdToDec(Wire.receive());
*month = bcdToDec(Wire.receive());
*year = bcdToDec(Wire.receive());
}
// INFORMACION EN PANTALLA LCD
void InfoLcd ()
{
//Nombre proyecto
lcd.print("INFINITY-REEF", 0, 2);
lcd.print("VER 2.0", 1, 4);
delay(2000);
lcd.clear(); // borra pantalla
// ahora para mostrar fecha y hora
lcd.print("Hora:",0,1);
if (hour < 10) Serial.print("0");
Serial.print(hour, DEC);
Serial.print(":");
if (minute < 10) Serial.print("0");
Serial.print(minute, DEC);
Serial.print(":");
if (second < 10) Serial.print("0");
Serial.print(second, DEC);
switch (dayOfWeek)
{
case 1:
lcd.print("Lun , ",1,0);
break;
case 2:
lcd.print("Mar , ",1,0);
break;
case 3:
lcd.print("Mie , ",1,0);
break;
case 4:
lcd.print("Jue , ",1,0);
break;
case 5:
lcd.print("Vie , ",1,0);
break;
case 6:
lcd.print("Sab , ",1,0);
break;
case 7:
lcd.print("Dom , ",1,0);
break;
}
Serial.print(dayOfMonth, DEC);
Serial.print("/");
if (month < 10) Serial.print("0");
Serial.print(month, DEC);
Serial.print("/");
Serial.print("20");
if (year < 10) Serial.print("0");
Serial.print(year, DEC);
}