mirror of
				https://github.com/KevinMidboe/python-gpiozero.git
				synced 2025-10-29 17:50:37 +00:00 
			
		
		
		
	| @@ -11,11 +11,12 @@ except ImportError: | ||||
|  | ||||
| from time import sleep | ||||
| from collections import namedtuple | ||||
| from itertools import repeat | ||||
|  | ||||
| from .exc import InputDeviceError, OutputDeviceError | ||||
| from .input_devices import Button | ||||
| from .output_devices import LED, PWMLED, Buzzer, Motor | ||||
| from .devices import CompositeDevice, SourceMixin | ||||
| from .devices import GPIOThread, CompositeDevice, SourceMixin | ||||
|  | ||||
|  | ||||
| class LEDBoard(SourceMixin, CompositeDevice): | ||||
| @@ -41,12 +42,14 @@ class LEDBoard(SourceMixin, CompositeDevice): | ||||
|         parameter can only be specified as a keyword parameter. | ||||
|     """ | ||||
|     def __init__(self, *pins, **kwargs): | ||||
|         self._blink_thread = None | ||||
|         super(LEDBoard, self).__init__() | ||||
|         pwm = kwargs.get('pwm', False) | ||||
|         LEDClass = PWMLED if pwm else LED | ||||
|         self._leds = tuple(LEDClass(pin) for pin in pins) | ||||
|  | ||||
|     def close(self): | ||||
|         self._stop_blink() | ||||
|         for led in self.leds: | ||||
|             led.close() | ||||
|  | ||||
| @@ -79,6 +82,7 @@ class LEDBoard(SourceMixin, CompositeDevice): | ||||
|         """ | ||||
|         Turn all the LEDs on. | ||||
|         """ | ||||
|         self._stop_blink() | ||||
|         for led in self.leds: | ||||
|             led.on() | ||||
|  | ||||
| @@ -86,6 +90,7 @@ class LEDBoard(SourceMixin, CompositeDevice): | ||||
|         """ | ||||
|         Turn all the LEDs off. | ||||
|         """ | ||||
|         self._stop_blink() | ||||
|         for led in self.leds: | ||||
|             led.off() | ||||
|  | ||||
| @@ -116,9 +121,31 @@ class LEDBoard(SourceMixin, CompositeDevice): | ||||
|             finished (warning: the default value of *n* will result in this | ||||
|             method never returning). | ||||
|         """ | ||||
|         # XXX This isn't going to work for background=False | ||||
|         for led in self.leds: | ||||
|             led.blink(on_time, off_time, n, background) | ||||
|         self._stop_blink() | ||||
|         self._blink_thread = GPIOThread( | ||||
|             target=self._blink_leds, args=(on_time, off_time, n) | ||||
|         ) | ||||
|         self._blink_thread.start() | ||||
|         if not background: | ||||
|             self._blink_thread.join() | ||||
|             self._blink_thread = None | ||||
|  | ||||
|     def _stop_blink(self): | ||||
|         if self._blink_thread: | ||||
|             self._blink_thread.stop() | ||||
|             self._blink_thread = None | ||||
|  | ||||
|     def _blink_leds(self, on_time, off_time, n): | ||||
|         iterable = repeat(0) if n is None else repeat(0, n) | ||||
|         for i in iterable: | ||||
|             for led in self.leds: | ||||
|                 led.on() | ||||
|             if self._blink_thread.stopping.wait(on_time): | ||||
|                 break             | ||||
|             for led in self.leds: | ||||
|                 led.off() | ||||
|             if self._blink_thread.stopping.wait(off_time): | ||||
|                 break             | ||||
|  | ||||
|  | ||||
| class PiLiter(LEDBoard): | ||||
|   | ||||
		Reference in New Issue
	
	Block a user