User manual
Heute im Adventskalender
1 20-MOhm-Widerstand (rot-schwarz-blau)
Knetekontakte und Steve steuern
RGB-LED
Im Experiment des 12. Tags steuern die Spielfigur Steve und zwei Knete-
kontakte die RGB-LED. Neben der Zahl 12 in der Minecraft
TM
-Welt befindet
sich eine Treppe, die zum Teil in den Boden eingegraben ist. Je weiter die
Spielfigur in der blauen Richtung nach oben geht, desto heller leuchtet die
blaue Farbe der RGB-LED. Je weiter die Spielfigur in der grünen Richtung
nach oben geht, desto heller leuchtet die grüne Farbe der RGB-LED. Die rote
Farbe lässt sich schrittweise über zwei Knetekontakte nach oben oder unten
regeln.
Diese Treppe steuert zwei Farben der RGB-LED.
Bauteile
1 Steckbrett
1 RGB-LED mit eingebauten Vorwiderständen
2 20-MOhm-Widerstände (rot-schwarz-blau)
7 GPIO-Verbindungskabel
2 Knetekontakte
Das Programm
Das Programm 12mc_rgb04.py fragt die Position der Spielfigur sowie
die beiden Knetekontakte ab und stellt danach die Farben der RGB-LED ein.
#!/usr/bin/python
import mcpi.minecraft as minecraft
import RPi.GPIO as GPIO
import time
mc = minecraft.Minecraft.create()
r = 25
g = 24
b = 23
k1 = 12
k2 = 21
x = -17
z = -4
GPIO.setmode(GPIO.BCM)
GPIO.setup(r, GPIO.OUT, initial=False)
GPIO.setup(g, GPIO.OUT, initial=False)
GPIO.setup(b, GPIO.OUT, initial=False)
GPIO.setup(k1, GPIO.IN)
GPIO.setup(k2, GPIO.IN)
rp = GPIO.PWM(r, 50)
gp = GPIO.PWM(g, 50)
bp = GPIO.PWM(b, 50)
rp.start(0)
gp.start(0)
bp.start(0)
pwm = 0
try:
while True:
p = mc.player.getTilePos()
if p.x >= x and p.x <= x+5 and p.z >= z and
p.z <= z+5:
gp.ChangeDutyCycle((p.x-x)*20)
bp.ChangeDutyCycle((p.z-z)*20)
if GPIO.input(k1) == False and pwm<100:
pwm += 10
rp.ChangeDutyCycle(pwm)
time.sleep(0.1)
if GPIO.input(k2) == False and pwm>0:
pwm -= 10
rp.ChangeDutyCycle(pwm)
time.sleep(0.1)
except KeyboardInterrupt:
GPIO.cleanup()
So funktioniert das Programm
r = 25
g = 24
b = 23
Auch hier werden am Anfang Bibliotheken importiert und Variablen ange-
legt. r, g und b enthalten die Nummern der verwendeten GPIO-Pins der
RGB-LED.
k1 und k2 enthalten die Nummern der verwendeten GPIO-Pins für die Kne-
tekontakte.
x und z sind die Koordinaten der untersten Treppenstufe. Das Programm
fragt nur die x- und z-Koordinaten ab. Die Höhe, auf der die Spielfigur steht,
spielt keine Rolle.
Nachdem die GPIO-Pins initialisiert wurden, werden drei PWM-Objekte für
die drei Farben angelegt und mit 0 gestartet. Die LED ist ausgeschaltet.
Die Endlosschleife fragt ständig die Position der Spielfigur ab und prüft, ob
sich diese im Bereich der x-/z-Koordinaten der Treppe befindet.
Ist das der Fall, werden die PWM-Werte für Grün und Blau entsprechend
den Koordinaten eingestellt. Die Treppe hat fünf Stufen, und eine Stufe ent-
spricht 20 Einheiten, da der Maximalwert für PWM-Werte 100 beträgt.
if GPIO.input(k1) == False and pwm<100:
pwm += 10
rp.ChangeDutyCycle(pwm)
time.sleep(0.1)
Wenn der Knetekontakt an GPIO-Pin k1 berührt wird und
der in der Variablen pwm gespeicherte PWM-Wert für Rot
den Wert 100 noch nicht erreicht hat, wird er um 10 Einhei-
ten erhöht, das PWM-Objekt rp entsprechend geändert
und 0,1 Sekunden gewartet, um versehentlich zu langes
Drücken abzufangen.
Nach dem gleichen Schema wird beim Berühren des ande-
ren Knetekontakts der PWM-Wert schrittweise gesenkt.
Zwei Sensorkontakte und RGB-LED.










