Der Digitale Würfel

Als Grundlage brauchst du die angeschlossene Matrix aus der vorherigen Anleitung. Insgesamt werden wir die Schaltung um vier große Taster erweitern.

Achte immer darauf das du 5V nur mit dem VCC-Pin an der LED-Matrix verbindest!

Anschlüsse Raspberry PiAnschlüsse Breadboard
GPIO14Taster 1
GND + 10KOhmTaster 1
GPIO15Taster 2
GND + 10KOhmTaster 2
GPIO18Taster 3
GND + 10KOhmTaster 3
GPIO23Taster 4
GND + 10KOhmTaster 4

Bei den Tastern müssen immer die Pins miteinander verbunden werden, die am nächsten beieinander liegen.

Wenn ihr „Raspberry Pi OS Bookworm“ oder neuer benutzt, müsst ihr noch die richtige RPi.GPIO-Bibliothek installieren. Das macht ihr mit den beiden folgenden Befehlen, die ihr im Terminal ausführt:
sudo pip3 uninstall rpi-gpio –break-system-packages
sudo pip3 install rpi-lgpio –break-system-packages

import RPi.GPIO as gpio
from MyMax7219 import MyMatrix
from random import randint
import time

gpio.setmode(gpio.BCM)
taster = 23
gpio.setup(taster,gpio.IN,pull_up_down=gpio.PUD_UP)
matrix = MyMatrix()

def neue_zahl(channel):
  matrix.letter(str(randint(1,6)))

gpio.add_event_detect(taster, gpio.RISING,
        callback=neue_zahl)

matrix.letter("?")

while True:
  time.sleep(0.01)

Wenn du das Programm ausführst, sollte zuerst nur ein Fragezeichen zu sehen sein, wenn du jetzt aber den Taster drückst, der an den GPIO-Pin 32 angeschlossen ist, sollte jedesmal eine zufällige Zahl zwischen 1 und 6 angezeigt werden. Also ähnlich wie bei einem normalen Würfel, nur dass du dir die Arbeit beim Würfeln sparst.

Schritt für Schritt

In den ersten vier Zeilen importieren wir erstmal die benötigten Bibliotheken.

In Zeile 6-8 kümmern wir uns um die Logik des Tasters, mit dem wir nachher immer eine neue Zahl erstellen, das sollte dir ziemlich bekannt vorkommen.

In Zeile 9 erstellen wir in der Variablen matrix ein neues Objekt der 8 x 8 Matrix.

In Zeile 11 und 12 erstellen wir unsere eigenen Funktion und nennen diese passenderweise neue_zahl(). Warum wir den Parameter setzen müssen, erfahren wir in Zeile 14/15. In Zeile 12 wird dann eine neue zufällige Zahl zwischen 1 und 6 mit randint(1,6) erstellt. Diese Zahl übergeben wir mit der .letter()-Funktion an das Display. Achte darauf das der Inhalt der kompletten Funktion (in diesem Fall die Zeile 12) eingerückt ist.

In Zeile 14 verbinden wir die Eingaben von dem Taster mit der Funktion. Mit gpio_event_detect können wir auf ein bestimmtes Ereignis bei einem GPIO-Pin warten. Bitte beachte den drucktechnischen Zeilenumbruch, den kannst du auf dem Pi weglassen. Der erste Parameter ist der GPIO-Pin – in unserem Fall 14. Der zweite Parameter ist das Ereignis. Es gibt da die Möglichkeiten gpio.RISING und gpio.FALLING. Mit Ereignis wird dabei eine Veränderung gemeint. Heißt: wenn Strom fließt, wo vorher kein Strom geflossen ist. Das Gleiche gibt es auch noch andersherum. Da Strom fließt, wenn der Taster gedrückt wird, benutzen wir gpio.RISING. Wir können mit callback=name_der_funktion noch übergeben, welche Funktion dafür aufgerufen werden soll. Diese bekommt als Parameter dann auch den GPIO, der sich verändert, übergeben. Das heißt, wir können auch mehrere GPIO-Pins mit .gpio_add_event() verbinden. Nochmal zusammengefasst sagen wir mit dieser Funktion, dass sobald Strom fließt, die Funktion neue_zahl() aufgerufen werden soll.

Der Hauptteil des Programmes ist damit fertig, aber wenn du das Programm jetzt ausführen würdest, passiert nichts, denn die Funktion wird erst aufgerufen, wenn der Taster gedrückt wird. Damit das Programm nicht einfach durchläuft und aufhört, haben wir dafür noch eine while-Schleife in Zeile 19 und 20 eingebaut. Diese macht nichts anderes, als einfach zu laufen und das Programm so am Leben zu halten.

Damit die Matrix am Anfang nicht leer ist, rufen wir in Zeile 17 die .letter()-Funktion auf und übergeben ein Fragezeichen.

Und damit ist dieses kleine Programm auch schon fertig erklärt. Es zeigt, mit welchen kleinen Möglichkeiten wir Dinge wie Würfeln besser machen können!