Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
gf_informatik:microbit_sca [2023-06-22 20:04] – [Aufgabe B1] sca | gf_informatik:microbit_sca [2023-06-28 03:40] (aktuell) – [Aufgabe E6 (Anonyme Umfragen)] sca | ||
---|---|---|---|
Zeile 121: | Zeile 121: | ||
- | ==== - Aufgaben C (Bewegungen erkennen mit dem Beschleunigungssensor) ==== | + | ===== - Aufgaben C (Beschleunigungssensor) ===== |
+ | |||
+ | **Relevante Theorie: | ||
+ | |||
+ | * [[gf_informatik: | ||
=== Aufgabe C1 === | === Aufgabe C1 === | ||
Zeile 127: | Zeile 131: | ||
=== Aufgabe C2 === | === Aufgabe C2 === | ||
- | Probiere den Code für den // | + | Probiere den Code für den // |
* Versuche zuerst, den Code zu verstehen. Kopiere ihn dann in deinen Editor und speichere das Programm. | * Versuche zuerst, den Code zu verstehen. Kopiere ihn dann in deinen Editor und speichere das Programm. | ||
* Lade das Programm auf den Microbit – jetzt kann dein Microbit in die Zukunft sehen: | * Lade das Programm auf den Microbit – jetzt kann dein Microbit in die Zukunft sehen: | ||
Zeile 169: | Zeile 173: | ||
* Dieser liegt im Bereich von +/- 2040. Du brauchst aber einen Index-Wert von 0...9. | * Dieser liegt im Bereich von +/- 2040. Du brauchst aber einen Index-Wert von 0...9. | ||
* Tipps: Die Funktion '' | * Tipps: Die Funktion '' | ||
+ | |||
+ | ===== - Aufgaben D (Sounds) ===== | ||
+ | |||
+ | **Relevante Theorie:** | ||
+ | |||
+ | * [[gf_informatik: | ||
+ | |||
+ | |||
+ | === Aufgabe D1 === | ||
+ | Schreibe ein Programm, dass die Melodie //Frère Jacques// spielt (mit Pause zwischen gleichen Tönen), **solange du die A-Taste gedrückt hältst**: | ||
+ | * Sobald du die A-Taste loslässt, stoppt die Melodie. | ||
+ | * Sobald du die Taste wieder drückst, geht die Melodie dort weiter, wo sie zuletzt unterbrochen wurde. | ||
+ | |||
+ | === Aufgabe D2 === | ||
+ | Speichere dein Programm aus Aufgabe **D1** unter neuem Namen und erweitere es: | ||
+ | * Solange die A-Taste gedrückt ist, soll das Display ein Smiley-Face zeigen. | ||
+ | * Solange die A-Taste nicht gedrückt ist, soll das Display einen Pfeil Richtung Taste A zeigen. | ||
+ | Jetzt kannst du versuchen, //Frère Jacques// mit andern im Kanon zu spielen. | ||
+ | |||
+ | === Aufgabe D3 === | ||
+ | Speichere dein Programm aus Aufgabe **D2** unter neuem Namen und erweitere es: | ||
+ | * Zusätzlich soll mit Taste B eine zweite Melodie gespielt werden, also: Solange Taste A gedrückt ist, wird Melodie A gespielt; solange Taste B gedrückt ist, wird Melodie B gespielt. | ||
+ | * Das Display soll bei jeder Melodie ein anderes Bild zeigen. | ||
+ | * Wenn keine Taste gedrückt ist, soll das Display nichts zeigen. | ||
+ | * Wähle eine Melodie, die dir gefällt: Noten findest du zum Beispiel, wenn du in der Bilder-Suche nach dem Lied-Titel und dem Stichwort " | ||
+ | |||
+ | === Aufgabe D4 === | ||
+ | Schreibe ein Programm, das einen Alarm-Ton erzeugt: | ||
+ | * Zuerst wird ein ansteigender Ton ausgegeben: zwischen 330 Hz und 770 Hz, in 10-Hz-Schritten erhöht. | ||
+ | * Danach wird ein fallender Ton ausgegeben: zwischen 770 Hz und 330 Hz, in 10-Hz-Schritten verringert. | ||
+ | * Jeder Einzelton soll 0.1 Sekunden lang gespielt werden. Von 330 Hz nach 770 Hz sind es 44 10-er-Schritte. Das hiesst, es soll 44 * 0.1 = 4.4 Sekunden dauern, bis die höchste Frequenz erreicht ist – und ebenso lang, bis wieder die tiefste erreicht ist. | ||
+ | * Der Alarm-Ton wird endlos ausgegeben. | ||
+ | |||
+ | === Aufgabe D5 === | ||
+ | Schreibe ein Programm, das einen Ton ausgibt, den du mit den Tasten einstellen kannst: | ||
+ | * Wenn du die A-Taste drückst, wird die Frequenz des Tons erhöht. | ||
+ | * Wenn du die B-Taste drückst, wird die Frequenz des Tons verringert. | ||
+ | * Wenn keine Taste gedrückt ist, wird auch kein Ton ausgegeben. (Nur während des Tastendrucks soll ein Ton gespielt werden). | ||
+ | * Die auszugebende Frequenz darf 100 Hz nicht unter- und 4000 Hz nicht überrschreiten – egal wie lange die jeweiligen Tasten gedrückt sind. | ||
+ | |||
+ | === Aufgabe D6 === | ||
+ | Schreibe ein Programm, das optisch und akustisch auf Bewegungen reagiert: | ||
+ | * Wenn der Microbit nach oben gedreht wird, soll das Programm ein //Happy Face// zeigen und einen passenden Ton ausgeben. | ||
+ | * Wenn der Microbit nach unten gedreht wird, soll das Programm ein //Sad Face// zeigen und einen passenden Ton ausgeben. | ||
+ | * Wenn der Microbit nicht bewegt wird, bleibt er dunkel und still. | ||
+ | |||
+ | **Tipp:** Wenn du dir [[https:// | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Übrigens: REPL steht für [[https:// | ||
+ | |||
+ | === Aufgabe D7 (Herausforderung) === | ||
+ | Schreibe ein Programm, das die Cancan-Melodie (siehe unten) in unterschiedlichen Tempi spielt: | ||
+ | * Wenn die A-Taste gedrückt wird, soll das Tempo um 40 bpm erhöht werden. | ||
+ | * Wenn die B-Taste gedrückt wird, soll das Tempo um 40 bpm reduziert werden. | ||
+ | * Mit dem Touch-Logo kann die Melodie gestartet und gestoppt werden: | ||
+ | * Wenn das Touch-Logo berührt wird, erscheint für 200 ms ein //HAPPY Face// auf dem Display. Dann erlischt es wieder. | ||
+ | * Ausserdem soll bei jeder Berührung des Touch-Logos eine Variable zwischen 0 und 1 wechseln ([[https:// | ||
+ | * Nur wenn diese Variable 1 ist, soll die Melodie gespielt werden, sonst nicht. | ||
+ | * **Tipp:** Setze vor der Endlos-Schleife die Variable für das Tempo auf 320 und die Variable für das Starten/ | ||
+ | |||
+ | <code python> | ||
+ | #Cancan by Jacques Offenbach: | ||
+ | melodyCancan = [' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | </ | ||
+ | |||
+ | === Aufgabe D8 (Knacknuss) === | ||
+ | Speichere dein Programm aus Aufgabe **D7** unter neuem Namen und erweitere es: Zusätzlich zum Tempo soll nun auch die Tonlage verändert werden: | ||
+ | * Schreibe eine Funktion '' | ||
+ | * Mit der A-Taste soll neben dem Tempo auch die Tonlage erhöht werden. | ||
+ | * Mit der B-Taste soll neben dem Tempo auch die Tonlage verringert werden. | ||
+ | |||
+ | |||
+ | |||
+ | ===== - Aufgaben E (Radio) ===== | ||
+ | |||
+ | **Relevante Theorie:** | ||
+ | |||
+ | * [[gf_informatik: | ||
+ | |||
+ | === Aufgabe E1 === | ||
+ | |||
+ | 1. Schreibe ein Programm zum Nachrichtenaustausch: | ||
+ | 1. Weiter soll der Micro:Bit diese drei Nachrichten empfangen und anzeigen können: Wird ' | ||
+ | 1. Einige dich mit deiner Kolleg:in auf eine eigene Gruppe oder Kanal, über den ihr kommunizieren wollt. Stellt euch nun mündliche Fragen und antwortet euch gegenseitig mit dem Micro:Bit. | ||
+ | |||
+ | === Aufgabe E2 === | ||
+ | Speichert das Programm aus Aufgabe **E1** unter neuem Namen und ändert es: Die Nachrichten sollen nun nicht mehr am Display angezeigt, sondern über das [[https:// | ||
+ | |||
+ | === Aufgabe E3 === | ||
+ | Schreibt ein Programm, mit dem das Display des anderen Microbit leuchtet, solange ihr die Taste des einen Microbit gedrückt hält. So könntet ihr Morsezeichen übermitteln. | ||
+ | * Wenn die A-Taste gedrückt wird, soll eine beliebige Nachricht gesendet werden. | ||
+ | * Solange eine Nachricht empfangen wird, soll das gesamte Display hell leuchten. | ||
+ | * Solange keine Nachricht empfangen wird, soll das Display nicht leuchten. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | === Aufgabe E4 (Beacon 1) === | ||
+ | Über BLE kann ein Microbit als **Beacon** (engl. für // | ||
+ | |||
+ | Schreibt zwei Programme, eines für den Beacon (Sender) und eines für den Empfänger: | ||
+ | |||
+ | * Der Sender sendet alle 200 Millisekunden eine Nachricht. | ||
+ | * Der Empfänger schaut ständig nach einkommenden Nachrichten und deren Signalstärke: | ||
+ | * Mit der Anweisung '' | ||
+ | * Um die Signalstärke zu erhalten, brauchst du das zweite Element aus der Tupel, also: '' | ||
+ | * Das Programm soll nun die Signalstärke mit der Funktion '' | ||
+ | |||
+ | Testet die beiden Programme und **notiert euch die Werte** für die grösste und die kleinste Entfernung zwischen Beacon und Empfänger. Die Werte könnt ihr ansehen, wenn ihr im Mu Editor die Taste '' | ||
+ | |||
+ | Stellt sicher, dass alle von euch beide Programme verstehen! | ||
+ | |||
+ | === Aufgabe E5 (Beacon 2) === | ||
+ | Jetzt kennt ihr die Werte für das stärkste und für das schwächste Signal. Schreibt nun ein Programm für den Empfänger, das die Nähe de Beacons akkustisch angibt. | ||
+ | |||
+ | * Wenn keine Nachricht empfangen wird, bleibt der Microbit still. | ||
+ | * Wenn eine Nachricht empfangen wird, gibt der Microbit kurze (50 ms) Töne von sich, die immer schneller aufeinanderfolgen, | ||
+ | * bei der weitesten Entfernung soll der Intervall (Abstand zwischen den Tönen) ca. 700–800 ms betragen. | ||
+ | * bei der kürzesten Entfernung soll der Intervall ca. 150-200 ms betragen. | ||
+ | * Überlegt, wie ihr Signalstärke in Intervall umrechnet. Beachtet, dass die Signalstärke negativ ist. | ||
+ | * Das Programm für den Beacon könnt ihr wie folgt optimieren: | ||
+ | * Die Signalstärke kann über '' | ||
+ | * Eine LED des Display kann blinken, damit man sieht, dass der Beacon sendet. | ||
+ | |||
+ | === Aufgabe E6 (Anonyme Umfragen) === | ||
+ | Schreibt ein Programm, mit dem ihr anonyme Umfragen durchführen könnt. | ||
+ | |||
+ | * Wenn die Taste A gedrückt wird, sendet der Microbit die Nachricht " | ||
+ | * Wenn die Taste B gedrückt wird, sendet der Microbit die Nachricht " | ||
+ | * Verwende `get_presses()` und füge zur Sicherheit den Tasten eine Verzögerung mit '' | ||
+ | * Wann immer eine Nachricht empfangen wird, wird sie ausgewertet: | ||
+ | * Ist der Inhalt der Nachricht " | ||
+ | * Ist der Inhalt der Nachricht " | ||
+ | * Wenn das Touch-Logo berührt wird, soll das Display die Anzahl Ja- und die Anzahl Nein-Stimmen anzeigen. | ||
+ | * Testet euer Programm: Einigt euch zu viert auf dieselbe Gruppen-Nummer (oder Kanal-Nummer), | ||
+ | |||
+ | === Aufgabe E7 (Knacknuss) === | ||
+ | Das Programm aus Aufgabe E erlaubt, dass mehrere Nachrichten vom selben Microbit gezählt werden. Bei einer Abstimmung kann so das Resultat verfälscht werden. Ändere das Programm so, dass jeder Microbit pro Umfrage nur einmal abstimmen kann – entweder ja oder nein. Teste das Programm erst mit wenigen und dann mit der ganzen Klasse. | ||
===== Lösungen ===== | ===== Lösungen ===== | ||
Zeile 512: | Zeile 666: | ||
++++ | ++++ | ||
</ | </ | ||
+ | |||
+ | <nodisp 2> | ||
+ | ++++Lösungen Aufgaben D| | ||
+ | === D1 === | ||
+ | <code python> | ||
+ | from microbit import* | ||
+ | import music | ||
+ | |||
+ | # Frère Jacques: | ||
+ | melody_jacques = [' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | note = 0 | ||
+ | while True: | ||
+ | if(button_a.is_pressed()): | ||
+ | music.play(melody_jacques[note]) | ||
+ | sleep(30) | ||
+ | if(note < len(melody_jacques)-1): | ||
+ | note += 1 | ||
+ | else: | ||
+ | note = 0 | ||
+ | </ | ||
+ | |||
+ | === D2 === | ||
+ | <code python> | ||
+ | from microbit import* | ||
+ | import music | ||
+ | |||
+ | # Frère Jacques: | ||
+ | melody_jacques = [' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | note = 0 | ||
+ | while True: | ||
+ | if(button_a.is_pressed()): | ||
+ | display.show(Image.HAPPY) | ||
+ | music.play(melody_jacques[note]) | ||
+ | sleep(30) | ||
+ | if(note < len(melody_jacques)-1): | ||
+ | note += 1 | ||
+ | else: | ||
+ | note = 0 | ||
+ | else: | ||
+ | display.show(Image.ARROW_W) | ||
+ | </ | ||
+ | |||
+ | === D3 === | ||
+ | <code python> | ||
+ | from microbit import* | ||
+ | import music | ||
+ | |||
+ | # Frère Jacques: | ||
+ | melody_jacques = [' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | # Popcorn: | ||
+ | melody_pop = | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | noteA = 0 | ||
+ | noteB = 0 | ||
+ | while True: | ||
+ | if(button_a.is_pressed()): | ||
+ | music.set_tempo(bpm = 120) # Diese Melodie normal spielen | ||
+ | display.show(Image.ASLEEP) | ||
+ | music.play(melody_jacques[noteA]) | ||
+ | sleep(30) | ||
+ | if(noteA < len(melody_jacques)-1): | ||
+ | noteA += 1 | ||
+ | else: | ||
+ | noteA = 0 | ||
+ | |||
+ | elif(button_b.is_pressed()): | ||
+ | music.set_tempo(bpm = 200) # Diese Melodie schneller spielen | ||
+ | display.show(Image.MUSIC_CROTCHET) | ||
+ | music.play(melody_pop[noteB]) | ||
+ | sleep(30) | ||
+ | if(noteB < len(melody_pop)-1): | ||
+ | noteB += 1 | ||
+ | else: | ||
+ | noteB = 0 | ||
+ | |||
+ | else: | ||
+ | display.clear() | ||
+ | </ | ||
+ | |||
+ | === D4 === | ||
+ | <code python> | ||
+ | from microbit import * | ||
+ | import music | ||
+ | |||
+ | while True: | ||
+ | for freq in range(330, 770, 10): | ||
+ | music.pitch(freq, | ||
+ | for freq in range(770, 330, -10): | ||
+ | music.pitch(freq, | ||
+ | </ | ||
+ | |||
+ | === D5 === | ||
+ | <code python> | ||
+ | from microbit import * | ||
+ | import music | ||
+ | |||
+ | freq = 440 # A4 | ||
+ | while True: | ||
+ | if button_a.is_pressed(): | ||
+ | if freq < 4000: | ||
+ | freq += 100 | ||
+ | music.pitch(freq, | ||
+ | if button_b.is_pressed(): | ||
+ | if freq > 100: | ||
+ | freq -= 100 | ||
+ | music.pitch(freq, | ||
+ | </ | ||
+ | |||
+ | === D6 === | ||
+ | <code python> | ||
+ | from microbit import * | ||
+ | import music | ||
+ | |||
+ | while True: | ||
+ | if accelerometer.was_gesture(" | ||
+ | display.show(Image.HAPPY) | ||
+ | music.play(music.JUMP_UP) | ||
+ | elif accelerometer.was_gesture(" | ||
+ | display.show(Image.SAD) | ||
+ | music.play(music.JUMP_DOWN) | ||
+ | else: | ||
+ | display.clear() | ||
+ | </ | ||
+ | ++++ | ||
+ | </ | ||
+ |