Error en codigo de reloj

hola soy Santiago y yo tengo un problema con el código de mi reloj con un lcd; aquí dejo el código,
porque yo no se como solucionar el problema

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd( 0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE ); 
//SE AGREGA LIBRERÍAS PARA RTC
#include <ThreeWire.h>  
#include <RtcDS1302.h>

ThreeWire myWire(4,7,2); // IO, SCLK, CE
RtcDS1302<ThreeWire> Rtc(myWire);

void setup () 
{
    Serial.begin(57600);

    Serial.print("compiled: ");
    Serial.print(__DATE__);
    Serial.println(__TIME__);

    Rtc.Begin();

    RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__);
    printDateTime(compiled);
    Serial.println();

    if (!Rtc.IsDateTimeValid()) 
    {
        // Common Causes:
        //    1) first time you ran and the device wasn't running yet
        //    2) the battery on the device is low or even missing

        Serial.println("RTC lost confidence in the DateTime!");
        Rtc.SetDateTime(compiled);
    }

    if (Rtc.GetIsWriteProtected())
    {
        Serial.println("RTC was write protected, enabling writing now");
        Rtc.SetIsWriteProtected(false);
    }

    if (!Rtc.GetIsRunning())
    {
        Serial.println("RTC was not actively running, starting now");
        Rtc.SetIsRunning(true);
    }

    RtcDateTime now = Rtc.GetDateTime();
    if (now < compiled) 
    {
        Serial.println("RTC is older than compile time!  (Updating DateTime)");
        Rtc.SetDateTime(compiled);
    }
    else if (now > compiled) 
    {
        Serial.println("RTC is newer than compile time. (this is expected)");
    }
    else if (now == compiled) 
    {
        Serial.println("RTC is the same as compile time! (not expected but all is fine)");
    }
}

void loop () 
{
    RtcDateTime now = Rtc.GetDateTime();

    printDateTime(now);
    Serial.println();

    if (!now.IsValid())
    {
        // Common Causes:
        //    1) the battery on the device is low or even missing and the power line was disconnected
        Serial.println("RTC lost confidence in the DateTime!");
    }

    delay(10000); // ten seconds
}

#define countof(a) (sizeof(a) / sizeof(a[0]))

void printDateTime(const RtcDateTime& dt)
{
    char datestring[20];

    snprintf_P(datestring, 
            countof(datestring),
            PSTR("%02u/%02u/%04u %02u:%02u:%02u"),
            dt.Month(),
            dt.Day(),
            dt.Year(),
            dt.Hour(),
            dt.Minute(),
            dt.Second() );
    Serial.print(datestring);
}
#include <ThreeWire.h>  
#include <RtcDS1302.h>
//SE CREA Y CONFIGURA OBJETO PARA MANEJAR RTC
ThreeWire myWire(4,5,2); //PINES IO, SCLK, CE -> DE RTC DS1302
RtcDS1302<ThreeWire> Rtc(myWire);

void setup () {   
  // SE INICAR MONITOR SERIE E IMPRIME FECHA Y HORA
    Serial.begin(57600);
    Serial.print("CONFIGURACIÓN INICIAL ");
    Serial.print(__DATE__);
    Serial.println(__TIME__);
    lcd.begin(16,2); //SE INICIARLIZA LCD
    Rtc.Begin();// SE INICIALIZA RTC
    RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__);//SE CONFIGURA FECHA Y HORA ACTUAL
    printDateTime(compiled); //SE IMPRIME FECHA Y HORA
    Serial.println();
}

void loop () {
  //SE OBTENIE FECHA Y HORA ACTUAL Y SE ACTUALIZA
    RtcDateTime now = Rtc.GetDateTime();
    printDateTime(now);
    Serial.println();
    if (!now.IsValid()){
        Serial.println("ERROR EN FECHA Y HORA");
    }
    delay(1000);RETARDO DE 1 SEGUNDO
}

#define countof(a) (sizeof(a) / sizeof(a[0]))

//FUNCION PARA IMPRIMIR FECHA Y HORA CON FORMATO ADECUADO
void printDateTime(const RtcDateTime& dt){
    char datestring[20];
    snprintf_P(datestring, 
            countof(datestring),
            PSTR("%02u/%02u/%04u %02u:%02u:%02u"),//SE CONFURA FORMATO DE FECHA Y HORA
            dt.Month(),
            dt.Day(),
            dt.Year(),
            dt.Hour(),
            dt.Minute(),
            dt.Second() );
    //SE IMPRIME LA FECHA Y HORA EN LCD
    lcd.setCursor(0,0);
    lcd.print("DATE  ");
    lcd.print(dt.Month());
    lcd.print("/");
    lcd.print(dt.Day());
    lcd.print("/");
    lcd.print(dt.Year());
    lcd.setCursor(0,14);
    lcd.print(" ");
    lcd.setCursor(0,1);
    lcd.print("TIME  ");
    lcd.print(dt.Hour());
    lcd.print(":");
    lcd.print(dt.Minute());
    lcd.print(":");
    lcd.print(dt.Second());
    Serial.print(datestring);//SE IMPRIME EN MONITOR SERIE
}

¿Y cuál es el problema y/o error?

Edito: Ya lo vi, tienes repetido setup(), loop() y algunas cosas más.

El tema entonces debería ser "Necesito unir éstos 2 códigos para hacer un reloj y no se resolverlo."

Se resuelve con orden.

  1. Todos las librerías sin repetir.
  2. Las variables, objetos y contantes sin repetir.
  3. Un setup() que contemple lo necesario a ambos códigos.
  4. Un loop que tenga la misma consideración que el punto 3)
  5. los procedimientos o rutinas y las funciones que sean necesarias.

Con estos 5 puntos resuelves tu problema sin ayuda del vecino.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.