# This code will move the smiley across the 4 displays. The `display_smiley` function now takes a `position` parameter to determine which display should show the smiley. The `while` loop updates the position every second, making the smiley move from one display to the next.
from machine import Pin, SPI
from time import sleep
# Initialiseer SPI
spi = SPI(1, baudrate=1000000, polarity=0, phase=0, sck=Pin(18), mosi=Pin(23))
ss = Pin(5, Pin.OUT)
ss.value(1)
# MAX7221 registers
DECODE_MODE = 0x09
INTENSITY = 0x0A
SCAN_LIMIT = 0x0B
SHUTDOWN = 0x0C
DISPLAY_TEST = 0x0F
# Smiley patroon (8x8)
SMILEY = [
0b00111100, # Rij 1
0b01000010, # Rij 2
0b10100101, # Rij 3
0b10000001, # Rij 4
0b10100101, # Rij 5
0b10011001, # Rij 6
0b01000010, # Rij 7
0b00111100 # Rij 8
]
def write_to_max7221(register, data, display):
"""Schrijf data naar een register van de MAX7221."""
ss.value(0)
spi.write(bytearray([register, data] * display))
ss.value(1)
def setup_max7221():
"""Configureer de MAX7221 voor gebruik."""
for display in range(4):
write_to_max7221(SHUTDOWN, 0x01, display) # Normale werking
write_to_max7221(DISPLAY_TEST, 0x00, display) # Display test uit
write_to_max7221(DECODE_MODE, 0x00, display) # Geen decodeermodus
write_to_max7221(SCAN_LIMIT, 0x07, display) # Gebruik alle 8 digits
write_to_max7221(INTENSITY, 0x08, display) # Helderheid (0x00 - 0x0F)
def display_smiley(position):
"""Toon een smiley op het dot-matrix display."""
for row, data in enumerate(SMILEY, start=1):
for display in range(4):
if display == position:
write_to_max7221(row, data, display)
else:
write_to_max7221(row, 0x00, display)
# Setup MAX7221 en toon smiley
setup_max7221()
position = 0
while True:
display_smiley(position)
position = (position + 1) % 4 # Verplaats de smiley naar de volgende display
sleep(1)