Input che aziona 5 relay in sequenza e si interrompe al rilascio improvviso

Potresti anche usare una cosa del genere, senza while e senza delay ... (pseudocodice parziale da completare, perche' se posto il programma completo, poi Guglielmo mi bacchetta :D)

definisci i pin dei rele' come 1, 2, 3, 4, 5, per comodita'
byte tempo = 0; // per sapere se il secondo e' passato
byte rele = 1; //per il ciclo for ed accendere le uscite
byte nociclo = 0; //per non ripetere inutilmente il ciclo
unsigned long prevmil = millis(); //per controllo tempo
...

setup()
...

void loop()
   {
   ...
   ... il tuo programma
   ...

   ... leggi pulsante
   if ((pulsante premuto) //se pulsante premuto controlla tempo 
   {
      if ((tempo == 1) && (rele < 5)) //se tempo = 1 e rele non tutti accesi fai ciclo for
      {
         for (rele = 1; rele = 5; rele++) //ciclo variabile rele da 1 a 5
         {
            digitalWrite(rele, HIGH); //uso il valore di rele per accendere il corrispondente pin
            tempo = 0; //azzero tempo per ricontrollare quando passato un'altro secondo
            prevmil = millis(); //e resetto prevmil per lo stesso motivo
         }
      }
   }
   else //pulsante non premuto
   {
      for (rele = 1; rele = 5; rele++) digitalWrite(rele, LOW); //spengo tutti i rele
   }
   if (prevmil - millis() >= 1000) tempo = 1; //cambia valore tempo dopo un secondo
   ...
   ... resto del programma
   ...
}

Intendiamoci, e' buttato li al volo, non posso provarlo qui, non e' completo e non e' certo ottimizzato (ad esempio se il pulsante non e' premuto il ciclo che spegne i rele' continua a ripetersi, male non fa ma "spreca tempo", e si puo ottimizzare anche questo), consideralo solo come l'esempio di un possibile modo per fare la sequenza che vorresti (sempre che funzioni)