Proyecto ascensor 5 pisos

Hola como andan?,tengo un problema y no se como solucionarlo.
mi problema es que nose como unir 2 codigos de arduino(el motor paso a paso y el funcionamiento del ascensor) en 1 solo y solicitaria por favor si me pueden dar una mano en como unir los codigos.

codigo del motor:

#include <Stepper.h>
                              //create an instance of the stepper class.
                              //First specifying the number of steps of the motor,
                              //then specifying the pins number whish de stepper is connected
Stepper myStepper1(200, 8, 9, 10, 11);
void setup() {
}
void loop() {
  myStepper1.setSpeed(150);   // Sets the motor speed
  myStepper1.step(200);       // Turns the motor a specific number of steps,
  delay(100);
  myStepper1.step(-200);      // Turns the motor a specific number of steps
                              //reverse direccion,
  delay(100);
}

codigo ascensor:

#include <EEPROM.h>
const int a = 2;///primer disp
const int b = 3;
const int c = 4;
const int d = 5;

const int e = 6;/// segundo disp
const int f = 7;
const int g = 8;
const int h = 9;

const int SW1 = A0; ///SW ---->> Significa interruptor piso 1
const int SW2 = A1; 
const int SW3 = A2;
const int SW4 = A3;
const int SW5 = A4;
const int CNY70 = A5;

const int Subir = 13;
const int Bajar = 12;

int entrada1 = 0; ///declaro las variables de entrada digital
int entrada2 = 0;
int entrada3 = 0;
int entrada4 = 0;
int entrada5 = 0;
int pisoActual = 0;
int piso = pisoActual;

int sensor = 0;  //declaro la variable del  sensor

void setup() {
   Serial.begin(4800);
  pinMode(a, OUTPUT);//// declaro los pines a,b,c,d,etc como salidas
  pinMode(b, OUTPUT);
  pinMode(c, OUTPUT);
  pinMode(d, OUTPUT);
  pinMode(e, OUTPUT);
  pinMode(f, OUTPUT);
  pinMode(g, OUTPUT);
  pinMode(h, OUTPUT);
  pinMode(Subir, OUTPUT);
  pinMode(Bajar, OUTPUT);
  
  pinMode(SW1, INPUT); //// declaro los SWcomo entradas
  pinMode(SW2, INPUT);
  pinMode(SW3, INPUT);
  pinMode(SW4, INPUT);
  pinMode(SW5, INPUT);
  
  pinMode(CNY70, INPUT); //declaro en pin A5(CNY70) como entrada
  
 digitalWrite(Subir, LOW);
 digitalWrite(Bajar, LOW);
Serial.println(EEPROM.read(0));
}

void loop() { 
if(EEPROM.read(0)==255){
pisoActual=1;
piso=1;
EEPROM.write(0,1);
display1(pisoActual);
display2(pisoActual);
Serial.println(EEPROM.read(0));
}else{
display1(pisoActual);
display2(pisoActual);
}
 entrada1 = digitalRead(SW1);//// Asigno los sw a las variables entrada y le digo que las lea como 1 y 0
 entrada2 = digitalRead(SW2);
 entrada3 = digitalRead(SW3);
 entrada4 = digitalRead(SW4);
 entrada5 = digitalRead(SW5);

 if(entrada1==HIGH){
   while(entrada1==HIGH){entrada1 = digitalRead(SW1);}
   display1(1);
   piso=1;
   if(pisoActual!=piso){
      MoverAscensor(piso);
   }
 }else if(entrada2==HIGH){
   while(entrada2==HIGH){entrada2 = digitalRead(SW2);}
   display1(2);
   piso=2;
   if(pisoActual!=piso){
      MoverAscensor(piso);
   }
 }else if(entrada3==HIGH){
   while(entrada3==HIGH){entrada3 = digitalRead(SW3);}
   display1(3);
   piso=3;
   if(pisoActual!=piso){
      MoverAscensor(piso);
   }
 }else if(entrada4==HIGH){
   while(entrada4==HIGH){entrada4 = digitalRead(SW4);}
   display1(4);
   piso=4;
   if(pisoActual!=piso){
      MoverAscensor(piso);
   }
 }else if(entrada5==HIGH){
   while(entrada5==HIGH){entrada5 = digitalRead(SW5);}
   display1(5);
   piso=5;
   if(pisoActual!=piso){
      MoverAscensor(piso);
   }
 }
}
int pisoSubir=0;
int i = 0;
void MoverAscensor(int nuevoPiso){
   pisoSubir = nuevoPiso - pisoActual;
   // +  +  + "-" + 
   Serial.print("Me movere ");
   Serial.print(pisoSubir);
   Serial.println(" pisos.");
   if(nuevoPiso > pisoActual){
      digitalWrite(Subir, HIGH);
      digitalWrite(Bajar, LOW);
      i=0;
      while(i < pisoSubir){
	 Serial.println("Subiendo...");
	 sensor = digitalRead(CNY70); // Asigno a la variable sensor es estado de la entrada del CNY70
	 if(sensor==HIGH){
	    //while(digitalRead(CNY70)==HIGH){}
	    pisoActual++;
	    EEPROM.write(0,pisoActual);
	    i=i+1;
	    delay(350);
	    display2(pisoActual);
	 }
      }
      digitalWrite(Subir, LOW);
      digitalWrite(Bajar, LOW);
   }else if(nuevoPiso < pisoActual){
      digitalWrite(Subir, LOW);
      digitalWrite(Bajar, HIGH);
      i=0;
      while(i > pisoSubir){
	 Serial.println("Bajando...");
	 sensor = digitalRead(CNY70); // Asigno a la variable sensor es estado de la entrada del CNY70
	 if(sensor==HIGH){
	    //while(digitalRead(CNY70)==HIGH){}
	    pisoActual--;
	    EEPROM.write(0,pisoActual);
	    i=i-1;
	    delay(350);
	    display2(pisoActual);
	 }
      }
      digitalWrite(Subir, LOW);
      digitalWrite(Bajar, LOW);
   }
}

