Soundausgabe
Spätestens seit R2D2 ist klar, dass Roboter Geräusche machen können. Natürlich kann unserer das auch, wenn auch nur verschieden hohe Piep-Töne. Aber immerhin, damit kann man verschiedene Zustände anzeigen oder sogar ein kleines Liedchen spielen.
Für einen richtig kräftigen Lautsprecher hat unser Mikrocontroller nicht genügend Leistung, aber für einen kleinen Piezo-Pieper, wie er auch in Digitaluhren eingebaut ist, reicht es gut. Und es ist nicht so laut, dass man den anderen Mitbewohnern zu sehr auf die Nerven geht.
Der Pieper wird an D9 und D2 angeschlossen, dabei ist die Polung egal. Über einen kleinen Widerstand von circa 100 Ohm zwischen B2 und X2 erfolgt eine Verbindung zur Versorgungsspannung. Der Widerstand sorgt dafür, dass der Strom beim Signalwechsel etwas gedämpft wird, schränkt dabei die Lautstärke aber kaum ein.
Zur Ausgabe eines Tones gibt es die Funktion setzeTon()
, der man in der Klammer die gewünschte Frequenz der Schallschwingungen angibt. Ein guter Startwert ist 1000.
Durch unterschiedliche Frequenzen kann man unterschiedlich hohe Töne erzeugen und damit sogar ein Lied spielen.
Aber welche Frequenzen ergeben welchen Ton? Das kann man leicht im Internet finden, oder sich selbst ausrechnen: nebeneinander liegende Halbtöne unterscheiden sich um den Faktor 12te Wurzel von 2 voneinander, also 2(1 / 12) = 1,059463094. Nun muss man nur noch wissen, dass der Ton „a“ der Frequenz 440 Hz entspricht und kann daraus die Frequenzen aller anderen (Halb-)Töne berechnen. Fragt mal Eure(n) Musiklehrer/-in! 🙂
Die Funktion setzeTon()
startet den Ton einfach nur und er wird die ganze Zeit automatisch ausgegeben, auch wenn das Programm inzwischen etwas anderes macht. Erst durch einen weiteren Aufruf mit einer anderen Frequenz wird der Ton geändert oder bei Angabe von 0 gestoppt.
Möchte man also nur einen kurzen Piepton ausgeben, muss man etwas in der Art programmieren:
. . . setzeTon( 1000 ); warteMillisec( 500 ); setzeTon( 0 ); . . .