User manual

Heute im Adventskalender
1 GPIO-Verbindungskabel
Lauicht beim Schlag auf einen
Minecraft™-Klotz
Das Programm des 5. Tags schaltet eine kurze Lauflichtsequenz ein, wenn
die Spielfigur auf einen bestimmten Klotz schlägt, der neben der Nummer
5 in der Minecraft
TM
-Welt steht. Hat die Spielfigur das Schwert in der Hand,
kann sie mit einem Klick der linken Maustaste Blöcke zerschlagen. Ein Klick
mit der rechten Maustaste löst in Python ein Event aus, worauf das Pro-
gramm beliebig reagieren kann.
Beim Schlag auf diesen Klotz blinken die LEDs.
Bauteile
1 Steckbrett
1 LED rot mit eingebautem Vorwiderstand
1 LED gelb mit eingebautem Vorwiderstand
1 LED grün mit eingebautem Vorwiderstand
1 LED blau mit eingebautem Vorwiderstand
5 GPIO-Verbindungskabel
Das Programm
Das Programm 05mc_led02.py liest die Minecraft
TM
-Ereignisse, die
durch Schläge auf Blöcke ausgelöst werden. Schlägt die Spielfigur auf einen
Block aus dem Material GOLD_ORE, wird eine Lauflichtsequenz ausgelöst.
#!/usr/bin/python
import mcpi.minecraft as minecraft
import mcpi.block as block
import RPi.GPIO as GPIO
import time
mc = minecraft.Minecraft.create()
LED = [18,23,25,7]
GPIO.setmode(GPIO.BCM)
for i in LED:
GPIO.setup(i, GPIO.OUT, initial=False)
try:
while True:
for hit in mc.events.pollBlockHits():
bl = mc.getBlockWithData(hit.pos.x, hit.
pos.y, hit.pos.z)
if bl.id == block.GOLD_ORE.id:
for i in LED:
GPIO.output(i,True)
time.sleep(0.05)
GPIO.output(i,False)
except KeyboardInterrupt:
GPIO.cleanup()
So funktioniert das Programm
LED = [18,23,25,7]
Sobald die bereits bekannten Bibliotheken importiert sind und die Verbin-
dung zu Minecraft
TM
hergestellt ist, wird eine Liste mit den vier für die LEDs
verwendeten GPIO-Pins angelegt.
for i in LED:
GPIO.setup(i, GPIO.OUT, initial=False)
Diese GPIO-Pins werden als Ausgänge initialisiert und ausgeschaltet.
try:
while True:
for hit in mc.events.pollBlockHits():
Die Hauptschleife des Programms liest jetzt in jedem Schleifendurchlauf die
Liste der Events, die durch Schwertschläge auf Blöcke ausgelöst werden. Die
Variable hit erhält unter anderem die Koordinaten des getroffenen Blocks.
bl = mc.getBlockWithData(hit.pos.x, hit.
pos.y, hit.pos.z)
Diese Zeile speichert den an einer bestimmten Position getroffenen Block
in die Variable bl.
if bl.id == block.GOLD_ORE.id:
Wenn das Material dieses Blocks GOLD_ORE ist, wird der Lichteffekt ausge-
löst. In diesem Programm funktioniert das auch, wenn Sie einen anderen
Block aus dem gleichen Material mit dem Schwert anschlagen. Die Koordi-
naten des Blocks werden nicht geprüft.
for i in LED:
GPIO.output(i,True)
time.sleep(0.05)
GPIO.output(i,False)
Eine Schleife lässt die vier LEDs kurz hintereinander für jeweils 0,05 Sekun-
den aufblinken. Diese Schleife läuft genau einmal, danach wartet die Haupt-
schleife wieder, dass ein Block angeschlagen wird.
Das Programm läuft, bis der Benutzer in der Python-Shell die Tastenkom-
bination [Strg]+[C] drückt. Zum Schluss werden die GPIO-Pins zurückge-
setzt.
Vier LEDs als Lauflicht auf dem Steckbrett.