From 3a7acbf89ddc3b18992b18c177cb935e32bdcf9b Mon Sep 17 00:00:00 2001 From: Andrew Scheller Date: Thu, 26 May 2016 18:34:51 +0000 Subject: [PATCH] Add LedBorg as a subclass of RGBLED --- docs/api_boards.rst | 7 +++++ docs/images/output_device_hierarchy.dot | 1 + docs/images/output_device_hierarchy.pdf | Bin 8304 -> 8653 bytes docs/images/output_device_hierarchy.png | Bin 21699 -> 23066 bytes docs/images/output_device_hierarchy.svg | 34 +++++++++++++-------- gpiozero/__init__.py | 1 + gpiozero/boards.py | 39 +++++++++++++++++++++++- tests/test_boards.py | 7 ++++- 8 files changed, 75 insertions(+), 14 deletions(-) diff --git a/docs/api_boards.rst b/docs/api_boards.rst index 6b2604b..2db1d83 100644 --- a/docs/api_boards.rst +++ b/docs/api_boards.rst @@ -36,6 +36,13 @@ TrafficLights :inherited-members: :members: +LedBorg +======= + +.. autoclass:: LedBorg + :inherited-members: + :members: + PiLITEr ======= diff --git a/docs/images/output_device_hierarchy.dot b/docs/images/output_device_hierarchy.dot index 1cd5e02..6a92a52 100644 --- a/docs/images/output_device_hierarchy.dot +++ b/docs/images/output_device_hierarchy.dot @@ -21,5 +21,6 @@ digraph classes { PWMOutputDevice->OutputDevice; PWMLED->PWMOutputDevice; RGBLED->Device; + LedBorg->RGBLED; } diff --git a/docs/images/output_device_hierarchy.pdf b/docs/images/output_device_hierarchy.pdf index 91cb8c143a9c06373374c67288383a1c502ef4b4..b7ffe954af8490ca234b62f9bb51599bc5451f79 100644 GIT binary patch delta 7062 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 LiAh#n4*P!qHLH_o delta 6744 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
)22c;Xs?#mmX!^t4RddUE$~eR%lHc1jr{rx676 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 O8FE+4KobSGef2*9ll3wH literal 21699 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 Device - -Device + +Device GPIODevice - -GPIODevice + +GPIODevice GPIODevice->Device - - + + OutputDevice @@ -31,8 +31,8 @@ OutputDevice->GPIODevice - - + + DigitalOutputDevice @@ -86,13 +86,23 @@ RGBLED - -RGBLED + +RGBLED RGBLED->Device - - + + + + +LedBorg + +LedBorg + + +LedBorg->RGBLED + + diff --git a/gpiozero/__init__.py b/gpiozero/__init__.py index 63191c1..e2933be 100644 --- a/gpiozero/__init__.py +++ b/gpiozero/__init__.py @@ -106,6 +106,7 @@ from .boards import ( LEDCollection, LEDBoard, LEDBarGraph, + LedBorg, PiLiter, PiLiterBarGraph, TrafficLights, diff --git a/gpiozero/boards.py b/gpiozero/boards.py index e8bb0b9..31419a8 100644 --- a/gpiozero/boards.py +++ b/gpiozero/boards.py @@ -21,7 +21,14 @@ from .exc import ( OutputDeviceBadValue, ) from .input_devices import Button -from .output_devices import OutputDevice, LED, PWMLED, Buzzer, Motor +from .output_devices import ( + OutputDevice, + LED, + PWMLED, + RGBLED, + Buzzer, + Motor, + ) from .threads import GPIOThread from .devices import Device, CompositeDevice from .mixins import SharedMixin, SourceMixin @@ -431,6 +438,36 @@ class LEDBarGraph(LEDCollection): led.value = calc_value(index) +class LedBorg(RGBLED): + """ + Extends :class:`RGBLED` for the `PiBorg LedBorg`_: an add-on board + containing a very bright RGB LED. + + The LedBorg pins are fixed and therefore there's no need to specify them + when constructing this class. The following example turns the LedBorg + purple:: + + from gpiozero import LedBorg + + led = LedBorg() + led.color = (1, 0, 1) + + :param tuple initial_value: + The initial color for the LedBorg. Defaults to black ``(0, 0, 0)``. + + :param bool pwm: + If ``True`` (the default), construct :class:`PWMLED` instances for + each component of the LedBorg. If ``False``, construct regular + :class:`LED` instances, which prevents smooth color graduations. + + .. _PiBorg LedBorg: https://www.piborg.org/ledborg + """ + + def __init__(self, initial_value=(0, 0, 0), pwm=True): + super(LedBorg, self).__init__(red=17, green=27, blue=22, + initial_value=initial_value, pwm=pwm) + + class PiLiter(LEDBoard): """ Extends :class:`LEDBoard` for the `Ciseco Pi-LITEr`_: a strip of 8 very bright diff --git a/tests/test_boards.py b/tests/test_boards.py index ff324c9..1d519df 100644 --- a/tests/test_boards.py +++ b/tests/test_boards.py @@ -18,7 +18,7 @@ from gpiozero import * def setup_function(function): import gpiozero.devices # dirty, but it does the job - if function.__name__ in ('test_robot', 'test_ryanteck_robot', 'test_camjam_kit_robot'): + if function.__name__ in ('test_robot', 'test_ryanteck_robot', 'test_camjam_kit_robot', 'test_led_borg'): gpiozero.devices.pin_factory = MockPWMPin else: gpiozero.devices.pin_factory = MockPin @@ -524,6 +524,11 @@ def test_led_bar_graph_pwm_initial_value(): assert graph.value == -0.5 assert (pin1.state, pin2.state, pin3.state) == (0, 0.5, 1) +def test_led_borg(): + pins = [MockPWMPin(n) for n in (17, 27, 22)] + with LedBorg() as board: + assert [device.pin for device in board._leds] == pins + def test_pi_liter(): pins = [MockPin(n) for n in (4, 17, 27, 18, 22, 23, 24, 25)] with PiLiter() as board: