Skip to content

Commit 0813879

Browse files
committed
Don't inherit, use instances instead
1 parent 0ebab18 commit 0813879

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

pslab/external/hcsr04.py

+10-10
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from pslab.serial_handler import SerialHandler
77

88

9-
class HCSR04(LogicAnalyzer, PWMGenerator):
9+
class HCSR04:
1010
"""Read data from ultrasonic distance sensor HC-SR04/HC-SR05.
1111
1212
These sensors can measure distances between 2 cm to 4 m (SR04) / 4.5 m
@@ -60,8 +60,8 @@ def __init__(
6060
echo: str = "LA1",
6161
):
6262
self._device = device
63-
LogicAnalyzer.__init__(self, self._device)
64-
PWMGenerator.__init__(self, self._device)
63+
self._la = LogicAnalyzer(self._device)
64+
self._pwm = PWMGenerator(self._device)
6565
self._trig = trig
6666
self._echo = echo
6767
self._measure_period = 60e-3 # Minimum recommended by datasheet.
@@ -93,26 +93,26 @@ def estimate_distance(
9393
TimeoutError if the end of the ECHO pulse is not detected (i.e. the
9494
object is too far away).
9595
"""
96-
self.capture(
96+
self._la.capture(
9797
channels=self._echo,
9898
events=2 * average,
9999
block=False,
100100
)
101-
self.generate(
101+
self._pwm.generate(
102102
channels=self._trig,
103103
frequency=self._measure_period**-1,
104104
duty_cycles=self._trigger_pulse_length / self._measure_period,
105105
)
106-
time.sleep(self._measure_period * average)
107-
self.set_state(**{self._trig.lower(): 0})
108-
(t,) = self.fetch_data()
106+
# Wait one extra period to make sure we don't miss the final edge.
107+
time.sleep(self._measure_period * (average + 1))
108+
self._pwm.set_state(**{self._trig.lower(): 0})
109+
(t,) = self._la.fetch_data()
109110
self._sanity_check(len(t), 2 * average)
110111
high_times = t[::2] - t[1::2]
111112
return speed_of_sound * high_times.mean() / 2 * 1e-6
112113

113114
def _sanity_check(self, events: int, expected_events: int):
114-
if self.get_initial_states()[self._echo]:
115+
if self._la.get_initial_states()[self._echo]:
115116
raise RuntimeError("ECHO pin was HIGH when measurement started.")
116-
117117
if events < expected_events:
118118
raise TimeoutError

0 commit comments

Comments
 (0)