millis

ciao a tutti!
Ultimamente mi trovo in difficoltà, non riesco a cambiare stato ad un pin dopo tot secondi che è attivo, faccio un esempio se ho il pin 12 su high dopo 5 secondi che e in high vorrei portarlo su low
In pratica vorrei eliminare i delay presenti nello sketch che fanno andare a scatti tutto il programma qui sotto, sostituendoli con la funzione millis ma non so come fare
grazie mille a tutti in anticipo.

di seguito vi posto lo sketch

#include <SPI.h>
#include <Ethernet.h>
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = {
192, 168, 0, 199 };
byte subnet[] = {
255, 255, 255, 0 };
EthernetServer server(80);
String readString;
byte out_1 = 22;
byte out_2 = 24;
byte out_3 = 26;

int input_1 = 23;
int input_2 = 25;
int input_3 = 27;

int val=0;

void setup()
{
Ethernet.begin(mac, ip);
pinMode(out_1, OUTPUT);
pinMode(out_2, OUTPUT);
pinMode(out_3, OUTPUT);
pinMode(13, OUTPUT);

pinMode(input_1, INPUT);
pinMode(input_2, INPUT);
pinMode(input_3, INPUT);

}

void loop(){

EthernetClient client = server.available();

if (client) {
boolean currentLineIsBlank = true;

while (client.connected()) {
if (client.available()) {
char c = client.read();
readString.concat(c);
if (c == '\n' && currentLineIsBlank) {

if(readString.indexOf("on_1") > 0) digitalWrite(out_1, HIGH);
delay(100);
digitalWrite(out_1, LOW);

if(readString.indexOf("on_2") > 0) digitalWrite(out_2, HIGH);
delay(100);
digitalWrite(out_2, LOW);

if(readString.indexOf("on_3") > 0) digitalWrite(out_3, HIGH);
delay(100);
digitalWrite(out_3, LOW);

// PAGINA HTML
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.print("ARDUINO Controllo WEB");
client.print("

");
client.print("Controllo domotico casa (BY Manuel)");
client.print("

");

//controllo relè1
client.print("
");

if(digitalRead(22)== true) client.println("");
else client.println("
");
client.println("


");
client.print("--- LUCE - CORRIDOIO");

val=digitalRead(input_1);
if(val==HIGH) {
client.print("....ON");
}
else{
client.print("....OFF");
}
client.println("


");

client.print("
");
if (digitalRead(24)== true) client.println("
");
else client.println("
");
client.println("


");
client.print("--- LUCE - SALA");

val=digitalRead(input_2);
if(val==HIGH) {
client.print("....ON");
}
else{
client.print("....OFF");
}
client.println("


");

client.print("
");
if (digitalRead(26)== true) client.println("
");
else client.println("
");
client.println("


");
client.print("--- LUCE - CAMERA");

val=digitalRead(input_3);
if(val==HIGH) {
client.print("....ON");
}
else{
client.print("....OFF");
}
client.println("


");

client.println("");

readString="";
delay(5);
client.flush();
client.stop();

}
}
}
}
}

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:

Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare ( pulsante </> ).
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.

Scusate.

#include <SPI.h>
#include <Ethernet.h> 
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 
  192, 168, 0, 199 };
  byte subnet[] = {
  255, 255, 255, 0 };  
EthernetServer server(80);
String readString;
byte out_1 = 22;
byte out_2 = 24;
byte out_3 = 26;


int input_1 = 23;
int input_2 = 25;
int input_3 = 27;


int val=0;


void setup()
{
  Ethernet.begin(mac, ip);
  pinMode(out_1, OUTPUT);  
  pinMode(out_2, OUTPUT);
  pinMode(out_3, OUTPUT);
  pinMode(13, OUTPUT);

  pinMode(input_1, INPUT);
  pinMode(input_2, INPUT); 
  pinMode(input_3, INPUT);

  

  
  }



 

void loop(){

  EthernetClient  client = server.available();

  if (client) {
    boolean currentLineIsBlank = true;

    while (client.connected()) {
      if (client.available()) { 
        char c = client.read();
        readString.concat(c);   
        if (c == '\n' && currentLineIsBlank) {


          if(readString.indexOf("on_1") > 0) digitalWrite(out_1, HIGH);     
          delay(100);
          digitalWrite(out_1, LOW);

         
          if(readString.indexOf("on_2") > 0) digitalWrite(out_2, HIGH);        
          delay(100);
          digitalWrite(out_2, LOW);
        
        
          if(readString.indexOf("on_3") > 0) digitalWrite(out_3, HIGH); 
           delay(100);
          digitalWrite(out_3, LOW);
         
          

          //  PAGINA HTML      
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          client.print("<html><head><title>ARDUINO Controllo WEB</title><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' ></head><body>");
          client.print("

");
          client.print("Controllo domotico casa (BY Manuel)");
          client.print("<p>");

          
          //controllo relè1
          client.print("
");
          
           if(digitalRead(22)== true) client.println("<a href=/?off_1>");  
          else client.println("<a href=/?on_1>");  
          client.println("<hr />");
          client.print("--- LUCE - CORRIDOIO");
       
            val=digitalRead(input_1);
            if(val==HIGH) {
            client.print("<span style='color:green; font-weight:bold;'>....ON</span></font>");
           }
           else{
            client.print("<span style='color:grey; font-weight:bold;'>....OFF</span></font>");   
         }
           client.println("<hr />");

        
          client.print("
");
          if (digitalRead(24)== true) client.println("<a href=/?off_2>");  
          else client.println("<a href=/?on_2>");
          client.println("<hr />");
          client.print("--- LUCE - SALA");
       
            val=digitalRead(input_2);
            if(val==HIGH) {
            client.print("<span style='color:green; font-weight:bold;'>....ON</span></font>");
           }
           else{
            client.print("<span style='color:grey; font-weight:bold;'>....OFF</span></font>");  
           }
            client.println("<hr />");
 
 
          client.print("
");
          if (digitalRead(26)== true) client.println("<a href=/?off_3>");  
          else client.println("<a href=/?on_3>");
            client.println("<hr />");
          client.print("--- LUCE - CAMERA");
            
            val=digitalRead(input_3);
            if(val==HIGH) {
            client.print("<span style='color:green; font-weight:bold;'>....ON</span></font>");
           }
           else{
            client.print("<span style='color:grey; font-weight:bold;'>....OFF</span></font>");  
           }
            client.println("<hr />");

        
     
        
        
        
          client.println("</body></html>");
        
          readString="";
          delay(5);
          client.flush();
          client.stop(); 
 
        }
      }
    }
  }
}