from machine import Pin, I2C
from utime import sleep_us, ticks_us, sleep
import ssd1306
# Ініціалізація апаратної шини I2C
i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=400000)
# Створення об'єкта OLED-дисплея
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
trigger = Pin(25, Pin.OUT)
echo = Pin(33, Pin.IN)
def ultra():
trigger.off()
sleep_us(2)
trigger.on()
sleep_us(10) # Для датчика HC-SR04 стандартний імпульс — 10 мкс
trigger.off()
# Захист від зависання: додано таймаут, якщо датчик не відповів
timeout = ticks_us()
while echo.value() == 0:
signal_off = ticks_us()
if ticks_us() - timeout > 50000: # 50 мс таймаут
return 0
while echo.value() == 1:
signal_on = ticks_us()
try:
time_pass = signal_on - signal_off
except NameError:
return 0
return time_pass / 58
while True:
dist = ultra()
print(f'Distance: {dist:.2f}cm')
# Виведення даних на дисплей
oled.fill(0) # Очищення екрана перед новим записом
oled.text("Distance:", 0, 0) # Текст на позиції X=0, Y=0
oled.text(f'{dist:.2f} cm', 0, 16) # Значення на позиції X=0, Y=16
oled.show() # Обов'язково для відображення змін
sleep(0.5)