seleccionar rele por teclado y que demore activo un determinado tiempo

hola comunidad

mi proyecto consiste en un teclado 4x4 y una placa de 8 rele, quiero presionar el numero 1 del teclado que se active el tele numero 1 y se quede activo digamos 5 minutos y que al mismo tiempo pueda presionar el numero 2 del teclado y se prenda el rele numero 2 unos 10 minutos y asi sucesivamente con los otros rele y que pueda volver a presionarlos cada que termine el tiempo de prendido de cada uno.

gracias por la ayuda

#include <Keypad.h>

# define ON HIGH      // Cambiar aqui para reles con logica positiva/negativa
# define OF LOW       // Cambiar aqui para reles con logica positiva/negativa
      
const byte F = 4; 
const byte C= 4; 

char Teclas[F][C] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} };

byte PinsFilas[F] = {5, 4, 3, 2};              //Pines de las filas
byte PinsColum[C] = {9, 8, 7, 6};              //Pines de las columnas
byte Reles[] = {11,12,13,14,15,16,17,18};      // Pines para los reles
bool Estado_rele[]={false,false,false,false,false,false,false,false};   // Estado de cada rele
unsigned long Timepos[] = {1000,2000,3000,4000,5000,6000,7000,8000};    // Tiempo para cada rele en milisegundos
unsigned long Fin_T[] = {0, 0, 0, 0, 0, 0, 0, 0};                       // Auxiliar para controlar timepo de cada rele
unsigned long Amilis = 0;                                               // Auxiliar para controlar desborde millis()


Keypad Teclado = Keypad( makeKeymap(Teclas), PinsFilas, PinsColum, F, C );



void setup()
{
  for (int i=0; i<8; i++)
  {
    pinMode(Reles[i], OUTPUT);      // Establecer pin de salida
    digitalWrite (Reles[i], OF);    // Asegurarse rele apagado
  }
}


void loop()
{
  Amilis=millis();                       // Almacenamos ultimo millis() para controlar  desborde
  char key = Teclado.getKey();
  if (key != NO_KEY)                     // Hay tecla pulsada?
  
  { 
    if (key = '1' && !Estado_rele[0])    // Pulso 1 y rele 1 apagado
    {
      Estado_rele[0] = true;             // Cambamnos estado rele
      Fin_T[0] = millis() + Timepos[0];  // Tiempo para parar el rele
    }
    if (key = '2' && !Estado_rele[1])    // Pulso 2 y rele 2 apagado
    {
      Estado_rele[1] = true;             // Cambamnos estado rele
      Fin_T[1] = millis() + Timepos[1];  // Tiempo para parar el rele
    }
    // hasta 8º
  }
  
  for (int i=0; i<8; i++) 
  { 
    if (millis() > Fin_T[i]) { Estado_rele[i] = false; }                                     // Comprobar si hay q apagar algun rele
    if (Estado_rele[i]) {digitalWrite (Reles[i], ON);} else {digitalWrite (Reles[i], OF);}   // Encender/Apagar reles
  }     
  if (Amilis > millis())                                                                     // Control desborde millis()                          
  {
    for (int i=0; i<8; i++) {Fin_T[i] = Fin_T[i] - Amilis + millis();  }                     // Nuevo tiempo para fin    
  } 
  
}