Ascensor de 4 niveles, problemas con if y else if.

Hola buenas tardes, en el desarrollo del codigo para un ascensor de 4 niveles. Se me ha presentado
el inconveniente que con la cabina en el piso 1 se pulsa el boton 3, la luz piloto enciende y el rele de subida tambien pero; al llegar al interruptor de limite del piso 2, el releSubida se desactiva y la luz piloto del piso 3 a la que fue llamado el ascensor no… y solo apaga cuando llega a nivel piso 3.

En el if estan practricamente en paralelo…

else if (limite_1 == LOW && limite_2 == HIGH && limite_3 == HIGH && limite_4 == HIGH
          && pulsador_3 == LOW)
 {
   digitalWrite(piloto_3, LOW);
   digitalWrite(releSubida, LOW);
       
 }

 else if  (limite_3 == LOW)

 {
   digitalWrite(piloto_3, HIGH);
   digitalWrite(releSubida, HIGH);
// Configuramos los pines

const int boton_1 = 2;   // Pines de botones nivel 1 al 4.
const int boton_2 = 3;
const int boton_3 = 4;
const int boton_4 = 5;

const int botonStop = 6;  // Boton de stop.

const int LM_1 = 7;      // Interruptores de limites nivel 1 al 4.
const int LM_2 = 8;
const int LM_3 = 9;
const int LM_4 = 10;


const int piloto_1 = 11;  // luces de indicacion.
const int piloto_2 = 12;
const int piloto_3 = 13;
const int piloto_4 = 14;

const int releSubida = 15; // Contacto de arranque hacia arriba.
const int releBajada = 16; // Contacto de arranque hacia abajo.


void setup()
{
  Serial.begin(9600);  // Iniciamos el monitor serie para resultados.

  digitalWrite(piloto_1, HIGH);  // ponemos los pines de salidas en HIGH
  digitalWrite(piloto_2, HIGH);  // para apagar los rele.
  digitalWrite(piloto_3, HIGH);
  digitalWrite(piloto_4, HIGH);

  digitalWrite(releSubida, HIGH);
  digitalWrite(releBajada, HIGH);


  pinMode(boton_1, INPUT_PULLUP);  // Ponemos los pines de botones de nivel modo de entrada
  pinMode(boton_2, INPUT_PULLUP);  // con resistencias pull-up.
  pinMode(boton_3, INPUT_PULLUP);
  pinMode(boton_4, INPUT_PULLUP);

  pinMode(botonStop, INPUT_PULLUP);  // Boton de bloqueo del ascensor.

  pinMode(LM_1, INPUT_PULLUP);       // Ponemos los pines de interruptores de niveles en modo de entrada
  pinMode(LM_2, INPUT_PULLUP);       // con resistencias pull-up.
  pinMode(LM_3, INPUT_PULLUP);
  pinMode(LM_4, INPUT_PULLUP);

  pinMode(piloto_1, OUTPUT);  // Ponemos los pines de luces de indicacion en modo salida.
  pinMode(piloto_2, OUTPUT);
  pinMode(piloto_3, OUTPUT);
  pinMode(piloto_4, OUTPUT);

  pinMode(releSubida, OUTPUT);  // Rele de subida y bajada en modo salida.
  pinMode(releBajada, OUTPUT);


}

void loop()
{
  int pulsador_1 = digitalRead(boton_1); // Usamos variables, para verificar la lecturas
  int pulsador_2 = digitalRead(boton_2); // de los botones.
  int pulsador_3 = digitalRead(boton_3);
  int pulsador_4 = digitalRead(boton_4);

  int limite_1 = digitalRead(LM_1);     // verificamos la lectura de los inerruptores de limites.
  int limite_2 = digitalRead(LM_2);
  int limite_3 = digitalRead(LM_3);
  int limite_4 = digitalRead(LM_4);


 
  // SI EL ASCENSOR ESTA EN NIVEL 1 Y PULSAMOS EL BOTON 2 SUBE HASTA
  // EL INTERRUPTOR DE LIMITE DEL PISO 2.

  if (limite_1 == LOW && limite_2 == HIGH && limite_3 == HIGH && limite_4 == HIGH
      && pulsador_2 == LOW)
  {
    digitalWrite(piloto_2, LOW);
    digitalWrite(releSubida, LOW);
  }

  else if  (limite_2 == LOW)

  {
    digitalWrite(piloto_2, HIGH);
    digitalWrite(releSubida, HIGH);


  }   // SI EL ASCENSOR ESTA EN NIVEL 1 Y PULSAMOS EL BOTON 3 SUBE HASTA
  // EL INTERRUPTOR DE LIMITE DEL PISO 3.

  else if (limite_1 == LOW && limite_2 == HIGH && limite_3 == HIGH && limite_4 == HIGH
           && pulsador_3 == LOW)
  {
    digitalWrite(piloto_3, LOW);
    digitalWrite(releSubida, LOW);
        
  }

  else if  (limite_3 == LOW)

  {
    digitalWrite(piloto_3, HIGH);
    digitalWrite(releSubida, HIGH);

  }
  // SI EL ASCENSOR ESTA EN NIVEL 1 Y PULSAMOS EL BOTON 4 SUBE HASTA
  // EL INTERRUPTOR DE LIMITE DEL PISO 4.

  else  if (limite_1 == LOW && limite_2 == HIGH && limite_3 == HIGH && limite_4 == HIGH
            && pulsador_4 == LOW)
  {
    digitalWrite(piloto_4, LOW);
    digitalWrite(releSubida, LOW);
     
  } 

  else if  (limite_4 == LOW)

  {
    digitalWrite(piloto_4, HIGH);
    digitalWrite(releSubida, HIGH);
  }

  
  
  // SI EL ASCENSOR ESTA EN NIVEL 2 Y PULSAMOS EL BOTON 1 BAJA HASTA
  // EL INTERRUPTOR DE LIMITE DEL PISO 1.

  if  (limite_1 == HIGH && limite_2 == LOW && limite_3 == HIGH && limite_4 == HIGH
            && pulsador_1 == LOW)
  {
    digitalWrite(piloto_1, LOW);
    digitalWrite(releBajada, LOW);
  }

  else if  (limite_1 == LOW)

  {
    digitalWrite(piloto_1, HIGH);
    digitalWrite(releBajada, HIGH);

 }

  // SI EL ASCENSOR ESTA EN NIVEL 2 Y PULSAMOS EL BOTON 3 SUBE HASTA
  // EL INTERRUPTOR DE LIMITE DEL PISO 3.

  else if  (limite_2 == LOW && limite_1 == HIGH && limite_3 == HIGH && limite_4 == HIGH
            && pulsador_3 == LOW)
  {
    digitalWrite(piloto_3, LOW);
    digitalWrite(releSubida, LOW);
  }

  else if  (limite_3 == LOW)              
  {
    digitalWrite(piloto_3, HIGH);
    digitalWrite(releSubida, HIGH);







  }
}

Veamos como funciona tu código:

Condicion inicial: estamos en el primer piso y pulsamos 3.

He numerado los if para entenderlo mejor

  // ----------  1   ------------
  if (limite_1 == LOW && limite_2 == HIGH && limite_3 == HIGH && limite_4 == HIGH
      && pulsador_2 == LOW)
  {
    digitalWrite(piloto_2, LOW);
    digitalWrite(releSubida, LOW);
  }
  // ----------  2   ------------
  else if  (limite_2 == LOW)

  {
    digitalWrite(piloto_2, HIGH);
    digitalWrite(releSubida, HIGH);


  }  
  // ----------  3   ------------
  else if (limite_1 == LOW && limite_2 == HIGH && limite_3 == HIGH && limite_4 == HIGH
           && pulsador_3 == LOW)
  {
    digitalWrite(piloto_3, LOW);
    digitalWrite(releSubida, LOW);
        
  }
  // ----------  4   ------------
  else if  (limite_3 == LOW)
  {
    digitalWrite(piloto_3, HIGH);
    digitalWrite(releSubida, HIGH);

  }
  // ----------  5   ------------
  else  if (limite_1 == LOW && limite_2 == HIGH && limite_3 == HIGH && limite_4 == HIGH
            && pulsador_4 == LOW)
  {
    digitalWrite(piloto_4, LOW);
    digitalWrite(releSubida, LOW);
    
  }

En un inicio tenemos que entra en (3) encendiendo el piloto y el rele. El motor se pone en marcha, y si no pulsas el boton no pasa por ningun if. Pero al llegar al segundo piso, tenemos que no entra en (1) porque el limite no coincide pero al llegar al (2) El limite si es dos, por lo tanto entra en ese, encendiendo el piloto y apagando el motor.

Estas creando un lio con los if-else-if que es muy dificil de ver.

Te invito a que pases por la sección de documentación y/o busques por internet como hacer una maquina de estados. Por que luego querrás hacer que baje y complicarás el codigo con tanto if.