File tree Expand file tree Collapse file tree 1 file changed +13
-4
lines changed
Expand file tree Collapse file tree 1 file changed +13
-4
lines changed Original file line number Diff line number Diff line change @@ -585,11 +585,19 @@ def __init__(
585585 self ._max_distance = max_distance
586586 self ._trigger = GPIODevice (trigger )
587587 self ._echo = Event ()
588+ self ._echo_rise = None
589+ self ._echo_fall = None
588590 self ._trigger .pin .function = 'output'
589591 self ._trigger .pin .state = False
590592 self .pin .edges = 'both'
591593 self .pin .bounce = None
592- self .pin .when_changed = self ._echo .set
594+ def callback ():
595+ if self ._echo_rise is None :
596+ self ._echo_rise = time ()
597+ else :
598+ self ._echo_fall = time ()
599+ self ._echo .set ()
600+ self .pin .when_changed = callback
593601 self ._queue .start ()
594602 except :
595603 self .close ()
@@ -672,14 +680,15 @@ def _read(self):
672680 self ._trigger .pin .state = False
673681 # Wait up to 1 second for the echo pin to rise
674682 if self ._echo .wait (1 ):
675- start = time ()
676683 self ._echo .clear ()
677684 # Wait up to 40ms for the echo pin to fall (35ms is maximum pulse
678685 # time so any longer means something's gone wrong). Calculate
679686 # distance as time for echo multiplied by speed of sound divided by
680687 # two to compensate for travel to and from the reflector
681- if self ._echo .wait (0.04 ):
682- distance = (time () - start ) * self .speed_of_sound / 2.0
688+ if self ._echo .wait (0.04 ) and self ._echo_fall is not None and self ._echo_rise is not None :
689+ distance = (self ._echo_fall - self ._echo_rise ) * self .speed_of_sound / 2.0
690+ self ._echo_fall = None
691+ self ._echo_rise = None
683692 return min (1.0 , distance / self ._max_distance )
684693 else :
685694 # If we only saw one edge it means we missed the echo because
You can’t perform that action at this time.
0 commit comments