Problema Reloj + LCD Keypad

Buenas a todos,

Estoy teniendo inconvenientes para utilizar el RTC en conjunto con la LCD Display.

Mi problema es que tengo dos librerías para el reloj:

  • RelojDS1307.h
  • RTClib.h

Con las dos puedo hacer funcionar correctamente el reloj con otro elemento, pero con la primera es con la que me funciona la función "is later" correctamente. Con la segunda no me funciona el "is later" pero si me funca RTC.now.

Sabran como solucionar este detalle? Es una bobada seguramente, pues es que no conozco la función correcta para cada cual.

Abrazo y muchas gracias!

Por cierto los componentes son:

Tiny RTCI2C
LCD KeypadShield
Relé para el "is later"

y no pusiste enlace a ambas librerias como para poder ver si ambas tienen la función islaster?
Obvio que RTClib.h no la implementa.
Solo tu lo supones, pero eso no tiene porque ser asi.

Hola, mirá te comparto el código que hice para probar el RTClib.h con la pantalla y funciona:

#include <OneWire.h>
#include <LiquidCrystal.h>
#include <Wire.h> 
#include "RTClib.h"
RTC_DS1307 RTC;

LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7);

void setup () {
Wire.begin(); // Inicia el puerto I2C
RTC.begin(); // Inicia la comunicación con el RTC
//RTC.adjust(DateTime(__DATE__, __TIME__)); // Establece la fecha y hora (Comentar una vez establecida la hora)
lcd.begin(6, 2); // Establece la velocidad de datos del puerto serie
lcd.print("Probando Relos");
}
void loop () {
DateTime now = RTC.now(); // Obtiene la fecha y hora del RTC
lcd.clear();

lcd.print(now.day(), DEC); // Dia
lcd.print('/');
lcd.print(now.month(), DEC); // Mes
lcd.print('/');
lcd.print(now.year(), DEC); // Año

lcd.clear();

lcd.print(' ');
lcd.print(now.hour(), DEC); // Horas
lcd.print(':');
lcd.print(now.minute(), DEC); // Minutos
lcd.print(':');
lcd.print(now.second(), DEC); // Segundos
lcd.println();
delay(1000); // La información se actualiza cada 1 seg.
}

Por otro lado tengo el RelojDS1307.h en el que sí puedo usar el "is later":

#include <RelojDS1307.h>
#include <Wire.h> 

int vent = 0;

RelojDS1307Class Reloj;

void setup()
{
Wire.begin(); // Inicia el puerto I2C
pinMode(vent, OUTPUT);
}

void loop()

{ 
  //Configuracion del encedido y apagado de las luces
  if(Reloj.IsLater(23, 16) && Reloj.IsPrevious(23, 59))
  {
    digitalWrite(vent, LOW);
  }
   
  else
  {
    digitalWrite(vent, HIGH);
  }
  
}

Los links a las librerias que use no los tengo pues los baje en enero, pero uno podría ser este:
RTClib.h

La de la otra no me acuerdo de donde la baje!

Para mi no es obvio que RTClib.h no la implementa, por eso estoy consultando. Y eso de que solo yo lo supongo o no amigo, "take it easy", aunque he leído bastante no encontré ese detalle aún por eso pregunto, no doy por sobreentendido :

Agradezco el tiempo de aquel que pueda ayudarme a solucionar este detalle!

Encontré las funciones de la librería RelojDS13007.h

RelojDS1307Class KEYWORD1

#######################################

Methods and Functions (KEYWORD2)

#######################################

Reset KEYWORD2
SetDate KEYWORD2
SetTime KEYWORD2
GetDateTime KEYWORD2
SetDateTime KEYWORD2
DateTime KEYWORD2
Date KEYWORD2
Time KEYWORD2
GetHour KEYWORD2
GetMinute KEYWORD2
GetYear KEYWORD2
GetMonth KEYWORD2
GetDay KEYWORD2
DiaName KEYWORD2
MesName KEYWORD2
IncMinutos KEYWORD2
IncHoras KEYWORD2
SetDiaSemana KEYWORD2
GetDiaSemana KEYWORD2
IsLater KEYWORD2
IsPrevious KEYWORD2

Espero ahora si pueda ser más completa la data!

Encontré las funciones de la librería RelojDS13007.h

RelojDS1307Class KEYWORD1

#######################################
# Methods and Functions (KEYWORD2)
#######################################

Reset KEYWORD2
SetDate KEYWORD2
SetTime KEYWORD2
GetDateTime KEYWORD2
SetDateTime KEYWORD2
DateTime KEYWORD2
Date KEYWORD2
Time KEYWORD2
GetHour KEYWORD2
GetMinute KEYWORD2
GetYear KEYWORD2
GetMonth KEYWORD2
GetDay KEYWORD2
DiaName KEYWORD2
MesName KEYWORD2
IncMinutos KEYWORD2
IncHoras KEYWORD2
SetDiaSemana KEYWORD2
GetDiaSemana KEYWORD2
IsLater KEYWORD2
IsPrevious KEYWORD2

Espero ahora si pueda ser más completa la data!

¿Y finalmente cuál era la pregunta? :roll_eyes:

Noter, antes de preguntarme eso lee el primer mensaje papa :wink:

Esa función es particular de RelojDS1307 asi que basta con implementarla en la otra librería o en tu sketch y san se acabó el problema.
Porque no subes la librería y asi puedo indicarte como resolver el problema.
No la puedo encontrar, es del 2011 aparentemente.

Lo mejor que he encontrado es que la clase RelojDS1307 dice

class RelojDS1307Class
{
private:
public:
  RelojDS1307Class();
  void Reset();
 void SetDate( int monthDay, int month, int year );
  void SetTime( int hour, int minute, int second );
 char * DateTime();
 char * Date();
 char * Time();
 boolean IsLater( int hour, int minute ); 
 boolean IsPrevious( int hour, int minute );
};

Y como ves boolean IsLater( int hour, int minute ); es la función que te decia que SI esta implementada en esta librería y NO lo está en la otra.
Sube las dos librerías y algun compañero o yo mismo te modificamos la librería que quieres para que tenga esta función extra.

Si he leído el primer mensaje. Dices que ambas librerías te funcionan, sólo que una de ellas no tiene el método islater. ¿Por qué no usar la que sí lo tiene?
Si la pregunta es "¿se podría implementar el método islater en la otra librería?" realmente no la has hecho tú, sino surbyte, aunque no sé si ha acertado, pues aún está en primer curso de telepatía de foros :smiley:

Te das cuenta como estoy mas avanzado que tu, Serafín... tu ni siquiera adivinas, jajaja
No encuentro la librería, asi que lo que encontré solo muestra la clase pero no el procedimiento.

Siempre has estado más avanzado, Ricardo, pues eres multidisciplinar (yo en electrónica, cero). Por algo eres teniente casi capitán.
Pero lo de abrir también brecha en ciencias ocultas ya lo PETA. :wink: