User manual
Heute im Adventskalender
1 GPIO-Verbindungskabel
RGB-LEDs zeigen Material und Höhe
eines Blocks
Zwei RGB-LEDs zeigen an, wo die Spielfigur steht. Durch kurzes Antippen
eines Knetekontakts lässt sich das Material des Blocks verändern, auf dem
Steve steht.
Bauteile
1 Steckbrett
2 RGB-LEDs mit eingebauten Vorwiderständen
1 20-MOhm-Widerstand (rot-schwarz-blau)
9 GPIO-Verbindungskabel
1 Knetekontakt
Das Programm
Neben der Zahl 20 in der Minecraft
TM
-Welt befindet sich ein Abhang mit
farbig gestaffelten Höhenschichten. Wandern Sie mit der Spielfigur darauf
entlang, zeigen die beiden RGB-LEDs die typischen Farben des jeweiligen
Untergrunds (angenähert). Beide RGB-LEDs zeigen die gleiche Farbe, ver-
wenden aber unterschiedliche Algorithmen, um diese zu erkennen. Die eine
RGB-LED ermittelt die Farbe anhand der Höhe, also der y-Koordinate des
Blocks, die andere liest das Material aus.
Beim Antippen des Knetekontakts ändert sich das Material des Blocks, auf
dem die Spielfigur steht. Dann zeigen beide LEDs unterschiedliche Farben.
#!/usr/bin/python
import mcpi.minecraft as minecraft
import mcpi.block as block
import RPi.GPIO as GPIO
import time
mc = minecraft.Minecraft.create()
k = 21
LED1 = [7, 8, 25]
LED2 = [24, 23, 18]
GPIO.setmode(GPIO.BCM)
GPIO.setup(k, GPIO.IN)
for i in range(3):
GPIO.setup(LED1[i], GPIO.OUT, initial=False)
GPIO.setup(LED2[i], GPIO.OUT, initial=False)
lf = [[0, 0, 1],[0, 1, 0],[1, 1, 1],[1, 0, 0],
[1, 0, 1]]
mf = {3: 0, 5: 1, 4: 2, 1: 3, 14: 4}
nf = {3: 5, 5: 4, 4: 1, 1: 14, 14: 3}
try:
while True:
p = mc.player.getTilePos()
bl = mc.getBlockWithData(p.x, p.y-1, p.z)
if bl.id == block.WOOL.id:
for i in range(3):
GPIO.output(LED1[i], lf[p.y][i])
for i in range(3):
GPIO.output(LED2[i], lf[mf[bl.data]][i])
if GPIO.input(k) == False:
mc.setBlock(p.x, p.y-1, p.z, block.WOOL.
id, nf[bl.data])
time.sleep(0.1)
except KeyboardInterrupt:
GPIO.cleanup()
So funktioniert das Programm
k = 21
LED1 = [7, 8, 25]
LED2 = [24, 23, 18]
Nachdem die bereits bekannten Module importiert wurden, werden Variab-
len für die verwendeten GPIO-Pins angelegt. Die Variable k enthält den Pin
für den Knetekontakt, die beiden Listen LED1 und LED2 die je drei Pins für
die RGB-LEDs.
for i in range(3):
GPIO.setup(LED1[i], GPIO.OUT, initial=False)
GPIO.setup(LED2[i], GPIO.OUT, initial=False)
Zwei Schleifen initialisieren die GPIO-Pins der RGB-LEDs als Ausgänge und
schalten diese aus.
lf = [[0, 0, 1],[0, 1, 0],[1, 1, 1],[1, 0, 0],
[1, 0, 1]]
Die Liste lf definiert die fünf verwendeten Lichtfarben. Jede Farbe besteht
aus den drei Komponenten Rot, Grün und Blau. Durch Kombination entste-
hen daraus die Farben Blau, Grün, Weiß, Rot und Lila.
mf = {3: 0, 5: 1, 4: 2, 1: 3, 14: 4}
Für die Zuordnung des Materials zur Anzeige der Lichtfarbe wird eine Va-
riable mf vom Typ Dictionary verwendet, dies ist eine besondere Form der
Liste. In einem Dictionary werden die einzelnen Elemente nicht über ihre
Nummer ausgewählt, sondern über ein beliebiges Wort, den sogenannten
Schlüssel, der auch aus einem einzigen Buchstaben oder einer Zahl beste-
hen kann. Im Gegensatz zu einer einfachen Liste steht ein Dictionary in ge-
schweiften Klammern. Es kann beliebig viele Paare aus Schlüssel und Wert
enthalten.
In unserem Fall ist der Schlüssel der jeweilige Data-Wert des block.WOOL-
Materials, der Wert dahinter die zugehörige Farbnummer aus der Liste lf.
nf = {3: 5, 5: 4, 4: 1, 1: 14, 14: 3}
Nach ähnlichem Schema enthält das Dictionary nf bei einer zyklischen Ver-
änderung die jeweils nächste Farbe. Jedes Antippen des Knetekontakts soll
die Farbe des Blocks, auf dem die Spielfigur steht, zyklisch um eine Farbe
weiterschalten. So wird aus einem Block der Farbe 3 (Blau) beim Antippen
die Farbe 5 (Grün). Die Tabelle zeigt die verwendeten Farben:
Zwei RGB-LEDs und ein Sensorkontakt aus Knete.










