Ayuda Proyecto Ascensor (Solucionado) Sketch para quien lo nesecite!!

Bueno dias estoy realizando un proyecto de un ascensor y estoy teniendo una dificultad la cual no encuentro como solucionarla.. Les comento sobre el proyecto..

Es un elevador de tres pisos, funciona con un motor de corriente alterna conectado a dos relé, uno para hacerlo subir y otro para hacerlo descender... asi mismo tiene tres botones en cada planta y dentro del ascensor...

en cada piso se encontraria un sensor infrarrojo (cyn70) para hacer la detencion y la localizacion..

el asunto es que cuando inicio el arduino los dos relé quedan energizados y al presionar el boton para hacer la llamada del ascensor el relé se apaga, al llegar al piso solicitado se enciende... (Funciona al revez) y no logro entender el porque...

les dejo el codigo

const int floor1 = 53;//interruptor de proximidad adjunto sobre PLANTA1
const int floor2 = 51;//interruptor de proximidad adjunto sobre PLANTA2
const int floor3 = 49;//interruptor de proximidad adjunto sobre PLANTA3
const int callbutton1 = 52;//pulsador en el piso 1 y paralelamente el botón para el piso 1 en el ascensor
const int callbutton2 = 50;//pulsador en el piso 1 y paralelamente el botón para el piso 2 en el ascensor
const int callbutton3 = 48;//pulsador en el piso 1 y paralelamente el botón para el piso 3 en el ascensor
const int relayup = 22;//relé que hace subir el ascensor
const int relaydown=24;//relé que hace bajar el ascensor
const int buzzer = 47;//alerta zumbador o parada de alarma
const int poweron=45;

// variables will change:
int callelevator1 = 0; // variable para leer el estado de los pulsadores para los pisos
int callelevator2 = 0; // variable para leer el estado de los pulsadores para los pisos
int callelevator3 = 0; // variable para leer el estado de los pulsadores para los pisos
int floor1sense = 0;   // variable para leer el estado de los sensores de planta
int floor2sense = 0;   // variable para leer el estado de los sensores de planta
int floor3sense = 0;   // variable para leer el estado de los sensores de planta



void setup() 

        {                
          
          // Inicializar las entradas de pines digitales.
          pinMode(floor1, INPUT);   
          pinMode(floor2, INPUT);
          pinMode(floor3, INPUT);
          pinMode(callbutton1, INPUT);
          pinMode(callbutton2, INPUT);
          pinMode(callbutton3, INPUT);

          
         // Inicializar las salidas de pines digitales.
          pinMode(relayup, OUTPUT);
          pinMode(relaydown, OUTPUT);
          pinMode(buzzer, OUTPUT);
          
        }



void loop() 


        {
            digitalWrite(poweron, HIGH);
            // Leer el estado del valor pulsadores
            callelevator1 = digitalRead(callbutton1);
            callelevator2 = digitalRead(callbutton2);
            callelevator3 = digitalRead(callbutton3);
            // Leer el estado del valor de los sensores
            floor1sense = digitalRead(floor1);
            floor2sense = digitalRead(floor2);
            floor3sense = digitalRead(floor3);

            
            
            
            
            if (callelevator1 == HIGH)// si se pulsa el botón de llamada de piso 1
           
                    {     
                      delay(200);// software de rebote del botón 
                      while(callelevator1 == HIGH)
                             {
                             callelevator1 = digitalRead(callbutton1);// comprobar el valor de nuevo el botón
                             delay(10);// mantener funcionando sin problemas
                             }// esperar a la liberación del botón para continuar
                      delay(1000);
                      floor1function();// ir a la función de la planta 1 del ascensor
                    } 
            
            
            else if(callelevator2 == HIGH)
                    
                    {
                      delay(200); 
                      while(callelevator2 == HIGH)
                          {
                          callelevator2 = digitalRead(callbutton2);
                          delay(10);
                          }
                      delay(1000);
                      floor2function();
                    }
          
           else if(callelevator3 == HIGH)
                    
                    {
                      delay(200); 
                      while(callelevator3 == HIGH)
                        {
                        callelevator3 = digitalRead(callbutton3);
                        delay(10);
                        }
                      delay(1000);
                      floor3function();
                    }
           
            
                      
          digitalWrite(relayup, LOW); // mantener el relé durante un máximo de movimiento inactivo
          digitalWrite(relaydown, LOW); // mantener el relé para el movimiento hacia abajo inactiva
          digitalWrite(buzzer, LOW);// mantener el timbre bastane
                      
         
           
           
          delay(10);// alguno retardo sólo para mantener funcionando sin problemas
            
        }


