import utime
from machine import Pin
V = 340 # m/s ~ 0.34 mm/us
do = False # cờ trạng thái đo
tup = 0
tdo = 0
trig = Pin(25, Pin.OUT)
echo = Pin(26, Pin.IN, Pin.PULL_DOWN)
# Hàm phát xung trigger
def phat_trigger():
global do
trig.value(0)
utime.sleep_us(2)
trig.value(1)
utime.sleep_us(10) # nên để 10us
trig.value(0)
do = True
# Hàm ngắt xử lý tín hiệu echo
def ngat(_echo):
global do, tup, tdo
if not do:
return
if _echo.value() == 1:
tup = utime.ticks_us()
else:
t2 = utime.ticks_us()
tdo = utime.ticks_diff(t2, tup)
do = False
# Thiết lập ngắt cạnh lên và xuống cho echo
echo.irq(trigger=Pin.IRQ_RISING | Pin.IRQ_FALLING, handler=ngat)
# Vòng lặp chính
while True:
phat_trigger()
# Đợi cho đến khi quá trình đo hoàn tất (tdo được cập nhật)
while do:
pass
distance = V * tdo / 2000 # vì V = mm/us, chia 2 do sóng đi và về
print("Thời gian:", tdo, "us")
print("Khoảng cách:", round(distance, 2), "cm")
utime.sleep(1)