Riego automático con RTC

¡Hola estimados!
Estoy comenzando a utilizar Arduino y mi primer proyecto es hacer un programa de riego automático. Lo cierto es que soy nuevo y mucho no entiendo, pero quería ver si podían opinar del código que preparé.

La idea es dividir el riego en 2 circuitos (1 por electrovávula), y que una parte del riego se acciones 2 veces por día (si la humedad es baja) y que la otra parte del circuito riegue 1 vez por día.
Mi mayor duda es en un delay de 24hs. Quiero poner un pulsador que en caso de apretarlo, el riego no funcione por 24hs, y no se me ocurrió otra manera de hacerlo. No logré entender cómo funciona la función millis().

Los componentes que voy a usar son:
1 Arduino UNO
3 Relay (manejan 1 bomba de lavarropas y 2 electroválvulas de lavarropas)
1 led
1 LDC 16x2
1 pulsador
1 sensor de temperatura
1 sensor de humedad
1 RTC 1307

Por otro lado, al ponerle un RTC al Arduino, ¿éste deja de usar su reloj interno y pasa a sincronizarse con el RTC?
Gracias
Saludos

#include <LiquidCrystal.h>
#include "RTClib.h"
#include <Wire.h>

RTC_DS1307 rtc;
LiquidCrystal lcd(12, 11, 2, 3, 4, 5);

const int sensortemperatura=A0;
const int sensorhumedad=A1;
const int relebomba=6;
const int relevalv=7;
const int relevalv2=8;
const int led=9;
const int pulsador=10; //Pulsador que me permite cancelar el riego en caso de que llueva

DateTime hora; //defino una variable para que tome la hora del RTC
//inicializo las distintas variables
int lecttemp=0;
int lecthum=0;
float volttemp=0;
float temperatura=0;
float humedad=0;
int estadorele=0;
int rainstop=0; //inicializo el pulsador como bajo


void setup() {
  //Especifico entradas y salidas
  Serial.begin(9600);
  delay(3000);
  pinMode(sensortemperatura,INPUT);
  pinMode(sensorhumedad,INPUT);
  pinMode(relebomba,OUTPUT);
  pinMode(relevalv,OUTPUT);
  pinMode(relevalv2,OUTPUT);
  pinMode(led,OUTPUT);
  pinMode(pulsador,INPUT);

// wire.begin;
  rtc.begin();
  lcd.begin(16,2);
  lcd.clear();
  lcd.home();
  lcd.print("Encendiendo");
  delay(2000);
  lcd.clear();
  delay(100);

//verifico que el RTC esté conectado
if (!rtc.begin()){
  lcd.print("Reloj no conectado"); //Esta parte no entiendo para qué es, pero vi en foros que es necesaria.
  while(1);
  }

//Pongo en hora el reloj, siempre voy a tener que reiniciar el riego a las 20hs
rtc.adjust(DateTime(2019,12,15,20,0,0)); 
}

