User manual

Heute im Adventskalender
1 Taster
Minecraft™-Blöcke mit einer Taste
bauen
Das Programm des 6. Tags baut Minecraft
TM
-Blöcke, wenn man auf einen
Taster drückt. Bei jedem Druck auf den Taster werden neun Blöcke in einer
quadratischen Anordnung (3 × 3) gebaut, und die Spielfigur wird anschlie-
ßend mittig darauf gestellt. Durch mehrfaches Drücken der Taste lassen sich
so Türme bauen.
Das Programm verwendet das Material Sand, das eine besondere Eigen-
schaft hat. Die meisten Minecraft
TM
-Blöcke lassen sich frei in der Luft an jeder
beliebigen y-Koordinate bauen, wohingegen Sandblöcke immer bis auf den
Boden herunterfallen. Dadurch kann man mit dem Programm und kleinen
Bewegungen Hügellandschaften erzeugen.
Eine einfache Hügellandschaft, die das Programm erstellt hat.
Bauteile
1 Steckbrett
1 Taster
2 GPIO-Verbindungskabel
GPIO-Ports können nicht nur Daten ausgeben, zum Beispiel über LEDs,
sondern auch zur Dateneingabe verwendet werden. Dazu müssen sie im
Programm als Eingang definiert werden. Zur Eingabe verwenden wir im fol-
genden Projekt einen Taster, der direkt auf die Steckplatine gesteckt wird.
Der Taster hat vier Anschlusspins, wobei je zwei gegenüberliegende (großer
Abstand) miteinander verbunden sind. Solange die Taste gedrückt ist, sind
alle vier Anschlüsse miteinander verbunden. Im Gegensatz zu einem Schal-
ter rastet ein Taster nicht ein. Die Verbindung wird beim Loslassen sofort
wieder getrennt.
Liegt auf einem als Eingang definierten GPIO-Port ein +3,3-V-Signal an, wird
es als logisches True bzw. 1 ausgewertet.
Ein Druck auf den Taster verbindet in unserer Schaltung den GPIO-Pin 8 mit
+3,3 V. Lässt man den Taster wieder los, bekommt der Eingang einen undefi-
nierten Zustand, was in der Digitalelektronik nicht passieren darf. Für solche
Fälle verfügen alle GPIO-Pins über sogenannte Pull-down-Widerstände, die
einen Eingang, an dem kein Signal anliegt, automatisch auf False herun-
terziehen.
Ein Taster auf dem Steckbrett.
Das Programm
Neben der Zahl 6 in der Minecraft
TM
-Welt befindet sich eine große graue Flä-
che, auf der man die aus Sand aufgebauten Klötze besser erkennen kann als
auf der Sandfläche. Das Programm 06mc_taster01.py baut bei jedem
Druck auf den Taster neun Blöcke in einer quadratischen Anordnung (3 × 3)
rund um die aktuelle Position der Spielfigur und stellt die Spielfigur anschlie-
ßend mittig darauf.
#!/usr/bin/python
import mcpi.minecraft as minecraft
import mcpi.block as block
import RPi.GPIO as GPIO
import time
mc = minecraft.Minecraft.create()
t1 = 8
GPIO.setmode(GPIO.BCM)
GPIO.setup(t1, GPIO.IN, GPIO.PUD_DOWN)
try:
while True:
if GPIO.input(t1)==True:
p = mc.player.getTilePos()
mc.setBlocks(p.x-1, p.y, p.z-1, p.x+1, p.y,
p.z+1, block.SAND)
mc.player.setPos(p.x, p.y+1, p.z)
time.sleep(0.2)
except KeyboardInterrupt:
GPIO.cleanup()
So funktioniert das Programm
t1 = 8
Sobald die bereits bekannten Bibliotheken importiert sind und die Ver-
bindung zu Minecraft
TM
hergestellt ist, wird der für den Taster verwendete
GPIO-Pin in der Variablen t1 gespeichert.
GPIO.setup(t1, GPIO.IN, GPIO.PUD_DOWN)
Dieser GPIO-Pin wird als Eingang initialisiert, und der auf dem Raspberry Pi
eingebaute Pull-down-Widerstand wird eingeschaltet.
try:
while True:
if GPIO.input(t1)==True:
Die Endlosschleife wartet darauf, dass der Taster gedrückt wird. Dabei be-
kommt der GPIO-Pin den Wert True, da er über den Taster mit +3,3 V ver-
bunden wird.
p = mc.player.getTilePos()
Jetzt wird die Position der Spielfigur in der Variablen p gespeichert.
mc.setBlocks(p.x-1, p.y, p.z-1, p.x+1, p.y,
p.z+1, block.SAND)
Die Funktion setBlocks() setzt in Form eines Kubus mehrere Blöcke auf
einmal. Dazu brauchen nur zwei gegenüberliegende Ecken dieses Kubus
angegeben zu werden. Der Kubus ist hier 3 × 3 Einheiten in der Fläche groß
und eine Einheit dick.
mc.player.setPos(p.x, p.y+1, p.z)
Jetzt wird die Spielfigur eine Einheit nach oben versetzt, sie befindet sich
dann in der Mitte auf den neu angelegten Blöcken.
time.sleep(0.2)
Das Programm wartet 0,2 Sekunden, um Tastenprellen zu vermeiden. So
wird sichergestellt, dass ein etwas längeres Drücken des Tasters gleich meh-
rere Schichten von Blöcken anlegt. Danach startet die Endlosschleife neu.
Das Programm läuft, bis der Benutzer in der Python-Shell die Tastenkombina-
tion [Strg]+[C] drückt. Zum Schluss werden die GPIO-Pins zurückgesetzt.