Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

Sense HAT - Teil 2

In diesem Kapitel geht es vornehmlich um die Programmierung von kurzen Animationen und einfachen Spielen. Dabei dient die 8x8 LED-Matrix als Anzeige oder Bildschirmersatz.

Dieses Kapitel setzt Kenntnisse über die Sprache Python voraus und bedient sich des Moduls pygame, einer Sammlung von Funktionen, mit denen das Programmieren von Spielen stark vereinfacht wird.

Übung 1 - Erstellung einer einfachen Animation

In Sense HAT - Teil 1 - Übung 3 wurde gezeigt, wie man verschiedene Bilder über ein Python-Programm auf dem 8x8 LED-Display ausgibt.

In dieser Übung geht es darum, eine kleine Figur zu entwerfen und sie in einer Animation eine einfache Laufbewegung ausführen zu lassen. Dazu muss zunächst eine Figur entworfen und diese dann in verschiedenen Laufpositionen dargestellt werden.

Das nacheinander aufrufen der einzelnen Bilder vermittelt dem Zuschauer dann den Eindruck einer Bewegung. Gestartet wird die Animation auf dem Rechner dadurch, dass der Raspi bewegt wird.

Installation eines GRID Editors

Zum Entwurf der Animationsbilder eignet sich kariertes Papier hervorragend. Dazu markiert man sich ein 8x8 Kästchen großes Quadrat und positioniert in diesem Feld die entsprechenden Bildpunkte der Figur.

Ich benutze für die Entwürfe häufig den GRID-Editor von J. Robinson. Um ihn unter Linux auf dem Raspi benutzen zu können, muss zuerst LXTerminal geöffnet und die folgende Zeile eingegeben werden

  • sudo pip3 install pypng

Nach Abschluss des Installationsvorgangs wird der Grid Editor geladen mit

  • git clone https://github.com/jrobinson-uk/RPi_8x8GridDraw

Anschließend wechselt man in das Verzeichnis des neu installierten Programms

  • cd RPi_8x8GridDraw

und startet es mit

  • python3 sense_grid.py
Abbildung 1 - Startbildschirm des Sense HAT Grid Editor

Der Startbildschirm des Grid-Editors zeigt das 8x8 LED-Matrixfeld des Sense-HAT; in einer rechten Spalte sind neun RGB-Farben voreingestellt, die sich durch einfaches Anklicken anwählen lassen. Es lassen sich beliebig viele Frames (Bildchen) erstellen, die durch die beiden Pfeiltasten in der rechten Spalte angesteuert werden können.

Ist ein Raspi mit Sense-HAT angeschlossen, kann über die Taste "Play on LEDs" sofort überprüft werden, wie gut oder schlecht der eigenen Entwurf ist. Mit "Clear Grid" wird das komplette Bild gelöscht; mit "Delete" jeweils der aktuelle Frame.

Die Animationsbilder

Als RGB-Farben werden festgelegt:

pi = (238, 0, 238)    # pink

gr = (0, 100,0)         # grün

we = (200,200,200) # weiß

ge  = (255,215,0)     # gelb

hb  = (34,139,34)     # hellbraun

le   = (0,0,0)             # schwarz oder leer

Eine einfache Animation
Material
  • 1x  Raspberry Pi 3
  • 1x  Sense HAT
  • 1x  USB-Steckernetzteil, 2,5 A
  • 1x  HDMI Kabel
  • 1x  kabellose Maus, Tastatur
Aufgaben
  • Starte mit sudo idle3 & das Programm Python und öffne mit File - New File den Python Editor.
  • Übertrage das Programm animation_1.py in den Editor und speichere es ab.
  • Starte das Programm mit Run - Run Module.
  • Bewege den Raspi kurz, dann sollte die Animation auf dem LED-Feld zu sehen sein.

Das Programm animation_1.py

Wie arbeitet das Programm animation_1.py?

Der Programmteil, der sich mit dem Festlegen der Farben und der Definition der Bilder beschäftigt, muss nicht mehr weiter erläutert werden.

In der Endlosschleife while True: spielt sich die Animation ab. Die Daten des Beschleunigungssensors werden eingelesen.

Die Funktion "laufen" fast den Bewegungsablauf der Figur zusammen. Als Pausenzeit zwischen den einzelnen Frames wird 0,2s vorgegeben. Insgesamt werden vier Frames und drei verschiedene Bilder 10-mal durchlaufen. Anschließend werden alle LEDs der Matrix dunkel geschaltet.

Wird der Controller nicht bewegt, dann wird kein Beschleunigungswert bezüglich einer der drei Raumachsen größer als 1 sein und das Programm verweilt in der while-Schleife solange, bis der Controller einmal ruckartig bewegt wird. Dadurch wird mindestens ein Beschleunigungswert bezüglich einer Raumachse größer als 2 sein und das Programm führt die Funktion "laufen" aus.

Übung 2 - Den Joystick programmieren

