Digitaler Würfel mit 8x8 LED Matrix

Digitaler Würfel mit 8x8 LED Matrix  Titelbild

Folgende Teile braucht ihr für die Anleitung

Spiele Programmieren mit der LED Matrix Produktbild

Spiele Programmieren mit der LED Matrix | 19.95€

8x8 LED Matrix mit MAX7219 Chip  Produktbild

8x8 LED Matrix mit MAX7219 Chip | 5.95€

8x8 LED Matrix mit MAX7219 Chip  Produktbild

8x8 LED Matrix mit MAX7219 Chip | 5.95€

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.

8 x 8 LED am Raspberry Pi angeschlossen

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

Anschlüsse Raspberry Pi Anschlüsse Breadboard
GPIO14 Taster 1
GND + 10KOhm Taster 1
GPIO15 Taster 2
GND + 10KOhm Taster 2
GPIO18 Taster 3
GND + 10KOhm Taster 3
GPIO23 Taster 4
GND + 10KOhm Taster 4

Bei den Tastern müssen immer die Pins mit einander verbunden werden die am nächsten zueinander liegen.

import RPi.GPIO as gpio
import max7219.led as led
from random import randint
import time

gpio.setmode(gpio.BCM)
taster = 14
gpio.setup(taster,gpio.IN,pull_up_down=gpio.PUD_UP)
matrix = led.matrix()

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

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

matrix.letter(0, ord("?"))

while True:
  time.sleep(0.1)

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 14 angeschlossen ist, sollte jedesmal eine zufällige Zahl zwischen 1 und 6 angezeigt werden. Also ähnlich 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 8x8 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.

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, denn 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 und 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 verhindert, ü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 nicht am Anfang 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 ;)

Noch Fragen oder Feedback?

Bevor du eine Frage stellen kannst musst du dich zuerst Anmelden oder Regestrieren!