Contraseña que permita usar un botton instalado en un circuito.

Saludos.

Tengo un proyecto de un sistema de control de acceso para un elevador, el cual al marcar una contraseña me debe permitir subir al piso de cualquier boton que presione (En este caso tres botones simulando 3 pisos), pero no funciona correctamente y creo que es por el codigo, no se que deberia añadirle.

Problema: puedo presionar un boton cualquiera y sube a cualquier piso sin necesidad de colocar la contraseña.

Que necesito: saber que debo cambiar del codigo para que no funcione el boton si la contraseña no ha sido introducida.

#include <Password.h>
#include <Keypad.h>

#define E1 10     // activa el Pin para motor 
#define I1 8     // Control pin 1 para motor 
#define I2 9     // Control pin 2 para motor 
#define P1 2     // Control pin pulsador primera planta 
#define P2 3     // Control pin pulsador segunda planta
#define P3 4     // Control pin pulsador tercera planta 

#define I2C_ADDR          0x27   
#define En_pin             2
#define Rw_pin             1
#define Rs_pin             0
#define D4_pin             4
#define D5_pin             5
#define D6_pin             6
#define D7_pin             7

int buzzer = 7;
int relay = 6;
const int buttonPin = 5;
int buttonState = 0;
Password password = Password( "1654" );
const byte ROWS = 4; // Four rows
const byte COLS = 4; // Four columns
// Define the Keymap
char keys[ROWS][COLS] = {
  {'1','2','3','A',},
  {'4','5','6','B',},
  {'7','8','9','C',},
  {'*','0','#','D',}
};
// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte rowPins[ROWS] = {
 12, 13, A5, A4}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {
 A3, A2, A1, A0};

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

int threshold = 10; //valor a partir del cual el sensor actua

int PULSADOR_1 = 0; //variables para controlar el estado de los pulsadores de cada planta
int PULSADOR_2 = 0;
int PULSADOR_3 = 0;

int plantaActual=3; //definimos la planta actual donde comienza el ascensor

void setup()
  {
      Serial.begin(9600);
       pinMode( E1, OUTPUT);//MOTOR
      
       pinMode( I1, OUTPUT);//MOTOR
       pinMode( I2, OUTPUT);//MOTOR
       
       pinMode(P1, INPUT);//PULSADOR
       pinMode(P2, INPUT);//PULSADOR
       pinMode(P3, INPUT);//PULSADOR
       pinMode(buttonPin, INPUT);
       pinMode(relay, OUTPUT);
       pinMode(buzzer, OUTPUT);
       digitalWrite(relay, HIGH); 
       Serial.begin(9600);
       keypad.addEventListener(keypadEvent); 
       keypad.setDebounceTime(100); 
  }
void loop()
  {    
       PULSADOR_1=digitalRead(2); //lee el estado del pin 2 asignado para la planta primera
       PULSADOR_2=digitalRead(3); //lee el estado del pin 3 asignado para la planta segunda
       PULSADOR_3=digitalRead(4); //lee el estado del pin 4 asignado para la planta tercera
       keypad.getKey();
       buttonState = digitalRead(buttonPin);
       if (buttonState == HIGH) {
       }

       if(PULSADOR_1==HIGH) //si se pulsa el boton de la primera planta
       {
         if(plantaActual==2) // y la planta actual es la segunda, el ascensor baja
         {
           Serial.print("PLANTA ACTUAL ES 2\n");
           digitalWrite(E1, HIGH);     // Activamos Motor
       
           digitalWrite(I1, LOW);     // Arrancamos para BAJAR
           digitalWrite(I2, HIGH);
           delay(5000); //tiempo de bajada del ascensor de la planta 2 a la planta 1

           digitalWrite(E1, LOW);      // Paramos Motor 
           
           plantaActual=1; //como hemos pulsado el pulsador de la planta primera, la planta actual es la primera
           
         }
         if(plantaActual==3) //si esta la cabina en la planta tercera el ascensor baja mas timempo
         {
           Serial.print("PLANTA ACTUAL ES 3\n");
           digitalWrite(E1, HIGH);     // Activamos Motor
       
           digitalWrite(I1, LOW);     // Arrancamos para BAJAR
           digitalWrite(I2, HIGH);
           delay(10000); //tiempo de bajada del ascensor de la planta 3 a la planta 1

           digitalWrite(E1, LOW);      // Paramos Motor

           plantaActual=1; //como hemos pulsado el pulsador de la planta primera, la planta actual es la primera
         }
       }
       else if(PULSADOR_2==HIGH) //si pulsamos el boton de la planta segunda
       {
         
         if(plantaActual==1) //y la planta actual es la primera
         {
           Serial.print("PLANTA ACTUAL ES 1\n");
           digitalWrite(E1, HIGH);     // Activamos Motor
       
           digitalWrite(I1, HIGH);     // Arrancamos para SUBIR
           digitalWrite(I2, LOW);
           delay(5000); //tiempo para subir el ascensor de la planta 1 a la planta 2

           digitalWrite(E1, LOW);      // Paramos Motor

           plantaActual=2; //ahora la planta actual es la segunda
           
         }
         if(plantaActual==3) //y la planta actual es la tercera
         {
           Serial.print("PLANTA ACTUAL ES 3\n");
           digitalWrite(E1, HIGH);     // Activamos Motor
       
           digitalWrite(I1, LOW);     // Arrancamos para BAJAR
           digitalWrite(I2, HIGH);
           delay(5000); //tiempo para bajar el ascensor de la planta 3 a la planta 2
     
           digitalWrite(E1, LOW);      // Paramos Motor

           plantaActual=2; //ahora la planta actual es la segunda
         }

       }
       else if(PULSADOR_3==HIGH) //si pulsamos el boton de la tercera planta
       {
         Serial.print("ENTRO EN PULSADOR 3 \n");
         if(plantaActual==2)// y la planta actual es la segunda
         {
           Serial.print("PLANTA ACTUAL ES 2\n");
           digitalWrite(E1, HIGH);     // Activamos Motor
       
           digitalWrite(I1, HIGH);     // Arrancamos para SUBIR
           digitalWrite(I2, LOW);
           delay(5000); //tiempo para subir de la segunda planta a la tercera

           digitalWrite(E1, LOW);      // Paramos Motor 

           plantaActual=3; //ahora la planta actual es la tercera
           
         }
         if(plantaActual==1) //y la planta actual es la primera
         {
           Serial.print("PLANTA ACTUAL ES 1\n");
           digitalWrite(E1, HIGH);     // Activamos Motor
       
           digitalWrite(I1, HIGH);     // Arrancamos para SUBIR
           digitalWrite(I2, LOW);
           delay(10000); //tiempo para subir de la primera planta a la tercera

           digitalWrite(E1, LOW);      // Paramos Motor
           
           plantaActual=3; //ahora la planta actual es la tercera
         }
       }

  }
  void keypadEvent(KeypadEvent eKey){
         switch (keypad.getState()){
         case PRESSED:
         digitalWrite(buzzer, HIGH);
         delay(100);
         digitalWrite(buzzer, LOW);
         switch (eKey){
         case 'A': guessPassword(); break;
         
         default:
         password.append(eKey);
         }
   }
 }
 void guessPassword(){
   if (password.evaluate()){
   digitalWrite(relay, LOW); 
   delay(10000);
   digitalWrite(relay, HIGH);
   password.reset(); 
   }
   else{
       digitalWrite(relay, HIGH);
       password.reset(); 
       delay(3000);
   }
}

prototipo_bb_opt.jpg