microbit

microbit deel 2

1. Een hulpmiddel om sommen te oefenen

In deze les gaan we nog eens oefenen met variabelen en als-dan constructies. Dit hebben we nodig om verder te kunnen komen. Het doel van deze les is het maken van een hulpmiddel om sommen te kunnen oefenen. De moeilijkheidsgraad kun je zelf inprogrammeren.

We beginnen met het maken van twee variabelen. In ons geval willen we twee getallen bij elkaar optellen.

Klik op Variabelen en daarna op Een variabele maken.

https://images.computational.nl/galleries/microbit/2017-11-28_08-34-19.png

Geef de variabele de naam cijfer1 en klik op Ok.

https://images.computational.nl/galleries/microbit/2017-11-28_08-39-20.png

Maak hierna nog een variabele cijfer2 zodat je twee variabelen hebt: cijfer1 en cijfer2. Sleep deze in het programmeerveld.

https://images.computational.nl/galleries/microbit/2017-11-28_08-42-27.png

We gaan nu de twee variabelen random een waarde geven. Dit kan met de volgende code.

https://images.computational.nl/galleries/microbit/2017-11-28_15-19-56.png

Download deze code en kijk of het werkt.

Breid hierna de code als volgt uit.

https://images.computational.nl/galleries/microbit/2017-11-28_15-25-43.png

Met andere woorden: er wordt een rekensom gegeven. Hierop kan met de volgende code een antwoord worden gegeven. Hoe dit werkt gaan we niet precies uitleggen. Let op de extra variabele totaal.

https://images.computational.nl/galleries/microbit/2017-11-28_15-29-02.png

Nu moeten we nog controleren of het antwoord klopt. Dit kunnen we doen met onderstaande code.

https://images.computational.nl/galleries/microbit/2017-11-28_15-39-18.png

Hier staat dus: als de variabele totaal gelijk is aan de optelling tussen cijfer1 en cijfer2 dan is de als-voorwaarde waar.

Probeer de code eerst uit en maak dan meteen de eerstvolgende opdracht. Waarschijnlijk heb je een probleem ontdekt. Hier gaat de eerste opdracht over.

 

2. Reactietijd meten - aftellen

We gaan een nieuw project maken die de reactietijd meet. In deze les maak je de opstart (aftellen). Begin met het invoeren van de onderstaande code.

https://images.computational.nl/galleries/microbit/2017-11-29_08-40-04.png

Verbind nu zowel pin 0 als de Ground-pin aan een stukje folie met behulp van een krokodillenbekje.

https://images.computational.nl/galleries/microbit/2017-11-29_08-54-14.png

Om dit goed te laten werken kun je het beste de krokodillenbekjes door het gat steken

https://images.computational.nl/galleries/microbit/2017-11-29_09-07-12.png

 Als je nu het folie van de groundpin vasthoudt en het folie van pin 0 aanraakt, moet de teller gaan lopen.

https://images.computational.nl/galleries/microbit/2017-11-29_10-30-47.png

De variabelen gaan we als volgt gebruiken:

  • lopend houdt in dat de tijd loopt
  • valse_start betekent dat deze op waar wordt gezet als je het folie aanraakt voordat de tijd loopt
  • einde is het einde van de gemeten tijd
  • start is de begintijd.

3. Een random dot tekenen

We breiden nu de code uit als volgt:

https://images.computational.nl/galleries/microbit/2017-11-29_10-36-46.png

De tijd loopt nog niet dus die houden we op onwaar en we hebben nog geen valse start geconstateerd dus die zetten we ook op onwaar. Daarna laten we de code random pauzeren tussen de 1 en de 2 seconden (1000 en 2000 miliseconden).

Onder het pauzeerstuk plaatsen we nu de volgende code:

https://images.computational.nl/galleries/microbit/2017-11-29_10-51-24.png

Dit betekent het volgende:

