Quando um botão é conectado nessa configuração, a entrada é chamada flutuante , o que significa que não é um 0 ou um 1. Quando o botão é pressionado, ele é conectado ao terra, então esse é definitivamente um 0, mas quando não é pressionado, não sabemos o valor do alfinete.
Resistor de tração
Precisamos incluir o que é chamado de resistor "pull-up" para elevar o sinal até a lógica 1 quando o botão não é pressionado.
Imagem de Sparkfun
O que isto significa é que quando o botão não é pressionado, o Arduino lê uma lógica 1. Quando o botão é pressionado, a corrente flui através do resistor para o terra e o Arduino lê uma lógica 0.
Resistor de tração interno
O Arduino também possui resistores pull up internos, para que você não precise necessariamente adicionar um componente extra ao seu circuito. Existem algumas maneiras de usar isso.
Você costumava fazer assim:
pinMode(pin, INPUT); // set pin to input
digitalWrite(pin, HIGH); // turn on pullup resistors
Agora podemos fazer isso simplesmente em uma linha:
pinMode(pin, INPUT_PULLUP);
Isso permite que o resistor de tração de 20k desse pino. A entrada não estará mais flutuando quando o botão não for pressionado.
Nota: Isso funciona apenas quando a outra extremidade está conectada ao terra.