#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
}
//FUNCIONES SECUNDARIAS
//Iniciar LCD
void Lcdini ()
{
lcd.displayOn();
lcd.clear();
}
void lcdoff()
{
lcd.displayOff();
lcd.brightness(0);
}
// borra pantalla con fade
void FadeLcd()
{
for (char i=99; i>=4; i -= 5) {
lcd.brightness(i);
delay(50);
}
lcd.clear();
for (char i=0; i<100; i += 5) {
lcd.brightness(i);
delay(50);
}
}
// Pausa 3 segundos////////MOFIFICADA A 6////////////////
void p ()
{
delay (6000);
}
//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
Lcdini();
lcd.print("Iscarman control", 0, 0);
lcd.print("VER 1.0", 1, 4);
p();
FadeLcd(); // borra pantalla con fade
// ahora para mostrar fecha y hora
p();//pausa 3segundos
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);
p();
/////////////////QUITANDO EL FADELCD Y EL LCDOFF FUNCIONA MEJOR/////////////////
/*
FadeLcd(); // borra pantalla con fade
lcdoff();
*/
}