User manual
Dieser GPIO-Pin wird als Ausgang initialisiert und ausgeschaltet.
pwm = 0
Das Tastverhältnis des PWM-Signals wird in der Variablen pwm gespeichert
und am Anfang auf 0 gesetzt.
l = GPIO.PWM(LED, 50)
Die Funktion GPIO.PWM() aus der GPIO-Bibliothek ist entscheidend für die
Ausgabe von PWM-Signalen. Diese Funktion benötigt zwei Parameter, den
GPIO-Pin und die Frequenz des PWM-Signals. In unserem Fall wird der GPIO-
Pin über die Variable LED festgelegt, die Frequenz ist 50 Hertz (Schwingun-
gen pro Sekunde).
Warum 50 Hertz die ideale Frequenz für PWM sind
Das menschliche Auge nimmt Lichtwechsel schneller als 20 Hertz nicht
mehr wahr. Da das Wechselstromnetz in Europa eine Frequenz von
50 Hertz nutzt, blinken viele Beleuchtungskörper mit dieser Frequenz,
die vom Auge nicht wahrgenommen wird. Würde eine LED mit mehr
als 20 Hertz, aber weniger als 50 Hertz blinken, käme es zu Interferen-
zen mit anderen Lichtquellen, wodurch der Dimmeffekt nicht mehr
gleichmäßig erschiene.
GPIO.PWM() erzeugt ein Objekt, das in der Variablen l gespeichert wird.
l.start(pwm)
Die Methode start() startet die Generierung des PWM-Signals. Dazu
muss noch ein Tastverhältnis angegeben werden. In unserem Fall ist das Tast-
verhältnis 0, was vorher in der Variablen pwm gespeichert wurde. Die LED ist
also immer ausgeschaltet. Python verwendet für PWM Werte zwischen 0 und
100, die direkt dem Prozentsatz der eingeschalteten Zeit des Pins innerhalb
eines Frequenzzyklus entsprechen. Ein PWM-Wert von 25 schaltet die LED
also ein Viertel der Zeit ein, die übrigen drei Viertel des Zyklus aus.
try:
while True:
for hit in mc.events.pollBlockHits():
bl = mc.getBlockWithData(hit.pos.x, hit.
pos.y, hit.pos.z)
Die Hauptschleife des Programms wartet wieder darauf, dass der Spieler mit
dem Schwert auf einen Block schlägt, und speichert diesen Block dann als
Objekt bl.
if bl.id == block.GOLD_ORE.id and pwm<100:
pwm += 10
Besteht der getroffene Block aus dem Material GOLD_ORE, ist es also der
Pfeil nach oben, wird der PWM-Wert bei jedem Schlag um 10 erhöht. Dies
soll aber nur passieren, solange der PWM-Wert noch kleiner als 100 ist, da
höhere Werte nicht verarbeitet werden können. Ein PWM-Signal von 100
entspricht einer voll eingeschalteten LED.
if bl.id == block.IRON_ORE.id and pwm>0:
pwm -= 10
Schlägt der Spieler auf einen Block aus dem Material IRON_ORE, also den
Pfeil nach unten, wird der PWM-Wert bei jedem Schlag um 10 verringern,
solange er noch größer als 0 ist.
l.ChangeDutyCycle(pwm)
time.sleep(0.1)
Unabhängig davon, was diese Abfragen ergeben haben, wird das PWM-Si-
gnal auf den neuen Wert gesetzt und danach eine Zehntelsekunde gewartet.
Solche Wartezeiten werden in Schleifen eingefügt, damit der Raspberry Pi
nicht vollständig damit beschäftigt ist, das Python-Programm auszuführen.
In diesem Fall würde sich Minecraft
TM
deutlich träger verhalten.
except KeyboardInterrupt:
l.stop()
GPIO.cleanup()
Beim Drücken der Tastenkombination [Strg]+[C] auf der Tastatur wird vor
dem Zurücksetzen der GPIO-Pins noch das PWM-Signal beendet.
Spielfigur Steve schlägt auf die Pfeilsymbole
Der Tag 7 in der Minecraft
TM
-Welt
Die Minecraft™-Blocktypen
Material ID Material ID
AIR 0 STONE_SLAB 44
STONE 1 BRICK_BLOCK 45
GRASS 2 TNT 46
DIRT 3 BOOKSHELF 47
COBBLESTONE 4 MOSS_STONE 48
WOOD_PLANKS 5 OBSIDIAN 49
SAPLING 6 TORCH 50
BEDROCK 7 FIRE 51
WATER_FLOWING 8 STAIRS_WOOD 53
WATER 8 CHEST 54
WATER_STATIONARY 9 DIAMOND_ORE 56
LAVA_FLOWING 10 DIAMOND_BLOCK 57
LAVA 10 CRAFTING_TABLE 58
LAVA_STATIONARY 11 FARMLAND 60
SAND 12 FURNACE_INACTIVE 61
GRAVEL 13 FURNACE_ACTIVE 62
GOLD_ORE 14 DOOR_WOOD 64
IRON_ORE 15 LADDER 65
COAL_ORE 16 STAIRS_COBBLESTONE 67
WOOD 17 DOOR_IRON 71
LEAVES 18 REDSTONE_ORE 73
GLASS 20 SNOW 78
LAPIS_LAZULI_ORE 21 ICE 79
LAPIS_LAZULI_BLOCK 22 SNOW_BLOCK 80
SANDSTONE 24 CACTUS 81
BED 26 CLAY 82
COBWEB 30 SUGAR_CANE 83
GRASS_TALL 31 FENCE 85
WOOL 35 GLOWSTONE_BLOCK 89
FLOWER_YELLOW 37 BEDROCK_INVISIBLE 95
FLOWER_CYAN 38 STONE_BRICK 98
MUSHROOM_BROWN 39 GLASS_PANE 102
MUSHROOM_RED 40 MELON 103
GOLD_BLOCK 41 FENCE_GATE 107
IRON_BLOCK 42 GLOWING_OBSIDIAN 246
STONE_SLAB_DOUBLE 43 NETHER_REACTOR_
CORE247










