[SOLUCIONADO] Hora verano / Invierno o cambio de hora.

Hola a todos y a ver si alguien me puede echar una mano o al menos darme alguna información de como poder hacerlo o donde encontrar información, pues por mucho que busqué por internet no he podido encontrar solucion a mi problema. Tengo un reloj construido con un LCD 1602 I2c y un modulo mini DS3231.

La cuestión es la siguiente:

El reloj como dije solamente consta de el LCD y el módulo mini DS3231, por tanto cada vez que por algún motivo necesito cambiar la hora, tengo que conectarlo al ordenador y hacerlo mediante rectificación en el sketch, poniendo la nueva hora al DS3231.

Necesito o bien poner botones para cambiar la hora manualmente (que no tengo ni idea si realmente se puede hacer esto teniendo un DS3231 para que mantenga la hora) o que se cambie automáticamente el horario "Verano/ Invierno".

Agradeciendo cualquier ayuda, como en veces anteriores ya recibí, y poco a poco voy aprendiendo (aún me queda mucho camino, lo sé, pero poquito a poco voy avanzando y entendiendo).

Muchas gracias a todos.

#include <DS3231.h>                     // Libreria RELOJ i2c
#include <Time.h>                         // Libreria Time
#include <Wire.h>                          // Necesario Modulo i2c
#include <LiquidCrystal_I2C.h>       // Libreria LCD i2c

LiquidCrystal_I2C lcd (0x3f, 16, 2);  // Direccion comunicacion i2c LCD y tamaño

DS3231  rtc(SDA, SCL);


//Símbolo Termómetro (Temperatura)
byte termometro[8] = {
  B00100,
  B01010,
  B01010,
  B01110,
  B01110,
  B11111,
  B11111,
  B01110
};



void setup() 

{
 rtc.begin();
 Wire.begin();
 lcd.begin(16,2);                         // Tamaño de la pantalla LCD
 lcd.backlight ();                         // Encender la luz LCD 
 lcd.clear ();                               // Limpiar la pantalla LCD
 lcd.createChar(1, termometro);  //Simbolo de Termometro, para temperatura

 }



void loop() 

{
 lcd.setCursor(0,0);
 lcd.print(rtc.getDOWStr());          //dia semanal

 lcd.setCursor (11, 0);                  // Posicion cursor para (abajo)
 lcd.write (1);                              // Simbolo termometro
 lcd.print ("");                              // Sin espacios
 lcd.print(rtc.getTemp());              //Temperatura
 
  
 lcd.setCursor(0,1);
 lcd.print(rtc.getDateStr());           //Fecha
 
 lcd.setCursor(11,1);
 lcd.print(rtc.getTimeStr());           //Hora
 
  delay(1000);
 }

Te digo lo que yo hice una vez, ajuste con un solo botón.
Pones un botón que al pulsarlo llama a una subrutina que ajusta el DS3231 a las 12h 00' 00''.
Si el reloj se desajusta, esperas a las 12h (o la que prefieras) y con las señales horarias pulsas el botón y quedará ajustado. Más simple imposible.

Por eso hoy lo mejor si tienes WIFI o Ethernet es sincronizar con un reloj NTP y listo, el problema.

Hola a todos, agradeceros como siempre las respuestas, que como siempre ayudan.

Lo de la congruencia de Zeller es lo único que realmente habia encontrado por internet y que podría ayudar a solucionar mi problema, estuve mirando y probando una y otra vez, incluso cambiando unas librerias que estaban modificadas para este tema (ahora volvi a la que tenia), pero sinceramente mi nivel en esto no llega tan alto, es demasiado complicado para poder manejarlo aun, ya que voy aprendiendo poquito a poco (de hecho todo lo que voy viendo por aqui lo voy poniendo en practica y he podido ir creando cosillas interesantes, hasta incluso ya me defiendo con el trágico millis que tanto trae de cabeza a tanta gente). Pero agradezco el aporte de esa solucion.

Por otro lado de lo que trata esto es de que era un circuito electronico muy pequeño (por eso el usar el mini DS3231). No dispongo de módulo de ethernet o wifi, de momento nunca he llegado a usar uno, tan sólo los componentes que comenté en el primer post con un arduino nano y dos pulsadores que le voy a adjuntar para variar la luminosidad del lcd, lo que me permite que el tamaño mayor sea el del lcd y todo se pueda colocar detras. Pero igual hay que ir pensando en hacer otra cosa distinta.

