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

Lines changed: 10 additions & 10 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy