import machine
import time
from machine import PWM, Pin
# Definindo LEDs
led1 = Pin(2, Pin.OUT) # local de saída do LED, no pino 02
led2 = Pin(0, Pin.OUT) # local de saída do LED, no pino 00
i = 0 # contagem de ciclos, iniciando em zero
# Definindo variáveis dos botões
sistema_estado = False # estado do sistema de monitoramento
panico_estado = False # estado do botão de pânico
tref = 0 # tempo de referência
# Declarando os botões
panico = Pin(23, Pin.IN, Pin.PULL_UP) # Botão de pânico
bsistema = Pin(22, Pin.IN, Pin.PULL_UP) # Botão para ligar/desligar sistema
# Simulando sensores (você pode adicionar mais)
sensor1 = Pin(21, Pin.IN, Pin.PULL_UP) # Sensor simulado 1
sensor2 = Pin(19, Pin.IN, Pin.PULL_UP) # Sensor simulado 2
def ativar_panico(pin):
global tref
global panico_estado
if (time.ticks_ms() - tref) > 300:
tref = time.ticks_ms()
panico_estado = True
print("BOTÃO DE PÂNICO ATIVADO!")
def ativa_sistema(pin):
global tref
global sistema_estado
if (time.ticks_ms() - tref) > 300:
tref = time.ticks_ms()
sistema_estado = not sistema_estado
estado = "LIGADO" if sistema_estado else "DESLIGADO"
print(f"Sistema de monitoramento {estado}")
# Configurando as interrupções
panico.irq(trigger=Pin.IRQ_RISING, handler=ativar_panico)
bsistema.irq(trigger=Pin.IRQ_RISING, handler=ativa_sistema)
#ver melhor na apostila qual irq usar para leitura da borda uma unica vez no botao do sistema (RISING NEM FALLING FUNCIONARAM)
def tocar_alarme():
"""Função para tocar o alarme (LEDs piscando + buzzer)"""
led1.value(1) # especifica o LED como aceso
led2.value(0)
tone1 = PWM(Pin(4, Pin.OUT), freq=600, duty=512) # começa a tocar o buzzer
time.sleep_ms(400) # toca por 400 ms
tone1.deinit() # para de tocar o buzzer
time.sleep(0.1) # espera 200 ms
led1.value(0) # especifica o LED como apagado
led2.value(1)
tone2 = PWM(Pin(4, Pin.OUT), freq=800, duty=512) # começa a tocar o buzzer
time.sleep_ms(300) # toca por 400 ms
tone2.deinit() # para de tocar o buzzer
time.sleep(0.2) # espera 200 ms
while True:
# Verificação PRIORITÁRIA do botão de pânico (funciona sempre)
if panico_estado:
tocar_alarme()
# i += 1
# print("PÂNICO - Ciclos: " + str(i))
# Simulação de sensores - se algum botão-sensor for pressionado
if sensor1.value() == 0 or sensor2.value() == 0:
tocar_alarme()
# i += 1
# print(f"ALARME POR SENSOR - Ciclos: {str(i)}")
time.sleep(0.5) # Debounce para evitar múltiplas leituras
else:
# Sistema desligado - desativa tudo
led1.value(0)
led2.value(0)
panico_estado = False # Reseta o pânico quando sistema está desligado
time.sleep(0.1) # Pequena pausa para não sobrecarregar