Cierta vez si hice un reloj pero sin modulo, ese si se podia modificar la hora mediante pulsadores, pero tambien tenia el problema de que si se desconectaba o se iba la alimentación perdia la hora etc, ademas de un molesto parpadeo cada segundo a causa del delay de 1 segundo que regulaba el reloj, por lo que le queria añadir algo (como lo de regular la luminosidad del lcd), lo hacia a saltos de un segundo y era una tortura.
Por tanto tenia la duda de si a un modulo de reloj se le puede cambiar la hora mediante pulsadores u otra opcion, ya que para ponerlo en hora siempre vi que se hacia mediante sketch y mantenia ya siempre esa hora.

Esto creo que va a ser demasiado complicado, pero al menos ya si se que poder hacerse se puede, segun me vais demostrando. Por tanto agradeceros de verdad el tiempo que usais en ayudar como siempre.

Hola,

Ya te han dado soluciones y seguro que son buenas, no he mirado el código, si te apetece pasate por este hilo comparti mi primer proyecto para controlar el cambio de hora en un lcd y 2 botones.

Hola de nuevo a todos. Esto es lo que me gusta de aquí, que ayudan y animan a seguir.

Lo iba a dejar por imposible (al menos de momento y según vaya avanzando y entendiendo igual más adelante lo intentaba como fui haciendo siempre), pero no, no lo voy a dejar, voy a intentar probar las opciones estas que me han dado, aunque la congruencia de zeller esa no la entienda, pero voy a ir probando a ver si sale.

Mi código es realmente es algo más largo de lo que sale ahí, pero quise ponerlo sencillo y lo básico con solamente el reloj, que de ahí trata la pregunta, para con ello no hacerlo más complicado para todos, y centrarnos solamente en lo que necesito ahora mismo realmente.

Ahora mismo tengo ya tres opciones, y al menos sé que poder hacerse, se puede, que era mi gran duda. Por lo que iré probando a ver si doy con la tecla, que igual ahora con las soluciones que me habéis dado, es hasta más sencillo de lo que yo imagino.

Muchísimas gracias a todos una vez más, y toda ayuda es siempre bien recibida.

Esta libreria soporta cambio automatico de hora a partir de la version 1.4.2:

Hola de nuevo a todos.

Bueno ya creo que lo tengo solucionado, al menos lo he estado probando y hace correctamente lo que tiene que hacer, aunque ya veremos cuando llegue el día que tenga que cambiar automaticamente la hora en distintos años etc, pero se supone que si ahora funciona tambien debe de funcionar entonces.

La solucion ha sido con la libreria que me dejó jose. Esa ya la habia visto, y probado, pero me daba un error siempre al instalar la libreria, por lo que en su momento pensé... pues va a ser que no funciona, o en mi ordenador o version de arduino o IDE no funciona, pero el fallo que me daba era tan simple como que la libreria dentro de la carpeta tiene un acceso directo a una pagina de internet, eliminar ese archivo y solucionado.

Las otras opciones las debo probar con más tiempo, pero quiero probarlas para ir aprendiendo, pero me hace falta más tiempo.

Jopapa... gracias por tu ayuda y solución sencilla

ArduMyth... Gracias por todo el interés que has puesto en ayudarme en este problema mio. Excepto lo de la congruencia zeller esa el resto quiero probarlo, porque mirándolo es tal y como dices, está casi hecho. Gracias por todas las opciones que me has creado para solucionarlo.

surbyte... Gracias como siempre por estar atento a ayudar y dar soluciones. Más adelante seguro que miro lo de la opcion por Wifi, aunque ya debí haber mirado en hacer algun proyecto con Wifi nunca me llegué atrever del todo, por lo que pronto habrá que probar a hacer algo y de paso intentar tambien la solucion a este problema via Wifi, para seguir aprendidendo.

rodripelto... Gracias por darme el acceso a ese hilo, realmente fue muy interesante y me gustó cuando lo ví, lo raro es que por mucho que busqué información por el foro ese hilo no lo vi nunca, está claro que no busqué con las palabras correctas.

jose... Gracias por ponerme esa librería, que aunque ya la habia intentado probar (pero me daba error), ahora ya, sabiendo que si que funciona, estuve mirando porque yo no podía instalarla y al final pude y ha sido la solucion más sencilla.

Pues nada, que de verdad un millón de gracias a todos como siempre por vuestra ayuda.

Has una prueba simple... llevalo al día previo al cambio de hora y verifica que lo haga.
Seteas el reloj a un par de minutos antes y luego ves la corrección.

surbyte así lo hice, puse un par de fechas, tanto para adelantar la hora como para retrasarla, y funcionó correctamente, por lo que lógicamente debe de funcionar (si alguna vez fallará, que no deberia, lo descubriria dentro de años). Gracias