from machine import Pin, PWM
from utime import ticks_ms, sleep_ms
# --- Configuração dos Pinos ---
led_r, led_g, led_b = PWM(Pin(15)), PWM(Pin(14)), PWM(Pin(13))
for led_pwm in [led_r, led_g, led_b]:
led_pwm.freq(1000)
btn1 = Pin(2, Pin.IN, Pin.PULL_DOWN)
btn2 = Pin(3, Pin.IN, Pin.PULL_DOWN)
# --- Variáveis de Estado ---
led_aceso = False
indice_cor = 0 # Começa em 0; a primeira cor usada será cores[1] após o primeiro toggle para ON.
cores = [
[65535, 0, 0], # Vermelho
[0, 65535, 0], # Verde
[0, 0, 65535], # Azul
[65535, 65535, 0], # Amarelo
[0, 65535, 65535], # Ciano
[65535, 0, 65535] # Magenta
]
total_cores = len(cores)
# --- Variáveis para Debounce ---
ultimo_acionamento_btn1 = 0
ultimo_acionamento_btn2 = 0
INTERVALO_DEBOUNCE = 200 # ms
# --- Funções Auxiliares ---
def aplicar_cor_rgb(r, g, b):
led_r.duty_u16(r)
led_g.duty_u16(g)
led_b.duty_u16(b)
# --- Inicialização ---
aplicar_cor_rgb(0, 0, 0) # LED desligado
print("Programa iniciado. Pressione os botões.")
# --- Loop Principal ---
while True:
tempo_agora = ticks_ms()
botao_pressionado_neste_ciclo = False
# Verifica Botão 1
if btn1.value() == 1 and (tempo_agora - ultimo_acionamento_btn1) > INTERVALO_DEBOUNCE:
ultimo_acionamento_btn1 = tempo_agora
botao_pressionado_neste_ciclo = True
# print("Botão 1") # Opcional: para debug
# Verifica Botão 2 (só se o botão 1 não foi o gatilho deste ciclo)
if not botao_pressionado_neste_ciclo and btn2.value() == 1 and \
(tempo_agora - ultimo_acionamento_btn2) > INTERVALO_DEBOUNCE:
ultimo_acionamento_btn2 = tempo_agora
botao_pressionado_neste_ciclo = True
# print("Botão 2") # Opcional: para debug
# Ação se algum botão foi validamente pressionado
if botao_pressionado_neste_ciclo:
led_aceso = not led_aceso
if led_aceso:
indice_cor = (indice_cor + 1) % total_cores
r, g, b = cores[indice_cor]
aplicar_cor_rgb(r, g, b)
print(f"LED LIGADO, Cor: {indice_cor}")
else:
aplicar_cor_rgb(0, 0, 0)
print("LED DESLIGADO")
sleep_ms(10) # Pequena pausa para estabilidade e economia de CPU