# =======================================================
# HC-SR04 + BUZZER (NÂNG CAO - MicroPython)
# =======================================================
from machine import Pin
import time
trig = Pin(15, Pin.OUT)
echo = Pin(14, Pin.IN)
buzzer = Pin(16, Pin.OUT)
last_toggle = 0
buzzer_state = 0
def get_distance():
trig.low()
time.sleep_us(2)
trig.high()
time.sleep_us(10)
trig.low()
timeout = time.ticks_us()
while echo.value() == 0:
if time.ticks_diff(time.ticks_us(), timeout) > 30000:
return 0
start = time.ticks_us()
while echo.value() == 1:
if time.ticks_diff(time.ticks_us(), start) > 30000:
return 0
end = time.ticks_us()
duration = time.ticks_diff(end, start)
distance = duration * 0.034 / 2
return distance
while True:
d = get_distance()
# vùng an toàn
if d >= 30 or d == 0:
buzzer.value(0)
continue
# tính khoảng thời gian beep
interval = int(d * 10)
if interval < 50:
interval = 50
now = time.ticks_ms()
if time.ticks_diff(now, last_toggle) >= interval:
buzzer_state = not buzzer_state
buzzer.value(buzzer_state)
last_toggle = now