Comportamiento errático digitalRead

Buenas tardes a todos.

Tengo una prueba sencilla utilizando una placa Arduino UNO, en la cual alimento con 5V del Arduino a una protoboard y del positivo puenteo con 4 cables a los pines de entrada 6,7,8 y 9.

Tengo el código detallado y en la consola imprimo una leyenda según el resultado de la lectura y estoy teniendo resultados erráticos. Como por ejemplo desconectar todos los cable y me de "OK" y sacando de a un cable, a veces funciona y otras no. Estaré errando en algo?

Desde ya muchas gracias

void setup() {
  pinMode(6,INPUT);
pinMode(7,INPUT);
pinMode(8,INPUT);
pinMode(9,INPUT);
Serial.begin(9600);
//digitalWrite(6, HIGH); // usamos la resistencia pull-up interna 
//digitalWrite(7, HIGH);
//digitalWrite(8, HIGH);
//digitalWrite(9, HIGH);


}

void loop() {
  // put your main code here, to run repeatedly:
int Sensor1=digitalRead(6);
int Sensor2=digitalRead(7);
int Sensor3=digitalRead(8);
int Sensor4=digitalRead(9);
if (Sensor1==HIGH) {
  Serial.println ("Sensor 1: OK");
  delay(1000);
}
else {
  Serial.println ("Sensor 1: ALARMA");
  delay(1000);
}
if (Sensor2==HIGH) {
  Serial.println ("Sensor 2: OK");
  delay(1000);
}
else {
  Serial.println ("Sensor 2: ALARMA");
  delay(1000);
}
if (Sensor3==HIGH) {
  Serial.println ("Sensor 3: OK");
  delay(1000);
}
else {
  Serial.println ("Sensor 3: ALARMA");
  delay(1000);
}
if (Sensor4==HIGH) {
  Serial.println ("Sensor 4: OK");
  delay(1000);
}
else {
  Serial.println ("Sensor 4: ALARMA");
  delay(1000);
}
}

Salida de Consola con todos los cables desconectados: Sensor 1: ALARMA Sensor 2: OK Sensor 3: OK Sensor 4: OK Sensor 1: OK Sensor 2: OK Sensor 3: OK Sensor 4: OK Sensor 1: ALARMA Sensor 2: ALARMA Sensor 3: ALARMA Sensor 4: ALARMA

Tal como has definido tus entradas

pinMode(7,INPUT);

deberías poner una resistencia de 10k entre el pin y GND. Para evitar ruido. Prueba de nuevo con esta alternativa y verás que todo funciona bien.

Muchas gracias por la sugerencia. Manana probaré esta alternativa y te cuento...

Claudio.

Respuesta correcta surbyte. :wink:

Pareciera que quedan en alta impedancia cuando no se les conecta la resistencia a tierra. Eso lo he querido investigar pero no me había dado la tarea.

Es màs simple que poner una resistencia externa, arduino tienes pull up en todos los pin digitales, pone así: pinMode (6, INPUT_PULLUP);

Tal como dice Surbyte te falta una resistencia, recuerda que siempre pero siempre cuando conectas un pin a voltaje directo para registrar interrupciones (o puede ser con un pulsador o switch), debes usar una resistencia asi limpias la señal y evitas dañar tu placa.