Als er geen valse start is gemaakt dan stellen we de starttijd in en maken we de variabele lopend waar. Tevens zorgen we dt er geen animatie loopt en het scherm is gewist. Dit is preventief. Hierna laten we random een dot tekenen ergens op de x/y-as van de ledjes. Waarschijnlijk heb je dit al bij het vak wiskunde gehad. Als de dot op x=2 en y=3 wordt getekend dan is dit het ledje wat staat op de 3e positie op de x-as en de 4e positie op de y-as.

Test nu eerst de code op de werking door deze te uploaden. Ga daarna door met de volgende les.

4. De code van pin 1

We gaan nu het blok maken die de reactietijd meet. We gaan ervan uit dat in het blok van pin 0 de dot is getekend. De bedoeling is dan dat je het folie van pin 1 zo snel als mogelijk gaat aanraken. Hiervoor maken we een nieuw blok en sluiten we een derde draad met folie aan op pin 1. De code geven we in een keer:

https://images.computational.nl/galleries/microbit/2017-11-29_11-06-09.png

Zodra je de code hebt gemaakt kun je de krokodillenbekjes aansluiten.

https://images.computational.nl/galleries/microbit/2017-11-29_11-59-18.png

Het werkt als volgt. Als pin 1 wordt aangeraakt wordt er eerst gechecked of de tijd wel loopt. Deze loopt want deze hadden we op waar ingesteld in het als-dan blok van pin 0 (ga dit na). In het dan-blok wordt deze variabele voor de volgende meting meteen op onwaar gezet.

5. Een radiosignaal versturen

De microbit is ook geschikt om signalen door de lucht te sturen. We gaan dit signaal versturen en dit dan gebruiken in de eerder gemaakte games. Je hebt hiervoor 2 microbits nodig. Doe dit project óf met je buurman/buurvrouw (als die zover is) of vraag aan de docent een 2e microbit. Begin met de microbit die iets gaat versturen.

De code hiervoor is als volgt:

https://images.computational.nl/galleries/microbit/2017-11-30_12-26-36.png

Eerst stel je de groep in, zeg maar de frequentie. En vervolgens ga je het radiosignaal verzenden. Er wordt hierbij eerst een nieuwe variabele gemaakt.

Upload deze code naar microbit 1 en hang deze aan het batterijsetje.

Nu moeten we nog code maken die het signaal ontvang. Deze is als onderstaand.

https://images.computational.nl/galleries/microbit/2017-11-30_12-33-19.png

Probeer nu uit of het werkt.

6. Een array maken

Een array is een variabele waar je niet één waarde maar meerdere waardes in kunt zetten. Dat kunnen er met gemak 10.000 zijn maar wij zullen ons beperken tot 5. De waarde mag van alles zijn: een string, een int of een boolean.  Een array kun je je het beste als volgt voorstellen:

naam van de array waarde waarde waarde waarde

Dit kun je bijvoorbeeld toepassen op het aan- of uitzetten van ledjes. Dat ziet er zo uit:

leds 1 1 1

Waarbij een 1 -> ledje aan betekent en 0 -> ledje uit oftwel 0=onwaar en 1=waar. Zo ziet een boolean eruit. Als we deze array zouden toepassen op de eerste rij ledjes krijgen we het volgende beeld:

https://images.computational.nl/galleries/microbit/2017-12-06_10-02-49.png

Of zo, toegepast op vijf leds:

leds 0 1 1 0 1

https://images.computational.nl/galleries/microbit/2017-12-06_10-02-49-2.png

We zijn dus nu in staat om met een (boolean) array te onthouden welke ledjes er aan en uit moeten staan. Laten we eens kijken of we dit met code kunnen programmeren. Start hiervoor een nieuw project en noem dit zeeslag. Deze game gaan we namelijk proberen te bouwen. We moeten namelijk iets bouwen waarmee we boten in het water kunnen tekenen.

