
Passo 1 de 7
Identifique os contatos do botão
Mapeie os contatos do botão momentâneo com segurança antes de conectá-lo à placa.
Trilha de aprendizado · Nível 9 · Tutorial 6
Leia um botão com o pull-up interno do Uno R3 e faça um LED acompanhar o estado pressionado, interpretando corretamente o comando ativo em nível baixo.
Identifique os contatos do botão
Mapeie os contatos do botão momentâneo com segurança antes de conectá-lo à placa. 2 min
Planeje a entrada com INPUT_PULLUP
Planeje a entrada do botão no D2 usando o resistor de pull-up interno e retorno por GND. 2 min
Traduza LOW em botão pressionado
Converta a leitura elétrica de D2 em uma variável booleana que represente corretamente o botão pressionado. 2 min
Faça o LED acompanhar a leitura
Grave um sketch que lê D2 com pull-up interno e faz o LED integrado acompanhar diretamente o estado pressionado do botão. 3 min
Monte e confira os estados estáveis
Monte o botão entre D2 e GND com a placa desenergizada e verifique que o LED integrado acompanha os estados mantidos. 3 min
Diferencie leitura repetida de novo acionamento
Diferencie o estado que permanece pressionado de um novo acionamento físico e reconheça o limite do programa atual. 2 min
Revise e valide a leitura do botão
Revisão integrada da ligação, da leitura ativa em nível baixo e do controle do LED pelo estado mantido. 2 min

Passo 1 de 7
Mapeie os contatos do botão momentâneo com segurança antes de conectá-lo à placa.
Antes da montagem, separe seu Uno R3, computador com a IDE Arduino já configurada, cabo USB de dados, protoboard, jumpers, botão momentâneo normalmente aberto e multímetro.
Neste step, use somente o botão e o multímetro. Deixe o botão fora da protoboard e sem qualquer ligação ao Uno ou ao USB. O objetivo é descobrir quais terminais realmente mudam de conexão ao pressionar.
Atenção
Não teste continuidade em um componente conectado a um circuito alimentado. Desconecte o USB da placa e mantenha o botão isolado durante este mapeamento.
Um botão momentâneo normalmente aberto tem dois grupos elétricos. Com o botão solto, não há continuidade entre os grupos. Ao pressioná-lo, um grupo passa a se conectar ao outro.
Em muitos modelos com quatro terminais, os dois terminais de um mesmo lado já têm continuidade permanente entre si. Portanto, quatro terminais físicos não significam quatro contatos independentes.

Escolha um terminal de cada grupo, e não dois terminais que já estejam unidos permanentemente.
Com o multímetro no teste de continuidade, investigue seu botão sem confiar apenas na aparência:
O par escolhido deve ficar desconectado quando solto e conectado somente durante o pressionamento.
Dica
Se o seu botão tiver formato ou terminais diferentes do desenho, isso não é um problema. A medição de continuidade é a evidência: use os dois terminais cujo estado muda entre solto e pressionado.
Relacione cada situação ao resultado esperado de continuidade em um botão normalmente aberto de quatro terminais.
Faça as correspondências.
Toque em um item e depois no par correspondente.
No seu botão, descreva o resultado do teste de continuidade no par que você selecionou: o que ocorre com o botão solto e o que ocorre quando ele é pressionado?
Escreva pelo menos 20 caracteres (0/20).

Passo 2 de 7
Planeje a entrada do botão no D2 usando o resistor de pull-up interno e retorno por GND.
Com o par de contatos do botão já identificado, planeje uma entrada definida sem resistor externo: use o pull-up interno do Uno R3.
INPUT apenas coloca o pino no modo de entrada; ele não habilita o resistor interno. Já INPUT_PULLUP configura a entrada e habilita esse resistor no ATmega328P. Assim, quando o botão está aberto, D2 não fica flutuando.
Nesta prática, o botão não leva alimentação externa ao pino. Ele apenas fecha o caminho entre D2 e GND quando pressionado.

