Mit einem Smartphone kann man telefonieren. Wenn ein Anruf eingeht ertönt ein Klingelton, den man bei einem Smartphone selbst wählen kann. In der folgenden Übung soll zwei Calliope beigebracht werden, ein Telefonat zu simulieren.
Folgendes Verhalten sollen die beiden Calliope lernen:
Ein Anruf wird mit dem Taster A auf dem Calliope 1 gestartet (Eingabe).
Calliope 1 sendet daraufhin über das Funkmodul den Anruf an das Calliope 2 (Ausgabe).
Auf dem Calliope 2 signalisiert der Lautsprecher den eingehenden Anruf mit einem Klingelton (Ausgabe).
Mit einem Druck auf den Taster B wird der Anruf von Calliope 2 entgegengenommen (Eingabe).
Ein lautes Wort, das in das Mikrofon von Calliope 2 gesprochen wird, löst das Senden einer Antwort von Calliope 2 an Calliope 1 aus (Eingabe und Ausgabe).
Auf Calliope 1 wird die Antwort empfangen und auf der 5x5 LED Lampe ein Emoji dargestellt (Ein- und Ausgabe).
Wenn auf beiden Calliope der Reset-Knopf gedrückt wird, startet das Programm jeweils neu und man kann sich neu anrufen (Eingabe).
Verarbeitet wird das alles vom Prozessor und die notwendigen Daten werden im Arbeitsspeicher und Flash-Speicher gespeichert (Verarbeitung).
Einigt euch auf einen gemeinsamen Funkkanal zwischen 0 und 255, den ihr für die Kommunikation zwischen den Calliope verwendet.
Entwerft ein Programm, welches ein Telefonat simulieren kann, so wie es oben beschrieben wurde.
Der folgende Lösungsvorschlag programmiert das Verhalten beider Calliope in einem einzigen Programm. Auf beide Calliope wird also genau das gleiche Programm übertragen, so dass jedes Calliope anrufen oder den Anruf annehmen kann.
Vor dem Programmstart einigen sich die Partner-Calliope darauf, wer anruft und wer den Anruf annimmt. Sobald das Emoji zu sehen ist, kann das Programm durch Drücken des Reset-Knopfs wieder neu gestartet werden.
Damit zwischen zwei Calliopes Nachrichten hin- und hergeschickt werden können, muss die Funk-Erweiterung geladen werden.
Klicke im Editor oben rechts auf das Zahnrad und dann auf den Eintrag "Erweiterungen".
Lade die Funk-Erweiterung, indem du auf "radio - The radio services" klickst. Wenn die Erweiterung nicht mehr zu sehen ist, dann wurde sie schon in deinem Editor hinzugefügt.
Beim Start wird die Funkgruppe auf einen gemeinsamen Kanal (z.B. 73) und die Sendeleistung auf das Maximum (7) gesetzt.
Wenn man auf dem Calliope 1 den Knopf A drückt, wird der Text "Anruf" an Calliope 2 gesendet.
Wenn Calliope 2 einen Text empfängt, wird dieser in der Variable "receivedString" gespeichert.
Wenn "receivedString" = "Anruf" ist, dann wird der Klingelton abgespielt.
Der Klingelton wird solange abgespielt, solange die Variable "anrufangenommen" = falsch ist.
Drückt man auf dem Calliope 2 die Taste B, dann wird die Variable "anrufangenommen" auf den Wert "wahr" gesetzt und die Melodie wird nicht mehr abgespielt.
Der Code
Vorschlag für einen Klingelton:
Wenn auf dem Calliope 2 der Anruf angenommen wurde, dann soll ein Emoji an Calliope 1 gesendet werden, sobald man laut in das Mikrofon gesprochen hat:
Überprüfe dauerhaft auf Calliope 2, ob ein Anruf angenommen wurde und ob mit dem Mikrofon eine Lautstärke von mehr als 200 gemessen wird. Dazu werden zwei Logik-Abfragen kombiniert:
Wenn "anrufangenommen" = wahr und gleichzeitig "Lautstärke" > 200
Wenn die gerade beschriebene Bedingung erfüllt ist, dann sende den Text "Antwort" von Calliope 2 an Calliope 1.
Wenn auf Calliope 1 ein Text empfangen wird, prüfe ob der Text = "Antwort" ist. Wenn ja, zeige eine Smile-Emoji.