control de pecera con arduino.

Hola, tengo un proyecto en marcha sobre el control de luces y algunos elementos con Arduino.
Tengo el código hecho y funcional, pero como no soy experto tengo algunas dudas y problemas respecto a este proyecto.
Explico el proyecto y dejo el código al final:
El proyecto consta de un temporizador que encienda la luz X horas al día, pudiendo elegir tu la hora desde el código. También controla la luz de la pantalla LCD y una bomba de agua durante x minutos al día.
Lleva una pantalla LCD en la que se puede visualizar:

  • La hora
  • La fecha
  • Si la luz esta en ON u OFF.
  • Si la luz esta encendida a través del interruptor manual
  • Si la bomba está activada

El codigo es el siguiente:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd (0x27, 16, 2);// si no te sale usar (0x3f,16,2)||(0x20,16,2)
#include "Sodaq_DS3231.h"
char DiaSemana[][4] = {"Dom", "Lun", "Mar", "Mie", "Jue", "Vie", "Sab"};
    // La linea fija la fecha, hora y dia de la semana, se debe suprimir la linea en la segunda carga del codigo
    // Ejemplo 2020 noviembre 12, 08:00:00  dia 0-Domingo (0=Dom, 1=Lun, 2=Mar, 3=Mie, 4=Jue, 5=Vie, 6=Sab)
     //DateTime dt(2020, 11, 12, 18, 40, 20, 1);
int estado = 0;
void setup() {
  
 pinMode(2,OUTPUT);
 pinMode(4,OUTPUT);
 pinMode(6,OUTPUT);
 pinMode(7,INPUT); //boton
 pinMode(5,INPUT); //boton

 rtc.begin(); 
 Wire.begin();
 lcd.init();
 lcd.backlight();
 lcd.setCursor (0,1);
 lcd.print ("iniciando");
 delay(2000);
 lcd.clear();
   //  hay que marcar como texto la linea de abajo en la segunda carga del codigo
      //      rtc.setDateTime(dt);
}

void loop() {
  DateTime now = rtc.now();
    lcd.setCursor(0,0);
    lcd.print(DiaSemana[now.dayOfWeek()]);
    lcd.print(' ');
    lcd.print(now.date(), DEC);
    lcd.print('/');
    lcd.print(now.month(), DEC);
    lcd.print('/');
    lcd.print(now.year(), DEC);
    lcd.print('/');
    lcd.setCursor(4,1);
    lcd.print(now.hour(), DEC);
    lcd.print(':');
    lcd.print(now.minute(), DEC);
    lcd.print(':');
    lcd.print(now.second(), DEC); 
   delay(1000);
   lcd.clear();
int hora    =now.hour();
int minuto  =now.minute();
int segundo = now.second();
   if(minuto >=12 && minuto <=14 ){ //añade minuto u hora en palabras para cambiar la unidad del temporizador, y cambia los numeros 
   digitalWrite(2,LOW);             //cambia los numeros despues del = para determinar el minuto o la hora en la que quiere que actue
   lcd.setCursor(0,1);
    lcd.print( 'O' );
    lcd.print( 'N' );

   }
   else {
   digitalWrite(2,HIGH );
   lcd.setCursor(0,1);
    lcd.print('O');
    lcd.print('F');
    lcd.print('F');

   }
   //para pantalla
        if(minuto >=11 && minuto <=15 ){ // la pantalla se enciende X hora antes que la luz y se apaga X hora despues 
   digitalWrite(4,HIGH);                // para servir de reloj y calendario fulcional mientras no esté la luz encendida 
                                       // con esto evitamos que la luz de la pantalla este siempre encencida y moleste por la noche

   }
   else {
   digitalWrite(4,LOW );
   
   }  

    //para bomba de agua anti estanque
        if(minuto >=11 && minuto <=15 ){ // Lleva una bomba de agua que mueve el agua del bidon de auto rellenado para evitar
   digitalWrite(6,HIGH);                //  el estancamiento de esta. esta bomba se encenderá X minutos al dia 
                                     

   }
   else {
   digitalWrite(6,LOW );
      lcd.setCursor(10,1);
    lcd.print ("bomb"); // escribirá ''bomb'' en la pantalla para avisar del funcionamiento de la bomba
   }

 //para el boton
 
  estado = digitalRead(7);
  if(estado == HIGH)                  // boton para encender la pantalla manualmente en caso de necesitarlo si esta apagada 
  {  
    digitalWrite (4, HIGH); 
       lcd.setCursor(15,0);
    lcd.print('.');

    } 
    
estado = digitalRead(5);
  if(estado == HIGH)                  // boton para encender la luz manualmente 
  {  
    digitalWrite (2, LOW); 
       lcd.setCursor(12,1);
       lcd.print ("M");    // muestra en la pantalla ''MANUAL''
       
    } 
 
}

Mi duda y problema principal es: no se como poder cambiar la hora en caso de horario verano/invierno. me gustaria poder hacerlo a través de pulsadores o algún método no muy caro sin conectarlo al pc.
He pensado en un pulsador que al mantenerlo pulsado x segundos , añada +1h y al pulsarlo otra vez reste -1h.

int hora    =now.hour();
int minuto  =now.minute();
int segundo = now.second();
   if(minuto >=12 && minuto <=14 ){ //añade minuto u hora en palabras para cambiar la unidad del temporizador, y cambia los numeros 
   digitalWrite(2,LOW);             //cambia los numeros despues del = para determinar el minuto o la hora en la que quiere que actue
   lcd.setCursor(0,1);
    lcd.print( 'O' );
    lcd.print( 'N' );
   }

Necesito que sea simple pero no se como cambiar esa parte del código a través de un pulsador.

Mi intención mas adelante es añadirle sensor de temperatura con control de relé y tal...

El proyecto está en un RTC DS3231, Arduino nano y pantalla lcd 2x16

Lo siento mucho si puede ser un código poco desastroso o lioso pero llevo meses contados con esto de Arduino.
Muchas gracias de antemano a quien me lea y conteste.

Hechale un ojo a este post

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