22.11.2013 Aufrufe

Programmieren von LegoMindstorms-Robotern mit NQC

Programmieren von LegoMindstorms-Robotern mit NQC

Programmieren von LegoMindstorms-Robotern mit NQC

MEHR ANZEIGEN
WENIGER ANZEIGEN

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.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!