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 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.