Programmieren von LegoMindstorms-Robotern mit NQC
Programmieren von LegoMindstorms-Robotern mit NQC
Programmieren von LegoMindstorms-Robotern mit NQC
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
8. Der RCX macht Musik<br />
Der RCX hat einen eingebauten Lautsprecher, <strong>mit</strong> dem er Klänge und sogar einfache Musikstücke spielen kann. Da<strong>mit</strong><br />
kannst du den RCX so programmieren, dass er etwas “sagen” kann. Aber es ist auch ganz lustig, wenn dein Roboter Musik<br />
spielt, während er herumfährt.<br />
8.1. Vorprogrammierte Klänge<br />
Im RCX sind 6 Klänge, die <strong>von</strong> 0 bis 5 nummeriert sind, vorprogrammiert. Sie klingen wie folgt.:<br />
0 kurzes “Bip”, das bei jedem Tastendruck ertönt.<br />
1 “Piep Piep”, das beim Einschalten des RCX erklingt.<br />
2 Tonfolge <strong>von</strong> hoch nach tief<br />
3 Tonfolge <strong>von</strong> tief nach hoch<br />
4 ‘Buhhh’ = Fehlerhinweis<br />
5 schnelle Tonfolge <strong>von</strong> tief nach hoch, das bei erfolgreicher Übertragung eines Programms ertönt.<br />
Du kannst sie <strong>mit</strong> dem Befehl PlaySound()abspielen. Hier ist ein kleines Programm, das alle Klänge nacheinander<br />
abspielt:.<br />
task main()<br />
{<br />
PlaySound(0); Wait(100);<br />
PlaySound(1); Wait(100);<br />
PlaySound(2); Wait(100);<br />
PlaySound(3); Wait(100);<br />
PlaySound(4); Wait(100);<br />
PlaySound(5); Wait(100);<br />
}<br />
Vielleicht wunderst du dich über die Wait(100);-Befehle. Der Grund dafür ist, dass der RCX beim PlaySound( )-<br />
Befehl nicht wartet, bis die Tonfolge abgespielt ist, sondern er führt sofort den folgenden Befehl durch. Der RCX hat einen<br />
kleinen Puffer, in dem er einige Töne speichern kann. Aber nach einer Weile ist dieser Puffer voll und Töne gehen verloren.<br />
Dieses ist bei Tönen nicht so schlimm, aber für Musik ist das sehr wichtig, wie wir weiter unten sehen werden.<br />
Beachte bitte, das das Argument für PlaySound( ); (also der Wert in Klammern) eine Konstante sein muß. Du darfst<br />
hier keine Variable einsetzen!<br />
8.2. Musik<br />
Für interessantere Musikstücke hat der <strong>NQC</strong> den Befehl PlayTone(262,40);<br />
Er hat zwei Argumente (hier 262 und 40). Der erste Wert gibt die Tonfrequenz an (hier 262 Hertz), der zweite die Tondauer<br />
(hier 40/100 = 0,4 Sekunden).<br />
Hier eine Tabelle <strong>mit</strong> nützlichen Frequenzen:<br />
Sound 1 2 3 4 5 6 7 8<br />
G# 52 104 208 415 831 1661 3322<br />
G 49 98 196 392 784 1568 3136<br />
F# 46 92 185 370 740 1480 2960<br />
F 44 87 175 349 698 1397 2794<br />
E 41 82 165 330 659 1319 2637<br />
D# 39 78 156 311 622 1245 2489<br />
D 37 73 147 294 587 1175 2349<br />
C# 35 69 139 277 554 1109 2217<br />
C 33 65 131 262 523 1047 2093 4186<br />
B 31 62 123 247 494 988 1976 3951<br />
A# 29 58 117 233 466 932 1865 3729<br />
A 28 55 110 220 440 880 1760 3520<br />
Was wir bereits oben für Töne gelernt haben, gilt auch hier. Der RCX wartet nicht, bis der Ton zu Ende gespielt ist. Wenn<br />
du also eine Tonfolge für ein Lied programmierst, füge besser Wait(); -Befehle hinzu, die etwas länger sein sollten, als<br />
die Tondauer.