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-27 21:00] – [Aufgaben D (Speaker – Töne und Melodien ausgeben)] sca | gf_informatik:microbit_sca [2026-01-05 14:36] (aktuell) – sca | ||
|---|---|---|---|
| Zeile 4: | Zeile 4: | ||
| **Editor:** | **Editor:** | ||
| - | | + | |
| - | | + | * Verwende den Chrome Browser (oder Edge) |
| - | * Da wir im Online-Editor arbeiten, ist das **Speichern** | + | * Der Editor beinhaltet auch einen **Simulator**! |
| - | | + | |
| - | * Verwende dazu die folgende Vorlage: {{ : | + | |
| - | | + | |
| **Bemerkungen: | **Bemerkungen: | ||
| Zeile 16: | Zeile 16: | ||
| * [[gf_informatik: | * [[gf_informatik: | ||
| * Für gewisse Aufgaben gibt es **zwei Versionen: Basic und Advanced**. Hier hast du die Wahl. Falls dir das Programmieren gut läuft, solltest du die Advanced-Aufgaben lösen. Für TALITs (und solche, die es sein sollten) sind die Advanced-Aufgaben Pflicht. | * Für gewisse Aufgaben gibt es **zwei Versionen: Basic und Advanced**. Hier hast du die Wahl. Falls dir das Programmieren gut läuft, solltest du die Advanced-Aufgaben lösen. Für TALITs (und solche, die es sein sollten) sind die Advanced-Aufgaben Pflicht. | ||
| - | * Adapter für USB C <-> A müssen selbst mitgebracht werden. | ||
| ===== - Aufgaben A (Display) ===== | ===== - Aufgaben A (Display) ===== | ||
| Zeile 145: | Zeile 144: | ||
| === Aufgabe C5 === | === Aufgabe C5 === | ||
| - | Folgende Code-Zeilen erstellen eine Liste aus 10 Bildern unterschiedlicher Helligkeit: | ||
| - | <code python> | ||
| - | my_images = [] | ||
| - | for i in range(0, 10, 1): | + | Die LEDs sollen anzeigen, wie fest der Microbit geschüttelt |
| - | my_img = Image() | + | |
| - | my_img.fill(i) | + | |
| - | my_images.append(my_img) | + | |
| - | </ | + | |
| - | In der For-Schleife geschieht Folgendes für jeden Wert von i, also von 0 bis 9, also zehn mal: | + | |
| - | * Zuerst | + | |
| - | * Dieses Bild wird nun gefüllt: Die Funktion '' | + | |
| - | * Das Bild wird der Liste '' | + | |
| - | Schreibe ein Programm, in das du obigen Code hinein kopierst, das die Bilder mit 200 Milliskeunden Verzögerung nacheinander endlos anzeigt. | + | * nicht geschüttelt: |
| + | * ganz stark geschüttelt: | ||
| + | * dazwischen: Alle LEDs mit Werten 1-8, je nachdem, wie stark geschüttelt | ||
| + | |||
| + | Tipps: | ||
| + | |||
| + | * Verwende folgende Liste für die Anzeige:< | ||
| + | all_leds = [ | ||
| + | Image(" | ||
| + | Image(" | ||
| + | Image(" | ||
| + | Image(" | ||
| + | Image(" | ||
| + | Image(" | ||
| + | Image(" | ||
| + | Image(" | ||
| + | Image(" | ||
| + | Image(" | ||
| + | ] | ||
| + | </ | ||
| + | |||
| + | ===== - Aufgaben D (Sounds) ===== | ||
| + | |||
| + | **Relevante Theorie:** | ||
| - | === Aufgabe C6 === | + | * [[gf_informatik:microbit_programmieren_grundlagen# |
| - | Speichere das Programm aus Aufgabe | + | |
| - | * Immer dann, wenn du die Taste A drückst, soll das nächste Bild aus der Liste angezeigt werden. | + | |
| - | * Nach dem letzten (hellsten) Bild, soll wieder das erste angezeigt werden. | + | |
| - | * Tipp: Damit du mit einem Tastendruck nicht gleich mehrere Bilder weiterspringst: baue eine Verzögerung mit '' | + | |
| - | === Aufgabe C7 (Knacknuss) === | ||
| - | Speichere das Programm aus Aufgabe **C6** unter neuem Namen und ändere es: | ||
| - | * Das Display soll umso heller leuchten, je stärker du den Microbit hin und her schüttelst. | ||
| - | * Lese dazu den x-Wert aus dem Beschleunigungssensor aus. | ||
| - | * Dieser liegt im Bereich von +/- 2040. Du brauchst aber einen Index-Wert von 0...9. | ||
| - | * Tipps: Die Funktion '' | ||
| - | ==== Aufgaben D (Sounds) ==== | ||
| === Aufgabe D1 === | === 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**: | 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**: | ||
| Zeile 251: | Zeile 251: | ||
| * Mit der B-Taste soll neben dem Tempo auch die Tonlage verringert werden. | * Mit der B-Taste soll neben dem Tempo auch die Tonlage verringert werden. | ||
| - | === Lösungen === | ||
| - | <nodisp 2> | ||
| - | ++++Lösungen Aufgaben D| | ||
| - | === D1 === | ||
| - | <code python> | ||
| - | from microbit import* | ||
| - | import music | ||
| - | # Frère Jacques: | + | ===== - Aufgaben E (Radio) ===== |
| - | melody_jacques | + | |
| - | ' | + | |
| - | ' | + | |
| - | ' | + | |
| - | ' | + | |
| - | note = 0 | + | **Relevante Theorie:** |
| - | 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 === | + | * [[gf_informatik: |
| - | <code python> | + | |
| - | from microbit import* | + | |
| - | import music | + | |
| - | # Frère Jacques: | + | === Aufgabe E1 === |
| - | melody_jacques | + | |
| - | ' | + | |
| - | ' | + | |
| - | ' | + | |
| - | ' | + | |
| - | note = 0 | + | |
| - | while True: | + | 1. Weiter soll der Micro:Bit diese drei Nachrichten empfangen und anzeigen können: Wird ' |
| - | if(button_a.is_pressed()): | + | 1. Einige dich mit deiner Kolleg:in auf eine eigene Gruppe oder Kanal, |
| - | 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() | + | |
| - | </ | + | |
| - | ++++ | + | |
| - | </ | + | |
| - | + | ||
| - | + | ||
| - | ==== Aufgaben E (Radio – Nachrichten über BLE senden) ==== | + | |
| - | === Aufgabe E1 === | + | |
| - | Erweitert euer Programm zum Nachrichtenaustausch | + | |
| === Aufgabe E2 === | === Aufgabe E2 === | ||
| Zeile 409: | Zeile 273: | ||
| * Solange eine Nachricht empfangen wird, soll das gesamte Display hell leuchten. | * Solange eine Nachricht empfangen wird, soll das gesamte Display hell leuchten. | ||
| * Solange keine Nachricht empfangen wird, soll das Display nicht leuchten. | * Solange keine Nachricht empfangen wird, soll das Display nicht leuchten. | ||
| + | |||
| + | {{: | ||
| === Aufgabe E4 (Beacon 1) === | === Aufgabe E4 (Beacon 1) === | ||
| Zeile 440: | Zeile 306: | ||
| Schreibt ein Programm, mit dem ihr anonyme Umfragen durchführen könnt. | Schreibt ein Programm, mit dem ihr anonyme Umfragen durchführen könnt. | ||
| - | * Wenn die Taste A gedrückt wird, sendet der Microbit die Nachricht "jo". | + | * Wenn die Taste A gedrückt wird, sendet der Microbit die Nachricht "Ja". |
| - | * Wenn die Taste B gedrückt wird, sendet der Microbit die Nachricht "nai". | + | * Wenn die Taste B gedrückt wird, sendet der Microbit die Nachricht "Nein". |
| - | * Füge für beide Tasten eine Verzögerung mit '' | + | * Verwende `get_presses()` und füge zur Sicherheit den Tasten eine Verzögerung mit '' |
| * Wann immer eine Nachricht empfangen wird, wird sie ausgewertet: | * Wann immer eine Nachricht empfangen wird, wird sie ausgewertet: | ||
| - | * Ist der Inhalt der Nachricht "jo", so wird eine Variable zum Zählen der Ja-Stimmen um 1 erhöht. | + | * Ist der Inhalt der Nachricht "Ja", so wird eine Variable zum Zählen der Ja-Stimmen um 1 erhöht. |
| - | * Ist der Inhalt der Nachricht "nai", so wird eine Variable zum Zählen der Nein-Stimmen um 1 erhöht. | + | * Ist der Inhalt der Nachricht "Nein", so wird eine Variable zum Zählen der Nein-Stimmen um 1 erhöht. |
| - | * Wenn das Touch-Logo berührt wird, soll das Display die Anzahl Ja- und die Anzahl Nein-Stimmen anzeigen | + | * 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), | * Testet euer Programm: Einigt euch zu viert auf dieselbe Gruppen-Nummer (oder Kanal-Nummer), | ||
| Zeile 454: | Zeile 320: | ||
| ===== Lösungen ===== | ===== Lösungen ===== | ||
| - | < | + | < |
| ++++Lösungen Aufgaben A| | ++++Lösungen Aufgaben A| | ||
| Zeile 715: | Zeile 581: | ||
| </ | </ | ||
| - | === C5 – Variante A === | + | === C5 === |
| + | |||
| + | Variante 1 | ||
| <code python> | <code python> | ||
| from microbit import * | from microbit import * | ||
| - | my_images | + | all_leds |
| - | + | | |
| - | for i in range(0, 9, 1): | + | Image(" |
| - | | + | Image(" |
| - | | + | Image(" |
| - | | + | Image(" |
| - | + | Image(" | |
| - | my_pos = 0 | + | |
| + | | ||
| + | | ||
| + | | ||
| + | ] | ||
| while True: | while True: | ||
| - | | + | |
| - | if my_pos | + | ax,ay,az = accelerometer.get_values() |
| - | | + | |
| + | # Variante 2 | ||
| + | ax = accelerometer.get_x() | ||
| + | ay = accelerometer.get_y() | ||
| + | az = accelerometer.get_z() | ||
| + | |||
| + | # Gesamtbeschleunigung | ||
| + | a = (ax*ax + ay**2 + az**2)**0.5 | ||
| + | if a < 1200: | ||
| + | display.show(all_leds[0]) | ||
| + | elif a <= 1500: | ||
| + | display.show(all_leds[1]) | ||
| + | elif a <= 1800: | ||
| + | | ||
| + | elif a <= 2100: | ||
| + | display.show(all_leds[3]) | ||
| + | elif a <= 2400: | ||
| + | display.show(all_leds[4]) | ||
| + | elif a <= 2700: | ||
| + | display.show(all_leds[5]) | ||
| + | elif a <= 3000: | ||
| + | display.show(all_leds[6]) | ||
| + | elif a <= 3300: | ||
| + | display.show(all_leds[7]) | ||
| + | elif a <= 3600: | ||
| + | display.show(all_leds[8]) | ||
| else: | else: | ||
| - | | + | display.show(all_leds[9]) |
| - | | + | |
| + | print(a) | ||
| + | sleep(400) | ||
| </ | </ | ||
| - | === C5 – Variante | + | Variante |
| <code python> | <code python> | ||
| + | # Imports go at the top | ||
| from microbit import * | from microbit import * | ||
| + | import math | ||
| my_images = [] | my_images = [] | ||
| - | for i in range(0, 9, 1): | + | all_leds = [ |
| - | | + | Image(" |
| - | | + | Image(" |
| - | | + | Image(" |
| + | Image(" | ||
| + | Image(" | ||
| + | | ||
| + | | ||
| + | Image(" | ||
| + | Image(" | ||
| + | Image(" | ||
| + | ] | ||
| - | display.show(my_images, delay = 200, loop = True) | + | while True: |
| + | x,y,z = accelerometer.get_values() | ||
| + | a = math.sqrt(x*x+y*y+z*z) | ||
| + | strength = int((a - 1000) // 250) | ||
| + | if strength > 9: | ||
| + | strength = 9 | ||
| + | elif strength < 0: | ||
| + | strength = 0 | ||
| + | print(strength) | ||
| + | | ||
| + | sleep(200) | ||
| </ | </ | ||
| - | === C6 === | + | ++++ |
| + | </ | ||
| + | |||
| + | <nodisp 2> | ||
| + | ++++Lösungen Aufgaben D| | ||
| + | === D1 === | ||
| <code python> | <code python> | ||
| - | from microbit import * | + | from microbit import* |
| + | import music | ||
| - | my_images | + | # Frère Jacques: |
| - | my_pos = 0 | + | melody_jacques |
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| - | for i in range(0, 9, 1): | + | note = 0 |
| - | | + | while True: |
| - | | + | |
| - | | + | 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: | while True: | ||
| if(button_a.is_pressed()): | if(button_a.is_pressed()): | ||
| - | sleep(100) | + | |
| - | if my_pos | + | music.play(melody_jacques[note]) |
| - | | + | |
| + | if(note < len(melody_jacques)-1): | ||
| + | | ||
| else: | else: | ||
| - | | + | |
| - | display.show(my_images[my_pos]) | + | |
| + | | ||
| </ | </ | ||
| - | === C7 === | + | === 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> | <code python> | ||
| from microbit import * | from microbit import * | ||
| + | import music | ||
| - | my_images = [] | + | while True: |
| - | my_pos = 0 | + | for freq in range(330, 770, 10): |
| + | music.pitch(freq, | ||
| + | for freq in range(770, 330, -10): | ||
| + | music.pitch(freq, | ||
| + | </ | ||
| - | for i in range(0, 10, 1): | + | === D5 === |
| - | my_img | + | <code python> |
| - | | + | from microbit import * |
| - | | + | import music |
| + | freq = 440 # A4 | ||
| while True: | while True: | ||
| - | | + | |
| - | | + | if freq < 4000: |
| - | | + | freq += 100 |
| - | | + | music.pitch(freq, 50) |
| - | display.show(my_images[my_pos]) | + | |
| + | if freq > 100: | ||
| + | freq -= 100 | ||
| + | music.pitch(freq, 50) | ||
| + | </code> | ||
| + | |||
| + | === D6 === | ||
| + | <code python> | ||
| + | from microbit import * | ||
| + | import music | ||
| + | |||
| + | while True: | ||
| + | | ||
| + | display.show(Image.HAPPY) | ||
| + | music.play(music.JUMP_UP) | ||
| + | | ||
| + | | ||
| + | music.play(music.JUMP_DOWN) | ||
| + | else: | ||
| + | display.clear() | ||
| </ | </ | ||
| ++++ | ++++ | ||
| </ | </ | ||
| + | |||