複数のフルカラーLED(マイコン内蔵RGBLED 8mm PL9823-F8)で文字をスクロールさせます。

4×4のLEDに文字を縦スクロールさせます。
フルカラーLED(マイコン内蔵RGBLED 8mm PL9823-F8)マトリックスモジュール
配線図
MicroPythonプログラム
import neopixel
import time
from machine import Pin
# LEDの設定
NUM_LEDS = 16 # LEDの数
PIN = 0 # データピン
# NeoPixelオブジェクトの作成
np = neopixel.NeoPixel(Pin(PIN), NUM_LEDS)
# 'A'のパターンを定義(4x4)
A_PATTERN = [
0b0110, # _XX_
0b1001, # X__X
0b1111, # XXXX
0b1001 # X__X
]
# 'C'のパターンを定義(4x4)
C_PATTERN = [
0b1111, # XXX_
0b0001, # X___
0b1000, # X___
0b1111 # XXX_
]
# 全てのLEDを消灯する関数
def clear_leds():
for i in range(NUM_LEDS):
np[i] = (0, 0, 0)
np.write()
# 4x4のパターンをLEDに表示する関数
def display_pattern(pattern, row_offset):
clear_leds()
for row in range(4):
for col in range(4):
if pattern[row] & (1 << (3 - col)):
index = (row + row_offset) * 4 + col
if 0 <= index < NUM_LEDS:
np[index] = (25, 25, 25) # 白色に点灯
np.write()
# 文字をスクロールして表示する関数
def scroll_text(patterns, speeds):
for pattern, speed in zip(patterns, speeds):
display_pattern(pattern, 4) # 初期位置を下にずらす
time.sleep(1) # 表示した後のウェイト
for offset in range(5): # 上にスクロール
display_pattern(pattern, 4 - offset)
time.sleep(speed)
# メインループ
while True:
scroll_text([A_PATTERN, C_PATTERN], [0.1, 0.1]) # 'A'から'C'にスクロール
time.sleep(1) # 文字間のウェイト
自由研究

テンテン
ところがCの2行目がなぜか反対にしないとCが表示されません。
理由があるはずですが。




