Funkmodul des Calliope


Per Funk kommunizieren

Zwei oder mehr Calliope können per Funk kommunizieren. Dazu legt man zu Beginn eines Programms bei allen Calliope, die miteinander kommunizieren möchten den Funkkanal (= Gruppe) und die Übertragungsstärke fest:

Funk 01

Dann legt man fest, bei welchem Aktor ein Funksignal gesendet werden soll. Im folgenden Beispiel sendet man beim Drücken des Druckknopfs A die Zahl 1 und beim Drücken des Druckknopfs B die Zahl 2.

Funk 02

Mit der Abfrage wenn Datenpaket empfangen legt man eine Aktion fest, die abgearbeitet werden soll, wenn ein Datenpaket ankommt. Das Datenpaket wird in der Variable receivedNumber gespeichert. Diesen Namen kann man auch ändern, indem man auf receivedNumber klickt. Im folgenden Beispiel wird die empfangene Zahl angezeigt und die Farbe der LED geändert.

Funk 03

Das vollständige Programm sieht dann so aus:

Funk 04

Dieses Programm kann sowohl Daten senden, als auch Daten empfangen und verarbeiten.

Für den Import folgt der JavaScript-Code:

    input.onButtonPressed(Button.A, () => {
        radio.sendNumber(1)
    })
    input.onButtonPressed(Button.B, () => {
        radio.sendNumber(2)
    })
    radio.onDataPacketReceived( ({ receivedNumber }) =>  {
        if (receivedNumber == 1) {
            basic.showNumber(1)
            basic.setLedColor(Colors.Red)
        }
        if (receivedNumber == 2) {
            basic.showNumber(2)
            basic.setLedColor(Colors.Yellow)
        }
    })
    radio.setGroup(1)
    radio.setTransmitPower(10)

Aufgabe:

Denke dir zusammen mit einer anderen Gruppe ein Programm aus, so dass Ihr mit zwei Calliopes miteinander per Funk kommunizieren könnt. Ihr könnt natürlich auch erst einmal das Beipielprogramm testen.


Projekt: Quizspiel

In diesem Projekt soll das Funk-Modul des Calliope genutzt werden, um ein Quizspiel zu unterstützen. Der/Die SpielleiterIn programmiert einen Calliope als Server (ein Server ist ein Computer, der Informationen an andere Computer schickt) und die MitspielerInnen programmieren einen Calliope als Client (ein Client ist ein Computer, der Informationen entgegennimmt).

Die Spielidee

Die Anwesenden spielen gemeinsam ein Quizspiel, wobei es zu jeder Frage nur zwei Antwortmöglichkeiten gibt: Taste "A" oder Taste "B". Bevor der Spielleiter seine Frage stellt, soll er mit Hilfe des Calliope-Servers die richtige Antwort "A" oder "B" an die Calliope-Clients senden. Dem Mitspieler soll vom Calliope angezeigt werden, wann er bereit dafür ist, dass eine der beiden Tasten "A" oder "B" als richtige Antwort gedrückt werden kann. Da der Server dem Calliope die richtige Antwort per Funk gesendet hat, soll der Calliope dann eine richtige Antwort bestätigen, indem er einen Haken anzeigt und die RGB-LED grün leuchtet. Wenn die Antwort falsch ist, soll der Calliope ein Kreuz zeigen und die RGB-LED soll rot leuchten. Ausserdem soll es nicht mehr möglich sein, seine Antwort zu ändern, wenn man bereits einen Knopf gedrückt hat. Erst wenn der Spielleiter eine neue Runde startet, soll die RGB-LED blau leuchten und der Calliope bereit für die Eingabe der nächsten Antwort sein.

Jetzt werden die Calliopes programmiert!


Der Calliope-Server (Spielleiter)

Der Calliope-Server soll mit einem Symbol anzeigen, dass er bereit ist, eine neue Antwort für die nächste Fragerunde abzusenden und es muss der Funkkanal festgelegt werden, mit dem die Calliope im Raum miteinander kommunizieren sollen. Das macht man wie folgt:

Server 01

Wenn der Fragesteller die Taste "A" drückt, soll an die Calliopes der Mitspieler als richtige Antwort "A" übermittelt werden und das Symbol auf der LED-Anzeige ändert sich, damit der Spielleiter sieht, dass die Antwort erfolgreich per Funk losgeschickt wurde. Zusätzlich gibt der Calliope noch einen Ton von sich.

Server 02

Das gleiche wird für die Taste "B" programmiert:

Server 03


Calliope-Server programmieren

Das dargestellte Programm muss jetzt im Editor geschrieben werden. Du könntest dazu die Code-Blöcke, die oben abgebildet sind, einfach abschreiben. Leichter geht es, wenn du den folgenden JavaScript-Code in den Calliope-Editor wie folgt kopierst:

Erstelle ein neues Projekt im Editor, indem du auf Projekte - Neues Projekt klickst und dann rechts auf JavaScript klickst. Du solltest folgendes sehen:

Server 04

Ersetze den vorhandenen JavaScript-Code mit dem folgenden Code. Markiere dazu den unteren Code und drücke die Tasten Strg und c gleichzeitig, der Code wird in den Zwischenspeicher kopiert. Klicke dann in den Editor, drücke dann Strg und a gleichzeitig, um den vorhandenen Code zu markieren und drücke dann Strg und v um den neuen Code einzufügen.

    input.onButtonPressed(Button.A, () => {
        basic.showLeds(`
            # # # # #
            # . . . #
            # . . . #
            # . . . #
            # # # # #
            `)
        music.playTone(262, music.beat(BeatFraction.Whole))
        radio.sendString("A")
        basic.showLeds(`
            . . . . .
            . # # # .
            . # # # .
            . # # # .
            . . . . .
            `)
    })
    input.onButtonPressed(Button.B, () => {
        basic.showLeds(`
            # # # # #
            # . . . #
            # . . . #
            # . . . #
            # # # # #
            `)
        music.playTone(262, music.beat(BeatFraction.Whole))
        radio.sendString("B")
        basic.showLeds(`
            . . . . .
            . # # # .
            . # # # .
            . # # # .
            . . . . .
            `)
    })
    basic.forever(() => {
        basic.showLeds(`
            . . . . .
            . # # # .
            . # # # .
            . # # # .
            . . . . .
            `)
        radio.setGroup(15)
        radio.setTransmitPower(7)
    })

