Tengo que realizar un ascensor de 3 pisos, cada uno con 1 boton y 1 final de carrera, además añadir un motor DC con 2 relay, para que muestre la subida y la bajada del ascensor, junto con un display LCD que diga en que piso está.
Este es mi código, no logro hacerlo funcionar..
#include <LiquidCrystal_I2C.h>
#define LlamadaPlantaBaja 2 // Control pin pulsador primera planta
#define LlamadaPrimerPiso 3 // Control pin pulsador segunda planta
#define LlamadaSegundoPiso 4 // Control pin pulsador tercera planta
#define FcPlantaBaja 5 // Control pin sensor primera planta
#define FcPrimerPiso 6 // Control pin sensor segunda planta
#define FcSegundoPiso 7 // Control pin sensor tercera planta
#define PuertaPlantaBaja 8 // LLaves switch que detectan las puertas abiertas
#define PuertaPrimerPiso 9
#define PuertaSegundoPiso 10
#define ContactorSube 11
#define ContactorBaja 12
#define I2C_ADDR 0x27 // Dirección de comunicación I2C del módulo con el chip PCF8574T
LiquidCrystal_I2C lcd(I2C_ADDR, 16, 2);
int PULSADOR_1 = 0; //variables para controlar el estado de los pulsadores de cada planta
int PULSADOR_2 = 0;
int PULSADOR_3 = 0;
int SENSOR_1;
int SENSOR_2;
int SENSOR_3;
void setup()
{
Serial.begin(9600);
pinMode(ContactorSube, OUTPUT);//MOTOR
pinMode(ContactorBaja, OUTPUT);//MOTOR
pinMode(LlamadaPlantaBaja, INPUT);//PULSADOR
pinMode(LlamadaPrimerPiso, INPUT);//PULSADOR
pinMode(LlamadaSegundoPiso, INPUT);//PULSADOR
pinMode(FcPlantaBaja, OUTPUT);//SENSOR
pinMode(FcPrimerPiso, OUTPUT);//SENSOR
pinMode(FcSegundoPiso, OUTPUT);//SENSOR
}
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
SENSOR_1=digitalRead(5); //lee el estado del pin 5 asignado para la planta primera
SENSOR_2=digitalRead(6); //lee el estado del pin 6 asignado para la planta segunda
SENSOR_3=digitalRead(7); //lee el estado del pin 7 asignado para la planta tercera
if(digitalRead(PULSADOR_1)==HIGH) //si se pulsa el boton de la primera planta
{
if(digitalRead(SENSOR_2)==LOW) // y la planta actual es la segunda, el ascensor baja
{
digitalWrite(ContactorSube, LOW); // Arrancamos para BAJAR
digitalWrite(ContactorBaja, HIGH);
delay(900); //tiempo de bajada del ascensor de la planta 2 a la planta 1
digitalWrite(FcPlantaBaja, LOW); //como hemos pulsado el pulsador de la planta primera, la planta actual es la primera
digitalWrite(FcPrimerPiso, HIGH);
}
else(digitalRead(SENSOR_3)==LOW); //si esta la cabina en la planta tercera el ascensor baja mas timempo
{
digitalWrite(ContactorSube, LOW); // Arrancamos para BAJAR
digitalWrite(ContactorBaja, HIGH);
delay(1800); //tiempo de bajada del ascensor de la planta 3 a la planta 1
digitalWrite(FcPlantaBaja, LOW); //como hemos pulsado el pulsador de la planta primera, la planta actual es la primera
digitalWrite(FcSegundoPiso, HIGH);
}
lcd.setCursor(0,0);
lcd.print("PLANTA ACTUAL[0]");
digitalWrite(PuertaPlantaBaja, LOW);
}
if(digitalRead(PULSADOR_2)==HIGH) //si pulsamos el boton de la planta segunda
{
if(digitalRead(SENSOR_1)==LOW) //y la planta actual es la primera
{
digitalWrite(ContactorSube, HIGH); // Arrancamos para SUBIR
digitalWrite(ContactorBaja, LOW);
delay(900); //tiempo para subir el ascensor de la planta 1 a la planta 2
digitalWrite(FcPrimerPiso, LOW); //ahora la planta actual es la segunda
digitalWrite(FcPlantaBaja, HIGH);
}
else(digitalRead(SENSOR_3)==LOW); //y la planta actual es la tercera
{
digitalWrite(ContactorSube, LOW); // Arrancamos para BAJAR
digitalWrite(ContactorBaja, HIGH);
delay(900); //tiempo para bajar el ascensor de la planta 3 a la planta 2
digitalWrite(FcPrimerPiso, LOW); //ahora la planta actual es la segunda
digitalWrite(FcSegundoPiso, HIGH);
}
lcd.setCursor(0,0);
lcd.print("PLANTA ACTUAL[1]");
digitalWrite(PuertaPrimerPiso, LOW);
}
if(digitalRead(PULSADOR_3)==HIGH) //si pulsamos el boton de la tercera planta
{
if(digitalRead(SENSOR_2)==LOW)// y la planta actual es la segunda
{
digitalWrite(ContactorSube, HIGH); // Arrancamos para SUBIR
digitalWrite(ContactorBaja, LOW);
delay(900); //tiempo para subir de la segunda planta a la tercera
digitalWrite(FcSegundoPiso, LOW); //ahora la planta actual es la tercera
digitalWrite(FcPrimerPiso, HIGH);
}
else(digitalRead(SENSOR_1)==LOW); //y la planta actual es la primera
{
digitalWrite(ContactorSube, HIGH); // Arrancamos para SUBIR
digitalWrite(ContactorBaja, LOW);
delay(1800); //tiempo para subir de la primera planta a la tercera
digitalWrite(FcSegundoPiso, LOW); //ahora la planta actual es la tercera
digitalWrite(FcPlantaBaja, HIGH);
}
lcd.setCursor(0,0);
lcd.print("PLANTA ACTUAL[2]");
digitalWrite(PuertaSegundoPiso, LOW);
}
}
Agradecería su ayuda.
