Problema con RTC ds3231 y control de relé

Buenas tardes amigos:

Me veo obligado a acudir al foro ya que tengo un problema que me trae de cabeza ya que el RTC me está haciendo cosas raras. En principio cuando hago un set de la hora si pongo por ejemplo hora 22 y minutos 30. cargo el código de set para modo 24H e inicio un monitor serie y lo que me devuelve son las 17:30.

Ahora vuelvo a cargar el codigo con una hora por ejemplo las 13:30 y correcto la pone bien y dejo pasar el tiempo, llegan las 18:30 y me vuelve a marcar otra hora distinta atrasada.

He de decir que este problema me ha venido al actualizar la hora para el horario de invierno y el código me funcionaba perfectamente antes.

He probado con otro RTC nuevo y nada lo mismo. Con este código controlo el encendido y apagado de luces de mi acuario y el aire oxigenador de agua.

CóDIGO DE SET Y LECTURA

CóDIGO DE SET Y LECTURA

#include <time.h>
#include <DS3231.h>
#include <Wire.h>

     
 DS3231 Clock;   
    byte year, month, date, DoW, hour, minute, second;   
       
      
      
      //VARIABLES
      
       
 

 
void setup() {
  
    // Se inicial la interfaz I2c
  Wire.begin();
  // Se inicia la Comunicación Serial
  Serial.begin(9600);
 /* //Se establece el modo horario en 12 horas (false = 24h)
  Clock.setClockMode(false); 
  //Se establece el año
  Clock.setYear((byte)(17));
  //Mes
  Clock.setMonth((byte)4);
  //Dia de la semana (no lo estoy considerando)
  //Clock.setDoW((byte)dia);
  //Día
  Clock.setDate((byte)19);
  //Hora
  Clock.setHour((byte)0);
  //Minutos
  Clock.setMinute((byte)35);
  //Segundos
  Clock.setSecond((byte)0);
*/
}
void loop() {
 delay(1000);
  //Se rescata la información
  Clock.getTime(year, month, date, DoW, hour, minute, second);
  //Se imprime
  Serial.print("\n");
  Serial.print(date, DEC);
  Serial.print("/");
  Serial.print(month, DEC);
  Serial.print("/");
  Serial.print(year, DEC);
  Serial.print("  ");
  Serial.print(hour, DEC);
  Serial.print(":");
  Serial.print(minute, DEC);
  Serial.print(":");
  Serial.println(second, DEC);
  // Mostrar la temperatura exterior
 Serial.print("\nT exterior=");
  Serial.print(Clock.getTemperature(), 2);

}

CÓDIGO COMPLETO

#include <time.h>
#include <DS3231.h>
#include <Wire.h>
 

  
      //CONSTANTES
    #define Blanco 2
    #define Luna 3
    #define UV 4
    #define Aire 5 
      
     
 DS3231 Clock;   
    byte year, month, date, DoW, hour, minute, second;   
       
      
      
      //VARIABLES
      
       
 

 
void setup() {
 /* 
       // Se inicial la interfaz I2c
  Wire.begin();
  // Se inicia la Comunicación Serial
  Serial.begin(9600);
  //Se establece el modo horario en 12 horas (false = 24h)
  Clock.setClockMode(false); 
  //Se establece el año
  Clock.setYear((byte)(17));
  //Mes
  Clock.setMonth((byte)4);
  //Dia de la semana (no lo estoy considerando)
  //Clock.setDoW((byte)dia);
  //Día
  Clock.setDate((byte)18);
  //Hora
  Clock.setHour((byte)12);
  //Minutos
  Clock.setMinute((byte)25);
  //Segundos
  Clock.setSecond((byte)00);
 */
  
    pinMode(Blanco, OUTPUT);
    pinMode(Aire, OUTPUT); 
    pinMode(Luna, OUTPUT); 
    pinMode(UV, OUTPUT); 
    pinMode(6, INPUT); 
  // Se inicial la interfaz I2c
  Wire.begin();
  // Se inicia la Comunicación Serial
  Serial.begin(9600);
}
 
void loop() {
 
  delay(1000);
  //Se rescata la información
  Clock.getTime(year, month, date, DoW, hour, minute, second);
  //Se imprime
  Serial.print("\n");
  Serial.print(date, DEC);
  Serial.print("/");
  Serial.print(month, DEC);
  Serial.print("/");
  Serial.print(year, DEC);
  Serial.print("  ");
  Serial.print(hour, DEC);
  Serial.print(":");
  Serial.print(minute, DEC);
  Serial.print(":");
  Serial.println(second, DEC);
  // Mostrar la temperatura exterior
	Serial.print("\nT exterior=");
	Serial.print(Clock.getTemperature(), 2);
  //Mostrar la temperatura interior
        
        
  //Control del luces mediante la hora

      //FUNCION
     /*if (6 == HIGH){
           digitalWrite(Blanco, LOW);
           digitalWrite(Luna, LOW);
           digitalWrite(UV, LOW);
                   }
            */
  // Apagar la luz Blanca a las 23:00 PM hasta las 9:00 
if(( hour >= 0  &&  hour < 9 )||(hour >= 23 && minute < 59))
{
    digitalWrite( Blanco, HIGH );
}
else 

    digitalWrite(Blanco, LOW);
    
  // Apagar la luz luna a las 1:00  hasta las 8:00 

if( hour >= 1  &&  hour < 8 )
{
    digitalWrite( Luna, HIGH );
}
else 

    digitalWrite(Luna, LOW);  

 // Apagar la luz UV a las 22:00  hasta las 10:00 

if(( hour >= 22)|| (hour >= 0  &&  hour < 10  ))
{
    digitalWrite( UV, HIGH );
}
else 

    digitalWrite(UV, LOW);    
  
   // Apagar la Aire a las 21:00  hasta las 10:00 
if((hour >= 21)||( hour >= 0  &&  hour < 8  ))
            //if( hour >= 22  &&  hour < 8 )
{
    digitalWrite( Aire, HIGH );
}
else 

    digitalWrite(Aire, LOW); 
  
    
 }

Perdonen pero he colocado mal el hilo y no se moverlo, si lo lee algún moderador, que lo mueva a Software.

Yo estoy utilizando un ds3231 pero con la libreria DS1307RTC.h y va de maravilla, prueba con otra libreria a ver que tal, puedes probrar a ponerlo en 12 horas y ver el resultado, para activar los relés según la hora dale un vistazo a la libreria time.alarms, funciona fenomenal, me la recomendó surbyte, todo hay que decirlo.

Yo tengo exactamente el mismo problema, además requiero enviar los minutos con ceros al principio, es decir que no sea 2, sino 02. ¿Ya pudiste solucionar el problema?

zapata_h:
Yo estoy utilizando un ds3231 pero con la libreria DS1307RTC.h y va de maravilla, prueba con otra libreria a ver que tal, puedes probrar a ponerlo en 12 horas y ver el resultado, para activar los relés según la hora dale un vistazo a la libreria time.alarms, funciona fenomenal, me la recomendó surbyte, todo hay que decirlo.

Puedes poner el código que estás utilizando con esa librería por favor, para observar si tiene la misma funcionalidad.