Arduino digitalRead leyendo mal

9

He configurado mi Arduino UNO con 4 cables de entrada, se conectan al puerto 10, 11, 12, 13, están conectados a mi placa de conexiones sin nada más que el cable.

Mi código simplemente sería:

Serial.println(digitalRead(13));
Serial.println(digitalRead(12));
Serial.println(digitalRead(11));
Serial.println(digitalRead(10));

La cosa es que, después de conectar brevemente un pin a 5V o 3V3, la lectura empezaría a volverse loca como: 1 0 0 1 0 1 1 1 0 1 0 1 1 0 ¡Sin ningún sentido! ¡Sin tener ningún cable conectado directamente a mi VCC (5V o 3V3) la lectura cambia constantemente, cuando debería ser cero!

¿Mi Arduino está muerto? ¿Cómo puedo solucionar esto?

    

2 respuestas

17

Lo que tienes se llama Floating pin. Los pines de entrada digital son muy sensibles al cambio y, a menos que se conduzcan positivamente a un estado u otro (alto o bajo), captarán la capacitancia de fuentes cercanas, como tableros, dedos humanos o incluso el aire. Cualquier cable conectado a él actuará como una pequeña antena y hará que cambie el estado de entrada. Y me refiero a cualquier cable, la traza en el tablero, el cable a la placa de pruebas, el pasador de la placa de pruebas, incluso el pasador de metal del propio IC.

Esto se menciona en la página de referencia de Arduino:

  

Si el pin no está conectado a nada, digitalRead () puede devolver ALTO o BAJO (y esto puede cambiar al azar).

Si observa el Tutorial de pin digital Arduino :

  

Esto también significa, sin embargo, que los pines de entrada sin nada conectado a ellos, o con cables conectados a ellos que no están conectados a otros circuitos, informarán cambios aparentemente aleatorios en el estado de los pines, captando ruido eléctrico del entorno, o capacitivamente Acoplando el estado de un pin cercano.

     

A menudo es útil dirigir un pin de entrada a un estado conocido si no hay una entrada presente. Esto se puede hacer agregando una resistencia pullup (a + 5V), o una resistencia desplegable (resistencia a tierra) en la entrada, con 10K como valor común.   También hay convenientes resistencias pull-up de 20K incorporadas en el chip Atmega a las que se puede acceder desde el software. Se accede a estas resistencias de extracción incorporadas de la siguiente manera.

pinMode(pin, INPUT);           // set pin to input
digitalWrite(pin, HIGH);       // turn on pullup resistors

Estas resistencias de tracción débil forzan el estado del pin de entrada a un estado conocido y se sobrescriben fácilmente con voltajes de entrada más fuertes, como una conexión directa a tierra o + 5v.

    
respondido por el Passerby
6

Esto es normal. A menos que una entrada esté conectada a algo, mostrará ALTA o BAJA o cambiará constantemente. Esto se describe en la página de referencia digitalRead en el sitio web de Arduino.

El pin de entrada se comporta con alguna pequeña capacitancia, por lo que la conexión breve a 3V3 o 5V cargará la capacitancia. Puede encontrar un efecto similar con un dedo desnudo.

Puede evitar el problema agregando una resistencia de gran valor entre el pin y la GND.

Pregúntate a ti mismo por qué esperas cero?

    
respondido por el James Cameron

Lea otras preguntas en las etiquetas