PR.FT5_15· Kit RPi› Básicos› Botão de Pressão Próximo →
⬤ Iniciante · GPIO.IN · PUD_UP

🔘 Botão de Pressão

Ler entradas digitais com pull-up interno. Detetar pressão e libertação do botão com eventos GPIO. Componentes: 4× Tact Switch.

Material necessário

Circuito

Botão pino A → GPIO 17 (BCM)
Botão pino B → GND (pino 9)
✅
O RPi tem resistências pull-up internas em todos os pinos GPIO. Ao usar PUD_UP, o pino lê HIGH quando o botão está solto e LOW quando premido — sem resistência externa necessária.

Exercício 1 — Ler botão simples

Python · botao_simples.py
import RPi.GPIO as GPIO
import time

BTN = 17
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)

# Entrada com pull-up interno ativado
GPIO.setup(BTN, GPIO.IN, pull_up_down=GPIO.PUD_UP)

try:
    while True:
        estado = GPIO.input(BTN)
        if estado == GPIO.LOW:
            print("Botão PREMIDO")
        else:
            print("Botão SOLTO  ", end="\r")
        time.sleep(0.1)
except KeyboardInterrupt:
    GPIO.cleanup()

Exercício 2 — Botão controla LED

Python · botao_led.py
import RPi.GPIO as GPIO
import time

BTN = 17
LED = 18

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(BTN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(LED, GPIO.OUT)

try:
    while True:
        if GPIO.input(BTN) == GPIO.LOW:
            GPIO.output(LED, GPIO.HIGH)
        else:
            GPIO.output(LED, GPIO.LOW)
        time.sleep(0.02)
except KeyboardInterrupt:
    GPIO.cleanup()

Exercício 3 — Toggle com eventos

Python · botao_toggle.py
import RPi.GPIO as GPIO

BTN = 17
LED = 18
estado_led = False

GPIO.setmode(GPIO.BCM)
GPIO.setup(BTN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(LED, GPIO.OUT)

def toggle(channel):
    global estado_led
    estado_led = not estado_led
    GPIO.output(LED, estado_led)
    print(f"LED: {'ON' if estado_led else 'OFF'}")

# Detetar flanco descendente (soltura) com debounce 200ms
GPIO.add_event_detect(BTN, GPIO.FALLING,
                     callback=toggle, bouncetime=200)

input("Prima ENTER para sair\n")
GPIO.cleanup()