from machine import Pin, PWM
from utime import sleep
# =========================
# CONFIGURAÇÃO DO LED
# =========================
# Cria um LED no pino 18 usando PWM (controle de brilho)
led = PWM(Pin(18))
# =========================
# CONFIGURAÇÃO DOS BOTÕES
# =========================
# Botão para aumentar o brilho
# PULL_UP: quando não pressionado = 1, pressionado = 0
botao_acrescimo = Pin(16, Pin.IN, Pin.PULL_UP)
# Botão para diminuir o brilho
botao_decrescimo = Pin(17, Pin.IN, Pin.PULL_UP)
# Define a frequência do PWM (quantas vezes por segundo o sinal oscila)
led.freq(1000)
# =========================
# CONTROLE DE ESTADO DOS BOTÕES
# =========================
# Armazena o último estado do botão de aumento
# Começa em 1 porque com pull-up o botão solto vale 1
ultimo_estado1 = 1
# Armazena o último estado do botão de diminuição
ultimo_estado2 = 1
# =========================
# CONTROLE DO BRILHO
# =========================
# Brilho em porcentagem (0 a 100)
porcentagem = 0
# =========================
# FUNÇÃO DE CONVERSÃO
# =========================
def porcentagem_em_pwm(valor):
"""
Converte um valor de 0 a 100 (%) para o intervalo do PWM (0 a 65535)
Exemplo:
50% → ~32767
100% → 65535
"""
return int((valor * 65535) / 100)
# =========================
# LOOP PRINCIPAL
# =========================
while True:
# Lê o estado atual dos botões
estado1 = botao_acrescimo.value()
estado2 = botao_decrescimo.value()
# =========================
# BOTÃO DE AUMENTAR
# =========================
# Detecta o clique (transição de 1 → 0)
# Ou seja: estava solto e foi pressionado
if estado1 == 0 and ultimo_estado1 == 1:
# Aumenta o brilho em 10%
porcentagem += 10
# Garante que não passe de 100%
if porcentagem > 100:
porcentagem = 100
# Atualiza o brilho do LED convertendo para PWM
led.duty_u16(porcentagem_em_pwm(porcentagem))
# Mostra no console o valor atual
print(f"Brilho: {porcentagem}%")
# Pequena pausa (debounce do botão)
# Evita múltiplas leituras do mesmo clique
sleep(0.2)
# Atualiza o estado anterior do botão
ultimo_estado1 = estado1
# =========================
# BOTÃO DE DIMINUIR
# =========================
# Detecta o clique (transição de 1 → 0)
if estado2 == 0 and ultimo_estado2 == 1:
# Diminui o brilho em 10%
porcentagem -= 10
# Garante que não fique abaixo de 0%
if porcentagem < 0:
porcentagem = 0
# Atualiza o brilho do LED
led.duty_u16(porcentagem_em_pwm(porcentagem))
# Mostra no console
print(f"Brilho: {porcentagem}%")
# Pequena pausa para evitar múltiplos cliques
sleep(0.2)
# Atualiza o estado anterior do botão
ultimo_estado2 = estado2
# Pequeno delay geral do loop
# Evita que o código rode rápido demais
sleep(0.05)Loading
pi-pico-w
pi-pico-w