from neopixel import NeoPixel
from machine import Pin
import time
# 初始化 8x8 的 LED 矩陣
LED_PIN_1 = 4 # 第一個矩陣的 GPIO 引腳
LED_PIN_2 = 5 # 第二個矩陣的 GPIO 引腳
NUM_LEDS = 64 # 每個矩陣 8x8,共 64 顆 LED
np1 = NeoPixel(Pin(LED_PIN_1, Pin.OUT), NUM_LEDS) # 第一個矩陣
np2 = NeoPixel(Pin(LED_PIN_2, Pin.OUT), NUM_LEDS) # 第二個矩陣
# 定義數字模板(8x8)
DIGIT_PATTERNS = {
0: [
"01111110", "10000001", "10000001", "10000001", "10000001", "10000001", "10000001", "01111110",
],
1: [
"00011000", "00111000", "00011000", "00011000", "00011000", "00011000", "00011000", "01111110",
],
2: [
"01111110", "10000001", "00000001", "00001110", "00110000", "01000000", "10000000", "11111111",
],
3: [
"01111110", "10000001", "00000001", "00111110", "00000001", "00000001", "10000001", "01111110",
],
4: [
"00000100", "00001100", "00010100", "00100100", "01000100", "11111111", "00000100", "00000100",
],
5: [
"11111111", "10000000", "10000000", "11111110", "00000001", "00000001", "10000001", "01111110",
],
6: [
"01111110", "10000001", "10000000", "11111110", "10000001", "10000001", "10000001", "01111110",
],
7: [
"11111111", "00000001", "00000010", "00000100", "00001000", "00010000", "00100000", "00100000",
],
8: [
"01111110", "10000001", "10000001", "01111110", "10000001", "10000001", "10000001", "01111110",
],
9: [
"01111110", "10000001", "10000001", "01111111", "00000001", "00000001", "10000001", "01111110",
],
}
# 將 2D 的數字模板轉換為 LED 索引
def draw_digit(digit, np, offset=1):
pattern = DIGIT_PATTERNS[digit]
for y, row in enumerate(pattern):
for x, pixel in enumerate(row):
# 計算 LED 索引,偏移 8 為十位數顯示
idx = (x + offset) * 8 + (y - 8)
if pixel == "1":
np[idx] = (255, 255, 0) # 設置顏色
else:
np[idx] = (0, 0, 0) # 關閉 LED
np.write()
# 計數器循環
count = 0 # 初始化計數器
while True:
if count >= 100: # 當計數達到或超過 100 時
count = 0 # 重置計數器為 0
tens = count // 10 # 十位數
ones = count % 10 # 個位數
# 清空 LED
np1.fill((0, 0, 0))
np2.fill((0, 0, 0))
# 顯示十位數
draw_digit(tens, np1) # 顯示十位數在第一組矩陣
# 顯示個位數
draw_digit(ones, np2) # 顯示個位數在第二組矩陣
time.sleep(1) # 每秒更新一次數字
count += 5 # 計數器每次增加 5