|
| 1 | +# SPDX-FileCopyrightText: Copyright (c) 2023 john park for Adafruit Industries |
| 2 | +# |
| 3 | +# SPDX-License-Identifier: MIT |
| 4 | +import asyncio |
| 5 | +from random import randint, uniform |
| 6 | +import busio |
| 7 | +import board |
| 8 | +import adafruit_aw9523 |
| 9 | + |
| 10 | +# pin descriptions are based on physical LED placement |
| 11 | +# 0 bakery window, 1 lamp1 A, 2 lamp1 B, 3 bakery sconce, 4 lamp 2, 5 music sconce a, |
| 12 | +# 6 music sconce b, 7 music candle, 8 bakery red a, 9 bakery red b, 10 bakery green a, |
| 13 | +# 11 bakery green b |
| 14 | + |
| 15 | +i2c = busio.I2C(board.SCL1, board.SDA1) |
| 16 | +leddriver = adafruit_aw9523.AW9523(i2c) |
| 17 | + |
| 18 | +# Set all pins to outputs and LED (const current) mode |
| 19 | +leddriver.LED_modes = 0xFFFF |
| 20 | +leddriver.directions = 0xFFFF |
| 21 | + |
| 22 | +window_set = [8, 10, 9, 11] # red/green string |
| 23 | +always_on_set = [0, 1, 2, 4] # window and lanterns |
| 24 | +always_on_set_maxes = [100, 30, 30, 40] # maximum brightness per light |
| 25 | + |
| 26 | +# lights that are always on |
| 27 | +for n in range(len(always_on_set)): |
| 28 | + leddriver.set_constant_current(always_on_set[n], always_on_set_maxes[n]) |
| 29 | + |
| 30 | +async def flicker(pin, min_curr, max_curr, interval): |
| 31 | + while True: |
| 32 | + rand_max_curr = randint(min_curr, max_curr) |
| 33 | + for i in range(min_curr, rand_max_curr): |
| 34 | + leddriver.set_constant_current(pin, i) # aw9523 pin, current out of 255 |
| 35 | + await asyncio.sleep(0.07) |
| 36 | + await asyncio.sleep(uniform(0.0, interval)) |
| 37 | + |
| 38 | +async def string_lights(interval, max_curr): |
| 39 | + while True: |
| 40 | + for i in range(len(window_set)): |
| 41 | + # fade up |
| 42 | + for j in range(max_curr): |
| 43 | + leddriver.set_constant_current(window_set[i], j) |
| 44 | + print(j) |
| 45 | + await asyncio.sleep(interval) |
| 46 | + for i in range(len(window_set)): |
| 47 | + # fade down |
| 48 | + for j in range(max_curr): |
| 49 | + leddriver.set_constant_current(window_set[i], max_curr-j) |
| 50 | + print(j) |
| 51 | + await asyncio.sleep(interval) |
| 52 | + |
| 53 | + |
| 54 | +async def main(): |
| 55 | + led0_task = asyncio.create_task(flicker(3, 3, 10, 0.7)) # music candle |
| 56 | + led1_task = asyncio.create_task(flicker(5, 6, 12, 0.7)) # music sconce a |
| 57 | + led2_task = asyncio.create_task(flicker(6, 6, 12, 0.7)) # music sconce b |
| 58 | + led3_task = asyncio.create_task(flicker(7, 3, 10, 0.7)) # music candle |
| 59 | + led4_task = asyncio.create_task(string_lights(0.03, 30)) |
| 60 | + await asyncio.gather(led0_task, led1_task, led2_task, led3_task, led4_task) |
| 61 | + |
| 62 | +asyncio.run(main()) |
0 commit comments