Em Arduinos mais recentes, pode-se definir pinMode para um dos três estados: OUTPUT
, INPUT
, e INPUT_PULLUP
.
Esta página diz:
O chip Atmega no Arduino possui resistores pull-up internos (resistores que se conectam à energia internamente) que você pode acessar. Se você preferir usá-los em vez de resistores pull-down externos, poderá usar o argumento INPUT_PULLUP em pinMode (). Isso inverte efetivamente o comportamento, onde ALTO significa que o sensor está desligado e BAIXO significa que o sensor está ligado.
Tenho certeza de que inverter o comportamento não é a única coisa que faz.
O que INPUT_PULLUP
faz? O que o torna diferente INPUT
e como alguém decide qual usar?
Respostas:
O padrão é o
INPUT
que configura o pino como umINPUT
. Se o pino estiver totalmente desconectado, ele lerá aleatoriamenteHIGH
eLOW
. Se você ligá-lo a + 5V ou 0V, ele obviamente leráHIGH
ouLOW
.Internos ao Arduino estão os resistores pullup com um valor em torno de 50k-ohm. Esses resistores podem ser conectados opcionalmente internamente usando
INPUT_PULLUP
. Isso é funcional (e eletricamente) equivalente à conexão de um resistor de 50k ohm entre o pino e + 5V, a única diferença é que ele não requer componentes externos e você pode ativá-lo e desativá-lo no software durante a execução do seu programa.Então, por que pull-ups e não pull-downs? Provavelmente, existem várias razões para isso, mas ao conectar botões ou interruptores ou qualquer coisa "normalmente aberta", você só precisa amarrá-los ao terra, não precisa executar + 5V neles. Como a maioria das pranchas será projetada com grandes derramamentos de terra por razões de blindagem, amarrar na terra é praticamente uma razão.
Alguns ICs mais destacados, como os chips ARM, têm pull-ups e pull-downs, mas a linha AVR de 8 bits vem apenas com pull-ups. Você só precisa se lembrar de que
HIGH
está "aberto" eLOW
"fechado".fonte
Observe que, anterior à 1.0.1, você pode ativar os pullups usando
digitalWrite()
. E você ainda pode.O código:
Esta é uma distinção importante porque
INPUT_PULLUP
obviamente liga o resistor de pull-up. No entanto, menos óbvio, é que, a partir do 1.0.1, simplesmente chamarINPUT
força o pull-up a ser desativado. (Anteriormente, o estado da flexão continuava o mesmo).Para ver como um alfinete opera com e sem pull-ups, assista aos seguintes vídeos.
Pino flutuante em um osciloscópio: http://www.youtube.com/watch?v=dBIBFLYCjMM
Com o pull-up ativado: http://www.youtube.com/watch?v=SAIw7LLVl-U
Vídeo tutorial completo sobre pull-ups (observe que eu fiz isso antes da inclusão do INPUT_PULLUP na biblioteca do Arduino): http://www.youtube.com/watch?&v=jJnD6LdGmUo
fonte