⬤ Iniciante
🔘 Botões de Impulso
Nesta página
Teoria do interruptor
Pull-up interno vs externo
Montagem
Ler estado do botão
Debounce
Contador com botões
🔘 Como Funciona um Interruptor de Impulso?
Um interruptor de impulso (push button) liga temporariamente dois terminais enquanto pressionado. Ao soltar, a ligação abre novamente. No Kit A temos 4 interruptores de 6×6mm com 4 pinos.
ℹ️ Pinos do interruptor 6×6mm
O interruptor tem 4 pinos, mas internamente só 2 pares: pinos 1-2 são sempre ligados entre si, pinos 3-4 também. A pressão liga o par 1-2 ao par 3-4.
⬆️ Pull-up: Interno vs Externo
| Tipo | Como ativar | Valor | Vantagem |
|---|---|---|---|
| Pull-up interno | setPull(P0, PinPullMode.PullUp) | ~10–50 KΩ (interno) | Sem resistência externa — mais simples |
| Pull-up externo | Resistência 10KΩ entre pino e 3V | 10 KΩ | Valor fixo e fiável |
Com pull-up: o pino lê 1 (HIGH) quando o botão está solto, e 0 (LOW) quando pressionado — lógica invertida.
🔌 Montagem com Pull-up Externo
3V→ Resistência 10KΩ → Pino P0 do micro:bit
P0→ Terminal A do botão
GND→ Terminal B do botão (ao pressionar, P0 vai a GND)
📖 Ler o Estado do Botão
ler_botao.js
// Configurar pull-up interno (não precisa resistência externa)
pins.setPull(DigitalPin.P0, PinPullMode.PullUp)
pins.setPull(DigitalPin.P1, PinPullMode.PullUp)
basic.forever(function () {
let botao0 = pins.digitalReadPin(DigitalPin.P0)
let botao1 = pins.digitalReadPin(DigitalPin.P1)
// Com pull-up: 0 = pressionado, 1 = solto
if (botao0 == 0) {
basic.showIcon(IconNames.Yes)
pins.digitalWritePin(DigitalPin.P2, 1) // Liga LED
} else {
basic.showIcon(IconNames.No)
pins.digitalWritePin(DigitalPin.P2, 0) // Apaga LED
}
})
⚡ Problema de Debounce
Quando um botão é pressionado, os contactos metálicos "saltam" rapidamente entre ligado e desligado durante alguns milissegundos. Isto causa múltiplas leituras falsas — o microcontrolador interpreta um clique como vários.
debounce.js
pins.setPull(DigitalPin.P0, PinPullMode.PullUp)
let ultimo_estado = 1
let contagem = 0
basic.forever(function () {
let estado_atual = pins.digitalReadPin(DigitalPin.P0)
// Só age na transição 1→0 (solto→pressionado)
if (estado_atual == 0 && ultimo_estado == 1) {
basic.pause(20) // esperar 20ms para estabilizar
// Confirmar que ainda está pressionado
if (pins.digitalReadPin(DigitalPin.P0) == 0) {
contagem += 1
basic.showNumber(contagem)
}
}
ultimo_estado = estado_atual
basic.pause(10)
})
🔢 Contador com Dois Botões
contador_botoes.js
pins.setPull(DigitalPin.P0, PinPullMode.PullUp) // botão +
pins.setPull(DigitalPin.P1, PinPullMode.PullUp) // botão -
let valor = 0
basic.forever(function () {
if (pins.digitalReadPin(DigitalPin.P0) == 0) {
valor += 1
basic.showNumber(valor)
basic.pause(300) // anti-repetição rápida
}
if (pins.digitalReadPin(DigitalPin.P1) == 0) {
valor -= 1
basic.showNumber(valor)
basic.pause(300)
}
})
🏆 Para ir mais longe
- Usa 4 botões para controlar 4 LEDs individualmente (botão A→LED vermelho, etc.)
- Implementa um "hold": se o botão estiver pressionado mais de 1s, faz algo diferente
- Cria um jogo de reação: o micro:bit mostra um ícone aleatório e o utilizador deve pressionar o botão correto (A=cara feliz, B=seta)
- Combina 2 botões para controlar a velocidade de piscar de um LED (mais rápido/mais lento)