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);
}
}