INSERTAR TEMPORIZADOR (MILLIS) EN MI SKETCH

Hola, buenas tardes, al hilo de mi proyecto para regadio automatico mediante un arduino Mega y un shield de ethernet, querría saber como programarlo para que cuando le doy al botón ON este unos 5 minutos activo y se desconecte al cabo de ese tiempo.
He podido realizarlo con uso de la funcion delay, pero como es normal, no me deja realizar otras funciones durante ese periodo de tiempo, ni siquiera desconectarlo.
Por lo que he leido , es mejor usar la funcion millis (), pero en la información que encontrarla no consigo entenderla para poder crear mi temporización.

Este es mi codigo

#include <SPI.h>
#include <Ethernet.h>

//Declaración de la direcciones MAC e IP. También del puerto 80
byte mac[]={0xDE,0xAD,0xBE,0xEF,0xFE,0xED}; //MAC
IPAddress ip(192,168,1,80); //IP
EthernetServer servidor(8080);

int PIN_LED1=4;  //riego
String readString1=String(30);
String state1=String(3);
int PIN_LED2=5;  //expresion
String state2=String(3);
int PIN_LED3=6;  // luces
String state3=String (3);
int PIN_LED4=7;  // CALEFACCION
String state4=String (3);
int PIN_LED5=8;  //depuradora
String state5=String (3);


void setup()
{
  Ethernet.begin(mac, ip); //Inicializamos con las direcciones asignadas
  servidor.begin();
  pinMode(PIN_LED1,OUTPUT);
  digitalWrite(PIN_LED1,HIGH);
  state1="OFF";
  pinMode(PIN_LED2,OUTPUT);
  digitalWrite(PIN_LED2,HIGH);
  state2="OFF";
  pinMode(PIN_LED3,OUTPUT);
  digitalWrite(PIN_LED3,HIGH);
  state3="OFF";
  pinMode(PIN_LED4,OUTPUT);
  digitalWrite(PIN_LED4,HIGH);
  state4="OFF";
  pinMode(PIN_LED5,OUTPUT);
  digitalWrite(PIN_LED5,HIGH);
  state5="OFF";
 
  
  
}

