Se activan las entradas solas sin tener señal

Hola.

Estoy programando un código que cuando entre una señal de 5Vdc en el pin 9 haga una cosa y cuando entre una señal en el pin 10 otra distinta.

el caso es que tengo la rutina parada y cuando introduxco un hilo en cualquiera de estos pines empieza e ejecutarse. (Cuado digo un hilo, es sin tenerlo conectado a nada, por lo que no hay tensión ni retornos ni nada.

ahi va el código:

//Recordar que los reles se activan con nivel BAJO (0)
 
#define RELAY_ON 0    
#define RELAY_OFF 1
#define BOTON_D_ON 1
#define BOTON_D_OFF 0
#define BOTON_U_ON 1
#define BOTON_U_OFF 0
int inPin_D = 9; // pin de entrada botón bajar
int inPin_U = 10; // pin de entrada botón subir
int cont = 0;
void setup () {
 
  //Inicialización
  
  //Asegurar nivel ALTO en cada entrada de rele
  digitalWrite (3, RELAY_OFF);
  digitalWrite (4, RELAY_OFF);
  digitalWrite (5, RELAY_OFF);
  digitalWrite (6, RELAY_OFF);
  
  //Definir los pines como salida
  pinMode (3, OUTPUT);
  pinMode (4, OUTPUT);
  pinMode (5, OUTPUT);
  pinMode (6, OUTPUT);
  pinMode (7, INPUT);
  pinMode (8, INPUT);
  pinMode (inPin_D, INPUT);
  pinMode (inPin_U, INPUT);
}
 
void loop (){
 { (digitalWrite (3, RELAY_ON));
 }
 
  if (digitalRead(inPin_D) == 1){
  
  if (cont <12);{
  delay (500);
  digitalWrite (3, RELAY_OFF);
  delay (1000);
  digitalWrite (4, RELAY_ON);
  delay (200);  
  digitalWrite (4, RELAY_OFF);     //Activa relé 
  delay (600);
  digitalWrite (4, RELAY_ON);    //Desactiva relé 2
  delay (200);
  digitalWrite (4, RELAY_OFF);    //Desactiva relé 1
  delay (500);
  cont = cont +1;}


  }}

¿Cúal puede ser mi problema?

Por cierto estoy trabajando con una ARDUINO UNO.

Gracias.

Y porqué planteas la consulta en hardware si estas preguntado sobre software?
Tópico movido.

Creo que te falta resistencia de PULLUP o PULLDOWN entre la entrada y gnd.

surbyte:
Y porqué planteas la consulta en hardware si estas preguntado sobre software?
Tópico movido.

Cierto,lo siento.

Fallo mio.

@ACADCOM te pido que leas nuevamente las normas, porque hay partes que no has comprendido.
Cuando planteas una pregunta o consulta, no puedes abrir otro hilo haciendo una consulta levemente diferente, eso se considera doble posteo y puede ocasionar sanciones para ti o traducido un tiempo en que no puedas ingresar al foro.
Te digo esto para que lo tengas en cuenta.

Ahora bien. Borré tu segundo hilo porque preguntas exactamente lo mismo que aquí.

Estoy programando un código que cuando entre una señal de 5Vdc en el pin 9 haga una cosa y cuando entre una señal en el pin 10 otra distinta.

Tu código para comenzar esta desordenado. No tiene sangría y usas llaves excesivas con la suposición de que las cosas se ejecutan de un modo y lo estan haciendo de otro.
Este es tu loop ordenado y como debieras haberlo presentado.

void loop () {
    digitalWrite (3, RELAY_ON);
 
    if (digitalRead(inPin_D) == 1) {
        if (cont <12);{
            delay (500);
            digitalWrite (3, RELAY_OFF);
            delay (1000);
            digitalWrite (4, RELAY_ON);
            delay (200); 
            digitalWrite (4, RELAY_OFF);     //Activa relé
            delay (600);
            digitalWrite (4, RELAY_ON);    //Desactiva relé 2
            delay (200);
            digitalWrite (4, RELAY_OFF);    //Desactiva relé 1
            delay (500);
            cont = cont +1;
        }
    }
}

Estas hablando de hacer dos cosas o responder a entradas cuando tu loop comienza activando el RELE del pin3 en todo momento de modo que siempre lo tendras en ON y luego depende el estado de las entradas responderá al resto de tu programación. Esto básicamente es una mala programación.
O esta en ON o hace una secuencia en respuesta a una entrada pero las dos cosas no.

Tu setup() tmb esta mal porque defines estados de los reles pero lo haces antes de definir la condición del pin si será entrada o salida.
Tu setup debe ser así

void setup () {
  //Inicialización
  //Definir los pines como salida
  pinMode (3, OUTPUT);
  pinMode (4, OUTPUT);
  pinMode (5, OUTPUT);
  pinMode (6, OUTPUT);
  //Definir los pines como entrada
  pinMode (7, INPUT);
  pinMode (8, INPUT);
  pinMode (inPin_D, INPUT);
  pinMode (inPin_U, INPUT);
  //Asegurar nivel ALTO en cada entrada de rele
  digitalWrite (3, RELAY_OFF);
  digitalWrite (4, RELAY_OFF);
  digitalWrite (5, RELAY_OFF);
  digitalWrite (6, RELAY_OFF);
}

Aunque no se que quieres hacer como ejemplo he quitado el accionamiento contínuo del RELE del pin3 por lo mismo pero cuando recibe una entrada en la entrada inPin_U

void loop () {
    if (digitalRead(inPin_U) == 1) {
        digitalWrite (3, RELAY_ON);
    }
    if (digitalRead(inPin_D) == 1) {
        if (cont <12);{
            delay (500);
            digitalWrite (3, RELAY_OFF);
            delay (1000);
            digitalWrite (4, RELAY_ON);
            delay (200); 
            digitalWrite (4, RELAY_OFF);     //Activa relé
            delay (600);
            digitalWrite (4, RELAY_ON);    //Desactiva relé 2
            delay (200);
            digitalWrite (4, RELAY_OFF);    //Desactiva relé 1
            delay (500);
            cont = cont +1;
        }
    }
}

Lo primero, pedir disculpas de nuevo al haber escrito dos post.
Para ser mis dos primeras entradas al foro, lo estoy haciendo bastante mal. :frowning:

Aunque en lo que se refiere a mi programación parece que lo estoy haciendo bastante peor..... :confused:

Mi proposito es simular el movimiento de la cabina de un ascensor, ya que estoy preparando un simulador con un cuadro de maniobra de un ascensor.

Puesto que no tengo el movimiento de la cabina para que se vea en la maniobra como funcionan el resto de elementos cuando el ascensor se está moviendo, quiero hacer una simulación de cabina virtual mediante unos relés conectados a una ARDUINO UNO.

Para que la maniobra no me de error de posicionamiento, necesito unas señales especificas en cada momento, como por ejemplo el relé 3 debe estar activo antes de empezar la rutina de ARDUINO programada y antes también de que la maniobra del ascensor empiece a funcionar.

De ahi que necesito dos ordenes(subir y bajar) y secuencias distintas de los relés en cada caso.

Lo segundo y no menos importante es dar las gracias a SURBYTE por ordenarme el código.
Después de corregir un poco y probarlo con la maniobra el setup queda así:

 #define RELAY_ON 0
  #define RELAY_OFF 1
  int inPin_D = 7;
  int inPin_U = 8;
  int cont = 0;
void setup () {
  //Inicialización
  //Definir los pines como salida
  
  pinMode (3, OUTPUT);
  pinMode (4, OUTPUT);
  pinMode (5, OUTPUT);
  pinMode (6, OUTPUT);
  //Definir los pines como entrada
  pinMode (7, INPUT);
  pinMode (8, INPUT);
  pinMode (inPin_D, INPUT);
  pinMode (inPin_U, INPUT);
   //Asegurar nivel ALTO en cada entrada de rele
  digitalWrite (3, RELAY_OFF);
  digitalWrite (4, RELAY_OFF);
  digitalWrite (5, RELAY_OFF);
  digitalWrite (6, RELAY_OFF);
}

y el void queda de este modo:

void loop () {
    digitalWrite (3, RELAY_ON);
    digitalWrite (5, RELAY_ON);
    if (digitalRead(inPin_U) == 1) {
        if (cont <11);{
            delay (500);
            digitalWrite (3, RELAY_OFF);
            delay (1000);
            digitalWrite (4, RELAY_ON);
            delay (200);
            digitalWrite (6, RELAY_ON);
            digitalWrite (4, RELAY_OFF);     
            delay (1000);
            digitalWrite (4, RELAY_ON);    
            delay (200);
            digitalWrite (4, RELAY_OFF);    
            delay (1000);
            cont = cont +1;
            while (cont == 11)            
            digitalWrite (6,RELAY_OFF); 
            digitalWrite (3,RELAY_ON);    
                              
            
            
        }        
     
     }
 }

Pero sigue con un error, ya que no me queda despues de la rutina el rele 3 encendido, necesario para que se detenga la maniobra, y en cambio si me apaga el relé 6.

Además aun me falta la segunda parte del programa.

Gracias por la ayuda y espero terminar mi proyecto pronto.

Leere de nuevo las reglas del foro par ver si es posible subir fotos o algún video del proyecto una vez terminado.

Debes ser prolijo al programar
mira esto

 if (cont <11);{

debe ser

 if (cont <11){

Gracias por la corrección.

Si que es cierto que hay que estar pendiente de cada coma y cada llave, etc...
Cuando uno no está acostumbrado a programar suele pasar, espero que en el futuro no se me pasen tantas cosas.

Voy a poner el código completo, ya que no consigo que se ejecute la segunda parte y soy capaz de dar con lo que estoy haciendo mal. He probado varias formas y no doy con la buena.

void loop () {
    digitalWrite (3, RELAY_ON); //Activa señal NL
    digitalWrite (5, RELAY_ON); //Activa señal AFI
    if (digitalRead(inPin_U) == 1) {//Comprueba el estado del contactor de Subida
        if (cont <11);{
            delay (500);
            digitalWrite (3, RELAY_OFF); //Desactiva señal NL
            delay (1000);
            digitalWrite (4, RELAY_ON); //Activa señal P
            delay (200);
            digitalWrite (6, RELAY_ON); //Activa señal AFS
            digitalWrite (4, RELAY_OFF);  //Desactiva la señal P  
            delay (1000);
            digitalWrite (4, RELAY_ON); //Activa la señal P
            delay (200);
            digitalWrite (4, RELAY_OFF); //Desactiva la señal P
            delay (1000);
            cont = cont +1;
              while (cont == 11);{            
              digitalWrite (5,RELAY_OFF); //Desactiva la señal AFI
              digitalWrite (3,RELAY_ON);
        }
     
      }
 
    }
    
    if (digitalRead(inPin_D) == 1) {//Comprueba el estado del contactor de Subida
        if (cont <11);{
            delay (500);
            digitalWrite (3, RELAY_OFF); //Desactiva señal NL
            delay (1000);
            digitalWrite (4, RELAY_ON); //Activa señal P
            delay (200);
            digitalWrite (5, RELAY_ON); //Activa señal AFI
            digitalWrite (4, RELAY_OFF);  //Desactiva la señal P  
            delay (1000);
            digitalWrite (4, RELAY_ON); //Activa la señal P
            delay (200);
            digitalWrite (4, RELAY_OFF); //Desactiva la señal P
            delay (1000);
            cont = cont +1;
            while (cont == 11)            
            digitalWrite (6,RELAY_OFF); //Desactiva la señal AFS
           
        }
      }
    }

Aprovecho para subir una foto del proyecto que me lleva a estas dudas con la programación.
Es el primero en que intento hacer yo el código y no copiar de uno ya hecho, ya que no lo hay para esto, (o no he podido encontrarlo).

Gracias.">