Programador nebulizador terraza

Hola a todos, soy nuevo en programación de arduino y en estos días con algo mas de tiempo me he animado a empezar con este proyecto. Tras leer bastante y aclarar algunas cosas, me aparece un “problema”, que aunque funciona como quiero, me gustaría solucionar.
Para comenzar con este proyecto dispongo de un arduino uno, pantalla 1602A, 2 potenciometros y un modulo de relé.
Este proyecto es para unos aspersores nebulizadores de terraza, los cuales con una electro válvula conectada al relé, y mediante 2 potenciómetros se regula el tiempo en el que esa válvula esta encendida o apagada y los valores de que está encendido o apagado los muestro en el lcd.
El problema que tengo es que la pantalla no me actualiza los datos hasta que se ha cumplido el ciclo completo ya que uso delay para ello, he estado mirando la función millis pero no sé como aplicarla en este caso.
Os adjunto mi programa a ver si veis como puedo solucionarlo.
Un saludo y muchas gracias de antemano.

const int analogPin = A0; //Entrada potenciometro 1
const int analogPin1 = A1; //Entrada potenciometro2
int value;//variable que almacena la lectura analógica potenciometro 1
int value1;// variable que almacena lectura analogica potenciometro 2
int position;   //posicion del potenciometro1 en dada en segundo activo
int position1;  //posicion del potenciometro2 en dada en segundo activo
int rele = 8 ;  

 #include <LiquidCrystal.h>

//Declarar LCD y pines

LiquidCrystal lcd(7,6,5,4,3,2);

void setup() {
  Serial.begin (9600);
pinMode (rele, OUTPUT);
 
 
}
 
void loop() {
   value = analogRead(analogPin);          // realizar la lectura analógica raw
   position = map(value, 0, 1023, 0, 30);  // convertir a segundos el temporizador va de 0 a 30 seg tanto apagado como encendido
   value1 = analogRead(analogPin1);
   position1 = map(value1, 0, 1023, 0, 30);
   

   delay(100);
   //Definir las dimensiones del LCD (16x2)
  lcd.begin(16,2);
  lcd.setCursor(0,0);
  lcd.print("Encendido:");
  lcd.setCursor(13,0);
  lcd.print(position);
  lcd.setCursor(0,1);
  lcd.print("Apagado:");
  lcd.setCursor(13,1);
  lcd.print(position1);
  lcd.setCursor(15,0);
  lcd.print("s");
  lcd.setCursor(15,1);
  lcd.print("s");
  

value = analogRead (analogPin);
value1 = analogRead (analogPin1);

digitalWrite (rele, HIGH);
delay (value*30); 
digitalWrite (rele, LOW);
delay (value1*30);
  
}

edu_lr:
El problema que tengo es que la pantalla no me actualiza los datos hasta que se ha cumplido el ciclo completo ya que uso delay para ello, he estado mirando la función millis pero no sé como aplicarla en este caso.

Eso es normal porque la funcion delay() paraliza el loop().

Lo que debes hacer es dejar fluir el loop() usando millis().

if ((millis()-t)%(val*30) < value*30){
   digitalWrite(rele, HIGH);
   //delay(value*30);
}else{
   digitalWrite(rele, LOW);
   //delay(value1*30);
}

La idea es que val = value + value1 (ciclo completo), así que si el tiempo es menor a value el LED debe estar prendido y en el resto del ciclo apagado.

Por otro lado debes vigilar cuando cambia alguno de los potenciometros y en ese momento volver a mostrar valores en el LCD y tomar la hora en una variable t.

Tendrás que decidir en que momento quieres cortar el ciclo y reiniciarlo. Una posible solución es guardar en una variable el valor de value+value1 y si ese valor cambia entonces reinicias el ciclo.

#include <LiquidCrystal.h>
//Declarar LCD y pines
LiquidCrystal lcd(7,6,5,4,3,2);

const int analogPin = A0;           //Entrada potenciometro 1
const int analogPin1 = A1;          //Entrada potenciometro2
int value;                          //variable que almacena la lectura analógica potenciometro 1
int value1;                         // variable que almacena lectura analogica potenciometro 2
int val;             //Guarda ciclo total

int position;                       //posicion del potenciometro1 en dada en segundo activo
int position1;                      //posicion del potenciometro2 en dada en segundo activo

int rele = 8 ; 
unsigned long t;      //Guarda hora

void setup() {
   lcd.begin(16, 2);            //Debe estar aqui
   //Serial.begin(9600);      //No usado
   pinMode(rele, OUTPUT);
}

void loop() {
   value = analogRead(analogPin);           // realizar la lectura analógica raw
   position = map(value, 0, 1023, 0, 30);  // convertir a segundos el temporizador va de 0 a 30 seg tanto apagado como encendido
   value1 = analogRead(analogPin1);
   position1 = map(value1, 0, 1023, 0, 30); 
   
   if (val != value + value1){     //Pregunta si hay cambio
      val = value + value1;
      t = millis();                        //Toma la nueva hora
      lcd.setCursor(0,0);
      lcd.print("Encendido:");
      lcd.setCursor(13,0);
      lcd.print(position);
      lcd.setCursor(0,1);
      lcd.print("Apagado:");
      lcd.setCursor(13,1);
      lcd.print(position1);
      lcd.setCursor(15,0);
      lcd.print("s");
      lcd.setCursor(15,1);
      lcd.print("s");
   }

   //delay(100);

   //value = analogRead(analogPin);  //No se requiere volver a leer
   //value1 = analogRead(analogPin1);
   if ((millis()-t)%(val*30) < value*30){
      digitalWrite(rele, HIGH);
      //delay(value*30);            //No usar delay()
   }else{
      digitalWrite(rele, LOW);
      //delay(value1*30);           //No usar delay()
   }
}

El problema que tengo es que la pantalla no me actualiza los datos hasta que se ha cumplido el ciclo completo ya que uso delay para ello, he estado mirando la función millis pero no sé como aplicarla en este caso.

Kike_GL te ha indicado por donde ir pero te recomiendo que vayas a

Ve a Documentación => Indice de temas tutoriales => millis()

y aprendas por tu cuenta, hay muchos tutoriales. No hay modo de decir no lo entiendo.

Te ayudará a entender lo que @Kike_GL te ha respondido.

Hola, muy buenas, gracias por vuestras respuestas y la ayuda del compañero Kike_GL.
esto leyendo mas sobre la funcion y creo entender mejor el funcionamiento gracias a las modificaciones que puso el compañero, no funciona del todo correcto y estoy intentando solucionarlo en base a su programa, le dare una vuelta estos dias y en cuanto lo aclare lo comparto.
muchas gracias compañeros. un saludo