void loop()
{
  EthernetClient cliente= servidor.available();
  
  if(cliente)
  {
    boolean lineaenblanco=true;
    while(cliente.connected())//Cliente conectado
    {
      if(cliente.available())
      {
        char c=cliente.read();
        if(readString1.length()<30)//Leemos petición HTTP caracter a caracter
        {
          readString1.concat(c); //Almacenar los caracteres en la variable readString
        
        }
        if(c=='\n' && lineaenblanco)//Si la petición HTTP ha finalizado
        {
          int LED1 = readString1.indexOf("LED1=");
          int LED2 = readString1.indexOf("LED2=");
          int LED3 = readString1.indexOf("LED3=");
          int LED4 = readString1.indexOf("LED4=");
          int LED5 = readString1.indexOf("LED5=");
         
          if(readString1.substring(LED1,LED1+6)=="LED1=T")
          {
            digitalWrite(PIN_LED1,LOW);
            state1="ON";
          } else if (readString1.substring(LED1,LED1+6)=="LED1=F")
          {
            digitalWrite(PIN_LED1,HIGH);
            state1="OFF";
          }
          if(readString1.substring(LED2,LED2+6)=="LED2=T")
          {
            digitalWrite(PIN_LED2,LOW);
            state2="ON";
          } else if (readString1.substring(LED2,LED2+6)=="LED2=F")
          {
            digitalWrite(PIN_LED2,HIGH);
            state2="OFF";
          }  
          if (readString1.substring(LED3,LED3+6)=="LED3=T")
          {
            digitalWrite(PIN_LED3,LOW);
            state3="ON";
            }
         else if (readString1.substring(LED3,LED3+6)=="LED3=F")
           {
              digitalWrite(PIN_LED3,HIGH);
              state3="OFF";
            }
          if (readString1.substring(LED4,LED4+6)=="LED4=T")
              {
                digitalWrite(PIN_LED4, LOW);
                state4="ON";
                }
          else if (readString1.substring(LED4,LED4+6)=="LED4=F")
                {
                  digitalWrite(PIN_LED4, HIGH);
                  state4= "OFF";
                  }
          if (readString1.substring(LED5,LED5+6)=="LED5=T")
                  {
                    digitalWrite(PIN_LED5, LOW);
                    state5="ON";
                    }
           else if (readString1.substring(LED5,LED5+6)=="LED5=F")
                    {
                      digitalWrite(PIN_LED5,HIGH);
                      state5="OFF";
                      }
           
              
          
          //Cabecera HTTP estándar
          cliente.println("HTTP/1.1 200 OK");
          cliente.println("Content-Type: text/html");
          cliente.println();        
          //Página Web en HTML
          cliente.println("<html>");
          cliente.println("<head>");
          cliente.println("<title>MOTOR EXPRESION ON/OFF</title>");
          cliente.println("</head>");
          cliente.println("<body width=100% height=100%>");
          cliente.println("<center>");
          cliente.println("<h1>MOTORES DE HUERTA ON/OFF</h1>");
          cliente.print("

");
          cliente.print("Estado del motor de RIEGO: ");
          cliente.print(state1);
          cliente.print("



");
          cliente.println("<input type=submit value=ON style=width:200px;height:75px onClick=location.href='./?LED1=T\'>");
          cliente.println("<input type=submit value=OFF style=width:200px;height:75px onClick=location.href='./?LED1=F\'>");
          cliente.print("

");
          cliente.print("Estado del motor de EXPRESION: ");
          cliente.print(state2);
          cliente.print("



");
          cliente.println("<input type=submit value=ON style=width:200px;height:75px onClick=location.href='./?LED2=T\'>");
          cliente.println("<input type=submit value=OFF style=width:200px;height:75px onClick=location.href='./?LED2=F\'>");
          cliente.print("

");
          cliente.print("Estado del motor de LUCES: ");
          cliente.print(state3);
          cliente.print("



");
          cliente.println("<input type=submit value=ON style=width:200px;height:75px onClick=location.href='./?LED3=T\'>");
          cliente.println("<input type=submit value=OFF style=width:200px;height:75px onClick=location.href='./?LED3=F\'>");
          cliente.print("

");
           cliente.print("Estado del motor de CALEFACCION: ");
          cliente.print(state4);
          cliente.print("



");
          cliente.println("<input type=submit value=ON style=width:200px;height:75px onClick=location.href='./?LED4=T\'>");
          cliente.println("<input type=submit value=OFF style=width:200px;height:75px onClick=location.href='./?LED4=F\'>");
          cliente.print("

");
           cliente.print("Estado del motor DEPURADORA: ");
          cliente.print(state5);
          cliente.print("



");
          cliente.println("<input type=submit value=ON style=width:200px;height:75px onClick=location.href='./?LED5=T\'>");
          cliente.println("<input type=submit value=OFF style=width:200px;height:75px onClick=location.href='./?LED5=F\'>");
          cliente.print("

");
           
          cliente.println("</center>");
          cliente.println("</body>");
          cliente.println("</html>");
          cliente.stop();//Cierro conexión con el cliente
          readString1="";
        }
      }
    }
   }
  }

Mi intención es que en mi salida 4, incluir esta temporización y dentro de mis conocimientos había probado de la siguiente forma , fijandome en el ejemplo: blinkwithoutdelay

#include <SPI.h>
#include <Ethernet.h>

//Declaración de la direcciones MAC e IP. También del puerto 80
byte mac[]={0xDE,0xAD,0xBE,0xEF,0xFE,0xED}; //MAC
IPAddress ip(192,168,1,80); //IP
EthernetServer servidor(8080);

int PIN_LED1=4;  //riego
String readString1=String(30);
String state1=String(3);


unsigned long previousMillis = 0;
const long interval = 50000; 


void setup()
{
  Ethernet.begin(mac, ip); //Inicializamos con las direcciones asignadas
  servidor.begin();
  pinMode(PIN_LED1,OUTPUT);
  digitalWrite(PIN_LED1,HIGH);
  state1="OFF";
  
}

void loop()
{
  EthernetClient cliente= servidor.available();
  
  if(cliente)
  {
    boolean lineaenblanco=true;
    while(cliente.connected())//Cliente conectado
    {
      if(cliente.available())
      {
        char c=cliente.read();
        if(readString1.length()<30)//Leemos petición HTTP caracter a caracter
        {
          readString1.concat(c); //Almacenar los caracteres en la variable readString
        
        }
        if(c=='\n' && lineaenblanco)//Si la petición HTTP ha finalizado
        {
          int LED1 = readString1.indexOf("LED1=");
         
         
          if(readString1.substring(LED1,LED1+6)=="LED1=T")
          {
             if (currentMillis - previousMillis >= interval) {
    
    previousMillis = currentMillis;

            digitalWrite(PIN_LED1,LOW);
            millis (interval);
            digitalWrite(PIN_LED1,LOW;
            state1="ON";
          } else if (readString1.substring(LED1,LED1+6)=="LED1=F")
          {
            digitalWrite(PIN_LED1,HIGH);
            state1="OFF";
          }
          }
           
              
          
          //Cabecera HTTP estándar
          cliente.println("HTTP/1.1 200 OK");
          cliente.println("Content-Type: text/html");
          cliente.println();        
          //Página Web en HTML
          cliente.println("<html>");
          cliente.println("<head>");
          cliente.println("<title>MOTOR EXPRESION ON/OFF</title>");
          cliente.println("</head>");
          cliente.println("<body width=100% height=100%>");
          cliente.println("<center>");
          cliente.println("<h1>MOTORES DE HUERTA ON/OFF</h1>");
          cliente.print("

");
          cliente.print("Estado del motor de RIEGO TEMPORIZADO: ");
          cliente.print(state1);
          cliente.print("



");
          cliente.println("<input type=submit value=ON style=width:200px;height:75px onClick=location.href='./?LED1=T\'>");
          cliente.println("<input type=submit value=OFF style=width:200px;height:75px onClick=location.href='./?LED1=F\'>");
          cliente.print("

");
          
           
          cliente.println("</center>");
          cliente.println("</body>");
          cliente.println("</html>");
          cliente.stop();//Cierro conexión con el cliente
          readString1="";
        }
      }
    }
   }
  }

Lo que te faltó leer es como funciona una máquina de estados (M.E). Sin la M.E. millis() no puede resolver los problemas que planteas porque el código no puede funcionar del mismo modo que lo hacía usando delay().

Ve a Documentación => Indice de temas Tutoriales => Maquina de Estados y tmb lee millis().

Esto es un invento de tu parte

if (currentMillis - previousMillis >= interval) {
   previousMillis = currentMillis;
   digitalWrite(PIN_LED1,LOW);
   millis (interval);    // <=== ERROR!!!
   digitalWrite(PIN_LED1,LOW);  // <=== ERROR!!! Faltaba ) para cerrar instrucción
   state1="ON";
}

Podría funcionar asi

// en algun sitio debes actualizar currentMillis 
currentMillis = millis(); // no se si es el lugar

// codigo entre de por medio entre la actualización de currentMillis
if (currentMillis - previousMillis >= interval) {
   previousMillis = currentMillis;
   digitalWrite(PIN_LED1,LOW);
   digitalWrite(PIN_LED1,LOW);
   state1="ON";
}

Esto que acabo de corregirte no se si funciona. No lo he mirado en el contexto de tu código, solo corrijo los errores ademas de que dos veces pones

digitalWrite(PIN_LED1,LOW);
   digitalWrite(PIN_LED1,LOW);

Supongo que uno debe ser en HIGH y otro en LOW.
millis() no puede usarse como delay()