from machine import Pin, Timer
import time
class UltrasonicLED:
def __init__(self, trig_pin, echo_pin, led_pin):
self.trig = Pin(trig_pin, Pin.OUT)
self.echo = Pin(echo_pin, Pin.IN)
self.led = Pin(led_pin, Pin.OUT)
self.led_state = False
self.blink_timer = Timer(-1)
self.trig.value(0)
time.sleep(2)
def _blink(self, timer):
self.led.value(self.led_state)
self.led_state = not self.led_state
def measure_distance(self):
self.trig.value(1)
time.sleep_us(10)
self.trig.value(0)
timeout = time.ticks_add(time.ticks_us(), 30000)
start = time.ticks_us()
while self.echo.value() == 0 and time.ticks_diff(time.ticks_us(), timeout) < 0:
pass
while self.echo.value() == 1:
end = time.ticks_us()
pulse_duration = time.ticks_diff(end, start)
distance = (pulse_duration * 0.0343) / 2
return distance
def run(self):
while True:
distance = self.measure_distance()
if 0 < distance <= 200:
period = int(distance * 9.5)
self.blink_timer.init(period=period, mode=Timer.PERIODIC, callback=self._blink)
else:
self.blink_timer.deinit()
self.led.value(0)
time.sleep(2)
sensor = UltrasonicLED(18, 19, 0)
sensor.run()