Lição 98-3: Como Ligar/Desligar um LED Toggle Usando um Botão de Pressão com Arduino
Os botões de pressão estão em todo lugar — em controles remotos, eletrodomésticos e painéis de controle — e no momento em que um único botão precisa fazer mais de uma função, você precisa de lógica de alternância. Este projeto mostra como fazer um botão de pressão ligar um LED com o primeiro pressionamento e desligá-lo com o próximo, para que a luz permaneça exatamente onde você a deixou. Esse comportamento de "pressione uma vez para travar, pressione novamente para soltar" é a base de quase todos os botões de menu, interruptores de energia e seletores de modo que você vai construir.
Depois de entender a alternância, o mesmo padrão de código se aplica a hardware real. Você pode usá-lo para:
- Acionar um relé que controla uma lâmpada AC ou um abajur a partir de um único botão de painel.
- Iniciar e parar um motor ou uma bomba com um botão em vez de dois.
- Percorrer os modos de operação de um dispositivo (por exemplo, lento / rápido / desligado).
- Construir um alarme com travamento que permanece ligado até que alguém o reconheça.
- Criar um botão de mudo para um projeto de áudio que lembra seu estado.
- Atuar como um interruptor de energia suave para um dispositivo alimentado por bateria, substituindo um interruptor mecânico.
O instrutor observa este ponto diretamente no vídeo (no vídeo em 19:52): o projeto não é realmente sobre o LED — é sobre a técnica de alternância, que você pode aplicar a um relé, um driver de motor ou qualquer outra saída.
Hardware e Componentes
A lista de peças é deliberadamente mínima, então este é um ótimo projeto se você está apenas começando. Você precisa de:
- Uma placa Arduino — Uno, Nano ou Mega funcionam.
- Um LED, 3 mm ou 5 mm, qualquer cor.
- Um resistor para o LED, entre 200 Ω e 1000 Ω. A transcrição explica o raciocínio (no vídeo em 03:49): um LED cai aproximadamente 2 V e consome cerca de 10 mA, então com uma alimentação de 5 V os 3 V restantes devem ser dissipados pelo resistor. A lei de Ohm dá 3 V ÷ 0,01 A = 300 Ω, e qualquer valor de 300 Ω até 1000 Ω funcionará — valores mais altos simplesmente deixam o LED mais fraco.
- Um botão de pressão. O vídeo mostra tanto o tipo tátil pequeno de quatro pinos quanto uma versão de pinos mais longos (no vídeo em 12:43). Se você não tiver um botão de pressão, um interruptor comum também funciona — basta encontrar os dois terminais que fazem e desfazem o circuito.
- Uma protoboard e alguns fios jumper DuPont.
Uma dica prática do vídeo (no vídeo em 07:50): o botão tátil de quatro pinos tem dois pares de pinos conectados internamente. Use um multímetro no modo de continuidade para descobrir quais dois pinos apitam juntos — esses são um lado do interruptor. Conecte um lado ao pino de entrada e o outro lado ao terra.
Guia de Ligação
A ligação é a mesma dos circuitos simples de LED e botão de pressão, com o botão adicionado por cima. O ânodo do LED (a perna mais longa) vai para o pino 3, e seu cátodo (a perna mais curta, no lado plano do corpo) conecta-se através do resistor ao terra. O botão de pressão conecta-se entre o pino 2 e o terra — nada mais é necessário, porque o código habilita o resistor de pull-up interno do Arduino.
Vale a pena entender esse pull-up interno: sem ele, um pino de entrada flutuante leria ruído aleatório. Habilitar INPUT_PULLUP mantém o pino em 5 V enquanto o botão está aberto, e pressionar o botão o puxa para 0 V. É por isso que o código trata uma leitura LOW como "pressionado" — a lógica é invertida em comparação com um interruptor simples para o terra com um resistor externo.
Explicação do Código
O sketch completo está disponível abaixo deste artigo. Aqui vamos nos concentrar nas partes que você realmente vai querer alterar.
No topo do arquivo, as duas atribuições de pinos são definidas como constantes. Se você mover seus fios para pinos diferentes, este é o único lugar que você precisa editar:
const int pushButtonPin = 2;//define a pin number for push button
const int LEDPin = 3;//define a pin that is connected to LED
Em seguida vêm as três variáveis de estado. Você normalmente não precisa alterá-las, mas ajuda saber o que elas fazem:
int pushButtonStatus = 0; // push value from pin 2
int lightStatus = 0;//light status
int pushed = 0;//push statuspushButtonStatus armazena a leitura bruta do pino do botão a cada passagem pelo loop. lightStatus lembra o que o pino do botão leu na passagem anterior, que é como o sketch detecta o momento de um novo pressionamento em vez de reagir continuamente. pushed é o flag de alternância real — ele alterna entre 0 e 1 e decide se o LED deve estar ligado ou desligado.
A alternância em si é feita com um truque aritmético elegante (no vídeo em 18:30). Subtrair o flag de um o inverte: 1 - 0 dá 1, e 1 - 1 dá 0. Assim, uma única linha inverte o estado toda vez que um novo pressionamento é detectado:
pushed = 1-pushed;//toggle the pushed value
delay(100);//give some time for finger to press
O atraso de 100 ms está lá para deixar seu dedo sair do botão. Sem ele, um pressionamento físico poderia ser contado várias vezes. Se seu botão parecer instável ou seu dedo tremer, aumente esse valor (no vídeo em 40:39).
A condição que dispara a alternância é a chave de todo o sketch. Ela só é acionada quando o botão não está pressionado (HIGH, por causa do pull-up) e a leitura anterior era LOW — ou seja, o botão acabou de ser solto após um pressionamento:
if(pushButtonStatus == HIGH && lightStatus == LOW){
pushed = 1-pushed;//toggle the pushed value
delay(100);//give some time for finger to press
}
Por fim, o LED é controlado pelo flag de alternância, e a leitura atual do botão é salva para a próxima comparação:
lightStatus = pushButtonStatus;
if(pushed == HIGH){
Serial.println("Light ON");
digitalWrite(LEDPin, HIGH); //turn the LED ON
}else{
Serial.println("Light OFF");
digitalWrite(LEDPin, LOW);//turn the LED OFF
}
Você também pode abrir o Monitor Serial a 9600 baud para observar as mensagens "Light ON" e "Light OFF" enquanto pressiona o botão.
Demonstração ao Vivo
No vídeo (no vídeo em 19:41) você pode ver o comportamento em ação: o primeiro pressionamento liga o LED e ele permanece ligado após o dedo ser solto. O próximo pressionamento o desliga, e ele permanece desligado. Não há necessidade de segurar o botão, que é exatamente a diferença entre este projeto e a versão mais simples de "segurar para acender" abordada na Lição 98-2: Como Ligar e Desligar um LED Usando um Botão de Pressão com Arduino.
O vídeo também aponta que você pode trocar o LED por um módulo relé para acionar dispositivos alimentados pela rede elétrica, ou por um driver de motor para iniciar e parar um motor. A lógica de alternância não muda — apenas o dispositivo de saída muda.
Outras variações mostradas no mesmo vídeo — o fading do LED, o padrão gangorra, a luz caminhante, o medidor de barra de tensão e o semáforo — são abordadas cada uma em seus próprios tutoriais, linkados abaixo.
Projetos relacionados deste vídeo
- Lição 98-1: Como Ligar e Desligar um LED com Arduino
- Lição 98-2: Como Ligar e Desligar um LED Usando um Botão de Pressão com Arduino
- Lição 98-4: Fading de um LED Usando Arduino: Controle de Brilho
- Lição 98-5: Fade da Luz Quando um Botão é Pressionado Usando Arduino
- Lição 98-6: Jogo de LED Gangorra com Arduino
- Lição 98-7: Luz Caminhante Usando Arduino e 5 LEDs
- Lição 98-8: Luz Caminhante com Botão de Pressão e LEDs com Arduino
- Lição 98-9: Medidor de Nível de Tensão do LED Usando Arduino ou luz caminhante com potenciômetro
- Lição 98-10: Semáforo com Arduino
Capítulos
- [00:00] Visão geral dos 10 projetos com LED
- [01:00] Introdução ao curso passo a passo de Arduino
- [02:29] Fundamentos do LED: símbolo, ânodo, cátodo e cálculo do resistor
- [05:53] Projeto 1: Ligar e desligar um LED
- [12:43] Projeto 2: Botão de pressão controla o LED
- [17:13] Projeto 3: Botão de pressão alterna o LED entre ligado e desligado
- [20:12] Projeto 4: Fading de um LED
- [23:20] Projeto 5: Fading de um LED com um botão de pressão
- [27:32] Projeto 6: Gangorra com dois LEDs
- [30:47] Projeto 7: Luz caminhante com cinco LEDs
- [36:41] Projeto 8: Luz caminhante avançada por botão de pressão
- [42:25] Projeto 9: Medidor de nível de tensão do LED com potenciômetro
- [49:25] Projeto 10: Semáforo com Arduino
This code has not been parsed yet. Please return to the admin panel to parse it.
Coisas que você pode precisar
-
AmazonasSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazonas
-
Amazonas
-
Amazonas
Recursos e referências
-
DocumentaçãoDocumentação para o Kit de Aprendizado 3 em 1 IoT/Carro Inteligente/SunFounderdocs.sunfounder.com
-
Externo
-
Externo
-
Externo
Arquivos📁
Bibliotecas do Arduino (zip)
-
Código fonte do kit de aprendizado Smart Car 3 em 1 da SunFounder
3in1-kit-main-v2.zip12.80 MB
Manual do Usuário
-
Manual de montagem do SunFounder 3-em-1 Arduino Smart CarEste documento mostra a montagem passo a passo do SunFounder 3-em-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB