from machine import Pin, time_pulse_us
from time import sleep_us, sleep
# === CONFIGURATION ===
TRIGGER_PIN = 26
ECHO_PIN = 25
MAX_DISTANCE_CM = 500
ECHO_TIMEOUT_US = MAX_DISTANCE_CM * 2 * 29.1 # time for max range
# === SETUP PINS (initialized once) ===
trigger = Pin(TRIGGER_PIN, Pin.OUT)
echo = Pin(ECHO_PIN, Pin.IN)
def check_distance():
trigger.value(0)
sleep_us(2)
# Send 10µs pulse
trigger.value(1)
sleep_us(10)
trigger.value(0)
try:
pulse_time = time_pulse_us(echo, 1, int(ECHO_TIMEOUT_US))
return pulse_time
except OSError as ex:
if ex.args[0] == 110: # timeout
raise OSError("Out of range")
raise ex
def distance_mm():
"""Return distance in millimeters."""
pulse_time = check_distance()
return pulse_time * 100 // 582 # ~ (pulse_time / 5.82)
def distance_cm():
"""Return distance in centimeters."""
pulse_time = check_distance()
return (pulse_time / 2) / 29.1
# === USAGE EXAMPLE ===
while True:
try:
d_cm = distance_cm()
print(f"Distance: {d_cm:.2f} cm")
except OSError as e:
print("Error:", e)
sleep(0.5)