mirror of
https://github.com/KevinMidboe/python-gpiozero.git
synced 2025-12-08 20:39:01 +00:00
Merge branch 'master' into when-active-when-inactive
Conflicts: gpiozero/devices.py gpiozero/input_devices.py
This commit is contained in:
@@ -8,7 +8,7 @@ from .devices import (
|
|||||||
_gpio_threads_shutdown,
|
_gpio_threads_shutdown,
|
||||||
GPIODeviceError,
|
GPIODeviceError,
|
||||||
GPIODevice,
|
GPIODevice,
|
||||||
)
|
)
|
||||||
from .input_devices import (
|
from .input_devices import (
|
||||||
InputDeviceError,
|
InputDeviceError,
|
||||||
InputDevice,
|
InputDevice,
|
||||||
@@ -23,6 +23,12 @@ from .output_devices import (
|
|||||||
Buzzer,
|
Buzzer,
|
||||||
Motor,
|
Motor,
|
||||||
)
|
)
|
||||||
|
from .boards import (
|
||||||
|
TrafficLights,
|
||||||
|
PiTraffic,
|
||||||
|
FishDish,
|
||||||
|
PiLiter,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def gpiozero_shutdown():
|
def gpiozero_shutdown():
|
||||||
|
|||||||
76
gpiozero/boards.py
Normal file
76
gpiozero/boards.py
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
from .input_devices import Button
|
||||||
|
from .output_devices import LED, Buzzer
|
||||||
|
from .devices import GPIODeviceError
|
||||||
|
|
||||||
|
|
||||||
|
class TrafficLights(object):
|
||||||
|
def __init__(self, red=None, amber=None, green=None):
|
||||||
|
if not all([red, amber, green]):
|
||||||
|
raise GPIODeviceError('Red, Amber and Green pins must be provided')
|
||||||
|
|
||||||
|
self.red = LED(red)
|
||||||
|
self.amber = LED(amber)
|
||||||
|
self.green = LED(green)
|
||||||
|
self._leds = (self.red, self.amber, self.green)
|
||||||
|
|
||||||
|
def on(self):
|
||||||
|
for led in self._leds:
|
||||||
|
led.on()
|
||||||
|
|
||||||
|
def off(self):
|
||||||
|
for led in self._leds:
|
||||||
|
led.off()
|
||||||
|
|
||||||
|
def blink(self, on_time=1, off_time=1):
|
||||||
|
for led in self._leds:
|
||||||
|
led.blink(on_time, off_time)
|
||||||
|
|
||||||
|
|
||||||
|
class FishDish(TrafficLights):
|
||||||
|
def __init__(self):
|
||||||
|
red, amber, green = (9, 22, 4)
|
||||||
|
super(FishDish, self).__init__(red, amber, green)
|
||||||
|
self.buzzer = Buzzer(8)
|
||||||
|
self.button = Button(pin=7, pull_up=False)
|
||||||
|
self._all = tuple(list(self._leds) + [self.buzzer])
|
||||||
|
|
||||||
|
def on(self):
|
||||||
|
for thing in self._all:
|
||||||
|
thing.on()
|
||||||
|
|
||||||
|
def off(self):
|
||||||
|
for thing in self._all:
|
||||||
|
thing.off()
|
||||||
|
|
||||||
|
def lights_on(self):
|
||||||
|
super.on()
|
||||||
|
|
||||||
|
def lights_off(self):
|
||||||
|
super.off()
|
||||||
|
|
||||||
|
|
||||||
|
class TrafficHat(FishDish):
|
||||||
|
def __init__(self):
|
||||||
|
red, amber, green = (24, 23, 22)
|
||||||
|
super(PiTraffic, self).__init__(red, amber, green)
|
||||||
|
self.buzzer = Buzzer(5)
|
||||||
|
self.button = Button(25)
|
||||||
|
self._all = tuple(list(self._leds) + [self.buzzer])
|
||||||
|
|
||||||
|
|
||||||
|
class PiLiter(object):
|
||||||
|
def __init__(self):
|
||||||
|
leds = (4, 17, 27, 18, 22, 23, 24, 25)
|
||||||
|
self._leds = tuple([LED(led) for led in leds])
|
||||||
|
|
||||||
|
def on(self):
|
||||||
|
for led in self._leds:
|
||||||
|
led.on()
|
||||||
|
|
||||||
|
def off(self):
|
||||||
|
for led in self._leds:
|
||||||
|
led.off()
|
||||||
|
|
||||||
|
def blink(self, on_time=1, off_time=1):
|
||||||
|
for led in self._leds:
|
||||||
|
led.blink(on_time, off_time)
|
||||||
@@ -33,6 +33,8 @@ class GPIODevice(object):
|
|||||||
|
|
||||||
|
|
||||||
_GPIO_THREADS = set()
|
_GPIO_THREADS = set()
|
||||||
|
|
||||||
|
|
||||||
def _gpio_threads_shutdown():
|
def _gpio_threads_shutdown():
|
||||||
while _GPIO_THREADS:
|
while _GPIO_THREADS:
|
||||||
for t in _GPIO_THREADS.copy():
|
for t in _GPIO_THREADS.copy():
|
||||||
@@ -95,4 +97,3 @@ class GPIOQueue(GPIOThread):
|
|||||||
# Parent is dead; time to die!
|
# Parent is dead; time to die!
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -128,6 +128,7 @@ class SmoothedInputDevice(WaitableInputDevice):
|
|||||||
|
|
||||||
def _get_threshold(self):
|
def _get_threshold(self):
|
||||||
return self._threshold
|
return self._threshold
|
||||||
|
|
||||||
def _set_threshold(self, value):
|
def _set_threshold(self, value):
|
||||||
if not (0.0 < value < 1.0):
|
if not (0.0 < value < 1.0):
|
||||||
raise InputDeviceError('threshold must be between zero and one exclusive')
|
raise InputDeviceError('threshold must be between zero and one exclusive')
|
||||||
@@ -208,6 +209,7 @@ class LightSensor(SmoothedInputDevice):
|
|||||||
wait_for_dark = _alias('wait_for_inactive')
|
wait_for_dark = _alias('wait_for_inactive')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class TemperatureSensor(W1ThermSensor):
|
class TemperatureSensor(W1ThermSensor):
|
||||||
@property
|
@property
|
||||||
def value(self):
|
def value(self):
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
from RPi import GPIO
|
from RPi import GPIO
|
||||||
|
from time import sleep
|
||||||
|
|
||||||
from .devices import GPIODeviceError, GPIODevice, GPIOThread
|
from .devices import GPIODeviceError, GPIODevice, GPIOThread
|
||||||
|
|
||||||
@@ -24,9 +25,11 @@ class LED(OutputDevice):
|
|||||||
super(LED, self).__init__(pin)
|
super(LED, self).__init__(pin)
|
||||||
self._blink_thread = None
|
self._blink_thread = None
|
||||||
|
|
||||||
def blink(self, on_time, off_time):
|
def blink(self, on_time=1, off_time=1):
|
||||||
self._stop_blink()
|
self._stop_blink()
|
||||||
self._blink_thread = GPIOThread(target=self._blink_led, args=(on_time, off_time))
|
self._blink_thread = GPIOThread(
|
||||||
|
target=self._blink_led, args=(on_time, off_time)
|
||||||
|
)
|
||||||
self._blink_thread.start()
|
self._blink_thread.start()
|
||||||
|
|
||||||
def _stop_blink(self):
|
def _stop_blink(self):
|
||||||
@@ -58,3 +61,35 @@ class Buzzer(OutputDevice):
|
|||||||
|
|
||||||
class Motor(OutputDevice):
|
class Motor(OutputDevice):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class Robot(object):
|
||||||
|
def __init__(self, left=None, right=None):
|
||||||
|
if not all([left, right]):
|
||||||
|
raise GPIODeviceError('left and right pins must be provided')
|
||||||
|
|
||||||
|
self._left = Motor(left)
|
||||||
|
self._right = Motor(right)
|
||||||
|
|
||||||
|
def left(self, seconds=None):
|
||||||
|
self._left.on()
|
||||||
|
if seconds is not None:
|
||||||
|
sleep(seconds)
|
||||||
|
self._left.off()
|
||||||
|
|
||||||
|
def right(self, seconds=None):
|
||||||
|
self._right.on()
|
||||||
|
if seconds is not None:
|
||||||
|
sleep(seconds)
|
||||||
|
self._right.off()
|
||||||
|
|
||||||
|
def forwards(self, seconds=None):
|
||||||
|
self.left()
|
||||||
|
self.right()
|
||||||
|
if seconds is not None:
|
||||||
|
sleep(seconds)
|
||||||
|
self.stop()
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
self._left.off()
|
||||||
|
self._right.off()
|
||||||
|
|||||||
Reference in New Issue
Block a user