Cuando se conecta un botón en esa configuración, la entrada es lo que se llama flotante , lo que significa que no es un 0 o un 1. Cuando se presiona el botón, se conecta a tierra, por lo que definitivamente es un 0, pero cuando no se presiona, No sabemos el valor del pin.
Tire hacia arriba de la resistencia
Necesitamos incluir lo que se llama una resistencia "pull-up" para llevar la señal a un 1 lógico cuando no se presiona el botón.
Imagen de Sparkfun
Lo que esto significa es que cuando no se presiona el botón, el Arduino lee una lógica 1. Cuando se presiona el botón, la corriente fluye a través de la resistencia a tierra y el Arduino lee un 0 lógico.
Resistencia interna pull up
El Arduino también tiene resistencias pull up internas, por lo que no necesariamente tiene que agregar un componente adicional a su circuito. Hay un par de formas de usar esto.
Solías tener que hacerlo así:
pinMode(pin, INPUT); // set pin to input
digitalWrite(pin, HIGH); // turn on pullup resistors
Ahora podemos hacerlo simplemente en una línea:
pinMode(pin, INPUT_PULLUP);
Esto habilita la resistencia pull-up de 20k en ese pin. La entrada ya no estará flotando cuando no se presione el botón.
Nota: Esto solo funciona cuando el otro extremo está conectado a tierra.