from machine import Pin # ハードウェア操作用のモジュールを読み込み
import utime # 時間を扱うモジュールを読み込み
# 超音波センサーのTRIGピンとECHOピンを設定
TRIG = Pin("GP18", Pin.OUT) # TRIG:超音波を出す信号を送る
ECHO = Pin("GP17", Pin.IN) # ECHO:超音波の反射を受け取る
# 距離を測る関数(戻り値はcm単位)
def distance():
TRIG.low()
utime.sleep_us(2)
TRIG.high()
utime.sleep_us(10)
TRIG.low()
timeout = 5880 # 5880us=1m以上の距離はタイムアウトとする
start = utime.ticks_us()
# ECHOがHIGHになるまで待機(タイムアウトあり)
while ECHO.value() == 0:
if utime.ticks_diff(utime.ticks_us(), start) > timeout:
return -1 # タイムアウト時はエラー値を返す
time1 = utime.ticks_us()
# ECHOがLOWになるまで待機(タイムアウトあり)
while ECHO.value() == 1:
if utime.ticks_diff(utime.ticks_us(), time1) > timeout:
return -1
time2 = utime.ticks_us()
duration = utime.ticks_diff(time2, time1) # 距離を計算(cm単位)
distance_cm = duration * 340 / 2 / 10000
return distance_cm
# メインループ:ずっと距離を測り続ける
while True:
distance_cm = distance() # 距離を測る
print(f'距離:{distance_cm:.2f} cm') # 小数第2位まで表示
utime.sleep_ms(300) # 0.3秒待ってから次の測定へ