Oiiii, tudo bem?
A ideia do Pullup é fazer com que a saída seja conhecida (0 ou 1), pois em caso contrário a saída seria indeterminada, ora 0, ora 1, e por vezes, grandes oscilações.
Sem o uso do Input Pullup do arduíno, teríamos um circuito parecido com o abaixo:
Observe as ligações:
- Resistor em 5V
- Resistor na porta digital do arduino
- Porta digital na boteira
- Botoeira no terra
E qual o trajeto da energia nesse circuito?
Em uma situação onde o botão não está apertado, a corrente tende a ir para o lado do resistor, já que o mesmo tem uma conexão direta com o VCC. Já em uma situação onde o botão é apertado, a corrente tende ir para o caminho mais curto, portanto ela irá para o lado do terra. Devido a isso, quando o botão não está apertado, o sinal é HIGH e quando está apertado o sinal é LOW. Pode parecer um pouco contraintuitivo, mas esta configuração de PULLUP é muito utilizada no mercado.
Porém, quando implementamos um Input Pullup no arduino, internamente ele já tem esse resistor ligado a energia, por isso se torna desnecessário a conexão externa ao VCC.
Com o input pullup do arduino a conexão se assemelha a essa:
Lembrando que para funcionar, temos que declarar explicitamente no código que aquela porta será do tipo Pullup:
pinMode(5, INPUT_PULLUP);
Por fim, deixo o link da documentação oficial do arduino que contém um exemplo do uso do Pullup.
Qualquer dúvida é só falar, estou a disposição. Abraços e bons estudos!