User manual

GPIO.output(LED[5],True)
ton(8)
GPIO.output(LED[4],False)
GPIO.output(LED[5],False)
if bl.data == we and hit.pos.z >= z+20 and
hit.pos.z <= z+22:
GPIO.output(LED[5],True)
ton(9)
GPIO.output(LED[5],False)
if bl.data == sw and hit.pos.z >= z+22 and
hit.pos.z <= z+24:
GPIO.output(LED[5],True)
GPIO.output(LED[6],True)
ton(10)
GPIO.output(LED[5],False)
GPIO.output(LED[6],False)
if bl.data == we and hit.pos.z >= z+24 and
hit.pos.z <= z+26:
GPIO.output(LED[6],True)
ton(11)
GPIO.output(LED[6],False)
except KeyboardInterrupt:
GPIO.cleanup()
So funktioniert das Programm
LED = [12,7,8,25,24,23,18]
pi = 21
Die Liste LED[] enthält die Nummern der GPIO-Pins für die LEDs, die Varia-
ble pi den GPIO-Pin des Piezo-Summers.
TON = [261,277,293,311,329,349,369,391,415,440,
466,493]
Die Liste TON[] enthält die Frequenzen der zwölf verwendeten Töne.
x = -22
z = 30
x und z sind wieder die Koordinaten des Anfangspunkts des Klaviers. Sie
werden benötigt, da die angeschlagene Klaviertaste anhand ihrer Koordi-
naten identifiziert wird.
we = 0
sw = 15
Die beiden Farben der Klaviertasten werden, um die Tasten zu identifizieren,
in den Variablen we (weiß) und sw (schwarz) gespeichert.
for i in LED:
GPIO.setup(i, GPIO.OUT, initial=False)
Die GPIO-Pins der LEDs werden als Ausgänge definiert und ausgeschaltet.
GPIO.setup(pi, GPIO.OUT, initial=False)
p = GPIO.PWM(pi, 1)
Der GPIO-Pin des Piezo-Summers wird als Ausgang definiert, ausgeschaltet,
und ein PWM-Signal wird darauf eingerichtet.
def ton(t):
p.ChangeFrequency(TON[t])
p.start(1)
time.sleep(0.2)
p.stop()
Um die Töne zu erzeugen, verwenden wir wieder eine Funktion. Funktionen
können Parameter enthalten, die bei jedem Aufruf übergeben werden. Die
Funktion ton(t) beinhaltet den Parameter t. Dieser enthält bei jedem
Funktionsaufruf die Nummer der angeschlagenen Klaviertaste.
Innerhalb der Funktion wird zunächst die Frequenz des PWM-Signals auf die
dem jeweiligen Ton entsprechende Frequenz aus der Liste TON[] gesetzt.
Danach wird das PWM-Signal für 0,2 Sekunden gestartet, um den Ton über
den Piezo-Summer abzuspielen.
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 ist diesmal wieder eine Endlosschleife, die
prüft, ob ein Block mit dem Schwert angeschlagen wurde, und diesen Block
dann in der Struktur bl speichert.
Nacheinander werden nun alle Tasten geprüft, um anhand der Koordinaten
des angeschlagenen Blocks die richtige Taste zu finden.
if bl.data == we and hit.pos.z >= z and
hit.pos.z <= z+2:
GPIO.output(LED[0],True)
ton(0)
GPIO.output(LED[0],False)
Ist die Farbe der Taste Weiß und die z-Koordinate in einem bestimmten Be-
reich, wird die der Taste entsprechende LED eingeschaltet, der Ton mithilfe
der Funktion ton() erzeugt und danach die LED wieder ausgeschaltet.
if bl.data == sw and hit.pos.z >= z+2 and
hit.pos.z <= z+4:
GPIO.output(LED[0],True)
GPIO.output(LED[1],True)
ton(1)
GPIO.output(LED[0],False)
GPIO.output(LED[1],False)
Die schwarzen Tasten funktionieren prinzipiell gleich, jedoch mit dem Unter-
schied, dass zwei LEDs ein- und nach dem Ton wieder ausgeschaltet werden.
except KeyboardInterrupt:
GPIO.cleanup()
Das Programm läuft, bis es mit der Tastenkombination [Strg]+[C] abge-
brochen wird. Danach werden die GPIO-Pins zurückgesetzt.
Der Downloadcode aus dem Adventskalender heute liefert Noten für ein
Weihnachtslied zum Nachspielen. Geben Sie den Code auf www.buch.cd
ein.
Steve spielt auf dem Klavier Weihnachtsmusik
Die Klaviertasten und ihre Töne