77 lines
2.3 KiB
Python
77 lines
2.3 KiB
Python
# SPDX-FileCopyrightText: 2021 Mark Komus
|
|
# SPDX-License-Identifier: MIT
|
|
# Currently example only compatible with Adafruit LED Glasses Driver nRF52840
|
|
import board
|
|
import busio
|
|
import displayio
|
|
import framebufferio
|
|
import is31fl3741
|
|
from adafruit_bitmap_font import bitmap_font
|
|
from adafruit_display_text import label
|
|
from adafruit_led_animation.animation.chase import Chase
|
|
from adafruit_led_animation.animation.comet import Comet
|
|
|
|
from adafruit_is31fl3741.is31fl3741_PixelBuf import IS31FL3741_PixelBuf
|
|
from adafruit_is31fl3741.led_glasses_map import (
|
|
glassesmatrix_ledmap_no_ring,
|
|
left_ring_map_no_inner,
|
|
right_ring_map_no_inner,
|
|
)
|
|
|
|
# Release any existing displays
|
|
displayio.release_displays()
|
|
|
|
# Create our own I2C bus with a 1Mhz frequency for faster updates
|
|
i2c = busio.I2C(board.SCL, board.SDA, frequency=1000000)
|
|
|
|
# Initalize the IS31FL3741
|
|
is31 = is31fl3741.IS31FL3741(i2c=i2c)
|
|
|
|
# Initialize the IS31FL3741 displayio display
|
|
is31_fb = is31fl3741.IS31FL3741_FrameBuffer(
|
|
width=54,
|
|
height=15,
|
|
is31=is31,
|
|
scale=True,
|
|
gamma=True,
|
|
mapping=glassesmatrix_ledmap_no_ring,
|
|
)
|
|
display = framebufferio.FramebufferDisplay(is31_fb, auto_refresh=True)
|
|
|
|
# Turn the brightness down
|
|
is31_fb.brightness = 0.1
|
|
|
|
# Create pixel buffers for each eye. Init is False as the display setup initialized the chip
|
|
eye_left = IS31FL3741_PixelBuf(is31, left_ring_map_no_inner, init=False, auto_write=False)
|
|
eye_right = IS31FL3741_PixelBuf(is31, right_ring_map_no_inner, init=False, auto_write=False)
|
|
|
|
# Create a different animation for each eye ring
|
|
chase = Chase(eye_left, speed=0.05, color=(0, 0, 150), size=8, spacing=4)
|
|
comet = Comet(eye_right, speed=0.01, color=(0, 0, 150), tail_length=10, bounce=False)
|
|
|
|
# Create text to scroll across the display
|
|
font = bitmap_font.load_font("scrolly.bdf")
|
|
text = "HELLO FROM CIRCUITPYTHON ON NATIVE DISPLAYIO"
|
|
color = (255, 210, 0)
|
|
text_area = label.Label(font, text=text, color=color)
|
|
|
|
# Set the text location
|
|
text_width = text_area.bounding_box[2]
|
|
text_area.x = display.width
|
|
text_area.y = 8
|
|
|
|
# Add the text label to the display
|
|
group = displayio.Group()
|
|
group.append(text_area)
|
|
display.root_group = group
|
|
|
|
# Scroll the text and update the animations
|
|
x = display.width
|
|
while True:
|
|
x = x - 1
|
|
text_area.x = x
|
|
if x == -text_width:
|
|
x = display.width
|
|
|
|
chase.animate()
|
|
comet.animate()
|