We maken twee variabelen genaamd rij en kolom en geven deze de waarde 0. Vervolgens voeren we knop A in en tekenen we een led op positie (0,0).Dit levert het volgende op:

https://images.computational.nl/galleries/microbit/2017-12-06_10-31-50.png

We zullen nu 5 ledjes aansturen met behulp van een array. Maak eerst een variabele leds en voeg daarna als volgt een array toe. Hierbij moet je zijn in de tab Geavanceerd en daarna in Arrays. Kies voor het blokje voeg waaarde toe aan einde.

https://images.computational.nl/galleries/microbit/2017-12-06_11-41-25.png

Dit blokje zetten we neer in bij knop A en we veranderen de variabele in leds.

https://images.computational.nl/galleries/microbit/2017-12-06_12-02-36.png

Er is geen mogelijkheid om in het lege blokje een waarde toe te voegen. We moeten hiervoor eigenlijk eerst een variabele instellen. Dit kan echter korter als we het met Javascript doen.Javascript wordt heel veel gebruikt om websites te maken. Wij gebruiken het echter om de Microbit te programmeren. Hiervoor switch je bovenin naar Javascript en vervolgens stel je de code leds.push(1) in.

https://images.computational.nl/galleries/microbit/2017-12-06_12-05-46.png

Nu wordt bij het indrukken van knop A de waarde 1 toegevoegd aan het einde van de array. Dat kun je je zo voorstellen.

Druk op knop A

leds 1

De lengte van de array = 1

Druk op knop A

leds 1 1

De lengte van de array = 2

Druk op knop A

leds 1 1 1

De lengte van de array = 3

Merk op dat het Javascript eigenlijk overzichtelijker is dan blokjes. We zullen vanaf nu in beide omgevingen programmeren waarbij het erg handig is dat we een heel blok code in één keer aan jouw kunnen geven. We geve nu met de code die de array inleest.

let teller = 0 //maak een variabele teller
while (teller < leds.length) { //zolang de teller kleiner is dan de lengte van de array
     led.plot(teller, rij) //voer het blok uit en zet de led aan op de positie van de teller
    teller=teller+1; //verhoog de teller met de waarde 1
}

Plaats deze code nu onder de coderegel leds.push(1). De teksten achter de twee slashes // is uitleg - commentaar - van de code. Dit  mag je er gewoon bij kopieren maar je mag het ook weglaten. Hieronder hebben we het weggelaten.

https://images.computational.nl/galleries/microbit/2017-12-06_14-06-00.png

Download nu eerst de code en upload de code naar de Microbit. Je moet nu in staat zijn om de eerste rij ledjes te plotten.

7. Leds op verschillene posities kunnen tekenen

In de vorigeles hebben we met behulp van de lengte van de array de ledjes geplot. We weten daarmee dat er iets in de array staat maar we weten eigenlijk niet wat er staat. Voor hetzelfde geld staat er een 0 waarmee het ledje juist niet aan zou moeten gaan. Daar gaan we u verandering in brengen. Plaats de volgende code in je project. Hiervoor moet je even naar Javascript om de waarde 0 te kunnen toevoegen.

https://images.computational.nl/galleries/microbit/2017-12-07_09-00-46.png

 Upload de code daarna en kijk wat er gebeurt. Wat gebeurt er als je twee of meer keren op de B-knop drukt en daarna op de A-knop? Als het goed is zie je bij het drukken op de A-knop ineens 2,3,4 of 5 ledjes aanstaan. Dat komt omdat de array er nu bijvoorbeeld zo uitziet:

 

leds 1 0 0 1

Deze array geeft ondanks de 2 nullen het volgende beeld.

https://images.computational.nl/galleries/microbit/2017-12-07_09-05-01.png

Maar wat we eigenlijk willen zien is dit:

https://images.computational.nl/galleries/microbit/2017-12-07_09-07-35.png

