-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhcsr04.py
36 lines (32 loc) · 1.23 KB
/
hcsr04.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import machine
import time
class HCSR04:
def __init__(self, trigger_pin, echo_pin):
self.trigger_pin = machine.Pin(trigger_pin, machine.Pin.OUT)
self.echo_pin = machine.Pin(echo_pin, machine.Pin.IN)
self.speed_of_sound = 343
self.echo_pin.irq(trigger=machine.Pin.IRQ_RISING | machine.Pin.IRQ_FALLING, handler=self._echo_handler)
self.start_time = 0
self.end_time = 0
self.pulse_duration = 0
self.measurement_complete = False
def _echo_handler(self, pin):
if self.echo_pin.value():
self.start_time = time.ticks_us()
else:
self.end_time = time.ticks_us()
self.pulse_duration = time.ticks_diff(self.end_time, self.start_time)
self.measurement_complete = True
def distance_cm(self):
self.trigger_pin.value(1)
time.sleep_us(10)
self.trigger_pin.value(0)
while not self.measurement_complete:
pass
distance = self.pulse_duration * self.speed_of_sound / 2 / 10000
distance = min(round(distance, 2), 999)
self.start_time = 0
self.end_time = 0
self.pulse_duration = 0
self.measurement_complete = False
return distance