Das Programm lässt sich in der Block-Darstellung leichter lesen. Klicke auf Blöcke, um den eingefügten JavaScript-Code als Blöcke darzustellen. Du kannst jederzeit zwischen der JavaScript-Darstellung und der Block-Darstellung deines Programms hin- und herschalten.


Der Teilnehmer-Calliope

Als Quizteilnehmer muss man in der Lage sein, eine Antwort zu geben und der Spielleiter soll sehen können, ob die Antwort richtig oder falsch ist. Zu Beginn soll der Calliope ein Fragezeichen anzeigen. Ausserdem wird der Funkkanal auf 15 gesetzt, so dass der Client mit dem Server kommunizieren kann.

Client 01

Wenn der Spielleiter die richtige Antwort vom Calliope-Server losgeschickt hat, soll der Client die richtige Antwort entgegennehmen, sich merken, aber dem Mitspieler nicht anzeigen. Ausserdem soll die LED-Farbe auf Blau wechseln, damit der Mitspieler sieht, dass der Calliope bereit ist, seine Antwort entgegenzunehmen:

Client 02

Wenn der Teilnehmer sich für eine Antwort entschieden hat, drückt er einen der Knöpfe A oder B. Der Client prüft, ob die Antwort richtig ist. Wenn sie richtig ist, wird ein Haken angezeigt und die RGB-LED wechselt auf grün. Wenn sie nicht richtig ist, wird ein Kreuz angezeigt und die RGB-LED wechselt auf rot. Damit der Mitspieler seine Antwort nicht mehr ändern kann, wird die Variable Bereit auf 0 gesetzt:

Client 03 Client 04

Nachdem alle Mitspieler ihre Antwort in den Calliope eingegeben haben, kann der Spielleiter sich die Calliopes der Mitspieler zeigen lassen und sieht am Symbol und an der Farbe der LED, ob die Antwort richtig ist.


Calliope-Client programmieren

Das dargestellte Programm muss jetzt im Editor geschrieben werden. Du könntest dazu die Code-Blöcke, die oben abgebildet sind, einfach abschreiben. Leichter geht es, wenn du den folgenden JavaScript-Code in den Calliope-Editor wie folgt kopierst:

Erstelle ein neues Projekt im Editor, indem du auf Projekte - Neues Projekt klickst und dann rechts auf JavaScript klickst. Du solltest folgendes sehen:

Server 04

Ersetze den vorhandenen JavaScript-Code mit dem folgenden Code. Markiere dazu den unteren Code und drücke die Tasten Strg und c gleichzeitig, der Code wird in den Zwischenspeicher kopiert. Klicke dann in den Editor, drücke dann Strg und a gleichzeitig, um den vorhandenen Code zu markieren und drücke dann Strg und v um den neuen Code einzufügen.

    let Bereit = 0
    let Richtige_Antwort = ""
    radio.onDataPacketReceived(({ receivedString }) => {
        Richtige_Antwort = receivedString
        basic.setLedColor(Colors.Blue)
        music.playTone(262, music.beat(BeatFraction.Eighth))
        music.playTone(349, music.beat(BeatFraction.Eighth))
        Bereit = 1
        basic.showLeds(`
            # # # # #
            # . . . #
            # . . . #
            # . . . #
            # # # # #
            `)
    })
    input.onButtonPressed(Button.A, () => {
        if (Bereit == 1) {
            if (Richtige_Antwort == "A") {
                basic.showLeds(`
                    . . . . .
                    . . . . #
                    . # . # .
                    . . # . .
                    . . . . .
                    `)
                basic.setLedColor(Colors.Green)
            } else {
                basic.showLeds(`
                    # . . . #
                    . # . # .
                    . . # . .
                    . # . # .
                    # . . . #
                    `)
                basic.setLedColor(Colors.Red)
            }
            Bereit = 0
        }
    })
    input.onButtonPressed(Button.B, () => {
        if (Bereit == 1) {
            if (Richtige_Antwort == "B") {
                basic.showLeds(`
                    . . . . .
                    . . . . #
                    . # . # .
                    . . # . .
                    . . . . .
                    `)
                basic.setLedColor(Colors.Green)
            } else {
                basic.showLeds(`
                    # . . . #
                    . # . # .
                    . . # . .
                    . # . # .
                    # . . . #
                    `)
                basic.setLedColor(Colors.Red)
            }
            Bereit = 0
        }
    })
    basic.showLeds(`
        . . # . .
        . # . # .
        . . . # .
        . . # . .
        . . # . .
        `)
    radio.setGroup(15)

Das Programm lässt sich in der Block-Darstellung leichter lesen. Klicke auf Blöcke um den eingefügten JavaScript-Code als Blöcke darzustellen. Du kannst jederzeit zwischen der JavaScript-Darstellung und der Block-Darstellung deines Programms hin- und herschalten.

Aufgabe:

Denkt euch einige Quizfragen aus und spielt mit Hilfe der Calliope das Quizspiel.

Viel Spaß !


Quelle: Die Idee für dieses Projekt stammt von folgender Internetseite: hackster.io.