from machine import Pin
from utime import sleep_ms, ticks_ms # Usaremos ticks_ms para um debounce melhor
# --- Configurações dos Pinos ---
# Usaremos PULL_DOWN interno: o pino fica em 0V normalmente.
# Quando o botão é pressionado, ele conecta o pino a 3.3V, então lemos 1.
botao1 = Pin(2, Pin.IN, Pin.PULL_DOWN)
botao2 = Pin(4, Pin.IN, Pin.PULL_DOWN) # Pino do segundo botão
led = Pin(3, Pin.OUT) # Pino do LED
# --- Variáveis de Estado e Controle ---
estado_led = False # Começa com o LED desligado
led.value(estado_led) # Aplica o estado inicial ao LED
# Variáveis para o debounce (evitar múltiplos acionamentos com um só clique)
ultimo_aperto_b1 = 0 # Tempo do último acionamento válido do botao1
ultimo_aperto_b2 = 0 # Tempo do último acionamento válido do botao2
INTERVALO_DEBOUNCE = 200 # Milissegundos que devem passar para um novo clique ser válido
print("Sistema de interruptor paralelo iniciado.")
print("Pressione qualquer botão para ligar/desligar o LED.")
# --- Loop Principal ---
while True:
tempo_atual = ticks_ms() # Pega o tempo atual em milissegundos
botao_foi_acionado = False # Flag para indicar se algum botão foi pressionado neste ciclo
# Verifica o Botão 1
if botao1.value() == 1 and (tempo_atual - ultimo_aperto_b1) > INTERVALO_DEBOUNCE:
ultimo_aperto_b1 = tempo_atual # Atualiza o tempo do último aperto
botao_foi_acionado = True # Marca que um botão foi acionado
# Verifica o Botão 2
# (Não usamos 'elif' aqui para que ambos os botões sejam checados independentemente,
# mas a flag 'botao_foi_acionado' garante que a lógica do LED só rode uma vez)
if botao2.value() == 1 and (tempo_atual - ultimo_aperto_b2) > INTERVALO_DEBOUNCE:
ultimo_aperto_b2 = tempo_atual # Atualiza o tempo do último aperto
botao_foi_acionado = True # Marca que um botão foi acionado
# Se qualquer um dos botões foi acionado de forma válida:
if botao_foi_acionado:
estado_led = not estado_led # Inverte o estado atual do LED
led.value(estado_led) # Aplica o novo estado ao pino do LED
if estado_led:
print("LED Ligado")
else:
print("LED Desligado")
sleep_ms(10) # Pequena pausa para estabilizar o loop e economizar processamento