Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def on(self):
"""
Turns all the LEDs on and makes the buzzer play its mid tone.
"""
self.buzzer.value = 0
super(JamHat, self).on()
def off(self):
"""
Turns all the LEDs off and stops the buzzer.
"""
self.buzzer.value = None
super(JamHat, self).off()
class Pibrella(CompositeOutputDevice):
"""
Extends :class:`CompositeOutputDevice` for the Cyntech/Pimoroni `Pibrella`_
board.
The Pibrella board comprises 3 LEDs, a button, a tonal buzzer, four general
purpose input channels, and four general purpose output channels (with LEDs).
This class exposes the LEDs, button and buzzer.
Usage::
from gpiozero import Pibrella
pb = Pibrella()
pb.button.wait_for_press()
def off(self):
"""
Turn all the output devices off.
"""
for device in self:
if isinstance(device, (OutputDevice, CompositeOutputDevice)):
device.off()
_order=('left', 'right'),
pin_factory=pin_factory
),
eyes=LEDBoard(
left=12, right=6,
pwm=pwm, initial_value=initial_value,
_order=('left', 'right'),
pin_factory=pin_factory
),
pwm=pwm, initial_value=initial_value,
_order=('eyes', 'sides'),
pin_factory=pin_factory
)
class JamHat(CompositeOutputDevice):
"""
Extends :class:`CompositeOutputDevice` for the `ModMyPi JamHat`_ board.
There are 6 LEDs, two buttons and a tonal buzzer. The pins are fixed.
Usage::
from gpiozero import JamHat
hat = JamHat()
hat.button_1.wait_for_press()
hat.lights_1.on()
hat.buzzer.play('C4')
hat.button_2.wait_for_press()
hat.off()
The :class:`Buzzer` instance passed as the *buzzer* parameter.
.. attribute:: button
The :class:`Button` instance passed as the *button* parameter.
"""
def __init__(self, lights, buzzer, button, pin_factory=None):
super(TrafficLightsBuzzer, self).__init__(
lights=lights, buzzer=buzzer, button=button,
_order=('lights', 'buzzer', 'button'),
pin_factory=pin_factory
)
class FishDish(CompositeOutputDevice):
"""
Extends :class:`CompositeOutputDevice` for the `Pi Supply FishDish`_: traffic
light LEDs, a button and a buzzer.
The FishDish pins are fixed and therefore there's no need to specify them
when constructing this class. The following example waits for the button
to be pressed on the FishDish, then turns on all the LEDs::
from gpiozero import FishDish
fish = FishDish()
fish.button.wait_for_press()
fish.lights.on()
:param bool pwm:
If :data:`True`, construct :class:`PWMLED` instances to represent each
(22, 27, 19),
(9, 10, 15),
(5, 11, 26),
(13, 6, 18),
)
pin_factory = kwargs.pop('pin_factory', None)
if len(labels) == 0:
labels = self.default_labels
elif len(labels) > len(pins):
raise ValueError("StatusBoard doesn't support more than five labels")
dup, count = Counter(labels).most_common(1)[0]
if count > 1:
raise ValueError("Duplicate label %s" % dup)
super(StatusBoard, self).__init__(
_order=labels, pin_factory=pin_factory, **{
label: CompositeOutputDevice(
button=Button(button, pin_factory=pin_factory),
lights=LEDBoard(
red=red, green=green, _order=('red', 'green'),
pin_factory=pin_factory, **kwargs
), _order=('button', 'lights'), pin_factory=pin_factory
)
for (green, red, button), label in zip(pins, labels)
}
pin_factory=pin_factory
),
eyes=LEDBoard(
left=23, right=24,
pwm=pwm, initial_value=initial_value,
_order=('left', 'right'),
pin_factory=pin_factory
),
nose=25,
pwm=pwm, initial_value=initial_value,
_order=('eyes', 'nose', 'arms'),
pin_factory=pin_factory
)
class TrafficLightsBuzzer(CompositeOutputDevice):
"""
Extends :class:`CompositeOutputDevice` and is a generic class for HATs with
traffic lights, a button and a buzzer.
:param TrafficLights lights:
An instance of :class:`TrafficLights` representing the traffic lights
of the HAT.
:param Buzzer buzzer:
An instance of :class:`Buzzer` representing the buzzer on the HAT.
:param Button button:
An instance of :class:`Button` representing the button on the HAT.
:type pin_factory: Factory or None
:param pin_factory:
See :doc:`api_pins` for more information (this is an advanced feature
which most users can ignore).
.. _Pi Supply FishDish: https://www.pi-supply.com/product/fish-dish-raspberry-pi-led-buzzer-board/
"""
def __init__(self, pwm=False, pin_factory=None):
super(FishDish, self).__init__(
lights=TrafficLights(9, 22, 4, pwm=pwm, pin_factory=pin_factory),
buzzer=Buzzer(8, pin_factory=pin_factory),
button=Button(7, pull_up=False, pin_factory=pin_factory),
_order=('lights', 'buzzer', 'button'),
pin_factory=pin_factory
)
class TrafficHat(CompositeOutputDevice):
"""
Extends :class:`CompositeOutputDevice` for the `Ryanteck Traffic HAT`_: traffic
light LEDs, a button and a buzzer.
The Traffic HAT pins are fixed and therefore there's no need to specify
them when constructing this class. The following example waits for the
button to be pressed on the Traffic HAT, then turns on all the LEDs::
from gpiozero import TrafficHat
hat = TrafficHat()
hat.button.wait_for_press()
hat.lights.on()
:param bool pwm:
If :data:`True`, construct :class:`PWMLED` instances to represent each
raise ValueError("StatusZero doesn't support more than three labels")
dup, count = Counter(labels).most_common(1)[0]
if count > 1:
raise ValueError("Duplicate label %s" % dup)
super(StatusZero, self).__init__(
_order=labels, pin_factory=pin_factory, **{
label: LEDBoard(
red=red, green=green, _order=('red', 'green'),
pin_factory=pin_factory, **kwargs
)
for (green, red), label in zip(pins, labels)
}
)
class StatusBoard(CompositeOutputDevice):
"""
Extends :class:`CompositeOutputDevice` for The Pi Hut's `STATUS`_ board: a
HAT sized add-on board with five sets of red/green LEDs and buttons to
provide a status indicator with additional input.
The following example designates the first strip the label "wifi" and the
second "raining", turns the wifi green and then activates the button to
toggle its lights when pressed::
from gpiozero import StatusBoard
status = StatusBoard('wifi', 'raining')
status.wifi.lights.green.on()
status.wifi.button.when_pressed = status.wifi.lights.toggle
Each designated label will contain a "lights" :class:`LEDBoard` containing
def value(self):
"""
A tuple containing a value for each subordinate device. This property
can also be set to update the state of all subordinate output devices.
"""
return super(CompositeOutputDevice, self).value
old_value, self._last_value = self._last_value, new_value
if old_value is None:
# Initial "indeterminate" value; don't do anything
pass
elif old_value != new_value:
self._fire_changed()
ButtonBoard.is_pressed = ButtonBoard.is_active
ButtonBoard.pressed_time = ButtonBoard.active_time
ButtonBoard.when_pressed = ButtonBoard.when_activated
ButtonBoard.when_released = ButtonBoard.when_deactivated
ButtonBoard.wait_for_press = ButtonBoard.wait_for_active
ButtonBoard.wait_for_release = ButtonBoard.wait_for_inactive
class LEDCollection(CompositeOutputDevice):
"""
Extends :class:`CompositeOutputDevice`. Abstract base class for
:class:`LEDBoard` and :class:`LEDBarGraph`.
"""
def __init__(self, *args, **kwargs):
pwm = kwargs.pop('pwm', False)
active_high = kwargs.pop('active_high', True)
initial_value = kwargs.pop('initial_value', False)
pin_factory = kwargs.pop('pin_factory', None)
order = kwargs.pop('_order', None)
LEDClass = PWMLED if pwm else LED
super(LEDCollection, self).__init__(
*(
pin_or_collection
if isinstance(pin_or_collection, LEDCollection) else
LEDClass(