User manual

Heute im Adventskalender
1 Taster
Gamepad aus Knete mit Tastern
Das Experiment des 19. Tags erweitert das Gamepad um zwei Taster, mit de-
nen die Spielfigur springen und fliegen kann.
Bauteile
1 Steckbrett
2 Taster
4 20-MOhm-Widerstände (rot-schwarz-blau)
7 GPIO-Verbindungskabel
2 Drahtbrücken
4 Knetekontakte
Das Programm
Das Programm 19mc_gamepad02.py steuert die Spielfigur über die vier
Knetekontakte. Die beiden Taster erfüllen die Funktion der [Leertaste].
Damit kann die Spielfigur springen und fliegen. Auch für dieses Programm
gibt es in der Minecraft
TM
-Welt keine spezielle Spielfläche.
#!/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
tl = 24
tr = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(kw, GPIO.IN)
GPIO.setup(ka, GPIO.IN)
GPIO.setup(ks, GPIO.IN)
GPIO.setup(kd, GPIO.IN)
GPIO.setup(tl, GPIO.IN, GPIO.PUD_DOWN)
GPIO.setup(tr, GPIO.IN, GPIO.PUD_DOWN)
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')
if GPIO.input(tl) == True:
pyautogui.keyDown(' ')
else:
pyautogui.keyUp(' ')
if GPIO.input(tr) == True:
pyautogui.keyDown(' ')
pyautogui.PAUSE = 0.1
pyautogui.keyUp(' ')
pyautogui.PAUSE = 0.1
pyautogui.keyDown(' ')
pyautogui.PAUSE = 0.1
pyautogui.keyUp(' ')
except KeyboardInterrupt:
GPIO.cleanup()
So funktioniert das Programm
Das Programm basiert auf dem Programm des 18. Tags und wurde lediglich
um die Abfragen der beiden Taster erweitert.
tl = 24
tr = 18
Nach den GPIO-Pins für die Knetekontakte werden in den beiden Variablen
tl und tr noch zwei GPIO-Pinnummern für den linken und rechten Taster
gespeichert.
GPIO.setup(tl, GPIO.IN, GPIO.PUD_DOWN)
GPIO.setup(tr, GPIO.IN, GPIO.PUD_DOWN)
Diese beiden GPIO-Pins werden als Eingänge mit Pull-down-Widerständen
eingerichtet.
if GPIO.input(tl) == True:
pyautogui.keyDown(' ')
else:
pyautogui.keyUp(' ')
Wird der linke Taster gedrückt, simuliert pyautogui.keyDown(' ')
das Drücken der [Leertaste], lässt man den Taster wieder los, simuliert
pyautogui.keyUp(' ') das Loslassen der [Leertaste]. Bei Tastern
muss im Gegensatz zu Knetekontakten der Status True abgefragt wer-
den.
if GPIO.input(tr) == True:
pyautogui.keyDown(' ')
pyautogui.PAUSE = 0.1
pyautogui.keyUp(' ')
pyautogui.PAUSE = 0.1
pyautogui.keyDown(' ')
pyautogui.PAUSE = 0.1
pyautogui.keyUp(' ')
Der rechte Taster simuliert ein kurzes doppeltes Antippen der [Leertaste],
um zu fliegen. Hier wird das Loslassen des Tasters nicht extra überprüft, da
das Drücken bereits den kompletten Schaltzyklus auslöst.
Ein Gamepad mit vier Sensor-
kontakten aus Knete und zwei
Tastern steuert die Spielfigur.