
Vídeo
Esquema do circuito

Código-fonte
1// ─────────────────────────────────────────
2// BlueGrays · bluegrays.com
3// Toggle an LED with a Button (On/Off)
4// ─────────────────────────────────────────
5// Each button press toggles the LED once (on/off). The code only catches
6// the moment of the press (LOW -> HIGH); holding the button does not make
7// the LED blink. The 50 ms wait ignores button bounce.
8//
9// Pins:
10// D13 -> Button, other leg to 5V
11// D13 -> 10k resistor to GND (pull-down)
12// D7 -> LED (with a 330 ohm resistor)
13
14int ledState = 0; // LED state: 0 = off, 1 = on
15int lastButton = 0; // Previous button reading
16
17void setup() {
18 pinMode(13, INPUT); // Button input (external pull-down)
19 pinMode(7, OUTPUT); // LED output
20}
21
22void loop() {
23 int button = digitalRead(13); // Read the button
24 if (button != lastButton) { // Button state changed
25 if (button == 1) { // Only at the press (LOW -> HIGH)
26 ledState = !ledState; // Flip the state
27 digitalWrite(7, ledState);
28 }
29 delay(50); // Short wait to skip the bounce
30 lastButton = button; // Store this reading
31 }
32}
33
Perguntas frequentes
O que é debounce e por que ele é necessário?▾
Quando um botão mecânico é pressionado, seus contatos abrem e fecham várias vezes durante alguns milissegundos (repique). O Arduino pode interpretar isso como vários toques, deixando o LED em um estado aleatório. O debounce ignora esses repiques ao aguardar um curto intervalo (por exemplo, 50 ms) após uma mudança de estado.
Por que às vezes o LED não muda de estado ou muda duas vezes?▾
Geralmente, o debounce está ausente ou é curto demais. Além disso, é preciso detectar apenas o instante em que o botão é "pressionado" (estado anterior: LOW, novo estado: HIGH); se o estado mudar a cada ciclo enquanto o botão estiver pressionado, o LED vai piscar e ficar em um estado aleatório.
Para que serve uma variável de estado?▾
Ela guarda na memória se o LED está ligado ou desligado. A cada toque válido, a variável é invertida (ledStatus = !ledStatus), e o LED é ajustado conforme esse valor.
Posso controlar LEDs diferentes com vários botões?▾
Sim, basta manter um pino, um estado anterior e uma variável de estado do LED separados para cada botão. Se você usar muitos botões, arrays e um código de debounce baseado em millis() deixam tudo mais organizado.
