Adafruit_CircuitPython_IS31.../examples/is31fl3741_native.py
2025-05-14 17:30:54 +00:00

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()