Arduino digital Leer lectura incorrecta

10

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 prueba 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 cuestión es que, después de conectar brevemente un pin a 5V o 3V3, la lectura comenzarí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 arreglar esto?

Guilherme Garcia da Rosa
fuente
¡Simplemente conecte su pin de activación a tierra cuando no se active!

Respuestas:

18

Lo que tienes se llama Floatingpin. 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 parásita de fuentes cercanas, como paneles, 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, el rastro en la placa, el cable a la placa de pruebas, el pin de la placa de pruebas, incluso el pin de metal del propio circuito integrado.

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 nos fijamos en el Tutorial Arduino Digital Pin :

Sin embargo, esto también significa 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 del pin, captando ruido eléctrico del entorno o acoplando capacitivamente el estado de un pin cercano.

A menudo es útil dirigir un pin de entrada a un estado conocido si no hay ninguna entrada presente. Esto se puede hacer agregando una resistencia pullup (a + 5V), o una resistencia pulldown (resistencia a tierra) en la entrada, con 10K como valor común. También hay cómodas resistencias pullup de 20K integradas en el chip Atmega a las que se puede acceder desde el software. Se accede a estas resistencias pullup 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ébiles fuerzan 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.

Transeúnte
fuente
2
¿Qué hay de mencionar pinMode(pin, INPUT_PULLUP)? Es fácil de recordar y realmente difícil de arruinar.
piojo
6

Esto es normal. A menos que una entrada esté conectada a algo, se 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 una 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 GND.

Pregúntese por qué espera cero?

James Cameron
fuente
1
pinMode (pin, INPUT_PULLUP);
jippie