from machine import Pin, SPI # Importeer Pin- en SPI-klassen om hardwarecomponenten aan te sturen
from time import sleep # Importeer sleep-functie voor vertragingen
# Initialiseer SPI
spi = SPI(1, baudrate=1000000, polarity=0, phase=0, sck=Pin(18), mosi=Pin(23)) # Configureer SPI-bus met specifieke instellingen
ss = Pin(5, Pin.OUT) # Stel Pin 5 in als uitgang voor Slave Select (SS)
ss.value(1) # Zet SS hoog om communicatie met het apparaat te stoppen
# MAX7221 registers
DECODE_MODE = 0x09 # Register voor decodeermodus
INTENSITY = 0x0A # Register voor helderheidsinstelling
SCAN_LIMIT = 0x0B # Register om het aantal actieve rijen te bepalen
SHUTDOWN = 0x0C # Register om shutdown-modus te regelen
DISPLAY_TEST = 0x0F # Register voor display test-modus
# Grote hart-patroon (8x8)
BIG_HEART = [
0b00000000,
0b01100110,
0b11111111,
0b11111111,
0b01111110,
0b00111100,
0b00011000,
0b00000000
]
# Configuratie voor verschuiving
DISPLAY_HEIGHT = 8 # Hoogte van het display
SHIFT_MIN = -DISPLAY_HEIGHT # Minimale verticale verschuiving
SHIFT_MAX = DISPLAY_HEIGHT # Maximale verticale verschuiving
def write_to_max7221(register, data):
# Schrijf data naar een register van de MAX7221.
ss.value(0) # Zet SS laag om communicatie te starten
spi.write(bytearray([register, data])) # Stuur registeradres en data via SPI
ss.value(1) # Zet SS hoog om communicatie te beëindigen
def setup_max7221():
# Configureer de MAX7221 voor gebruik.
write_to_max7221(SHUTDOWN, 0x01) # Zet de MAX7221 in normale werking (niet in shutdown)
write_to_max7221(DISPLAY_TEST, 0x00) # Schakel de display test-modus uit
write_to_max7221(DECODE_MODE, 0x00) # Stel geen decodeermodus in (directe dataweergave)
write_to_max7221(SCAN_LIMIT, 0x07) # Activeer alle 8 rijen (0-7)
write_to_max7221(INTENSITY, 0x08) # Stel helderheid in op een gemiddelde waarde (0x00 - 0x0F)
def shift_pattern_vertical(pattern, shift):
# Verschuif het patroon verticaal.
shifted_pattern = [0] * 8 # Begin met een leeg patroon
for i in range(8):
target_index = i + shift
if 0 <= target_index < 8:
shifted_pattern[target_index] = pattern[i] # Verplaats de rij naar de nieuwe positie
return shifted_pattern
def display_pattern(pattern):
# Toon het patroon op de MAX7221.
for i in range(8):
write_to_max7221(i + 1, pattern[i]) # Stuur elke rij naar de juiste display-locatie
# Setup MAX7221
setup_max7221() # Configureer de MAX7221 chip
# Verschuif het grote hart over het display
while True:
for shift in range(-7, 8): # Verschuif van onder naar boven
shifted_heart = shift_pattern_vertical(BIG_HEART, shift) # Pas de verticale verschuiving toe
display_pattern(shifted_heart) # Toon het verschoven patroon
sleep(0.1) # Wacht 100 ms