Dit lesmateriaal hoort bij een website van de BBC.
Hello, World!
from microbit import *
display.scroll("Hello, World!")
Met de bovenste regel geef je aan dat de gehele bibliotheek van de micro:bit moet worden geïmporteerd. Die regel moet er altijd staan.
De micro:bit werkt met objecten die je opdrachten kunt geven en die met elkaar kunnen communiceren. Eén van die objecten is bijvoorbeeld het display van 25x25 pixels.
Met display.show() zeg je tegen de micro:bit: toon steeds op het scherm. Dus display is een object. Daarna volgt er een punt gevolgd door een opdracht. Zo'n opdracht noemen we een methode (method). Na de methode volgt er iets tussen haakjes en dat noemen we arguments. Aangezien we hier tekst tussen de haakjes zetten, moet dat tussen dubbele quotes staan.
De Mu editor heeft een functie die we codecompletion noemen. Je typt een stukje en dan krijg je al in beeld wat er mogelijk. Typ bijvoorbeeld display en daarna een punt. Je krijgt dan precies in beeld welke mogelijkheden er zijn. Het werkt snel en voorkomt fouten! Ga met de pijltjes naar scroll en druk op Enter of Tab om de code in te voeren.
Tik nu een haakje ( en je krijgt opnieuw voorstellen tot aanvullen.
Eerst voeren we een string in, bijvoorbeeld "Hello, World!" maar dan heb je dus nog met vier parameters de mogelijkheid iets toe te voegen aan de opdracht. De delay gaat in milliseconden. Als er een delay is van 400 ms dan is dat dus 4 seconden.
Opdrachten:
Wat is het verschil tussen display.show en display.scroll?
Onderzoek wat de parameters loop en display doen en leg dat uit.
Images
from microbit import *
display.show(Image.HAPPY)
Met de bovenste regel hebben we alles van de bibliotheek van de micro:bit geïmporteerd. Dus ook de klasse Image. In die klass staat een aantal afbeeldingen die je zo kunt gebruiken. Let goed op dat je Image met een hoofdletter schrijft en dat de naam van de afbeelding met alleen maar hoofdletters staat.
DIY Images
Je kunt ook je eigen afbeeldingen maken. Dat zijn de Do It Yourself Images.
De naam van de afbeelding is boat maar dat kan dus van alles zijn, ook boot of schip. Vervolgens geef je per regel aan hoe hard elke LED moet branden met een cijfer tussen de 0 en de 9. Het hoeft niet per se over meerdere regels. Het kan ook op één regel:
boat = Image("05050:05050:05050:99999:09990")
Animation
Door een lijst van afbeeldingen te maken en die na elkaar af te spelen kun je een animatie maken. Hieronder een animatie van een bootje dat zinkt. Je maakt zes bootjes met allemaal een eigen naam. Hier zijn dat dus boat1, boat2, boat3, boat4, boat5 en boat6. Per regel geef je aan welke LED's er moeten branden.
Daarna maak je een lijstje met een naam en in dat lijstje zet je de afbeeldingen op een rijtje. De naam van het lijstje is hier all_boats. Let op dat het rijtje met namen tussen rechte haken [ en ] staan. Zo'n lijstje noemen we een array.
Met display.show kun je de animatie afspelen door de naam van het array te noemen. Met delay geef je aan hoe snel achter elkaar de afbeeldingen moeten worden getoond.
Maak een array dat je boodschappen noemt en stop drie dingen in het array.
Built in animations
Er zijn twee ingebouwde animaties:
Image.ALL_CLOCKS
Image. ALL_ARROWS
Probeer ze uit met:
from microbit import *
display.show(Image.ALL_CLOCKS, loop=True, delay=100)
from microbit import *
display.show(Image.ALL_ARROWS, loop=True, delay=100)
Buttons
De micro:bit heeft twee knoppen: button_a en button_b. De micro:bit kun je dus laten reageren als er op een knop gedrukt wordt. Probeer maar eens deze code:
from microbit import *
sleep(10000)
display.scroll(str(button_a.get_presses()))
Start het programma en druk een aantal keer op button_a.
Eerst gaat de micro:bit slapen en wel 10000 ms. Dat is dus 10 seconden.
Let op het aantal haakjes! De methode getpresses() gebruikt geen arguments en dan zet je dus twee haakjes achter de naam van de methode. Er is altijd een even aantal haakjes, je moet ze net zo vaak sluiten als dat je ze opent.
Met deze code leren we meteen iets nieuws: str. Als je dat weglaat, zal de micro:bit een foutmelding geven. Met get_presses() meet je het aantal keren dat er op button_a is gedrukt. Dan krijg je dus een geheel getal als antwoord. Zo'n geheel getal is van het type integer. De micro:bit kan echter geen integers tonen maar enkel tekst. Je kunt dan met str een getal omzetten naar tekst zodat de uitkomst toch getoond kan worden.
Test even het volgende:
display.show(10)
Je zult zien dat je een syntax error krijgt. Nogmaals: micro:bit kan geen getallen tonen. Je kunt dit proberen:
display.show("10")
Door het plaatsen van de dubbele quotes maak je er een string (tekst) van.
En dat kan in dit geval dus ook zo:
display.show(str(10))
String
Een string is een aantal karakters achter elkaar, tekst. Een string moet tussen dubbele aanhalingstekens staan. Voorbeelden:
"Kees"
"Het is misschien waar."
"7"
De micro:bit kan enkel strings tonen op het display. Als er dus cijfers of een getakl getoond moet worden op het display moet je dat eerst omzetten naar een string met de functie str().
Voorbeeld:
display.show(4 / 2) levert een syntax error op want de micro: bit kan geen cijfers tonen. Je moet het omzetten naar een string: display.show(str(4 / 2))
Int
Een int is een geheel getal, positief of negatief. En 0 is ook een int.
Decimal
Een decimal is een getal met decimalen. Als je 1 door 2 deelt, krijg je 0,5. Wij schrijven een komma voor decimale getallen maar de micro:bit werkt met een punt voor de decimale notatie.
Probeer enkele voorbeelden uit:
display.show(str(1 / 2))
display.show(str(2 / 3))
Onthoud dus altijd dat je cijfers en getallen omzet naar een string. Neem bijvoorbeeld onderstaand voorbeeld.
from microbit import *
x = 2
y = 4
display.show(x * y)
Het programma werkt niet want er komt een foutmelding. Pas het aan naar:
from microbit import *
x = 2
y = 4
display.show(str(x * y))
Rekenen
Opdracht:
Test wat er gebeurt als de volgende code op de micro:bit zet:
display.show(4)
display.show(4+2)
display.show("4")
display.show("4+2")
display.show(str(4))
display.show(str(4+2))
Maak hiervan een aantekening in je verslag.
While
Met while kun je een loop maken, een lus in gewoon Nederlands. De micro:bit zal iets doen zolang een voorwaarde waar is. Kijk naar onderstaand voorbeeld.
from microbit import *
while running_time() < 10000:
display.show(Image.ASLEEP)
display.show(Image.SURPRISED)
De running_time() is de tijd sinds de micro:bit is aangezet in milliseconden. Dat is in dit geval 10000 ms en dat is dus 10 seconden. Zolang dus de micro:bit minder dan 10 seconden aanstaat, zal de afbeelding ASLEEP worden getoond. En daarna wordt de afbeelding SURPRISED getoond. Probeer dit uit op de micro:bit.
Je kunt een oneindige lus maken. Dan begin je met:
while True:
# Doe dingen.
If
from microbit import *
while True:
if button_a.is_pressed():
display.show(Image.HAPPY)
elif button_b.is_pressed():
break
else:
display.show(Image.SAD)
display.clear()
In dit voorbeeld wordt de afbeelding SAD getoond bij het opstarten. Als je op button_a drukt wordt de afbeelding HAPPY getoond. Als je die knop loslaat, komt SAD weer terug. Als je op button_b drukt, wordt het programma onderbroken met break.
Je begint dus met while True: en druk je op Enter. De cursor springt dan automatisch in. Dan maak je de if button_a.ispressed() gevolgd door een dubbele punt en dan springt de cursor weer in.
De volgorde is dus:
if
elif
elif
elif
(zo vaak elif als je wil)
else
Je hoeft niet per se een elif of een I te maken. Zonder werkt het ook.
Met display.clear() wordt het scherm leeggemaakt.
Probeer deze code door hem echt over te typen. Dus niet knippen en plakken maar zelf maken zodat je "voelt" wat er met het inspringen gebeurt.
Input / Output
Op de gouden rand van de voorkant van de micro:bit vind je de input/output pins of kortweg de I/O pins. Je kunt er krokodillenbekjes aan vastknijpen of een stekker in het gat steken. De pins zijn genummerd 0, 1, 2, 3V en er is een GND (ground = aarde).
De eerste drie pinnen hebben als naam pin0, pin1 en pin3. Bij de pinnen horen verschillende methodes. Bekijk onderstaand voorbeeld:
from microbit import *
while True:
if pin0.is_touched():
display.show(Image.HAPPY)
else:
display.show(Image.SAD)
Houd de micro:bit vast met de duim en wijsvinger van je rechterhand op de GND pin (ground). Met je linkerhand raak je nu pin 0 aan. Als het goed is, verandert de afbeelding van SAD naar HAPPY. De ground (aarde) dient om het circuit te sluiten. Dus rechts (de GND) continu vasthouden en links (0) aanraken met je duim of wijsvinger (of beide) en loslaten.
Geluid
Je kunt oortjes aansluiten op demicro:bit met behulp van krokodillenbekjes. Als je een bekje aansluiuit op pin0 en een op de GND kun je geluidjes afspelen.
from microbit import *
pin0.write_digital(1)
Dit speelt continu een geluidje af maar beter is om het geluid uit te zetten en aan te zetten met een 1 en een 0 bij write_digital(). Probeer onderstaand voorbeeld maar eens.
from microbit import *
while True:
pin0.write_digital(1)
sleep(20)
pin0.write_digital(0)
sleep(480)
We starten met een oneindige lus gevolgd door een dubbele punt.
Dan zetten we pin0 aan. Er wordt een geluid afgespeeld.
Terwijl het geluid wordt afgespeeld, gaat de micro:bit slapen voor 20ms.
Op de volgende regel wordt het geluid op pin0 uitgezet. Je krijgt dan een korte biep.
En op de regel daaronder gaat de micro:bit weer slapen voor 480 ms.
En door de oneindige lus gaat het programma dan weer verder met de eerste regel na de dubbele punt.
Music
De micro:bit kan ingebouwde melodietjes afspelen. Hieronder de complete lijst.
music.DADADADUM
music.ENTERTAINER
music.PRELUDE
music.ODE
music.NYAN
music.RINGTONE
music.FUNK
music.BLUES
music.BIRTHDAY
music.WEDDING
music.FUNERAL
music.PUNCHLINE
music.PYTHON
music.BADDY
music.CHASE
music.BA_DING
music.WAWAWAWAA
music.JUMP_UP
music.JUMP_DOWN
music.POWER_UP
music.POWER_DOWN
Met deze code kun je zo'n melodie afspelen.
import music
music.play(music.NYAN)
Probeer er enkele uit.
Sound Effects
Het is mogelijk geluidseffecten te laten horen met de micro:bit. Met onderstaande code maak je bijvoorbeeld een sirene.
import music
while True:
for freq in range(880, 1760, 16):
music.pitch(freq, 6)
for freq in range(1760, 880, -16):
music.pitch(freq, 6)
Bij de music.pitch stel je de frequentie in. De range heeft drie parameters:
start
eind
step
Met step wordt de frequentie dus in blokken van die step verhoogd of verlaagd. Merk op dat er een for loop wordt gebruikt in plaats van een while.
music.pitch(freq, 6)
De for loop zegt eigenlijk dit: voor elk item in een bepaalde collectie, doe iets met dat item. In het voorbeeld: voor elke frequentie in de range van frequenties, speel de toonhoogte af van die frequentie voor 6 seconden.
Random
from microbit import *
import random
names = ["Mary", "Yolanda", "Damien", "Alia", "Kushal", "Mei Xiu", "Zoltan" ]
display.scroll(random.choice(names))
Random is Engels voor willekeurig. Merk op dat je de bibliotheek van random apart importeert met import random.
Met de rechte haken (ik noem ze weleens nietjes) maak je een rijtje met namen. Dat rijtje heeft een naam, in dit geval names. We noemen zo'n rijtje een array. De namen staan tussen dubbele quotes want het zijn strings en de namen worden gescheiden door komma's.
Vervolgens kun je dus met display.scroll(random.choice(names)) een wilekeurige naam tonen.
Vervang de namen door namen van leerlingen uit onze klas en probeer de code.
Randint
from microbit import *
import random
display.show(str(random.randint(1, 6)))
Met deze code kun je een willekeurig cijfer tonen tussen de 1 en de 6. Probeer de code door steeds het programma te herstarten. Merk op dat de randen meedoen, dus 1 en 6 worden ook getoond.
Je weet dat de micro:bit alleen maar strings kan tonen en daarom moet je van het willekeurig cijfer een string maken met str().
Randrange
Als je een getal tussen 0 en N wil tonen, dan is het eenvoudiger om de methode random.randrange te gebruiken.Kijk naar dit voorbeeld:
from microbit import *
import random
answer = random.randrange(100)
display.scroll(str(answer))
De rand doet dan niet mee. In dit geval krijg je gehele getallen van 0 tot en met 99. Dat is dus anders dan bij randint().
Movement
De micro:bit heeft een zogenaamde accelerometer. In het Nederlands noemen we dat een versnellingsmeter. Hij kan beweging detecteren langs drie assen:
via de X-as: beweging van links naar rechts
via de Y-as: beweging naar voren en naar achteren
via de Z-as: beweging op en neer
De beweging wordt aangegeven in een positief of negatief getal. Als de beweging 0 is, is de micro:bit waterpas. Je kunt de waarden van de assen ophalen. Kijk naar het volgende voorbeeld:
from microbit import *
while True:
reading = accelerometer.get_x()
if reading > 20:
display.show("R")
elif reading < -20:
display.show("L")
else:
display.show("-")
Beweeg de micro:bit van links naar rechts en omgekeerd. Als hij precies horizontaal is, laat hij een streepje zien. Als je hem naar links houdt, komt er een L in beeld en als je hem naar rechts houdt komt er een R in beeld.
Met reading = accelerometer.get_x() lees je die x-waarde uit. Zolang de waarden binnen de -20 en 20 blijven wordt het streepje nog getoond.
Voor de y-as gebruik je get_y() en voor de z-as gebruik je get_z().
Experimenteer met de get_y() en get_z() op dezelfde manier zoals in het voorbeeld.
Gestures
Een gesture is een gebaar in het Nederlands. En een accelerometer is een versnellingsmeter. De versnellingsmeter kan de volgende gebaren detecteren:
up, down, left, right, face up, face down, freefall, 3g, 6g, 8g, shake.
Gestures worden altijd getoond als strings. De meeste gebaren spreken voor zich.
De huidige gesture kun je ophalen met accelerometer.current_gesture().
Probeer de volgende code:
from microbit import *
while True:
gesture = accelerometer.current_gesture()
if gesture == "face up":
display.show(Image.HAPPY)
else:
display.show(Image.ANGRY)
De while True: wordt gebruikt om de meting constant door te laten lopen.
Op de volgende regel wordt een variabele gesture gemaakt en daar wordt de waarde van accelerometer current_gesture() in gestopt.
Met een if wordt gekeken of de micro:bit face up is, met andere woorden of de micro:bit waterpas ligt. Let op het dubbele == teken dat je gebruikt voor is gelijk aan. Met een dubbel is gelijk teken controleer je of een variabele gelijk is aan een bepaalde waarde. Met een enkel is gelijk teken krijgt de variabele de inhoud na het is gelijk teken.
Dus:
gesture == "face up" controleert of de variabele gelijk is aan face up
gesture = "face up" geeft de variabele de inhoud face up
Als de micro:bit waterpas is, wordt HAPPY getoond en is dat niet het geval dan wordt ANGRY getoond.
Magic-8
Magic-8
Magic-8 is een spel. We gaan hieronder het spel namaken met de micro:bit.
Bij de Magic-8 ball stel je een ja/nee vraag, daarna schud je met de bal en dan toont de bal de waarheid. Bekijk het programma hieronder.
from microbit import *
import random
answers = [
"It is certain",
"It is decidedly so",
"Without a doubt",
"Yes, definitely",
"You may rely on it",
"As I see it, yes",
"Most likely",
"Outlook good",
"Yes",
"Signs point to yes",
"Reply hazy try again",
"Ask again later",
"Better not tell you now",
"Cannot predict now",
"Concentrate and ask again",
"Don't count on it"
"My reply is no",
"My sources say no",
"Outlook not so good",
"Very doubtful"
]
while True:
display.show("8")
if accelerometer.was_gesture("shake"):
display.clear()
sleep(1000)
display.scroll(random.choice(answers))
We maken gebruiken van een array met de mogelijke twintig antwoorden. Daaronder komt een while True: zodat het programma altijd doorloopt.
Het programma begint met het tonen van een 8.
Op de volgende regel volgt er dan een if die controleert of er geschud wordt met de micro:bit.
Als dat het geval is (er is geschud met de micro:bit) dan wordt eerst het scherm leeggemaakt met display.clear().
Vervolgens is er een pauze van 1000 ms (1 seconde) met sleep(1000).
En op de laatste regel wordt een random keuze getoond uit het array answers.
Direction
Kompas
Er zit een kompas in de micro:bit. Het kompas kan vertellen waar het noorden zit op de volgende manier:
from microbit import *
compass.calibrate()
while True:
needle = ((15 - compass.heading()) // 30) % 12
display.show(Image.ALL_CLOCKS[needle])
Eerst wordt het kompas gecalibreerd. De micro:bit zoekt uit waar hij is in relatie tot het magnetische veld van de aarde.
Om de code te kunnen begrijpen, moet je weten wat floor division is en wat modulo betekent. Dat wordt hierna uitgelegd.
Floor division
Floor division
Bij een floor division rond je naar beneden af naar een geheel getal (int).
Bij floor division rond je af naar beneden naar een geheel getal (int). Als je 9 door 3 deelt, krijg je een mooi geheel getal, namelijk 3 want 9 / 3 = 3.
Maar als je nu 10 door 3 deelt, krijg je geen geheel getal maar een decimaal getal. Probeer deze code:
from microbit import *while True:
display.scroll(str(10/3))
Hoeveel decimalen worden er getoond?
Met een dubbele slash // in plaats van een slash / kun je een floor division maken. De uitkomst is een geheel getal (geen decimalen). En de uitkomst wordt naar beneden afgerond.
from microbit import *
while True:
display.scroll(str(10 // 3))
Als je deze code test, zul je zien dat het antwoord 3 is. Dus 10 // 3 = 3. Ook 11 // 3 = 3. Je rond af naar de floor, de vloer. Het tegenovergestelde hiervan is ceiling division. Je rond dan af naar boven, naar het plafond.
Modulo
De modulo van een deling is de rest van een deling. Als je 8 door 4 deelt, dan is de rest 0. Het teken voor modulo is het procentteken: %.
8 % 4 = 0
Als je 9 door 4 deelt, dan is de rest 1.
9 % 4 =1
Als je 11 door 4 deelt, dan is de rest 3.
11 % 4 = 3
Flowcharts met Flowgorithm
Je moet een flowchart kunnen maken met Flowgorithm.
Het arrangement Micro:bit Ostrea Lyceum is gemaakt met
Wikiwijs van
Kennisnet. Wikiwijs is hét onderwijsplatform waar je leermiddelen zoekt,
maakt en deelt.
Auteur
Frans Peeters
Je moet eerst inloggen om feedback aan de auteur te kunnen geven.
Laatst gewijzigd
2019-03-11 10:21:34
Licentie
Dit lesmateriaal is gepubliceerd onder de Creative Commons Naamsvermelding 4.0 Internationale licentie. Dit houdt in dat je onder de voorwaarde van naamsvermelding vrij bent om:
het werk te delen - te kopiëren, te verspreiden en door te geven via elk medium of bestandsformaat
het werk te bewerken - te remixen, te veranderen en afgeleide werken te maken
voor alle doeleinden, inclusief commerciële doeleinden.
Leeromgevingen die gebruik maken van LTI kunnen Wikiwijs arrangementen en toetsen afspelen en resultaten
terugkoppelen. Hiervoor moet de leeromgeving wel bij Wikiwijs aangemeld zijn. Wil je gebruik maken van de LTI
koppeling? Meld je aan via info@wikiwijs.nl met het verzoek om een LTI
koppeling aan te gaan.
Maak je al gebruik van LTI? Gebruik dan de onderstaande Launch URL’s.
Arrangement
IMSCC package
Wil je de Launch URL’s niet los kopiëren, maar in één keer downloaden? Download dan de IMSCC package.
Wikiwijs lesmateriaal kan worden gebruikt in een externe leeromgeving. Er kunnen koppelingen worden gemaakt en
het lesmateriaal kan op verschillende manieren worden geëxporteerd. Meer informatie hierover kun je vinden op
onze Developers Wiki.