from hcsr04 import HCSR04
from utime import sleep
from machine import SoftI2C, Pin, Timer
import oled
from machine import PWM
# i2c & OLED
i2c = SoftI2C(scl=Pin(22), sda=Pin(21))
i2c2 = SoftI2C(scl=Pin(23), sda=Pin(19))
OLED = oled.I2C(128, 64, i2c)
OLED2 = oled.I2C(128, 64, i2c2)
led = Pin(15, Pin.OUT)
buzzer = PWM(Pin(12), freq=1000)
# Ultrasonic sensor
ultrasonic_sensor = HCSR04(trigger_pin=5, echo_pin=18)
def off(timer):
buzzer.duty(0)
while True:
distance = ultrasonic_sensor.get_distance_cm()
on_duration = max(0.1, (70 - distance) / 70)
if distance < 70:
led.on()
buzzer.duty(512)
timer = Timer(-1)
timer.init(period=int(on_duration * 1000), mode=Timer.ONE_SHOT, callback=off)
OLED.clear()
OLED.text('warning', 10, 3)
OLED.show()
else:
led.off()
buzzer.duty(0)
OLED.clear()
OLED.text('safe', 10, 3)
OLED.show()
OLED2.clear()
OLED2.text('Distance: ' + str(distance), 10, 3)
OLED2.show()
sleep(0.1)