Weihnachtsprojekt: Verteiltes Glockenspiel mit mehreren Calliope Mini

Seite 4: Konzert 2: Musik liegt in der Luft

Inhaltsverzeichnis

Es wäre allerdings unpraktisch, wenn die ganze Gruppe am Weihnachtsbaum stehen und die Knöpfe im richtigen Takt drücken müsste. Daher ist jetzt das Ziel, die Noten über die Bluetooth-Schnittstelle kabellos zu übertragen. Die Melodie wird dazu in einer Liste gespeichert, in der Programmierung ist dies ein Array. Ihr findet die Funktion im Fortgeschritten-Menü des Calliope Editors unter "Arrays".

Erstellt zunächst eine Variable mit dem Namen MeineMelodie (Menü "Variablen -> Neue Variable anlegen"). Dieser weist ihr mit den Befehlen Ändere Wert auf MeineMelodie und Erstelle Array mit … ein noch leeres Array zu. Über das blaue Setup-Symbol im Befehl Erstelle Array mit … kann die Anzahl der Listenelemente geändert werden. Zieht einfach so viele Elemente in das Array wie euer Lied Noten hat. In die Elemente schreibt ihr eure Melodie von oben nach unten. Die Ziffern neben den Noten beschreiben die Oktave. Im Beispiel sind alle aus der gleichen Oktave. Wenn ihr ein Lied über mehrere Oktaven habt, müsst ihr die Ziffern entsprechend anpassen (C1, C2 ,… usw.).

Konzert 2: Melodie senden

Mit einer Für Index von 0 bis 4 Programmierschleife (siehe Menü "Schleifen") soll nacheinander jedes Element des Arrays ausgelesen werden. Die Voreinstellung 4 wird mit der Variablen Array-Länge» (Menü "Arrays") ersetzt, die automatisch die Anzahl der Listenelemente speichert. Da der Index bei 0 und nicht bei 1 beginnt, muss für die Anzahl der Schleifendurchläufe noch 1 subtrahiert werden. Das geht mit dem 0 – 0 Befehl im Menü "Mathematik". Die erste Null wird mit der Variablen Array-Länge (MeineMelodie) und die zweite Null durch eine 1 ersetzt.

Calliope mini

Der Mikrocontroller Calliope mini wurde in Deutschland entwickelt und soll bereits in der Grundschule Programmierkenntnisse vermitteln.

Alle Befehle, die in der grünen Klammer der Schleife stehen, werden nun genauso häufig ausgeführt wie die empfangene Melodie Noten hat. Bei jedem Durchlauf wird die Variable Index um 1 erhöht und es somit möglich, ein weiteres Element aus der Liste auszulesen. Dazu braucht ihr den Befehl Liste rufe den Wert ab bei 0 aus dem Menü "Arrays". Anstelle des Wertes Liste wählt ihr die Variable MeineMelodie und statt der Null setzt ihr die Variable Index ein. Mit ändere AktuelleNote auf … wird der zuvor bezogene Listenwert der Variable AktuelleNote zugewiesen.

Wählt den Befehl Sende Zeichenfolge im Menü Funk und wählt die Variable AktuelleNote um genau diesen Wert per Bluetooth in die Welt zu senden. Das Senden der nächsten Note soll um die Taktzeit verzögert werden. Hierfür nutzt ihr den Befehl pausiere (ms) Takt und setzt als Wert 500 ein. Dies sorgt für eine Unterbrechung von einer halben Sekunde bevor die nächste Note aus dem Array versendet wird. Damit später klar, ist wer zu eurer Gruppe gehört und somit die Noten empfangen soll, muss in der Beim Start Anweisung eine Gruppe mit dem Befehl Setze Gruppe 0 definiert werden (Menü "Funk" "mehr").

Die unterschiedlichen Calliopes sollen die versendeten Noten mithören, prüfen ob sie selbst die empfangenen Noten spielen können und dies gegebenenfalls auch tun. Hierzu müsst ihr zunächst definieren, welche Noten euer Calliope spielen kann. Definiert zwei Variablen MeineNote1 und MeineNote2 und weist ihnen mit der Anweisung Ändere MeineNote1 auf … (Menü "Variablen") sowohl für Note 1 als auch für Note 2 die Tonhöhen zu, die ihr mit den Klangrohren erzeugen könnt. Damit ihr später seht, auf welche Noten euer Calliope eingestellt ist, solltet ihr sie im Startmenü mit dem Befehl Zeige Zeichenfolge kurz anzeigen.

Konzert 2: Melodie empfangen

Der Befehl Wenn Datenpaket empfangen receivedString aus dem Menü "Funk" speichert die empfangene Zeichenfolge in der Variablen receivedString. Benennt diese Variable in AkutelleNote durch klicken auf receivedString um, das macht den Programmtext leichter verständlich.

Nun braucht ihr die Funktion Wenn wahr dann … Funktion (Menü "Logik") um zu überprüfen, ob es sich bei der empfangenen Note um eine handelt, die euer Calliope spielen kann. Ebenfalls im Menü "Logik" befindet sich der Operator 0 = 0. Ersetzt die erste Null mit AkutelleNote und die zweite Null mit MeineNote1. Es wird also geprüft, ob die empfangene Note der ersten Note eures Calliopes entspricht. Die Befehle in der grünen Klammer entsprechen nun denen aus Konzert Nummer 1, wenn der Knopf A gedrückt wurde. Den Wenn wahr dann … Befehl müsst ihr noch für die zweite Note wiederholen und anpassen. Jetzt könnt ihr die beiden Programmteile Senden und Empfangen in einem Programm kombinieren. Somit kann jeder Calliope sowohl als Sender als auch als Empfänger eingesetzt werden.