void display1(int numero) {
  switch (numero) {
    case 1:
      digitalWrite(d, LOW);
      digitalWrite(c, LOW);
      digitalWrite(b, LOW);
      digitalWrite(a, HIGH);
    break;
    case 2:
      digitalWrite(a, LOW);
      digitalWrite(b, HIGH);
      digitalWrite(c, LOW);
      digitalWrite(d, LOW);;
    break;
    case 3:
      digitalWrite(a, HIGH);
      digitalWrite(b, HIGH);
      digitalWrite(c, LOW);
      digitalWrite(d, LOW);
    break;
    case 4:
      digitalWrite(a, LOW);
      digitalWrite(b, LOW);
      digitalWrite(c, HIGH);
      digitalWrite(d, LOW);
    break;
    case 5:
      digitalWrite(a, HIGH);
      digitalWrite(b, LOW);
      digitalWrite(c, HIGH);
      digitalWrite(d, LOW);
    break;
  }
}

void display2(int numero) {
  switch (numero) {
    case 1:
      digitalWrite(e, HIGH);
      digitalWrite(f, LOW);
      digitalWrite(g, LOW);
      digitalWrite(h, LOW);

    break;
    case 2:
      digitalWrite(e, LOW);
      digitalWrite(f, HIGH);
      digitalWrite(g, LOW);
      digitalWrite(h, LOW);;
    break;
    case 3:
      digitalWrite(e, HIGH);
      digitalWrite(f, HIGH);
      digitalWrite(g, LOW);
      digitalWrite(h, LOW);
    break;
    case 4:
      digitalWrite(e, LOW);
      digitalWrite(f, LOW);
      digitalWrite(g, HIGH);
      digitalWrite(h, LOW);
    break;
    case 5:
      digitalWrite(e, HIGH);
      digitalWrite(f, LOW);
      digitalWrite(g, HIGH);
      digitalWrite(h, LOW);
    break;
  }
}

Moderador:
Por favor, lee las Normas del foro y edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado, lo cortas y click en </>


@fedex214
¿Es esto un ascensor real o un juguete?
Tenga en cuenta que los productos arduino no están destinados para su uso en diseños que puedan afectar la seguridad de las personas.
Y dado el hecho de que claramente no tienes experiencia en programación, esto es aún más peligroso.

@b707 es un prototipo de un ascensor para presentar a una escuela(un juguete) esto no esta habilitado para que una persona lo utilice ni nada, es mi proyecto para presentarlo a los profesores, y el único inconveniente es el código

Ahora que se lee correctamente el código y te agradezco por hacerlo visible para nosotros y agregar identacion (sangría), yo puedo responder.

if(sensor==HIGH){
	    //while(digitalRead(CNY70)==HIGH){}
	    pisoActual++;
	    EEPROM.write(0,pisoActual);
	    i=i+1;
	    delay(350);
	    display2(pisoActual);
	 }

Sin ver el contexto del código te hago dos observaciones.

  1. delay(350) dentro de un ascensor es un gran error. No pidas que luego el ascensor se pase por alto un reed switch o un microswitch fin de carrera por esos 350mseg y por otros mas en el código.
  2. Grabar en la EEPROM a cada momento cada vez que un interruptor se pone en 0 lleva indefectiblemente a que en algun momento entre 100mil y otros tantos cientos de miles de ciclos te quedes sin EEPROM en esa direccion.
    Se debe usar EEPROM.write con moderación.
    Dicho esto analizo tu código.

Te recomiendo que vayas a docmentación y leas dos cosas

  1. Máquina de estados.
  2. millis()

Del 2do tema hay muchos hilos o tutoriales. Todos muy buenos.

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