Problema con lectura de pin en arduino

Buenas tardes al foro,mi situacion es la siguiente:estoy haciendo un proyecto para activar un relevador una vez que un usuario haya ingresado una clave mediante un teclado matricial.
El detalle esta en que una vez que se haya verificado que la clave es correcta se debe poder presionar un boton para que se mande la señal a un pin y este pin a su vez mande los 5 volts para activar el relevador (solo por 4 segundos y despues se apague).

Mi problema es que ya he tratado de varias formas para hacer que una vez que se haya ingresado la clave correcta el programa espere el tiempo que sea para que sea presionado el boton, y éste a su vez active el relevador solo por 4 segundos pero no lo he logrado ya que solo comprueba la entrada del pin que va al boton por un pequeñisimo tiempo que es inmediatamente despues de haber ingresado la clave correcta y despues no lee el cambio de estado del pin que va al boton se queda ahi.

Tambien he intentado hacerlo en otro void y no ha funcionado, espero me puedan ayudar.

Saludosy gracias

Este es el codigo:

#include <Password.h> //Incluimos la libreria Password
#include <Keypad.h> //Incluimos la libreria Keypad
#include <LiquidCrystal.h>  //Incluimos la libreria LiquidCrystal

Password password = Password("1A2B3");  //Definimos el Password
int dlugosc = 5;                        //Largo del Password

LiquidCrystal lcd(A0, A1, A2, A3, A4, A5); //Definimos los pines del LCD

int ledRed = 11; 
int ledGreen = 13;

int encender = 0;
int anterior = 0;
int contador = 0;
int estadoactual;
int estadoanterior = 0;

int ilosc; //Numero de Clicks

const byte ROWS = 4; // Cuatro Filas
const byte COLS = 4; // Cuatro Columnas

// Definimos el Keymap
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};

byte rowPins[ROWS] = { 9,8,7,6 };// Conectar los keypads ROW1, ROW2, ROW3 y ROW4 a esos Pines de Arduino.
byte colPins[COLS] = { 5,4,3,2, };// Conectar los keypads COL1, COL2, COL3 y COL4 a esos Pines de Arduino.

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup()
{
Serial.begin(9600);
keypad.addEventListener(keypadEvent);  
pinMode(ledRed, OUTPUT);  
pinMode(ledGreen, OUTPUT);


digitalWrite(ledRed, HIGH);
digitalWrite(ledGreen, LOW);

pinMode(10, INPUT);
pinMode(12, OUTPUT);




lcd.begin(16, 2);

lcd.setCursor(0,0);
lcd.print("  *Bienvenido*");
lcd.setCursor(0,1);
lcd.print("FAVOR ENTRE PIN");
}

void loop()
{
keypad.getKey();
}
void keypadEvent(KeypadEvent eKey)
{
switch (keypad.getState())
{
  case PRESSED:
 


Serial.print("Pressed: ");
Serial.println(eKey);

switch (eKey)
{
/*
case '#':
break;

case '*':
break;
*/

default:
ilosc=ilosc+1;
password.append(eKey);
}
//Serial.println(ilosc);

if(ilosc == 1)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("   < PIN >");
lcd.setCursor(0,1);
lcd.print("*_");
}
if(ilosc == 2)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("   < PIN >");
lcd.setCursor(0,1);
lcd.print("**_");
}
if(ilosc == 3)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("   < PIN >");
lcd.setCursor(0,1);
lcd.print("***_");
}
if(ilosc == 4)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("   < PIN >");
lcd.setCursor(0,1);
lcd.print("****_");
}
if(ilosc == 5)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("   < PIN >");
lcd.setCursor(0,1);
lcd.print("*****_");
}
if(ilosc == 6)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("   < PIN >");
lcd.setCursor(0,1);
lcd.print("******_");
}
if(ilosc == 7)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("   < PIN >");
lcd.setCursor(0,1);
lcd.print("*******_");
}
if(ilosc == 8)
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print("   < PIN >");
lcd.setCursor(0,1);
lcd.print("********");
}

if(ilosc == dlugosc)
{
delay(250);
checkPassword();
ilosc = 0;
}
}
}

void checkPassword()
{
if (password.evaluate())
{
 ilosc = 0;
  password.reset();
  
  Serial.println("Correcto");    

  digitalWrite(ledRed, LOW);
  digitalWrite(ledGreen, HIGH);

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("<<PIN CORRECTO>>"); 
   lcd.setCursor(0,1);
  lcd.print("PRESIONAR BN ON");     

 

estadoactual = digitalRead(10);
// if(estado == HIGH){
if (estadoanterior != estadoactual)
{
contador++;
int validarPar = contador % 2;
 if (validarPar == 1)
 {
 //do
  if(estadoactual == HIGH)
 {digitalWrite(12, HIGH);
 delay(2000);
  digitalWrite(12, LOW);
  }
 // while(estadoactual == HIGH);
   //do
 //{digitalWrite(12, LOW);
  
  //}
  //while(estadoactual == LOW);
  
  else {
    digitalWrite(12, LOW);
    }
 } 
estadoanterior=estadoactual;
}
}  
else  
{

  ilosc = 0;  
  password.reset();

  Serial.println("Error");

  digitalWrite(ledGreen, LOW);
  digitalWrite(ledRed, HIGH);    
           
  lcd.clear();
  lcd.setCursor(0,1);
  lcd.print("<<PIN ERRONEO>>");
  delay(2000);
 
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("  *Bienvenido*");
  lcd.setCursor(0,1);
  lcd.print("FAVOR ENTRE PIN");    
}
}