User manual

Heute im Adventskalender
1 20-MOhm-Widerstand (rot-schwarz-blau)
Gamepad aus Knete steuert Steve
Die Spielfigur Steve in Minecraft
TM
lässt sich zwar mit der Maus drehen, aber
nicht bewegen. In der Konsolenversion des Spiels funktioniert das über Tasten
auf dem Gamepad. Das Experiment des 18. Tags stellt ein Gamepad mit vier
Sensorkontakten aus Knete her, womit die Spielfigur gesteuert werden kann.
Bauteile
1 Steckbrett
4 20-MOhm-Widerstände (rot-schwarz-blau)
5 GPIO-Verbindungskabel
4 Knetekontakte
Legen Sie die vier Knetekontakte in der in der Abbildung gezeigten Anord-
nung auf den Tisch. Sie entsprechen den vier Richtungstasten auf einem
Gamepad.
Da die Python-Schnittstelle in Minecraft
TM
nur die Möglichkeit bietet, die
Spielfigur auf eine bestimmte Koordinate zu versetzen, nicht aber, wie über
die Tasten, vorwärts, rückwärts oder seitwärts relativ zur aktuellen Blickrich-
tung zu gehen, installieren wir ein zusätzliches Python-Modul, das Tastatur-
eingaben simuliert. Dazu ist eine Internetverbindung auf dem Raspberry Pi
nötig.
Öffnen Sie zur Installation der zusätzlichen Pakete mit einem
Klick auf dieses Symbol in der Startleiste eine Linux-Shell. Geben
Sie dort ein:
sudo pip3 install python3-xlib
Nachdem diese Installation durchgelaufen ist, was je nach Geschwindigkeit
der Internetverbindung einige Sekunden dauern kann, geben Sie ein:
sudo pip3 install pyautogui
Warten Sie auch hier, bis die Installation abgeschlossen ist. Danach können
Sie das Shell-Fenster wieder schließen.
Das Programm
Das Programm 18mc_gamepad01.py steuert die Spielfigur, indem es die
vier Knetekontakte abfragt und entsprechende Tastendrücke simuliert. Für
dieses Programm gibt es keine spezielle Spielfläche in der Minecraft
TM
-Welt,
es steuert einfach nur die Spielfigur.
#!/usr/bin/python
import mcpi.minecraft as minecraft
import pyautogui
import RPi.GPIO as GPIO
mc = minecraft.Minecraft.create()
kw = 16
ka = 21
ks = 12
kd = 7
GPIO.setmode(GPIO.BCM)
GPIO.setup(kw, GPIO.IN)
GPIO.setup(ka, GPIO.IN)
GPIO.setup(ks, GPIO.IN)
GPIO.setup(kd, GPIO.IN)
try:
while True:
if GPIO.input(kw) == False:
pyautogui.keyDown('w')
else:
pyautogui.keyUp('w')
if GPIO.input(ka) == False:
pyautogui.keyDown('a')
else:
pyautogui.keyUp('a')
if GPIO.input(ks) == False:
pyautogui.keyDown('s')
else:
pyautogui.keyUp('s')
if GPIO.input(kd) == False:
pyautogui.keyDown('d')
else:
pyautogui.keyUp('d')
except KeyboardInterrupt:
GPIO.cleanup()
So funktioniert
das Programm
import pyautogui
Das Modul pyautogui ermöglicht es unter anderem, das
Drücken und Loslassen von Tasten auf der Tastatur über Programmereignis-
se zu simulieren. Dieses Modul wird am Anfang mit den anderen Modulen
importiert.
Die Variablen kw, ka, ks, kd enthalten die Pinnummern der GPIO-Pins der
Knetekontakte, die die Tasten w, a, s, d simulieren.
Die vier Pins werden als Eingänge ohne Pull-down-Widerstände eingerichtet.
try:
while True:
if GPIO.input(kw) == False:
pyautogui.keyDown('w')
Die Hauptschleife des Programms prüft nacheinander, ob einer der Kne-
tekontakte berührt wird. Wird der Kontakt an Pin kw berührt, simuliert
pyautogui.keyDown() das Drücken der Taste w.
else:
pyautogui.keyUp('w')
Wird der Pin dagegen im Moment der Abfrage nicht berührt, simuliert
pyautogui.keyUp() das Loslassen der Taste w.
if GPIO.input(ka) == False:
pyautogui.keyDown('a')
else:
pyautogui.keyUp('a')
if GPIO.input(ks) == False:
pyautogui.keyDown('s')
else:
pyautogui.keyUp('s')
if GPIO.input(kd) == False:
pyautogui.keyDown('d')
else:
pyautogui.keyUp('d')
Nach dem gleichen Schema werden auch die Tasten a, s, d über Knetekon-
takte simuliert.
Ein Gamepad mit vier Sensorkontakten aus Knete steuert die Spielfigur.