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
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:
RA3 – Von Null bis Sieben rundherum
Schreibe Code, mit dem du Zahlen von 0 bis 7 auf dem Display anzeigen kannst.
RA4 – Dreier-, Fünfer- oder Siebnerreihe?
Schreibe Code, mit dem du eine zufällige Zahl auswertest.
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.
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 = ''