mirror of
				https://github.com/KevinMidboe/python-gpiozero.git
				synced 2025-10-29 17:50:37 +00:00 
			
		
		
		
	More work on the tests...
This commit is contained in:
		@@ -8,7 +8,7 @@ str = type('')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
from collections import namedtuple
 | 
			
		||||
from time import time
 | 
			
		||||
from time import time, sleep
 | 
			
		||||
from threading import Thread, Event
 | 
			
		||||
try:
 | 
			
		||||
    from math import isclose
 | 
			
		||||
@@ -182,7 +182,7 @@ class MockChargingPin(MockPin):
 | 
			
		||||
    """
 | 
			
		||||
    def __init__(self, number):
 | 
			
		||||
        super(MockChargingPin, self).__init__()
 | 
			
		||||
        self.charge_time = 0.01
 | 
			
		||||
        self.charge_time = 0.01 # dark charging time
 | 
			
		||||
        self._charge_stop = Event()
 | 
			
		||||
        self._charge_thread = None
 | 
			
		||||
 | 
			
		||||
@@ -193,16 +193,51 @@ class MockChargingPin(MockPin):
 | 
			
		||||
                self._charge_stop.set()
 | 
			
		||||
                self._charge_thread.join()
 | 
			
		||||
            self._charge_stop.clear()
 | 
			
		||||
            self._charge_thread = Thread(target=lambda: self._charged)
 | 
			
		||||
            self._charge_thread = Thread(target=self._charge)
 | 
			
		||||
            self._charge_thread.start()
 | 
			
		||||
        elif value == 'output':
 | 
			
		||||
            if self.charge_thread:
 | 
			
		||||
            if self._charge_thread:
 | 
			
		||||
                self._charge_stop.set()
 | 
			
		||||
                self._charge_thread.join()
 | 
			
		||||
 | 
			
		||||
    def _charged(self):
 | 
			
		||||
    def _charge(self):
 | 
			
		||||
        if not self._charge_stop.wait(self.charge_time):
 | 
			
		||||
            self.drive_high()
 | 
			
		||||
            try:
 | 
			
		||||
                self.drive_high()
 | 
			
		||||
            except AssertionError:
 | 
			
		||||
                # Charging pins are typically flipped between input and output
 | 
			
		||||
                # repeatedly; if another thread has already flipped us to
 | 
			
		||||
                # output ignore the assertion-error resulting from attempting
 | 
			
		||||
                # to drive the pin high
 | 
			
		||||
                pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class MockTriggerPin(MockPin):
 | 
			
		||||
    """
 | 
			
		||||
    This derivative of :class:`MockPin` is intended to be used with another
 | 
			
		||||
    :class:`MockPin` to emulate a distance sensor. Set :attr:`echo_pin` to the
 | 
			
		||||
    corresponding pin instance. When this pin is driven high it will trigger
 | 
			
		||||
    the echo pin to drive high for the echo time.
 | 
			
		||||
    """
 | 
			
		||||
    def __init__(self, number):
 | 
			
		||||
        super(MockTriggerPin, self).__init__()
 | 
			
		||||
        self.echo_pin = None
 | 
			
		||||
        self.echo_time = 0.04 # longest echo time
 | 
			
		||||
        self._echo_thread = None
 | 
			
		||||
 | 
			
		||||
    def _set_state(self, value):
 | 
			
		||||
        super(MockTriggerPin, self)._set_state(value)
 | 
			
		||||
        if value:
 | 
			
		||||
            if self._echo_thread:
 | 
			
		||||
                self._echo_thread.join()
 | 
			
		||||
            self._echo_thread = Thread(target=self._echo)
 | 
			
		||||
            self._echo_thread.start()
 | 
			
		||||
 | 
			
		||||
    def _echo(self):
 | 
			
		||||
        sleep(0.001)
 | 
			
		||||
        self.echo_pin.drive_high()
 | 
			
		||||
        sleep(self.echo_time)
 | 
			
		||||
        self.echo_pin.drive_low()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class MockPWMPin(MockPin):
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user