impulso relè

Buongiorno avrei un problemino se qualcuno gentimente mi da una mano a risolverlo
sto utilizzando questo sketch
#include <EtherCard.h>

#define RELAY_PIN 2

static byte mymac[] = {0xDD,0xDD,0xDD,0x00,0x00,0x01};
static byte myip[] = {192,168,1,199};
byte Ethernet::buffer[700];

char* on = "ON";
char* off = "OFF";

boolean relayStatus;
char* relayLabel;
char* linkLabel;

void setup () {

Serial.begin(57600);
Serial.println("WebRelay Demo");

if(!ether.begin(sizeof Ethernet::buffer, mymac, 10))
Serial.println( "Failed to access Ethernet controller");
else
Serial.println("Ethernet controller initialized");

if(!ether.staticSetup(myip))
Serial.println("Failed to set IP address");

pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
relayStatus = false;
relayLabel = off;
linkLabel = on;
}

void loop() {

word len = ether.packetReceive();
word pos = ether.packetLoop(len);

if(pos) {

if(strstr((char *)Ethernet::buffer + pos, "GET /?ON") != 0) {
relayStatus = true;
relayLabel = on;
linkLabel = off;
} else if(strstr((char *)Ethernet::buffer + pos, "GET /?OFF") != 0) {
relayStatus = false;
relayLabel = off;
linkLabel = on;
}
digitalWrite(RELAY_PIN, relayStatus);

BufferFiller bfill = ether.tcpOffset();
bfill.emit_p(PSTR("HTTP/1.0 200 OK\r\n"
"Content-Type: text/html\r\nPragma: no-cache\r\n\r\n"
""
"

"
"
Relay is $S
"
"

" "" "
" ), relayLabel, linkLabel, linkLabel);

ether.httpServerReply(bfill.position());
}
}

e fin qui tutto bene solo che vorrei che il relè si diseccitasse in automatico dopo 2 secondi senza dover schiacciare il pulsante off
ho provato ad inserire questo pezzo

digitalWrite(RELAY_PIN, relayStatus);
delay(2000);
relayStatus = false;
relayLabel = off;
linkLabel = on;
ma mi si blocca tutto grazie

Ciao, racchiudi il codice tra gli appositi tag CODE altrimenti si capisce male.
Ti si blocca tutto in che senso? Se mette il dalay è normale che per il tempo del delay il programma resta fermo (nel tuo caso ad ogni ciclo il programma si ferma per 2 secondi sia che il relè sia stato attivato che no), se vuoi evitare questo comportamento usa millis() guarda l'esempio blinkWithoutDelay.
Se invece il blocco è differente specifica meglio la problematica

vorrei che quando schiaccio il pulsante on si ecciti il relè, ma poi si disecciti in automatico dopo 2 secondi senza dover schiacciare il pulsante off. Come quando suonano alla porta schiaccio il pulsante apriporta chiude il contatto , quando lo rilascio lo riapre grazie

Ok, cosa vuoi ottenere è chiaro, se il tuo "blocco" come penso è dato dal delay devi sostituirlo con il controllo tramite la verifica del tempo trascorso dall'attivazione del relé al tempo (2 secondi) che deve trascorrere prima che il relé venga riportato allo stato non eccitato.
Per fare questo, come già consigliato, controlla negli esempi il BlickWithoutDelay e prova a modificare il codice per sostituirlo al delay. Se poi hai ancora problemi ri posta il codice modificato che lo si controlla, magari per otimizzarlo al meglio. Se invece vuoi che qualcuno lo scriva per te non è nello spirito del forum (almeno questo ho capito con il tempo trascorso qui) e io non lo faccio anche se sarebbe per me molto più semplice farti il codice che provare a farti imparare come si usa la funzione millis() tramite l'esempio indicato e poi riverificare il codice assieme, ma nel secondo caso imparerai e in futuro ti tornerà sicuramente utile. Almeno questo è il mio pensiero