void floor1function()
       
       
       
        {
    
                     if(floor1sense  != HIGH) // Comprobar el sensor de proximidad del primer piso para ver si el ascensor está allí
                    
                              {// si el ascensor no está allí lo llaman
                                
                                while( floor1sense==LOW) //compruebe que la proximidad de la primera planta es baja
                                  // el motor comienza y se detiene cuando la proximidad piso apropiado dar la señal
                                    {
                                    digitalWrite(relaydown, HIGH);// manejar el ascensor
                                    digitalWrite(buzzer, HIGH);
                                    floor1sense = digitalRead(floor1);
                                    delay(10);// algun retardo para mantener funcionando la rutina sin problemas
                                    }
                                    
                              }
       
             
        }



void floor2function()
        
        
        
        {
                           

                            
                            if(floor3sense  == HIGH) 
                          
                                               {
                                                
                                                while( floor2sense==LOW)
                                                 
                                                    {
                                                    digitalWrite(relaydown, HIGH);
                                                    digitalWrite(buzzer, HIGH);
                                                    floor2sense = digitalRead(floor2);
                                                    delay(10);
                                                    }
                                                 
     
                                               }
                              
                              
                              
                              
                              else if(floor1sense  == HIGH)
                    
                                              {
                                                
                                                while( floor2sense==LOW)
                                                 
                                                    {
                                                    digitalWrite(relayup, HIGH);
                                                    digitalWrite(buzzer, HIGH);
                                                    floor2sense = digitalRead(floor2);
                                                    delay(10);
                                                    }

                                                    
                                              }
     
        }



void floor3function()
        
        
        
        {
                         
                           if(floor2sense  == HIGH || floor1sense  == HIGH) 
                                    
                                              {
                                                
                                                while( floor3sense==LOW) 
                                                 
                                                    {
                                                    digitalWrite(relayup, HIGH);
                                                    digitalWrite(buzzer, HIGH);
                                                    floor3sense = digitalRead(floor3);
                                                    delay(10);
                                                    }

                                              }
                     
        }

Ya esta resuelto!!!

Bien, entonces dos cosas:

  1. Ponle solucionado a tu titulo
  2. comparte la solución.
    A muchos nos pasa que consultamos algo y encontramos la solución luego de explicarlo.
    Te vas a reir, pero yo le explico a mi madre el problema. COmo tengo que bajar el nivel a algo que no resulte técnico, siempre o casi siempre me surge una idea de por donde resolverlo.

El problema se encontraba en digitalWrite(relaydown, HIGH);

y la solucion era digitalWrite(relaydown, LOW);

osea el problema se me soluciono pero no le veo de porque a la logica... por eso no comente la solucion porque puede ser dependiendo lo que se use con estado alto le funcione a la perfeccion pero en estado bajo no.... Saludos y espero que les sirva!

Ahh tienes lógica inversa en tus Relés?

Hola me podrías compartir tu proyecto, estoy fabricando uno con las mismas características pero de 4 niveles. Gracias

Hola@Oscarsomo no DEBES revivir hilos viejos, este es del 2015!!
Si lees una advertencia en letras rojas justamente es para no hacerlo.
No todos los hilos fueron cerrados porque la mayoría de las personas viene, pregunta y se va cuando consigue o no lo que busca y no respeta las normas como sin querer has hecho tu.
Ahora crea un hilo nuevo pero no en esta sección, sino en Software.
Lee las normas del foro y tmb puedes leer otros hilos para saber cómo debes manejarte.
Gracias