====== Repetitionsaufgaben für Microbit ======
Beim Lösen der folgenden Aufgaben schreibst du Code für den Microbit. Für die Aufgaben benötigst du bereits erlernte Python-Kenntnisse zu **Variablen**, **Schleifen**, **Funktionen** und **Listen**.
**Damit du möglichst gut lernst, gehst du so vor:**
- Löse die Aufgabe auf karriertes Papier – achte auf korrekte Einrückungen.
- Teste, ob dein Handschrift-Code funktioniert: Schreibe ihn eins zu eins im [[https://python.microbit.org/v/3|Online-Editor]] hin und teste mit dem Simulator.
- Korrigiere Fehler auch im deinem Handschrift-Code, am besten farbig!
- Wenn du nicht weiterkommst: Schreibe eine kurze Nachricht an die Lehrperson – mit Screenshot vom Code und/oder Frage (via Teams-Chat).
===== RA – Microbit und Variablen =====
Für folgende Aufgaben benötigst du **Variablen** und **Verzweigungen (if/else/elif)**:
=== RA1 – Taschenrechner ===
Schreibe Code, mit dem du zwei Zahlen miteinander verrechnen kannst:
* Mit der A-Taste kannst du Zahl 1 um 1 erhöhen, mit der B-Taste Zahl 2.
* Wenn du das Touch-Logo drückst, zeigt das Display die Summe / das Produkt / die Differenz (wähle selbst) von Zahl 1 und Zahl 2. Beide Zahlen werden wieder auf 0 gesetzt.
=== RA2 – Zwischen Null und Neun ===
Schreibe Code, mit dem du Zahlen von 0 bis 9 auf dem Display anzeigen kannst:
* Mit der A-Taste kannst du die angezeigte Zahl um 1 erhöhen, mit der B-Taste um 1 verringern. Der Berreich 0...9 darf nicht über- oder unterschritten werden.
=== RA3 – Von Null bis Sieben rundherum ===
Schreibe Code, mit dem du Zahlen von 0 bis 7 auf dem Display anzeigen kannst.
* Mit der A-Taste kannst du die angezeigte Zahl um 1 erhöhen – von 0 bis 7 und danach beginnt es wieder bei 0.
=== RA4 – Dreier-, Fünfer- oder Siebnerreihe? ===
Schreibe Code, mit dem du eine zufällige Zahl auswertest.
* Wenn du die A-Taste drückst, wird eine zufällige Zahl zwischen 1 und 77 eine Sekunde lang angezeigt. Danach wird ein passendes Bild eine Sekunde lang angezeigt:
* Wenn die angezeigte Zahl in der Siebnerreihe vorkommt: Eine Herz.
* ...in der Fünferreihe: Ein Haus.
* ...in der Dreierreihe: Eine Ente.
* Ansonsten: ein SAD-Face.
Wenn die Zahl in mehreren Reihen vorkommt, soll das Bild **zur grösseren Reihe** angezeigt werden. Also zum Beispiel bei 15 das Haus.
=== RA5 – Temperatur in drei Einheiten ===
Schreibe Code, mit dem du die vom Microbit gemessene Umgebungstemperatur an die Serial-Konsole schickst (mit ''print()'').
* Wenn du die A-Taste drückst, wird die Temperatur in **Grad Celsius** ausgegeben.
* Wenn du die B-Taste drückst, wird die Temperatur in **Grad Fahrenheit** ausgegeben.
* Wenn du das Touch-Logo drückst, wird die Temperatur in **Kelvin** ausgegeben.
* Jede Zahl muss inklusive ihrer Einheit ausgegeben werden, also z.B. "68° F".
Tipps: Die Funktion ''temperature()'' gibt die Temperatur in °C zurück. Recherchiere im Internet für die Umrechnungen nach Fahrenheit und Kelvin.
===== RB – Microbit und Funktionen =====
Für folgende Aufgaben benötigst du neben Variablen und Verzweigungen auch **Funktionen**. Dein Code in der Endlos-Schleife (''while True'') soll möglichst kurz sein. **Achte auf die Aufgabenstellung:** Soll die Funktion etwas zurückgeben (return), ausgeben (print) oder zeigen (Display-Funktionen)?
=== RB1 – Helligkeit Null bis Neun ===
* Schreibe Code, der auf dem Display ein Herz zeigt. Mit den beiden Tasten (A und B) kannst du die Helligkeit um 1 verringern (bis minimal 0) oder erhöhen (bis maximal 1).
* Deine Funktion ''make\_heart\_image(b)'' nimmt als Argument die Helligkeit entgegen und gibt ein Bild (Image-Objekt) zurück.
=== RB2 – Horizontale Linie verschieben ===
* Schreibe Code, mit dem du eine horizontale Linie auf dem Display verschieben kannst: Mit der A-Taste schiebst du die Linie nach unten: ist sie unten angelangt, erscheint sie nach dem nächsten Tastendruck wieder oben.
* Deine Funktion ''draw\_horizontal\_line(y\_pos)'' zeigt auf dem Display die Linie an der gewünschten Position. Tipp: Benutze die Funktionen ''set_pixel()'' und ''clear()''.
=== RB3 – Beschleunigungswerte übersichtlich ===
* Schreibe Code, der alle 500 Millisekunden die Werte vom Beschleunigungssensor ausgibt (mit ''print()''): Mit der A-Taste wechselst du die Einheit: von **mg** zu **g** zu **m/ss** und wieder zu **mg**... (rundherum).
* Deine Funktion ''print\_acc\_values(u)'' liesst die Beschleunigungwerte für jede Achse (x, y, z) und sendet sie //nacheinander// an die Serial-Konsole – mit **Angabe der Achse und der Einheit**, also zum Beispiel:
* "X: 373 mg"
* "Y: -1041 mg"
* "Z: 865 mg"
* Das Argument ''u'' bestimmt die Einheit: 0 = mg, 1 = g, 2 = m/ss.
=== RB4 – Gesamtbeschleunigung einstellig ===
* Schreibe Code, der die Gesamtbeschleunigung als einstellige Zahl auf dem Display anzeigt.
* Deine Funktion ''get\_total\_acc()'':
* ermittelt die Gesamtbeschleunigung (Wurzel aus der Summe der Quadratzahlen von x-, y-, und z-Wert, bewegt sich zwischen 0 und 3464),
* wandelt sie in eine Zahl zwischen 0 und 9 und
* gibt diese einstellige Zahl zurück.
===== RC – Microbit und Schleifen =====
Für die folgenden Aufgaben benötigst du (neben Variablen, Verzweigungen und Funktionen) **for- oder while-Scheifen**.
=== RC1 – Regentropfen ====
Schreibe Code, der auf dem Display fallende Regentropfen zeigt: Auf einer zufällig gewählten Display-Spalte (0...4) leuchtet erst das oberste Pixel, dann das zweitoberste etc. Nachdem der Regentropfen unten angekommen ist, beginnt das Programm wieder von vorne. Ein Regentropfen soll innerhalb von 200 Milisekunden von oben nach unten fallen.
=== RC2 – Pixel schiessen ===
Schreibe Code, mit dem du Pixel schiessen kannst – von links nach rechts oder zurück.
* Deine Funktion ''shoot(a\_shoots)'' lässt ein Pixel auf einer zufällig gewählten Zeile über das Display laufen: Wenn ''a\_shoots'' = ''True'' ist, staret das Pixel auf der linken Seite, ansonsten auf der rechten Seite.
* Mit der A-Taste wird ein Pixel in Richtung B-Taste geschossen (und umgekehrt).
=== RC3 – Binär zu dezimal ===
Schreibe Code, mit dem du eine Binärzahl dezimal anzeigen kannst.
* Mit den Tasten gibst du die Binärzahl ein: Mit der A-Taste die Nullen, mit der B-Taste die Einsen: Die Kombination BAB ist 101, also 5.
* Die Binärzahl ist ein String aus den Zeichen `'0'` und `'1'`.
* Deine Funktion ''binary\_to\_decimal(binary\_string)'' nimmt als Argument einen String aus Einsen und Nullen an und gibt die entsprechende Dezimalzahl zurück.
* Wenn du das Touch-Logo drückst, wird zuerst die Binärzahl, dann die ensprechende Dezimalzahl an die Serial-Konsole ausgegeben (mit ''print()''). Dann wird die eingegebene Binärzahl gelöscht.
=== RC4 – Rauf und runter ===
Schreibe Code der abwechslungsweise eine fallende und eine steigende Diagnoale zeichnet:
* Erst bewegt sich das Pixel von unten links nach oben rechts und zieht eine Linie. Dann wird das Display gelöscht. Dann folgt die fallende Linie von links nach rechts. Dann beginnt das Programm von vorne.
* Verwende **zwei for-schleifen** und die Funktion ''set_pixel()''.
===== RD – Microbit und Listen =====
Für die folgenden Aufgaben benötigst du (neben Variablen, Verzweigungen, Funktionen und Schleifen) **Listen**.
=== RD1 – Rund um die Uhr ===
Schreibe Code, mit dem du die Uhrzeit setzen kannst:
* Nutze die Liste ''Image.ALL_CLOCKS[]'', sie enthält 12 Bilder.
* Wenn du die A-Taste drückst, wird das nächste Bild angezeigt. Nach dem letzten Bild der Liste kommt wieder das erste.
=== RD2 – Satzgenerator ===
Schreibe Code, der einen zufälligen Satz generiert und and die Serial-Konsole sendet.
* Erstelle vier Listen: eine für die Subjekte, eine für Verben, eine für Adjektive und eine für Objekte. Du kannst auch die Listen unten kopieren.
* Wenn du die A-Taste drückst, wird aus jeder Liste ein zufälliges Element ausgewählt, die vier gewählten Elementen werden zum Satz zusammengefügt und der Satz wird an die Serial-Konsole gesendet.
subjekte = ["Karls Katze", "Albert Einstein", "Lauryn Hill", "Eine Blume", "LeBron James", "Eine Pizza", "Taylor Swift", "Die Sonne"]
verben = ["liebt", "betrachtet", "baut", "malt", "erfindet", "liest", "schreibt", "singt"]
adjektive = ["schnell", "glücklich", "groß", "konzentiert", "zitternd", "fröhlich", "begeistert", "trübselig"]
objekte = ["einen Apfel", "eine Geschichte", "einen Kaffee", "einen Film", "die Pyramiden", "eine Reise", "einen Brief", "Leonardo da Vinci"]
=== RD3 – Text schreiben und senden ===
Schreibe Code, mit dem Du ein Wort schreiben und an die Serial-Konsole senden kannst:
* Mit der A-Taste kannst du durch die Buchstaben des Alphabets blättern (siehe Liste unten). Nach z kommt wieder a. Das Display zeigt den aktuellen Buchstaben.
* Mit der B-Taste wählst du den aktuellen Buchstaben aus und fügst ihn zum Wort hinzu.
* Wenn du das Touch-Logo berührst, wird das Wort an die Serial-Konsole gesendet und anschliessend gelöscht.
buchstaben = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
===== Lösungen =====
=== Aufgaben RA ===
++++ RA1:|
from microbit import *
zahl1 = 0
zahl2 = 0
while True:
if button_a.was_pressed():
zahl1 += 1
if button_b.was_pressed():
zahl2 += 1
if pin_logo.is_touched():
display.show(zahl1 + zahl2)
sleep(100)
zahl1 = 0
zahl2 = 0
++++
++++ RA2:|
from microbit import *
zahl1 = 0
while True:
if button_a.was_pressed() and zahl1 < 9:
zahl1 += 1
if button_b.was_pressed() and zahl1 > 0:
zahl1 -= 1
display.show(zahl1)
++++
++++ RA3:|
from microbit import *
zahl1 = 0
while True:
if button_a.was_pressed():
if zahl1 > 6:
zahl1 = 0
else:
zahl1 = zahl1 + 1
display.show(zahl1)
++++
++++ RA4:|
from microbit import *
import random
zahl1 = 0
while True:
if button_a.was_pressed():
zahl1 = random.randint(1,77)
display.show(zahl1)
sleep(1000)
if zahl1 % 7 == 0:
display.show(Image.HEART)
elif zahl1 % 5 == 0:
display.show(Image.HOUSE)
elif zahl1 % 3 == 0:
display.show(Image.DUCK)
else:
display.show(Image.SAD)
sleep(1000)
++++
++++ RA5:|
from microbit import *
import random
temp_c = 0
while True:
temp_c = temperature()
if button_a.was_pressed():
print(str(temp_c)+'° C')
if button_b.was_pressed():
print(str(temp_c *9/5 + 32) + '° F')
if pin_logo.is_touched():
print(str(temp_c+273.15) + 'K')
sleep(100)
++++
=== Aufgaben RB ===
++++ RB1:|
from microbit import *
def make_heart_image(b):
heart_string = '09090:99999:99999:09990:00900'
new_string = heart_string.replace('9',str(b))
return Image(new_string)
helligkeit = 4
while True:
if button_a.was_pressed() and helligkeit > 0:
helligkeit = helligkeit - 1
if button_b.was_pressed() and helligkeit < 9:
helligkeit = helligkeit + 1
display.show(make_heart_image(helligkeit))
++++
++++ RB2:|
from microbit import *
def draw_horizontal_line(y_pos):
display.clear()
display.set_pixel(0,y_pos,9)
display.set_pixel(1,y_pos,9)
display.set_pixel(2,y_pos,9)
display.set_pixel(3,y_pos,9)
display.set_pixel(4,y_pos,9)
y = 0
while True:
if button_a.was_pressed():
y = (y + 1) % 5
draw_horizontal_line(y)
++++
++++ RB3:|
from microbit import *
def print_acc_values(u):
if u == 0:
unit_string = " mg"
factor = 1
elif u == 1:
unit_string = " g"
factor = 0.001
else:
unit_string = " m/ss"
factor = 0.00981
x, y, z = accelerometer.get_values()
print("X: " + str(x * factor) + unit_string)
print("Y: " + str(y * factor) + unit_string)
print("Z: " + str(z * factor) + unit_string)
unit = 0
while True:
if button_a.was_pressed():
unit = (unit + 1) % 3
print_acc_values(unit)
sleep(500)
++++
++++ RB4:|
from microbit import *
import math
def get_total_acc():
x, y, z = accelerometer.get_values()
a_tot = math.sqrt(x*x + y*y + z*z)
a_max = 3464
a = int(a_tot/a_max * 9)
return a
while True:
display.show(get_total_acc())
++++
=== Aufgaben RC ===
++++ RC1:|
from microbit import *
import random
while True:
column = random.randint(0,4)
for row in range(0,5):
display.set_pixel(column, row, 9)
sleep(40)
display.clear()
++++
++++ RC2:|
from microbit import *
import random
def shoot(a_shoots):
row = random.randint(0,4)
if a_shoots:
start_column = 0
stop_column = 5
step = 1
else:
start_column = 4
stop_column = -1
step = -1
for column in range(start_column, stop_column, step):
display.set_pixel(column, row, 9)
sleep(40)
display.clear()
while True:
if button_a.was_pressed():
shoot(True)
if button_b.was_pressed():
shoot(False)
++++
++++ RC3:|
from microbit import *
import random
def binary_to_decimal(binary_string):
decimal = 0
place_value = 1
for bit in reversed(binary_string):
decimal = decimal + int(bit) * place_value
place_value = place_value * 2
return decimal
binary = ''
while True:
if button_a.was_pressed():
binary = binary + '0'
if button_b.was_pressed():
binary = binary + '1'
if pin_logo.is_touched():
print(binary)
print(binary_to_decimal(binary))
sleep(100)
binary = ''
++++
++++ RC4:|
from microbit import *
while True:
for i in range(0,5):
display.set_pixel(i, 4-i,9)
sleep(100)
display.clear()
for i in range(0,5):
display.set_pixel(i, i, 9)
sleep(100)
display.clear()
++++
=== Aufgaben RD ===
++++ RD1:|
from microbit import *
import random
index = 0
while True:
if button_a.was_pressed():
index = (index + 1) % 12
display.show(Image.ALL_CLOCKS[index])
++++
++++ RD2:|
from microbit import *
import random
subjekte = ["Karls Katze", "Albert Einstein", "Lauryn Hill", "Eine Blume", "LeBron James", "Eine Pizza", "Taylor Swift", "Die Sonne"]
verben = ["liebt", "betrachtet", "baut", "malt", "erfindet", "liest", "schreibt", "singt"]
adjektive = ["schnell", "glücklich", "groß", "konzentiert", "zitternd", "fröhlich", "begeistert", "trübselig"]
objekte = ["einen Apfel", "eine Geschichte", "einen Kaffee", "einen Film", "die Pyramiden", "eine Reise", "einen Brief", "Leonardo da Vinci"]
index = 0
while True:
if button_a.was_pressed():
subjekt = random.choice(subjekte)
verb = random.choice(verben)
adjektiv = random.choice(adjektive)
objekt = random.choice(objekte)
satz = "{} {} {} {}.".format(subjekt,verb,adjektiv,objekt)
print(satz)
++++
++++ RD3:|
from microbit import *
buchstaben = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
index = 0
wort = ''
while True:
display.show(buchstaben[index])
if button_a.was_pressed():
index = (index + 1) % 26
if button_b.was_pressed():
wort = wort + buchstaben[index]
if pin_logo.is_touched():
print(wort)
sleep(100)
wort = ''
++++