mirror of
				https://github.com/KevinMidboe/python-gpiozero.git
				synced 2025-10-29 17:50:37 +00:00 
			
		
		
		
	Merge pull request #418 from waveform80/fix-distance-sensor
Patch for #385
This commit is contained in:
		@@ -585,11 +585,19 @@ class DistanceSensor(SmoothedInputDevice):
 | 
			
		||||
            self._max_distance = max_distance
 | 
			
		||||
            self._trigger = GPIODevice(trigger)
 | 
			
		||||
            self._echo = Event()
 | 
			
		||||
            self._echo_rise = None
 | 
			
		||||
            self._echo_fall = None
 | 
			
		||||
            self._trigger.pin.function = 'output'
 | 
			
		||||
            self._trigger.pin.state = False
 | 
			
		||||
            self.pin.edges = 'both'
 | 
			
		||||
            self.pin.bounce = None
 | 
			
		||||
            self.pin.when_changed = self._echo.set
 | 
			
		||||
            def callback():
 | 
			
		||||
                if self._echo_rise is None:
 | 
			
		||||
                    self._echo_rise = time()
 | 
			
		||||
                else:
 | 
			
		||||
                    self._echo_fall = time()
 | 
			
		||||
                self._echo.set()
 | 
			
		||||
            self.pin.when_changed = callback
 | 
			
		||||
            self._queue.start()
 | 
			
		||||
        except:
 | 
			
		||||
            self.close()
 | 
			
		||||
@@ -672,14 +680,15 @@ class DistanceSensor(SmoothedInputDevice):
 | 
			
		||||
        self._trigger.pin.state = False
 | 
			
		||||
        # Wait up to 1 second for the echo pin to rise
 | 
			
		||||
        if self._echo.wait(1):
 | 
			
		||||
            start = time()
 | 
			
		||||
            self._echo.clear()
 | 
			
		||||
            # Wait up to 40ms for the echo pin to fall (35ms is maximum pulse
 | 
			
		||||
            # time so any longer means something's gone wrong). Calculate
 | 
			
		||||
            # distance as time for echo multiplied by speed of sound divided by
 | 
			
		||||
            # two to compensate for travel to and from the reflector
 | 
			
		||||
            if self._echo.wait(0.04):
 | 
			
		||||
                distance = (time() - start) * self.speed_of_sound / 2.0
 | 
			
		||||
            if self._echo.wait(0.04) and self._echo_fall is not None and self._echo_rise is not None:
 | 
			
		||||
                distance = (self._echo_fall - self._echo_rise) * self.speed_of_sound / 2.0
 | 
			
		||||
                self._echo_fall = None
 | 
			
		||||
                self._echo_rise = None
 | 
			
		||||
                return min(1.0, distance / self._max_distance)
 | 
			
		||||
            else:
 | 
			
		||||
                # If we only saw one edge it means we missed the echo because
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user