Der SenseHat Joystick kennt fünf Events: rechts, links, oben, unten und Bestätigen. In dieser Übung wird der Joystick so programmiert, dass zu jedem ausgeführten Event im Terminalfenster die Beschreibungsgröße ausgegeben wird.

Den Joystick programmieren
Material
  • 1x  Raspberry Pi 3
  • 1x  Sense HAT
  • 1x  USB-Steckernetzteil, 2,5 A
  • 1x  HDMI Kabel
  • 1x  kabellose Maus, Tastatur
Aufgaben
  • Übertrage das Programm joystick_03.py in den Python-Editor und speichere es anschließend ab.
  • Starte das Programm.
  • Bewege den Joystick in die vier Raumrichtungen und drücke zum Schluss auf den Taster. Überprüfe die Textausgabe im Terminalfenster und vergleiche sie mit der Beispielausgabe in Abb. 2.

Das Programm joystick_03.py

Terminalausgabe

Abb. 2 - Textausgabe im Terminalfenster

Wie arbeitet das Programm joystick_03.py?

In der Endlosschleife spielt sich der Ablauf des Programms ab. Immer dann, wenn eine Joystickaktion erkannt wird, gibt der nachfolgende print-Befehl im Terminalfenster den dazugehörigen Event-Text aus. Es gibt

  • event.directions: up, down, left, right und middle  sowie
  • event.action: pressed und released

In dem Moment, wo der Joystick in eine Raumrichtung gedrückt wird, gilt:

  • action: pressed

Sobald der Joystick losgelassen wird, gilt:

  • action: released

Übung 3 - Ein kleines Spiel

In diesem einfachen Spiel werden 44 Bonuspunkte und 20 Maluspunkte auf dem 8x8 LED Feld des SenseHat versteckt. Es ist die Aufgabe eines Spielers, aus den 64 Feldern mit Hilfe des Joystick 10 Felder auszuwählen und dabei auf eine möglichst hohe Summe zu kommen. Am Ende soll das Ergebnis auf dem LED-Feld angezeigt werden.

Das Spielfeld auf der 8x8 LED Matrix

 

 

 

Abb. 3

Das Spielfeld auf der 8x8 LED Matrixanzeige. Die nicht gesetzten Felder erscheinen blau, der Cursor rot. Wird ein Feld markiert, wird es entweder pink (Malusfeld) oder gelb (Bonusfeld) erscheinen.

Ein kleines Spiel auf dem 8x8 LED Feld
Material
  • 1x  Raspberry Pi 3
  • 1x  Sense HAT
  • 1x  USB-Steckernetzteil, 2,5 A
  • 1x  HDMI Kabel
  • 1x  kabellose Maus, Tastatur
Aufgaben
  • Übertrage das Programm SenseHat_spiel01.py in den Python-Editor und speichere es anschließend ab.
  • Starte das Programm.
  • Markiere mit dem Joystick zehn Felder auf dem 8x8 Display Feld.
  • Anschließend wird der Fließtext "Score: " gefolgt von einem Wert, der zwischen -1000 und +500 liegt, ausgegeben.

Das Programm SenseHat_spiel01.py

Wie arbeitet das Programm SenseHat_spiel01.py

Im Initialisierungsteil werden alle Vorbereitungen für den Ablauf des Programms getroffen. Es werden ein Spiel- und ein Statusfeld angelegt. In letzterem werden die 25 Malusfelder per Zufallsgenerator gesetzt. Zu Beginn des Spiels werden alle 64 LEDs eingeschaltet (blau) und der Cursor (rot) in der untersten LED-Reihe (y = 7) an der vierten Stelle von links (x = 4) postiert. Eine Variable "spielzug" wird auf 0 gesetzt. Alle Aktionen finden auf dem Spielfeld statt.

Im Bereich "Ereignisse abfragen" werden die Maluspunkte mit Hilfe der Funktion "hindernisse()" gesetzt und anschließend in einer 10-er Schleife die events des Joysticks abgefragt. Das kennen wir bis auf die Schleife bereits aus Übung 1. Wird der Taster gedrückt (event.direction == ´middle´) prüft das Programm, ob das markierte Feld ein Malusfeld ist. Wenn das der Fall ist, wird die LED auf die Farbe PINK geschaltet und es gibt 100 Maluspunkte. Ist das markierte Feld hingegen kein Malusfeld, wird die LED auf GELB geschaltet und 50 Bonuspunkte dem Konto des Spielers gut geschrieben. Anschließend wird die Variable "spielzug" um 1 erhöht.

Hat der Spieler zehn Felder markiert (entspricht 10 Spielzügen), wird abschließend über eine 2-er Schleife auf der 8x8 LED Matrix der Text "Score: " und anschließend der erspielte Punktestand ausgegeben. Zum Schluss werden alle LEDs auf "schwarz" oder AUS geschaltet.

Druckversion | Sitemap
© Reinhard Rahner - Gettorf