Sensor DS3231 no almacena la hora en tiempo real

Buenas tardes:
Mi problema es que al quitarle la corriente y dejarlo con la pila, me almacena la hora en la que le quité la alimentación desde la placa, y si lo tengo mucho tiempo desconectado, al volverlo a conectar, me sale la hora en la que lo desconecté, no la hora en tiempo real. Con lo cual, al volverlo a conectar se queda la hora atrasada. La pila cr2032 tiene 3,1 voltios.
¿Alguna sugerencia?
Un saludo, gracias

que blibreria? y codigo estas usando? /// edito, me paso algo parecido, y era porque tenia el set time sin comentar , es una linea que te permite poner la hora y la fecha a la hora y fecha de scktc que estas subiendo, ahora , tenes que subirlo una vez para que tome la hora , y despues volver a subir pero con la linea comentada para que no se vuelva a ejecutar... saludos espero que sirva, igual , estaria bueno el codigo y la libreria que usas

Me sumo al pedido de @ogara , sube el código que estás usando sino es adivinar.

Por favor pon el código correctamente según las Normas del foro.

Saludos

Este es el código que estoy usando, en un Arduino Mega 2560, con un lcd 1602 y un sensor dht11, y el rtc: En la línea del rtc adjust, el datetime va con los guiones bajos, pero no aparecen, soy nuevo y no sé si el código se coloca así.

#include <DHT.h>
#include <DHT_U.h>
#include <RTClib.h>
#include <Wire.h>
#include <LiquidCrystal.h>

const int RS = 7;
const int E = 8;
const int D4 = 9;
const int D5 = 10;
const int D6 = 11;
const int D7 = 12;
const int pulsador3 = 49;
const int SENSOR = 50;
const int pulsador1 = 51;
const int pulsador2 = 52;
const int avisador = 53;

int alarma = 0;
int temp;
int humedad;
int modo = 1;

LiquidCrystal lcd (RS, E, D4, D5, D6, D7);

DHT dht (SENSOR, DHT11);

RTC_DS3231 rtc;

void setup() {
  Wire.begin();
  pinMode(pulsador1, INPUT);
  pinMode(pulsador2, INPUT);
  pinMode(avisador, OUTPUT);
  rtc.adjust(DateTime(__DATE__,__TIME__));
  dht.begin();
  lcd.begin(16, 2);
  lcd.setCursor(4, 0);
  lcd.print("Iniciando");
  lcd.setCursor(5, 1);
  lcd.print("sistema");
  delay(2000);
  lcd.clear();
  lcd.setCursor(0, 0);
}
void loop(){
  DateTime fecha = rtc.now();
  humedad = dht.readHumidity();
  temp = dht.readTemperature();
  if (digitalRead(pulsador1) == HIGH){
    modo = 1;
  }
  if (digitalRead(pulsador2) == HIGH){
    modo = 0;
  }
  if (modo == 1){
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Temp:");
    lcd.setCursor(10, 0);
    lcd.print(temp);
    lcd.print((char)223);
    lcd.print("C");
    lcd.setCursor(0, 1);
    lcd.print("Humedad:");
    lcd.setCursor(10, 1);
    lcd.print(humedad);
    lcd.print("%");
    delay(1000);
  }
  if (modo == 0){
    lcd.clear();
    lcd.setCursor(4, 0);
    lcd.print(fecha.hour(), DEC);
    lcd.print(":");
    lcd.print(fecha.minute(), DEC);
    lcd.print(":");
    lcd.print(fecha.second(), DEC);
    lcd.setCursor(3, 1);
    lcd.print(fecha.day(), DEC);
    lcd.print("/");
    lcd.print(fecha.month(), DEC);
    lcd.print("/");
    lcd.print(fecha.year(), DEC);
    delay(1000);
  }
  if (digitalRead(pulsador3) == HIGH){
    alarma = 1;
    digitalWrite(avisador, LOW);
  }
}

primero por experiencia antes que te reten por eso pon en PREFORMATED TEXT. por las reglas del foro, ya me paso
SEGUNDO ESA LINEA QUE TE PASE SE CARGA UNA SOLA VEZ DESPUES DE CARGADO EL SKETCH ,
segundo esa linea que te pase se carga una sola vez despues de cargado el sketch, comenta la linea para que no se ejecute mas y volve a cargar y proba contame si te sirvio
rtc.adjust(DateTime(**DATE** ,**TIME** ));

@mario_crvtt el problema y la solución es lo que te marca @ogara .
Esa sentencia carga en el reloj la hora en que se compiló el programa. Cada vez que inicias el arduino recarga esa misma hora.
Lo que tienes que hacer es subir el código y dejarlo correr normalmente. Luego editas el código, comentas esa línea y lo subes otra vez al arduino.
Listo, solucionado, ya no va a reajustar la hora.

Por favor edita tu post y pon el código de acuerdo a las Normas.

@ogara Mayúsculas? :man_facepalming:t2:

Mientras no sea sobre la tft...

¿Cómo se pone el código en preformated text?
No se ponerlo.

cuando estas escribiendo el post, te sale un simbolo </> arriba en el editor, en tu caso ya tenes el codigo puesto en el posta solo selecciona todo el codigo que pusistes y aplicale el comando ese que te marca el editor de texto , yo tampoco lo entendia pero es facil

Está explicado en las Normas del foro.

Te la hago breve.
Editá el post, seleccioná todo el código, pulsá </> en la barra del editor.

Saludos

Moderador:
Por favor, lean o relean tanto @mario_crvtt como @ogara las Normas del foro
@mario_crvtt
Ve a edición, luego selecciona todo el error que has publicado, lo cortas y click en </>


@ogara no uses mayúsculas y si te das cuenta solo ve y edita, que es mucho mas fácil que antes.
Asi que seguir respondiendo sin hacerlo para alguien con experiencia en el foro, es digamos imperdonable.
Otra cosa y esta si es peor y va para @ogara de ningún modo se secuestra un hilo para hablar de otro tema, para ello le envias un privado a quien sea y lo manejas por esa via, no en el hilo de otro forero. No lo advierto mas.

Hay varias razones por las cuales un módulo ds3231 no retenga. La habitual es que suelen usar unas baterias recargables LIR2032 y no la comun CR2032. Hay una solucion si tienes la CR2032 y es cortando una pista que es la que intenta recargar. Es un tema para detectar.

Buenas tardes:
He cargado el programa por segunda vez, esta vez omitiendo la línea en la que ajusta la hora, y ya se me ha solucionado. Muchas gracias por vuestra ayuda. Voy a editar eso ya, gracias por la información.