Daarvoor moeten we in de arrray leds kunnen detecteren of er een 0 of een 1 staat. Daarvoor is een als-dan blok bedacht. Daar heb je al eerder mee gewerkt. Het is echter makkelijker om dit in Javascript toe te voegen.

if (leds[teller] == 1) {
     led.plot(teller, rij)
}

Hier staat het volgende:

leds[teller]:Haal de waarde op, op de positie van de teller. Hieronder het blokje ervan:

https://images.computational.nl/galleries/microbit/2017-12-07_15-44-25.png

== 1: is de waarde die wordt opgehaald gelijk aan 1?

https://images.computational.nl/galleries/microbit/2017-12-07_16-09-00.png

Als het waar is dat op die positie de waarde gelijk is aan 1: zet de led aan op de positie van de teller (in de bovenste rij).

https://images.computational.nl/galleries/microbit/2017-12-07_16-11-34.png

Verhoog de teller met 1 en doe de lus opnieuw.

https://images.computational.nl/galleries/microbit/2017-12-07_16-16-36.png

Probeer nu de code uit op de Microbit door deze te uploaden.

8. Een kompas maken

De microbit heeft ook een kompasfunctie. Deze gaan we activeren. We gaan proberen dit rechtstreeks in Javascript te doen. Switch daarvoor naar Javascript.

https://images.computational.nl/galleries/microbit/2018-05-18_09-49-27.png

In plaats van te werken met blokken gaan we nu werken met Javascript. Voer de volgende code in:

//maak een variabele degrees en stel deze in op 0
let degrees = 0
//het script draait de hele tijd en bestaat uit..
basic.forever(() => {
    //geef de variabele degrees de richting van het kompas
    degrees = input.compassHeading()
    //als het aantal graden is kleiner dan 45
    //of (||) groter dan 315
    if (degrees < 45 || degrees > 315) {
        //laat de N zien
        basic.showString("N")
    }
})

Switch nu weer naar blokken en kijk wat het oplevert.

Je kunt aan het kompas draaien om te kijken of het werk. De N mag alleen te zien zijn als het aantal graden kleiner is dan 45 of groter dan 315. Je kunt dat ook zien in onderstaande kompasroos.

https://images.computational.nl/galleries/microbit/2018-05-23_08-52-07.png

Om het oosten actief te maken moeten we nog een if-statement toevoegen. Dit moet het gebied tussen 135 en 45 zijn. Omdat we het gebied tussen 315 en 45 al hebben opgevangen, hoeven we alleen aan te geven dat het aantal graden kleiner is dan 135. Dit gaat zo:

else if (degrees < 135) {
        basic.showString("E");
    }

Dit stukje code plaats je onder het if-statement, dus:

basic.forever(() => {
    let degrees = input.compassHeading();
    if (degrees < 45 || degrees > 315) {
        basic.showString("N");
    }
    else if (degrees < 135) {
        basic.showString("E");
    }
});

9. Een telegraaf maken

Met een telegraaf aan boord van een zeeschip wordt een instrument bedoeld, waarmee de gezagvoerder aan de machinekamer kan laten weten welke draairichting en toerental de schroef moet hebben. Het instrument heeft een identieke dochter in de machinekamer, waarmee het verbonden is. Als de telegraaf wordt bediend gaat in de machinekamer een bel en kan de machinist aan de wijzer van de telegraaf zien wat van hem verwacht wordt. We gaan met 2 microbits een telegraaf maken.

Begin met het aansluiten van 2 microbits zoals onderstaande afbeelding. Let goed op hoe de groene en de gele draad is aangesloten. ls de kleuren van de draden er niet zijn, neem je andere kleuren.

https://images.computational.nl/galleries/microbit/2018-05-23_15-24-57.png

Verbind nu één van de Microbits met de computer. Zet onderstaande code op allebei de microbits.

https://images.computational.nl/galleries/microbit/2018-12-10_12-07-02.png

Probeer nu de telegraaf werkend te maken.