Les 5, Blink

In de vorige twee lesbrieven heb je vooral geleerd hoe je je robot kon programmeren met de blokjestaal van mBlock. mBlock vertaalt dat dan naar Arduino-code. Want uiteindelijk is dat de programmeertaal waarmee je een Arduino programmeert. Vanaf deze les ga je leren hoe je direct een programma in de Arduino-taal kan schrijven.

1
Zorg ervoor dat de Simple Walker verbonden is met de computer via de USB.
charging
2
Start vervolgens de Arduino omgeving en maak een nieuw bestand.
01-nieuw_bestand
3
Als het goed is ziet de nieuwe sketch er zo uit:
02-nieuw_bestand2Een Arduino-programma, ook wel Arduino-sketch genoemd, bestaat altijd uit twee gedeelten: een setup()-gedeelte en een loop()-gedeelte). Dit ziet er als volgt uit:

Laten we eerst beginnen met de regels hierboven die beginnen met //. Dit zijn namelijk commentaarregels. Door voor een zin twee slashes te plaatsen kun je commentaar en uitleg schrijven voor je programma. Erg handig als je code wilt schrijven waar je nog wat opmerkingen over wilt plaatsen zodat het begrijpelijk is voor een ander (en voor jezelf).

Als je nu iets in het setup()-gedeelte wilt gaan zetten, dan zet je dat tussen de bijbehorende accolades ({ en }).

4
Maar wat zijn nu typisch dingen die je in de setup()-functie wilt gaan zetten?

Zoals hierboven ook wordt aangegeven wordt de code in de setup()-functie slechts eenmaal en aan het begin uitgevoerd. Het is handig om hier dus aan te geven op welke pinnetjes je lampjes, motoren en eventuele sensoren zijn aangesloten. Dit doe je met de functie pinMode();. Als we bijvoorbeeld het lampje in ons programma willen gebruiken, dan zetten we de volgende code in de setup()-functie:

Pas de setup()-functie in je Arduino-programma zoals hierboven aan.

5
Vervolgens moeten we nog iets doen om het lampje te laten knipperen. Dit doen we met de loop()-functie. De loop()-functie is een stuk code dat continu herhaald wordt totdat je de Simple Walker uitzet.

De opdracht digitalWrite(13, HIGH); zet het lampje aan. De opdracht delay(1000); zorgt ervoor dat het programma een seconde pauzeert. Vervolgens zetten we met digitalWrite(13, LOW); het lampje weer uit en wordt er met delay(1000); nogmaals de opdracht gegeven om een seconde te wachten.

Daarna is de loop()-functie klaar en begint hij weer opnieuw. Het lampje wordt weer een seconde aangezet en weer een seconde uit, etc..

Pas de loop()-functie in je Arduino-programma zoals hierboven aan.

6
Als het goed is ziet je Arduino-sketch er zo uit:
Les05_01

Klik nu op Bestand > Opslaan als… en sla het bestand op als Lesbrief5Opdracht1.
les3_01

7
Ga naar Hulpmiddelen > Board en zorg ervoor dat het type board ingesteld staat als Leonardo.

les3_02

8
Ga naar Hulpmiddelen > Poort en zorg ervoor dat de juiste COM-poort is ingesteld. In het geval van dit voorbeeld is dat COM10, maar dat iets heel anders zijn op jouw systeem.

les3_03

N.B. Meestal is het duidelijk welke poort moet worden ingesteld omdat er Arduino Leonardo achter staat (en er bovendien vaak maar één mogelijkheid is), maar dit is niet altijd het geval. Mocht het niet meteen duidelijk zien, is het een kwestie van ze allemaal uitproberen tot je de juiste hebt.

9
Klik op de upload-knop (het pijltje naar rechts).

les3_04

Het duurt meestal even voordat de sketch is geüpload. Als alles goed is gegaan zie je de mededeling “Uploaden voltooid” onderaan in het Arduino-venster staan:

Les05_02

Bovendien, en daar ging het nu allemaal om, knippert het lampje!

Help! Het werkt niet!

Als het niet werkt check dan een aantal dingen:

  • Is de Simple Walker wel goed aangesloten?
  • Is de juiste board geselecteerd in stap 7?
  • Heb je de juiste poort geselecteerd in stap 8?
  • Heb je de code letterlijk overgenomen? De Arduino-taal is heel gevoelig voor kleine foutjes. Ben je nergens een ‘;’ (puntkomma), een ‘{‘ (accolade) of ‘(‘ (haakje) vergeten? Heb je nergens een hoofdletter voor kleine letter vervangen of andersom?

Opmerkingen

Een paar belangrijke opmerkingen:

  • Zoals je ziet wordt elke opdracht afgesloten met een ; (puntkomma). Dat is verplicht.
  • De accolade’s ({ en }) zijn belangrijk. Deze geven aan welke code allemaal bij elkaar hoort. Alles wat tussen de accolade’s na de setup()-functie staat hoort dus bij de setup()-functie. Alles wat tussen de accolade’s na de loop()-functie staat hoort dus bij de loop()-functie.
  • De functie digitalWrite() is een belangrijke functie die je nog veel tegen zal komen. Je zag al dat je met digitalWrite(13, HIGH); de LED aan kon zetten. Met het getal 13 geef je aan dat je pin 13 wilt bedienen. De Simple Walker bevat een heleboel pinnen, maar op pin 13 is vast een LED-lampje aangesloten. Met (HIGH) geef je aan dat je stroom op de pin wilt zetten (dus gaat het lampje aan) met (LOW) zet je de pin uit.
  • De programmeertaal van Arduino is case-sensitive (hoofdlettergevoelig). Dit betekent dat het uitmaakt of je bijvoorbeeld digitalwrite of digitalWrite intypt. Het eerste zal hij niet herkennen en daar krijg je dus ook een foutmelding over.

Opdrachten

Opdracht 2 – Sneller knipperen

Wijzig de sketch zodat het lampje twee keer zo snel gaat knipperen. Sla het op als Lesbrief3Opdracht2.

Opdracht 3 – Onregelmatig knipperen

Wijzig de sketch zodat het lampje 0.1 seconden aan gaat en 1 seconde uit. Sla het op als Lesbrief3Opdracht3.

Opdracht 4 – Aan laten staan

Wijzig de sketch zodat het lampje aan gaat als het programma wordt opgestart en aan blijft staan. Sla het op als Lesbrief3Opdracht4.

Opdracht 5 – Help!

Wijzig de sketch zodat het lampje “SOS” in Morse Code knippert: kort-kort-kort-lang-lang-lang-kort-kort-kort.
Sla het op als Lesbrief3Opdracht5.