====== Micro:bit Basics ====== ===== - Übersicht ===== Der BBC micro:bit ist eine Art ‘Mini-Computer’, der mit Python (und anderen Sprachen) programmiert werden kann. Er kann mittels Knöpfe gesteuert werden, verfügt über eine 5x5-LED-Matrix und ist mit einigen Sensoren (z.B. Beschleunigungsmesser) ausgestaltet: {{:talit:microbit.png?600|}} ===== - Programmieren ===== === Editor === * Verwende den [[https://python.microbit.org/v/3|MicroBit Online Editor]]. * Copy-Paste deinen Code in Python-Files in VSCode, um sie zu speichern. === Getting started mit Online-Editor === 1. Verbinde micro:bit per USB-C mit Laptop (ev. Benötigst du Adapter) 1. Öffne den Online-Editor in Chrome. 1. Klicke auf ‘Connect’ / Wähle micro:bit aus / ‘Verbinden’. 1. Verbindung Testen: Klicke auf ‘Flash’ -> Default-Programm «Hello World!» wird auf micro:bit geladen und ausgeführt ===== - Nützliche Links ===== 1. Offiziell (basic): 1. User guide - Overview: https://microbit.org/get-started/user-guide/overview/ 1. User guide – Features: https://microbit.org/get-started/user-guide/features-in-depth/ \\ \\ 1. Offiziell (detailliert): 1. Dokumentation: https://microbit-micropython.readthedocs.io/en/v2-docs/tutorials/hello.html \\ \\ 1. KSR: https://sca.ksr.ch/doku.php?id=gf_informatik:microbit_programmieren_grundlagen ===== - Aufgaben ===== Die hilfreichste Quelle ist das Wiki vom Grundlagenfach 2M: https://sca.ksr.ch/doku.php?id=gf_informatik:microbit_programmieren_grundlagen ==== Aufgabe 1: LED-Matrix ==== Erstelle GitHub-Repo **microbit**, lege darin die Codes ab. 1. Das LED im Zentrum der $5 \times 5-$LED-Matrix soll leuchten. Drückt man den linken/rechten Knopf, soll sich das Licht nach links/rechts bewegen. Es soll immer genau eine LED leuchten. * Mit `display.set_pixel(1,2,9)` kann man die LED an Position $(x,y) = (1,2)$ mit voller Helligkeit ($9$) leuchten lassen. * Mit `if button_a.get_presses(): ...` kann man überprüfen, ob der linke Knopf gedrückt wird. * Mit `display.clear()` kann man alle LEDs abschalten. * Mit `sleep(100)` kann man den Code für $100$ Millisekunden pausieren lassen. \\ 1. Wahrscheinlich gibt es jetzt eine Fehlermeldung, wenn man über den Rand hinauslaufen will. Vermeide dies! Erreicht man den linken/rechten Rand, geht es nicht weiter in die linke/rechte Richtung. ==== Aufgabe 2: Würfel ==== Implementiere einen Würfel. Drückt man eine der beiden Tasten, soll eine Zufallszahl $1$ bis $6$ generiert (-> random-Modul) und das entsprechende Würfelsymbol angezeigt werden. Zeichne die Bilder mit `display.set_pixel(...)` selbst. ==== Aufgabe 3: Misc ==== 1. Fotoschau: Im micro:bit sind viele verschiedene Bilder vordefiniert. Speichere einige davon in einer Liste. Mit den beiden Knöpfen soll man die Bilder durchgehen können. 1. Designe ein eigenes hübsches Bild und füge es der Fotoschau hinzu. 1. Random Shake: Der micro:bit verfügt über einen Beschleunigungssensor. Mit diesem kann man u.a. bestimmen, ob der micro:bit gerade geschüttelt wird. Modifiziere deinen Code aus Aufgabe 2: Jedes Mal, wenn der micro:bit geschüttelt wird, wird eine neue Zahl gewürfelt. Das Schütteln kann man auch in Online-Editor simulieren. Optional: 1. Benötigt zwei micro:bits: Über BLE können mehrere micro:bit miteinander kommunizieren. Verbinde zwei micro:bit miteinander und modifiziere den Würfel-Code wie folgt: Auf beiden micro:bits wird immer der gleiche Würfel angezeigt. Drückt man auf einem der beiden micro:bits einen Knopf, wird eine neue Zahl gewürfelt und auf *beiden* angezeigt. ==== Lösungen Aufgaben ==== ++++Lösungen| # Imports go at the top from microbit import * x = 2 y = 2 while True: if button_a.get_presses(): x -= 1 if button_b.get_presses(): x += 1 if x < 0: x = 0 elif x > 4: x = 4 display.clear() display.set_pixel(x,y,9) sleep(100) from microbit import * import random def dice(n): display.clear() if n == 1: display.set_pixel(2,2,9) elif n == 2: display.set_pixel(0,4,9) display.set_pixel(4,0,9) elif n == 3: display.set_pixel(2,2,9) display.set_pixel(0,4,9) display.set_pixel(4,0,9) elif n == 4: display.set_pixel(0,4,9) display.set_pixel(4,0,9) display.set_pixel(0,0,9) display.set_pixel(4,4,9) elif n == 5: display.set_pixel(2,2,9) display.set_pixel(0,4,9) display.set_pixel(4,0,9) display.set_pixel(0,0,9) display.set_pixel(4,4,9) elif n == 6: display.set_pixel(0,4,9) display.set_pixel(4,0,9) display.set_pixel(0,0,9) display.set_pixel(4,4,9) display.set_pixel(0,2,9) display.set_pixel(4,2,9) while True: if button_a.get_presses() or button_b.get_presses(): dice(random.randint(1,6)) sleep(100) Alternative Ideen für dice-Funktion: ### Variante 1 def dice(n): display.clear() if n == 1: display.set_pixel(2,2,9) elif n == 2: display.set_pixel(0,4,9) display.set_pixel(4,0,9) elif n == 3: display.set_pixel(2,2,9) display.set_pixel(0,4,9) display.set_pixel(4,0,9) elif n == 4: display.set_pixel(0,4,9) display.set_pixel(4,0,9) display.set_pixel(0,0,9) display.set_pixel(4,4,9) elif n == 5: display.set_pixel(2,2,9) display.set_pixel(0,4,9) display.set_pixel(4,0,9) display.set_pixel(0,0,9) display.set_pixel(4,4,9) elif n == 6: display.set_pixel(0,4,9) display.set_pixel(4,0,9) display.set_pixel(0,0,9) display.set_pixel(4,4,9) display.set_pixel(0,2,9) display.set_pixel(4,2,9) ### Variante 2 def dice(n): dots = [ [[2,2]], [[0,4],[4,0]], [[2,2],[0,4],[4,0]], [[0,4],[4,0],[0,0],[4,4]], [[2,2],[0,4],[4,0],[0,0],[4,4]], [[0,4],[4,0],[0,0],[4,4],[0,2],[4,2]], ] display.clear() for pixel in dots[n-1]: display.set_pixel(pixel[0],pixel[1],9) ### Variante 3 def dice(n): display.clear() if n % 2 == 1: display.set_pixel(2,2,9) if n >= 2: display.set_pixel(0,4,9) display.set_pixel(4,0,9) if n >= 4: display.set_pixel(0,0,9) display.set_pixel(4,4,9) if n == 6: display.set_pixel(0,2,9) display.set_pixel(4,2,9) ++++