O botão fecha D2 com GND; o pull-up já está dentro do microcontrolador.
A identificação na placa e o número usado no sketch correspondem diretamente: o pino marcado como D2 no Uno R3 é o pino 2 nas funções do Arduino. GND é o retorno do contato.
Use somente estes dois pontos para o botão: D2 → botão → GND. Não acrescente resistor de pull-up externo e não conecte 5 V, VIN ou outra fonte ao sinal D2 nesta prática.
Comparação dos modos de entrada para este botão.
| Modo em D2 | Resistor interno | Resultado com botão aberto |
|---|---|---|
| INPUT | Desabilitado | D2 pode ficar sem nível definido |
| INPUT_PULLUP | Habilitado | D2 fica definido pelo pull-up interno |
Coloque esta configuração dentro de setup(). O pino 2 é uma entrada; portanto, ele não deve ser configurado como OUTPUT. O programa completo será apresentado no próximo step.
void setup() {
pinMode(2, INPUT_PULLUP);
}Qual plano combina corretamente a configuração INPUT_PULLUP com a ligação do botão?
Complete o modo de configuração usado com o botão entre D2 e GND.
void setup() {
pinMode(2, );
}Atenção
Ainda não conecte o botão à placa. Primeiro, grave o programa completo da prática, apresentado adiante. Depois, desconecte o cabo USB antes de montar ou corrigir fios.
Na montagem final, use apenas a alimentação USB e confira novamente se os fios chegam a D2 e GND. Mantenha os pinos 0 e 1 livres.

Passo 3 de 7
Converta a leitura elétrica de D2 em uma variável booleana que represente corretamente o botão pressionado.
Com a ligação planejada entre D2 e GND e o modo INPUT_PULLUP, digitalRead(2) consulta o nível elétrico que está presente no pino naquele instante. Ela não comanda o pino nem altera o botão.
O resultado pode ser HIGH ou LOW. Nesta montagem:
HIGH;LOW.Isso ocorre porque o pull-up interno mantém D2 em nível alto enquanto o contato está aberto. Ao pressionar, o botão conecta D2 ao GND.

Com INPUT_PULLUP, o nível baixo é produzido quando o botão fecha o caminho entre D2 e GND.
Guarde primeiro a leitura elétrica em uma variável. Depois, crie uma variável bool com o significado desejado: “o botão está pressionado?”.
A comparação explícita evita inverter mentalmente a lógica ativa em nível baixo. Embora LOW seja o nível elétrico baixo, a expressão (nivel == LOW) vale true quando o botão está pressionado.
Exemplo
A segunda variável traduz o nível físico em uma condição que o programa pode usar depois. Neste step, vamos apenas fazer essa leitura e interpretação; o comando do LED será tratado a seguir.
Trecho para estudar; ele faz uma leitura e interpreta seu significado, sem controlar nenhuma saída.
int nivel = digitalRead(2);
bool pressionado = (nivel == LOW);Confira como cada variável representa uma coisa diferente.
| Estado físico | nivel | pressionado |
|---|---|---|
| Botão solto | HIGH | false |
| Botão pressionado | LOW | true |
Complete o trecho que lê D2 e transforma a leitura em uma condição de botão pressionado.
int nivel = ;
bool pressionado = (nivel == );
Passo 4 de 7
Grave um sketch que lê D2 com pull-up interno e faz o LED integrado acompanhar diretamente o estado pressionado do botão.
A cada passagem por loop(), o programa faz o mesmo fluxo: consulta D2 uma vez, transforma o nível elétrico em pressionado e atualiza o LED integrado.
Nesta ligação com INPUT_PULLUP, pressionado é verdadeiro quando a leitura é LOW. Portanto, o LED recebe HIGH enquanto o botão está mantido pressionado e LOW quando está solto.
Não há delay() nem espera pela soltura: a resposta acompanha o estado atual da entrada.

