from machine import Pin, PWM
import time
# --- HARDWARE SETUP ---
door_button = Pin(15, Pin.IN, Pin.PULL_UP)
report_button = Pin(18, Pin.IN, Pin.PULL_UP)
led = Pin(2, Pin.OUT)
buzzer = PWM(Pin(4))
buzzer.freq(1000)
buzzer.duty(0)
print("=== MicroPython Door Intrusion Monitor ===")
print("Press Door Button = OPEN/CLOSE")
print("Press Report Button = Generate Report")
door_state = "CLOSED"
open_timestamp = 0
total_open_time = 0
open_count = 0
THRESHOLD_TIME = 0 # seconds
while True:
door_pressed = (door_button.value() == 0)
report_pressed = (report_button.value() == 0)
# -------- DOOR OPEN --------
if door_pressed and door_state == "CLOSED":
door_state = "OPEN"
open_timestamp = time.time()
open_count += 1
led.value(1)
print("🔴 LED ON")
print("Door Opened")
# -------- DOOR CLOSE --------
elif not door_pressed and door_state == "OPEN":
door_state = "CLOSED"
duration = time.time() - open_timestamp
total_open_time += duration
led.value(0)
buzzer.duty(0) # STOP buzzer immediately
print("🟢 LED OFF | 🔕 Buzzer OFF")
print("Door Closed")
print("Duration:", round(duration,2), "seconds")
# -------- THRESHOLD ALERT --------
if door_state == "OPEN":
duration = time.time() - open_timestamp
if duration > THRESHOLD_TIME:
buzzer.duty(512)
# -------- REPORT --------
if report_pressed:
print("\n===== REPORT =====")
print("Total Opens:", open_count)
print("Total Open Time:", round(total_open_time,2), "seconds")
if open_count > 0:
print("Average Open Time:", round(total_open_time / open_count,2))
print("==================\n")
time.sleep(1)
time.sleep(0.05)