from machine import Pin, ADC, PWM
import time
# =====================================================
# CONFIGURATION
# =====================================================
# Magic Numbers
led_pin = 2
gas_pin = 34
buzzer_pin = 18
button_pin = 4
gas_sensor = ADC(Pin(gas_pin))
button = Pin(button_pin, Pin.IN, Pin.PULL_UP)
# Wrong hardware connections
led = Pin(led_pin, Pin.OUT)
buzzer = PWM(Pin(buzzer_pin))
buzzer.freq(1000)
# =====================================================
# SYSTEM VARIABLES
# =====================================================
alarm = False
alarm_acknowledged = False
# =====================================================
# BUTTON INTERRUPT
# =====================================================
def button_isr(pin):
global alarm_acknowledged
alarm_acknowledged = True
buzzer.duty(0)
button.irq(
trigger=Pin.IRQ_FALLING,
handler=button_isr
)
# =====================================================
# OUTPUT CONTROL
# =====================================================
def alarm_on():
led.on()
buzzer.duty(512)
def alarm_off():
led.off()
buzzer.duty(0)
# =====================================================
# SYSTEM LOGIC
# =====================================================
def update_system(gas_value):
global alarm
global alarm_acknowledged
if gas_value > 3000:
alarm = True
if alarm_acknowledged == False:
alarm_on()
else:
alarm = False
alarm_acknowledged = False
alarm_off()
# =====================================================
# MAIN PROGRAM
# =====================================================
print("Gas Leak Detection Started")
while True:
now = time.ticks_ms()
if time.ticks_diff(now, last_read_sensor) > DEBOUNCE_SENSOR:
gas_value = gas_sensor.read()
print("Gas Level:", gas_value)
update_system(gas_value)
# 1: syntax error
if button.value() == 0:
alarm_acknowledged = True
buzzer.duty(0)
time.sleep(1)