void loop() {
  lcd.clear();
  lcd.setCursor(0,0);
  DateTime hora=rtc.now(); //defino a "hora" como la hora del momento y la imprimo en la pantalla
  lcd.print(hora.hour(),DEC);
  lcd.setCursor(0,3);
  lcd.print(":");
  lcd.setCursor(0,4);
  lcd.print(hora.minute(), DEC);
  lcd.setCursor(0,6);
  lcd.print(":");
  lcd.print(hora.second(), DEC);
  lcd.setCursor(0,1);
  lcd.print("Humedad: ");

//tomo los valores de temperatura y humedad
  lecttemp=analogRead(sensortemperatura);
  volttemp=5.0/1024*lecttemp;
  temperatura=volttemp*100-50;

  lecthum=analogRead(sensorhumedad);
  humedad=map(lecthum,0,1023,100,0); //verificar con el sensor para ver si la cuenta es la correcta

//Imprimo en la pantalla el valor de humedad
  lcd.setCursor(9,1);
  lcd.print(humedad);
  delay(1000);
  
//Le indico que riegue a las 01hs durante 15 minutos
  if (hora.hour()==01 && hora.minute()==00 && hora.second()<= 5){
    digitalWrite(relebomba,HIGH);
    digitalWrite(relevalv,HIGH);
    digitalWrite(relevalv2,HIGH);
    delay(1000);
    }
      
  if (hora.hour()==01 && hora.minute()==15 && hora.second()<= 59){
    digitalWrite(relebomba,LOW);
    digitalWrite(relevalv,LOW);
    digitalWrite(relevalv2,LOW);
    }
    
//Le indico que si la humedad es menor al 24% entre las 10 y las 15, riegue las macetas chicas conectadas a la válvula 2 durante 10 minutos
  if (humedad<24 && hora.hour()>=10 && hora.hour<=19 && hora.minute()==00 && hora.second()<= 10){ //1 vez por hora revisa si la humedad es menor a 24% y en ese caso riega durante 10min, entre las 10hs y las 19hs.
    digitalWrite(relevalv2,HIGH);                                                                 //Luego de las 19 no quiero que siga porque a la 1am, comenzará a regar.
    digitalWrite(relebomba,HIGH);
    delay(600000);
    digitalWrite(relevalv2,LOW);
    digitalWrite(relebomba,LOW);
    delay(100);
  }

  if (hora.hour()>=19 && hora.minute()==00 && hora.second()<= 10){ 
    digitalWrite(relevalv2,HIGH);
    digitalWrite(relebomba,HIGH);
    delay(600000);
    digitalWrite(relevalv2,LOW);
    digitalWrite(relebomba,LOW);
    delay(100);
    
//Le indico que si apreto el botón, no debe regar por 24hs (cierra todos los reles) y ademas prenda el LED.
//leo la posición del pulsador
  rainstop=digitalRead(pulsador);
 
  if (rainstop==HIGH){
    digitalWrite(led,HIGH);
    digitalWrite(relevalv2,LOW);
    digitalWrite(relebomba,LOW);
    digitalWrite(relevalv,LOW);
    delay(86400000); //24hs de espera
    digitalWrite(led,LOW); //apago el LED cuando pasan las 24hs para indicar que el Arduino volvió a funcionar
    delay(100);
    }
       
}

Hola @Enrique88179 por lo visto no leíste el llamado de atención que te hice por revivir un hilo viejo y además hacer una pregunta que desvirtuaba el hilo original por eso te pedí que crearas tu propio hilo. No se si lo hiciste así o fue casualidad.
Al menos este hilo esta correctamente posteado, así que resaltemos lo positivo.

Yo tengo un criterio diferente respecto del riego, me llama la atención que la gente quiera regar y regar y regar 2 veces, 3 veces por dia sin prestarle atención a lo que la planta dice. La planta si tiene sed absorbe la humedad y si no, permanecerá húmeda. Entonces un sistema que tiene sensores de humedad de suelo, es el que dicta cuando regar y no el RTC.
Si hay un biólogo (aclaro que no lo soy) que de su punto de vista que seguramente será mejor que el mío. Esto que digo es lo que he extractado de textos al respecto, por ejemplo, sobre el cultivo de la vid para hacer vino.

Entonces, si tienes sensores de humedad solo le prestas atención al nivel de humedad y te despreocupas del horario.
Hay quien dice que hay que regar de mañana temprano o de noche para que la planta no se queme con el sol, suponiendo que estuviéramos en verano pero también leí que eso no es cierto, que si la planta tiene sed, da lo mismo que sea en un horario soleado o no.
El tema es no pasarse de agua y además estamos hablando de cuidar el recurso que es el agua. Sino hablen con un habitante de los países en los que el agua dulce no abunda.

Para mi entonces todo se resume a sensores de humedad de suelo y control de electroválvulas. Ahora bien, el sensor de humedad de suelo no hace falta que este funcionando todo el tiempo porque solo favorecemos que se dañe por la electrolisis. La formas simple de alargarle la vida es simplemente accionarlo cada 10 minutos. Si quieres durante el proceso de riego, puedes aumentar la frecuencia de lectura a digamos 1 x minuto. Todo esto depende de tu suelo, del caudal de agua con el que riegues, si usas riego por goteo o aspersores.

Ahora si lo anterior no te convence, y no tienes porqué hacerlo, responderé a tu inquietud usando RTC.

En tu código veo los benditos delay(600000); de los que vivimos hablando los que tenemos ya algún tiempo en este foro. Ver Campaña contra la función delay
Cuando haces eso, tu sistema se detiene y no hace nada mas que que esperar y esperar a que se cumpla dicho delay.
Si debes mirar la humedad no es posible, si debes prestar atención a un pulsador tampoco lo es.
Si tienes que actualizar un display no podrás, a menos que empieces a hacer artilugios con delays mas cortos dentro de algún loop que cada tanto consulte y bueno la suma de delay() terminen haciendo lo mismo.

Si vas a Documentación => indice de temas tutoriales => millis() encontrarás como funciona. Hay 4 tutoriales ahí que te pueden explicar como se usa.
Por favor léelos y luego seguimos con tus dudas.