Problema con Ascensor de 3 pisos con un Motor DC

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.

Sube por favor en formato .zip como adjunto la simulacion de Proteus para poder ayduarte.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.