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_WIDTH = 8 # Breedte van het display
SHIFT_MIN = -DISPLAY_WIDTH # Minimale verschuiving
SHIFT_MAX = DISPLAY_WIDTH # Maximale 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(pattern, shift):
# Verschuif het patroon horizontaal.
shifted_pattern = []
for row in pattern:
if shift > 0:
# Verschuif naar links (door de bits naar links te verplaatsen)
shifted_row = row << shift
# Zorg ervoor dat we geen bits buiten de 8-bits grens krijgen
shifted_row = shifted_row & 0xFF
else:
# Verschuif naar rechts (door de bits naar rechts te verplaatsen)
shifted_row = row >> -shift
# Zorg ervoor dat we geen bits buiten de 8-bits grens krijgen
shifted_row = shifted_row & 0xFF
shifted_pattern.append(shifted_row)
return shifted_pattern
def display_pattern(pattern):
# Toon het patroon op de MAX7221.
write_to_max7221(1, pattern[0]) # Toon de eerste rij
write_to_max7221(2, pattern[1]) # Toon de tweede rij
write_to_max7221(3, pattern[2]) # Toon de derde rij
write_to_max7221(4, pattern[3]) # Toon de vierde rij
write_to_max7221(5, pattern[4]) # Toon de vijfde rij
write_to_max7221(6, pattern[5]) # Toon de zesde rij
write_to_max7221(7, pattern[6]) # Toon de zevende rij
write_to_max7221(8, pattern[7]) # Toon de achtste rij
# Setup MAX7221
setup_max7221() # Configureer de MAX7221 chip
# Verschuif het grote hart over het display
while True:
for shift in range(SHIFT_MIN, SHIFT_MAX + 1): # Verschuif van links naar rechts en terug
shifted_heart = shift_pattern(BIG_HEART, shift) # Pas de verschuiving toe
display_pattern(shifted_heart) # Toon het verschoven patroon
sleep(0.1) # Wacht 100 ms