User manual
Heute im Adventskalender
1 GPIO-Verbindungskabel
RGB-LED mit PWM steuern
Das Experiment des 11. Tags zeigt, wie man mit einer RGB-LED mehr als die
sechs Farben und Weiß darstellen kann. Mischfarben entstehen, indem man
die einzelnen Farben einer RGB-LED über PWM-Signale unterschiedlich hell
einstellt. Der Schaltungsaufbau entspricht dem von Tag 10. Bei der Zahl 11
in der Minecraft
TM
-Welt sind drei farbige Blockreihen aufgebaut. Je weiter
rechts die Spielfigur auf diese Blockreihe schlägt, desto heller leuchtet die
jeweilige Farbe.
Farbige Blockleisten steuern die PWM-Signale für die RGB-LEDs.
Bauteile
1 Steckbrett
1 RGB-LED mit eingebauten Vorwiderständen
4 GPIO-Verbindungskabel
Das Programm
Das Programm 11mc_rgb02.py steuert die drei PWM-Signale der RGB-
LED über Reihen aus farbigen Blöcken, die nach dem Prinzip des Programms
von gestern funktionieren.
#!/usr/bin/python
import mcpi.minecraft as minecraft
import mcpi.block as block
import RPi.GPIO as GPIO
mc = minecraft.Minecraft.create()
r = 25
g = 24
b = 23
r0 = 14
g0 = 13
b0 = 11
r1 = 1
g1 = 5
b1 = 3
rx = -8
gx = -9
bx = -10
y = 3
z = 21
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)
rp = GPIO.PWM(r, 50)
gp = GPIO.PWM(g, 50)
bp = GPIO.PWM(b, 50)
rp.start(0)
gp.start(0)
bp.start(0)
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.WOOL.id and hit.pos.x
== rx:
for i in range(hit.pos.z-z):
mc.setBlock(rx, y, z+i, block.WOOL.
id, r1)
for i in range(10-hit.pos.z+z):
mc.setBlock(rx, y, hit.pos.z+i, block.
WOOL.id, r0)
rp.ChangeDutyCycle(hit.pos.z-z)
if bl.id == block.WOOL.id and hit.pos.x
== gx:
for i in range(hit.pos.z-z):
mc.setBlock(gx, y, z+i, block.WOOL.
id, g1)
for i in range(10-hit.pos.z+z):
mc.setBlock(gx, y, hit.pos.z+i, block.
WOOL.id, g0)
gp.ChangeDutyCycle(hit.pos.z-z)
if bl.id == block.WOOL.id and hit.pos.x
== bx:
for i in range(hit.pos.z-z):
mc.setBlock(bx, y, z+i, block.WOOL.
id, b1)
for i in range(10-hit.pos.z+z):
mc.setBlock(bx, y, hit.pos.z+i, block.
WOOL.id, b0)
bp.ChangeDutyCycle(hit.pos.z-z)
except KeyboardInterrupt:
GPIO.cleanup()
So funktioniert das Programm
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, r0, g0 und b0 die Farben der ausgeschalteten Blöcke und r1, g1
und b1 die der eingeschalteten.
rx = -8
gx = -9
bx = -10
y = 3
z = 21
Die Lage der Blöcke wird anders als im gestrigen Programm ebenfalls in Va-
riablen gespeichert. Jede Farbe hat ihre eigene x-Koordinate, die Variable z
bezeichnet den Anfang der Reihen links und y die Höhe im Raum.
RGB-LED auf dem Steckbrett.