Em cada passagem por loop, o LED é atualizado conforme a leitura atual de D2.
Crie ou substitua o conteúdo de um sketch na IDE Arduino por este programa completo. Com o botão ainda desconectado, conecte somente o Uno R3 ao computador por USB, selecione a placa e a porta corretas e grave o sketch.
A gravação configura D2 como entrada com pull-up interno antes da montagem física do próximo step.
const uint8_t PINO_BOTAO = 2;
void setup() {
pinMode(PINO_BOTAO, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
}
void loop() {
int nivelBotao = digitalRead(PINO_BOTAO);
bool pressionado = (nivelBotao == LOW);
if (pressionado) {
digitalWrite(LED_BUILTIN, HIGH);
} else {
digitalWrite(LED_BUILTIN, LOW);
}
}Após a gravação, com o botão ainda desconectado: D2 permanece em HIGH pelo pull-up interno. LED integrado: apagado.
Este é o resultado observável esperado após a gravação, antes de conectar o botão. Não há texto de saída no programa.
Dica
setup() configura D2 e o LED uma única vez; também começa com o LED apagado. Depois, cada chamada de loop() lê o pino, calcula pressionado e executa exatamente um dos ramos do if.
O programa não alterna o LED a cada acionamento. Ele apenas reflete o nível presente agora. A montagem do botão será feita no próximo step, com o USB desconectado.
Complete as partes essenciais para que o LED integrado acompanhe o botão ativo em nível baixo.
const uint8_t PINO_BOTAO = 2;
void setup() {
pinMode(PINO_BOTAO, );
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
}
void loop() {
int nivelBotao = digitalRead(PINO_BOTAO);
bool pressionado = (nivelBotao == );
if (pressionado) {
digitalWrite(LED_BUILTIN, );
} else {
digitalWrite(LED_BUILTIN, );
}
}Rastreie os estados estáveis do programa:
digitalRead retorna HIGH; pressionado vale false; o ramo else apaga o LED.digitalRead retorna LOW; pressionado vale true; o primeiro ramo acende o LED.Como ambos os ramos escrevem no LED, a saída recebe uma decisão definida em toda passagem por loop().

Passo 5 de 7
Monte o botão entre D2 e GND com a placa desenergizada e verifique que o LED integrado acompanha os estados mantidos.
Antes de montar ou corrigir qualquer ligação, desconecte o cabo USB do Uno. Nesta prática, use somente o USB como alimentação depois de conferir o circuito; não conecte fonte externa ao sinal nem aos pinos de alimentação.
O programa já foi gravado e configura D2 como INPUT_PULLUP. Agora conecte um contato do botão a D2 e o outro contato ao GND. Use exatamente o par que você confirmou: solto, ele fica desconectado; pressionado, ele fecha o contato.
Mantenha os pinos 0 e 1 livres.

Escolha um terminal de cada grupo elétrico do botão: D2–botão–GND.
Atenção
Não escolha dois terminais que já têm continuidade permanente entre si. Nessa situação, apertar o botão não altera a conexão elétrica e a entrada não terá o comportamento esperado.
Com o USB ainda desconectado, revise o caminho completo antes de religar:
Só depois dessa conferência, conecte o USB. Aguarde a inicialização da placa.
Dica
O LED integrado é a saída observada. Com o pull-up interno, D2 fica em HIGH quando o botão está solto; ao pressionar, o botão conecta D2 ao GND. O programa interpreta esse LOW como botão pressionado e comanda o LED.
Estado do botão e LED integrado esperado após a inicialização.
| Momento | Nível em D2 | LED integrado |
|---|---|---|
| Botão solto | HIGH | Apagado |
| Botão pressionado e mantido | LOW | Aceso |
| Botão solto novamente | HIGH | Apagado |
Faça esta verificação no seu equipamento:
A resposta esperada é direta: o LED muda conforme o nível que está presente naquele momento em D2.
Descreva o que aconteceu nas três etapas: botão solto, botão mantido pressionado e botão solto outra vez. Se algum resultado foi diferente, indique uma conferência segura que você faria com o USB desconectado.
Escreva pelo menos 60 caracteres (0/60).
Um resultado divergente não aponta uma causa única. Desconecte o USB antes de mexer na montagem e confira, com calma, itens locais e verificáveis.
Conferências úteis, sempre com a placa desenergizada.
| O que conferir | Como verificar localmente |
|---|---|
| Par do botão | Os dois terminais só ganham continuidade ao pressionar? |
| Caminho até GND | O terminal oposto ao D2 chega realmente a um pino GND? |
| Pino de entrada | O jumper está no D2, não em um pino vizinho? |
| Protoboard | Os jumpers estão nas mesmas trilhas planejadas? |
| Programa gravado | D2 usa INPUT_PULLUP e a condição compara a leitura com LOW? |
Atenção
Não tente concluir pelo sintoma que há uma causa específica. Por exemplo, LED sempre aceso pode envolver tanto a escolha dos contatos quanto uma ligação na protoboard ou a configuração do programa. Confira cada ponto de forma separada.

Passo 6 de 7
Diferencie o estado que permanece pressionado de um novo acionamento físico e reconheça o limite do programa atual.
O loop() passa repetidamente pelo mesmo trecho de programa. Assim, enquanto você mantém o botão pressionado, cada nova consulta a D2 pode retornar LOW.
Isso significa apenas que o contato continua levando a entrada ao nível baixo. Não significa que você pressionou o botão outra vez.

Um único pressionamento mantido pode ser observado várias vezes pelo programa como LOW.
Exemplo
Imagine que, durante um único pressionamento, o programa faz quatro leituras:
LOW, LOW, LOW, LOW
Em todas elas, a condição pressionado é verdadeira e o LED permanece aceso. Há quatro consultas ao mesmo estado físico, não quatro novos acionamentos.
Quando o botão se move entre solto e pressionado — ou no caminho inverso — os contatos mecânicos podem oscilar brevemente. Portanto, a leitura pode variar por um curto intervalo durante a mudança.
Não suponha que todo movimento do botão produz exatamente uma única transição elétrica, nem que cada leitura diferente seja um novo clique.

Durante o movimento do contato, podem ocorrer oscilações breves antes de o nível se estabilizar.
Dica
O programa atual tem uma tarefa simples: fazer o LED acompanhar o nível que está presente agora. Ele não conta cliques e não cria um aviso único de pressionamento.
Reconhecer um novo acionamento e lidar com oscilações dos contatos exigirá recursos que serão estudados depois.
Você mantém o botão pressionado por um instante e o programa lê LOW em seis passagens consecutivas por loop(). Isso prova que ocorreram seis acionamentos independentes?

Passo 7 de 7
Revisão integrada da ligação, da leitura ativa em nível baixo e do controle do LED pelo estado mantido.
Resumo
Do contato ao LED
nivelBotao == LOW para a condição booleana pressionado.pressionado for verdadeiro, o LED integrado recebe HIGH; caso contrário, recebe LOW.Nesta montagem, o botão não fornece HIGH ao pino. O pull-up interno mantém D2 em HIGH enquanto o contato está aberto. Ao pressionar, o botão cria o caminho entre D2 e GND, levando a leitura a LOW.

Contato fechado: D2 em LOW, condição pressionado verdadeira e LED aceso.
Complete a versão integrada do programa. Ela usa o mesmo identificador PINO_BOTAO do sketch da prática e mantém o LED como resposta direta ao estado atual do botão.
const uint8_t PINO_BOTAO = 2;
void setup() {
pinMode(PINO_BOTAO, );
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
int nivelBotao = digitalRead(PINO_BOTAO);
bool pressionado = (nivelBotao == );
if (pressionado) {
digitalWrite(LED_BUILTIN, );
} else {
digitalWrite(LED_BUILTIN, LOW);
}
}Com o USB desconectado, confira se você usou um contato de cada grupo elétrico do botão e se os fios chegam a D2 e GND. Religue o USB somente com o programa já gravado. Registre os resultados para botão solto, mantido pressionado e solto outra vez. Depois, explique por que várias leituras LOW enquanto você segura o botão não representam novos acionamentos.
Escreva pelo menos 120 caracteres (0/120).
Parabéns! Você concluiu: Leitura de botões nas entradas do Uno R3
Milhares de cursos online em vídeo, ebooks e áudiobooks.
Para testar seus conhecimentos no decorrer dos cursos online
Gerado diretamente na galeria de fotos do seu celular e enviado ao seu e-mail
Baixe nosso aplicativo pelo QR Code ou pelos links abaixo:.
+ de 10 milhões
de alunos
Certificado grátis e
válido em todo o Brasil
60 mil exercícios
gratuitos
4,8/5 classificação
nas lojas de apps
Cursos gratuitos em
vídeo, ebooks e audiobooks