from max7219 import Matrix8x8
import hsfont
from machine import SPI, Pin
from time import sleep_ms
import framebuf
# Inicializálás (SPI, kijelző, stb.)
spi = SPI(2)
cs = Pin(5, Pin.OUT) # példa GPIO pin
matrix = Matrix8x8(spi, cs, num=4, vertical_mirror=False) # 4 db 8x8 modul (32x8)
def draw_char(matrix, x_offset, char):
data, height, width = hsfont.get_ch(char)
if data is None:
return 0 # karakter nem található
for x in range(width):
col = data[x]
for y in range(8):
pixel_on = (col >> y) & 1
matrix.pixel(x + x_offset, y, pixel_on)
return width + 1 # 1 oszlopnyi szóköz
def draw_text(matrix, text):
matrix.fill(0)
x = 0
for ch in text:
x += draw_char(matrix, x, ch)
if x >= matrix.width:
break
matrix.show()
# Szöveg kirajzolása
draw_text(matrix, "áűúő")
@micropython.native
def scroll_text(matrix, text, speed=100):
matrix.fill(0)
x = matrix.width # Kezdetben a kijelzőn kívül jobbra
# A karakterek sorban érkeznek, és belenakódnak a framebufferbe
for ch in text:
data, _, width = hsfont.get_ch(ch)
if not data:
continue
for i in range(width):
matrix.scroll(-1, 0) # balra tolás
col = data[i]
for y in range(8):
pixel = (col >> y) & 1
matrix.pixel(matrix.width - 1, y, pixel)
matrix.show()
sleep_ms(speed)
# szóköz a karakter után
matrix.scroll(-1, 0)
for y in range(8):
matrix.pixel(matrix.width - 1, y, 0)
matrix.show()
sleep_ms(speed)
def scroll_text_dynamic_stop(matrix, text, speed=100):
# Karakterek oszlopokká alakítása
columns = []
for ch in text:
data, _, width = hsfont.get_ch(ch)
if data:
columns.extend(data[:width])
columns.append(0x00) # szóköz
text_width = len(columns)-1
matrix_width = matrix.width
matrix.fill(0)
matrix.show()
# Döntés: hol álljon meg
if text_width <= matrix_width:
# Rövid szöveg: megáll a középpontban
stop_at = matrix_width - (matrix_width - text_width) // 2
else:
# Hosszú szöveg: végiggörget
stop_at = text_width
for step in range(stop_at):
matrix.scroll(-1, 0)
# Következő oszlop hozzáadása
col = columns[step] if step < text_width else 0
for y in range(8):
matrix.pixel(matrix_width - 1, y, (col >> y) & 1)
matrix.show()
sleep_ms(speed)
#scroll_text(matrix, "Várpalota", 15)
scroll_text_dynamic_stop(matrix, 'Várp', 15)