forked from platypush/platypush
Sleep for (default: 0.1 seconds) between reads when distance sensor runs in
continuous mode to prevent excessive CPU load
This commit is contained in:
parent
17d233b55d
commit
b36a8095ab
1 changed files with 9 additions and 2 deletions
|
@ -25,8 +25,8 @@ class GpioSensorDistancePlugin(GpioPlugin, GpioSensorPlugin):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, trigger_pin: int, echo_pin: int,
|
def __init__(self, trigger_pin: int, echo_pin: int, measurement_interval: float = 0.1,
|
||||||
timeout: float = 1.0, warmup_time: float = 2.0, *args, **kwargs):
|
timeout: float = 2.0, warmup_time: float = 2.0, *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
:param trigger_pin: GPIO PIN where you connected your sensor trigger PIN (the one that triggers the
|
:param trigger_pin: GPIO PIN where you connected your sensor trigger PIN (the one that triggers the
|
||||||
sensor to perform a measurement).
|
sensor to perform a measurement).
|
||||||
|
@ -34,6 +34,9 @@ class GpioSensorDistancePlugin(GpioPlugin, GpioSensorPlugin):
|
||||||
:param echo_pin: GPIO PIN where you connected your sensor echo PIN (the one that will listen for the
|
:param echo_pin: GPIO PIN where you connected your sensor echo PIN (the one that will listen for the
|
||||||
signal to bounce back and therefore trigger the distance calculation).
|
signal to bounce back and therefore trigger the distance calculation).
|
||||||
|
|
||||||
|
:param measurement_interval: When running in continuous mode (see
|
||||||
|
:func:`platypush.plugins.gpio.sensor.distance.GpioSensorDistancePlugin.start_measurement`) this parameter
|
||||||
|
indicates how long should be waited between two measurements (default: 0.1 seconds)
|
||||||
:param timeout: The echo-wait will terminate and the plugin will return null if no echo has been
|
:param timeout: The echo-wait will terminate and the plugin will return null if no echo has been
|
||||||
received after this time (default: 1 second).
|
received after this time (default: 1 second).
|
||||||
|
|
||||||
|
@ -45,6 +48,7 @@ class GpioSensorDistancePlugin(GpioPlugin, GpioSensorPlugin):
|
||||||
|
|
||||||
self.trigger_pin = trigger_pin
|
self.trigger_pin = trigger_pin
|
||||||
self.echo_pin = echo_pin
|
self.echo_pin = echo_pin
|
||||||
|
self.measurement_interval = measurement_interval
|
||||||
self.timeout = timeout
|
self.timeout = timeout
|
||||||
self.warmup_time = warmup_time
|
self.warmup_time = warmup_time
|
||||||
self._measurement_thread: Optional[threading.Thread] = None
|
self._measurement_thread: Optional[threading.Thread] = None
|
||||||
|
@ -135,12 +139,15 @@ class GpioSensorDistancePlugin(GpioPlugin, GpioSensorPlugin):
|
||||||
def _get_measurement_thread(self, duration: float):
|
def _get_measurement_thread(self, duration: float):
|
||||||
def _thread():
|
def _thread():
|
||||||
with self:
|
with self:
|
||||||
|
self.logger.info('Started distance measurement thread')
|
||||||
start_time = time.time()
|
start_time = time.time()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
while self._measurement_thread_can_run and (
|
while self._measurement_thread_can_run and (
|
||||||
not duration or time.time() - start_time <= duration):
|
not duration or time.time() - start_time <= duration):
|
||||||
self.get_measurement()
|
self.get_measurement()
|
||||||
|
if self.measurement_interval:
|
||||||
|
time.sleep(self.measurement_interval)
|
||||||
finally:
|
finally:
|
||||||
self._measurement_thread = None
|
self._measurement_thread = None
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue