Exemple #1
0
class MultiColorLed:
    Config = namedtuple('Config', ['channels', 'pattern'])

    OFF         = Config(channels=lambda color: Leds.rgb_off(),
                         pattern=None)
    ON          = Config(channels=Leds.rgb_on,
                         pattern=None)
    BLINK       = Config(channels=Leds.rgb_pattern,
                         pattern=Pattern.blink(500))
    BLINK_3     = BLINK
    BEACON      = BLINK
    BEACON_DARK = BLINK
    DECAY       = BLINK
    PULSE_SLOW  = Config(channels=Leds.rgb_pattern,
                         pattern=Pattern.breathe(500))
    PULSE_QUICK = Config(channels=Leds.rgb_pattern,
                         pattern=Pattern.breathe(100))

    def _update(self, state, brightness):
        with self._lock:
            if state is not None:
                self._state = state
            if brightness is not None:
                self._brightness = brightness

            color = (int(255 * self._brightness), 0, 0)
            if self._state.pattern:
                self._leds.pattern = self._state.pattern
            self._leds.update(self._state.channels(color))

    def __init__(self, channel):
        self._lock = threading.Lock()
        self._brightness = 1.0  # Read and written atomically.
        self._state = self.OFF
        self._leds = Leds()

    def close(self):
        self._leds.reset()

    def __enter__(self):
        return self

    def __exit__(self, exc_type, exc_value, exc_tb):
        self.close()

    @property
    def brightness(self):
        return self._brightness

    @brightness.setter
    def brightness(self, value):
        if value < 0.0 or value > 1.0:
            raise ValueError('Brightness must be between 0.0 and 1.0.')
        self._update(state=None, brightness=value)

    def _set_state(self, state):
        self._update(state=state, brightness=None)
    state = property(None, _set_state)
    time.sleep(0.1)

print('RGB: Blend between GREEN and BLUE for 3.2 seconds')
for i in range(32):
    leds.update(Leds.rgb_on(blend(BLUE, GREEN, i / 32)))
    time.sleep(0.1)

print('RGB: Off for 1 second')
leds.update(Leds.rgb_off())
time.sleep(1)

print('Privacy: On for 2 seconds')
with PrivacyLed(leds):
    time.sleep(2)

print('RGB: Solid GREEN for 2 seconds')
with RgbLeds(leds, Leds.rgb_on(GREEN)):
    time.sleep(2)

print('Custom configuration for 5 seconds')
leds.update({
    1: Leds.Channel(Leds.Channel.PATTERN, 128),  # Red channel
    2: Leds.Channel(Leds.Channel.OFF, 0),  # Green channel
    3: Leds.Channel(Leds.Channel.ON, 128),  # Blue channel
    4: Leds.Channel(Leds.Channel.PATTERN, 64),  # Privacy channel
})
time.sleep(5)

print('Done')
leds.reset()
def main():
    leds = Leds()

    print('RGB: Solid RED for 1 second')
    leds.update(Leds.rgb_on(RED))
    time.sleep(1)

    print('RGB: Solid GREEN for 1 second')
    leds.update(Leds.rgb_on(GREEN))
    time.sleep(1)

    print('RGB: Solid YELLOW for 1 second')
    leds.update(Leds.rgb_on(YELLOW))
    time.sleep(1)

    print('RGB: Solid BLUE for 1 second')
    leds.update(Leds.rgb_on(BLUE))
    time.sleep(1)

    print('RGB: Solid PURPLE for 1 second')
    leds.update(Leds.rgb_on(PURPLE))
    time.sleep(1)

    print('RGB: Solid CYAN for 1 second')
    leds.update(Leds.rgb_on(CYAN))
    time.sleep(1)

    print('RGB: Solid WHITE for 1 second')
    leds.update(Leds.rgb_on(WHITE))
    time.sleep(1)

    print('RGB: Off for 1 second')
    leds.update(Leds.rgb_off())
    time.sleep(1)

    for _ in range(3):
        print('Privacy: On (brightness=default)')
        leds.update(Leds.privacy_on())
        time.sleep(1)
        print('Privacy: Off')
        leds.update(Leds.privacy_off())
        time.sleep(1)

    for _ in range(3):
        print('Privacy: On (brightness=5)')
        leds.update(Leds.privacy_on(5))
        time.sleep(1)
        print('Privacy: Off')
        leds.update(Leds.privacy_off())
        time.sleep(1)

    print('Set blink pattern: period=500ms (2Hz)')
    leds.pattern = Pattern.blink(500)

    print('RGB: Blink RED for 5 seconds')
    leds.update(Leds.rgb_pattern(RED))
    time.sleep(5)

    print('RGB: Blink GREEN for 5 seconds')
    leds.update(Leds.rgb_pattern(GREEN))
    time.sleep(5)

    print('RGB: Blink BLUE for 5 seconds')
    leds.update(Leds.rgb_pattern(BLUE))
    time.sleep(5)

    print('Set breathe pattern: period=1000ms (1Hz)')
    leds.pattern = Pattern.breathe(1000)

    print('RGB: Breathe RED for 5 seconds')
    leds.update(Leds.rgb_pattern(RED))
    time.sleep(5)

    print('RGB: Breathe GREEN for 5 seconds')
    leds.update(Leds.rgb_pattern(GREEN))
    time.sleep(5)

    print('RGB: Breathe BLUE for 5 seconds')
    leds.update(Leds.rgb_pattern(BLUE))
    time.sleep(5)

    print('RGB: Increase RED brightness for 3.2 seconds')
    for i in range(32):
        leds.update(Leds.rgb_on((8 * i, 0, 0)))
        time.sleep(0.1)

    print('RGB: Decrease RED brightness for 3.2 seconds')
    for i in reversed(range(32)):
        leds.update(Leds.rgb_on((8 * i, 0, 0)))
        time.sleep(0.1)

    print('RGB: Blend between GREEN and BLUE for 3.2 seconds')
    for i in range(32):
        leds.update(Leds.rgb_on(blend(BLUE, GREEN, i / 32)))
        time.sleep(0.1)

    print('RGB: Off for 1 second')
    leds.update(Leds.rgb_off())
    time.sleep(1)

    print('Privacy: On for 2 seconds')
    with PrivacyLed(leds):
        time.sleep(2)

    print('RGB: Solid GREEN for 2 seconds')
    with RgbLeds(leds, Leds.rgb_on(GREEN)):
        time.sleep(2)

    print('Custom configuration for 5 seconds')
    leds.update({
        1: Leds.Channel(Leds.Channel.PATTERN, 128),  # Red channel
        2: Leds.Channel(Leds.Channel.OFF, 0),  # Green channel
        3: Leds.Channel(Leds.Channel.ON, 128),  # Blue channel
        4: Leds.Channel(Leds.Channel.PATTERN, 64),  # Privacy channel
    })
    time.sleep(5)

    print('Done')
    leds.reset()