Introductie
In dit hoofdstuk hopen we je een basis uitleg van programmeren in C++ te geven met de Arduino library. We zullen alle belangrijke punten en concepten kort aanstippen. Hopelijk is dit voldoende om mee aan de slag te gaan of heb je hiermee voldoende aanknopingspunten om verdere informatie op te zoeken.
Basis programma
Ieder Arduino script heeft altijd twee blokken: void setup() en de void loop().
1 2 3 4 5 6 7 8 9 |
|
void setup()
De void setup() staat aan het begin van het script. In de void setup() staat alles wat we nodig gaan hebben tijdens het runnen van het script. Je kan het zien als een soort van boodschappenlijst alleen vervangen we de meel en boter voor pins en variablen. Zoals je wellicht heb gezien staat er na de void setup() twee accolades {}. Tussen deze twee accolades wordt alles gezet wat we in de setup willen hebben.
De void setup() wordt maar 1 keer gelezen door de Arduino en dat is na het opstarten van het programma.
void loop()
In de void loop() vertel je de arduino wat het moet doen. Het is een beetje hetzelfde als het recept van een taart. We hebben tijdens de void setup() eerst boodchappen gedaan en nu gaan we met de void loop() het recept volgen. De instructies in de void loop() vorden oneindig lang herhaald, vandaar ook de naam!
Net zoals bij de void setup() begint en eindigd de void loop() met accolades. Het grote verschil, naast de herhaling, is dat er in de void loop() meerdere blokjes code kunen staan. Deze blokjes code noem je methods en die hebben ook allemaal weer hun eigen accolades. Zo verdeel de code in stukje met ieder een eigen functie.
Puntkomma
Iets waar arduino sketches heel erg van houden zijn puntkommas. Achter iedere regel moet een puntkomma! Met een ; sluit je een regel af en zeg je als het ware tegen de arduino: 'goed gedaan jonge, nu aan het werk met de volgende regel'. Het vergeten van een ; is ook een van de meest voorkomende redenen waarom een script het niet doet.
Comments
Naast het feit dat je in een script tegen de Arduino vertelt wat het moet doen is het soms ook even heel fijn om tegen jezelf te praten of om even uit te leggen wat je aan het doen bent. Voor deze gevallen kan je een comment plaatsen.
Wanneer je een comment plaatst zeg je eigenlijk tegen de Arduino:'Wat ik hier opschrijf gaat jou helemaal niets aan en daar hoef jij dan ook niets mee te doen'.
1 |
|
1 2 3 4 5 |
|
Variabelen
Goed, het is tijd om een jeugdtraumaatje op te halen. Ik neme je mee terug naar de rekenles op de basisschool. Je zit voor in de klas, let goed op en opeens vraagt de juf of meester aan jou: 'Als Pietje 9 appels heeft en hij geeft 4 appels weg, hoeveel appels heeft Pietje dan nog?' Met de volste overtuiging zeg jij: '4 juf'. Wat heb je lekker opgelet en je kan niet wachten op het complimentje dat je van de juf gaat krijgen. Maar tot je grote schrik krijg je helemaal geen comlimentje maar de juf zegt: '4 wat? 4 koeien? 4 broden? 4 euro?' Oh ja! Dat wa ook zo: '4 appels juf!'
Net zoals de 4 appels moet ook alles in een script een naam hebben. Dit noemen we variablem. Variablen vertegenvoordigen een getal of een tekst met een logische naam. Voorbeelden zijn bijvoorbeeld ledPin of onTime. Variablen kun je waardes geven.
Even weer terug naar het jeugdtrauma. Appels is in dat geval het variable. Aan het begin (void setup()) had Pietje 9 appels en tijdens de eerste run van de void loop() heeft pietje er 4 weg gegeven. Hier kan je goed zien dat de waardes van variablen door het hele script heen kunnen veranderen en dus niet perse een vast waarde hebben!
Declaratie en gebruik
1 |
|
1 2 |
|
Datatypes
Naam | Keyword | Omschrijving | Minimum | Maximum |
---|---|---|---|---|
Integer | int |
Gehele getallen | -2147483648 | 2147483647 |
Character | char |
Letters | 0 | 255 |
Boolean | bool |
Waar of niet waar | 0 (False ) |
1 (True ) |
Floating point | float |
Kommagetallen | ||
Double floating point | double |
Kommagetallen met dubbele precisie |
Casten
Operators
Operators zijn symbolen die aangeven dat er een bepaalde wiskundige of logische manipulatie gedaan moet worden.
Wiskundig
Operator | Omschrijving |
---|---|
+ | getallen bij elkaar optellen |
- | getallen van elkaar aftrekken |
* | getallen met elkaar vermenigvuldigen |
/ | Getallen door elkaar delen |
% | Rest van een deling |
Toewijzingen
Operator | Omschrijving |
---|---|
+ = | Wijst het resultaat van een toevoeging toe |
- = | Wijst het resultaat va een aftrekking toe |
* = | Wijst het resultaat van een vermenigvuldiging toe |
% | Wijst de rest van een divisie toe |
& | Wijst het resultaat van een logische AND toe* |
| | Wijst het resultaat van een logische OR toe |
! | Geeft aan dat iets, niet, is |
AND operator
Een AND operator is een boolean operator. Een boolean heeft maar twee mogelijke resultaten: Waar(1) op niet waar(0). Een boolean heeft verschillende inputs. Bij een simpele boolean zijn er twee inputs.
Een AND Operator is waar (1) wanneer alle inputs ook waar zijn. Even een voorbeeldje: Boolean: Ruben en Hilke hebben allebei blond haar Input 1: Ruben heeft bruin haar Input 2: Hilke heeft blond haar Wanneer we naar de input kijken kunnen we zien dat maar 1 van de twee inputs klopt. Ruben heeft helemaal geen blond haar. Dit houdt in dat de AND operator een onwaar of een 0 terug geeft.
We zouden de input ook anders op kunnen schrjiven: Input 1: Ruben !blond (Zie je wat hier gebeurd, er wordt nu aangegeven dat Ruben geen blond haar heeft. Wat hij wel heeft is onduidelijk maar dat doet er nu niet toe!) Input 2: Hilke heeft blond haar
OR operator
Een OR operator lijkt hele erg op de AND operator. Er is alleen een groot verschil: Om ervoor te zorgen dat de boolean waar (1) terug geeft hoeft er maar 1 van de inputs waar te zijn.
Als we dan weer gaan kijken naar het eerdere voorbeeld: Boolean: Ruben en Hilke hebben allebei blond haar Input 1: Ruben heeft bruin haar Input 2: Hilke heeft blond haar Daar waar het resultaat van de AND operator niet waar (0) was is deze bij de OR operator wel waar (1). 1 van de inputs klopt, Hilke heeft namelijk blond haar.
Vergelijkingen
Operator | Omschrijving |
---|---|
< | Waarde x is kleiner dan waarde y |
<= | Waarde x is kleiner of gelijk aan waarde y |
> | Waarde x is groter dan waarde x |
>= | Waarde x is groter of gelijk aan waarde y |
== | Waarde x is waarde y |
Scope
Wanneer je een script schrijft heb je zolas eerder vermeld variablen nodig (ja, ik tune toch nog een keertje in op het jeugdtrauma). Nu heb je keuze tussen twee smaakjes van dat trauma eehhhh keuze tussen twee soorten variablen: global variables en local variables
Global variables
Global variables zijn variables die gedeclared zijn buiten functies en die global variables kunnen dus gebruikt worden door iedere funcite. Ze zijn zeg maar niet in een hokje gestopt en iedere functie kan aanspraak maken op een global variable. Een global variable is een soort van Albert Heijn, iedereen heeft toegang tot een Albert Heijn en wij mogen naar harte lust appels, Grolsch en andere vernaperingen halen.
Local variables
Local variables zijn net wat anders. Een local variable wordt gedeclared in een specifieke functie en deze variable kan dan ook alleen maar worden gebruikt binnen die specifieke functie. Het is dus geen Albert Heijn maar de koelkast op Shine. Niet iedereen heeft toegang tot die koelkast maar iedereen op huize Shine mag wel alles in de koelkast gebruiken.
1 2 3 4 5 6 7 8 9 10 |
|
Arrays
Een array is een lijst van waarden. Alle waarden in de array moeten hetzelfde datatype hebben en binnen Arduino is het verplicht om vooraf aan te geven hoe lang de array is, oftewel hoeveel waarden er in passen. Vervolgens kun je de verschillende waarden in de lijst opvragen en aanpassen.
Een array aanmaken
Je maakt een array aan door aan te geven welk datatype hij heeft en hoe lang de array moet zijn. Bijvoorbeeld een lijst van 6 integers.
1 |
|
Het is ook mogelijk om meteen waarden in de lijst te stoppen, bijvoorbeeld een lijst met alle weekdagen. Je hoeft dan niet persé de lengte nog op te geven, dat snap de compiler dan wel.
1 |
|
Waarden uit een array halen
Je kunt een waarde uit een bepaalde plek in de array halen aan de hand van de index van de waarde. Als we bijvoorbeeld de 5e waarde uit de array willen halen doen we dat op de volgende manier.
1 |
|
Daarbij moet je er op letten dat het eerste element in de array op index positie 0 staat. Programmeurs beginnen met tellen bij 0, dus het eerste element heeft index 0 en in een array met 6 waarden is de index van het laatste element dus 5.
Een ander aandachtspunt is dat je niet een waarde uit de array kunt opvragen die niet bestaat, bijvoorbeeld bij een array met lengte 6 geeft een poging om de waarde op index 6 op te halen een error, immers deze bestaat niet.
Waarden in een array stoppen
Je voegt een waarde aan een array toe op de volgende manier.
1 |
|
Lengte van de array bepalen
Mocht je willen weten hoe lang een array is dan kun je de sizeof(array)
functie gebruiken.
Strings
Strings kun je gebruiken om woorden of zinnen in op te slaan. Eigenlijk zijn Stings een beetje bijzonder, in essentie is een woord of zin namelijk een lijst van letters. Een String bestaat dus eigenlijk uit een array van char
s in volgorde. En dat maakt dat er wat speciale dingen gelden voor het werken met Strings. Meer informatie daarover vind je in de reference.
Een string aanmaken
Je maakt een string aan op de volgende manier.
1 |
|
Handig om te weten is dat als je aan de string een enter toe wil voegen je daarvoor \n
kunt gebruiken en een tab is \t
.
Besluiten maken
We zijn nu aangekomen bij een van de belangrijkste pricipes van programmeren, if-statements. Hiermee kun je bepalen of bepaalde stukken wel of niet uitgevoerd moeten worden. Een if statement heeft een conditie, en als die conditie waar is dan wordt de code uitgevoerd. De conditie kan van alles zijn zoals een boolean variabele, een vergelijking of een combinatie daarvan met and of or statements er tussen.
1 2 3 |
|
Je kunt ook een alternatief geven voor als de conditie niet waar is door middel van een else
. Met else if
kun je code toevoegen die uitgevoerd wordt als de if en alle voorgaande else if condities niet waar zijn en de else if conditie wel.
1 2 3 4 5 6 7 |
|
Loops
Met een loop kun je code herhaald uitvoeren. Er zijn twee verschillende soorten loops, for loops en while loops.
For loop
De code in een for loop wordt zo vaak uitgevoerd als dat je vooraf insteld. In het voorbeeld hieronder is dat 10 keer. In de for loop kun je ook opvragen hoe vaak de loop al uitgevoerd is. In het voorbeeld hieronder kun je dat doen door de waarde van i
op te vragen.
1 2 3 |
|
While loop
De while loop wordt net zo lang uitgevoerd totdat de conditie niet meer waar is. Het risico hierbij is dat als de waarde nooit false wordt de code dus tot in de eeuwigheid uitgevoerd wordt. Daar moet je dus rekening mee houden.
1 2 3 |
|
Seriële communicatie
Seriële communicatie kan gebruikt worden om berichten van de microcontroller naar de computer te sturen. Deze kun je dan in de seriële monitor uitlezen. Allereerst moet je de bitrate instellen, in het voorbeeld wordt deze ingesteld op 9600. Belangrijk is dat je seriële monitor en je microcontroller dezelfde bitrate gebruiken, anders zijn de berichten onleesbaar. Met de Serial.begin(bautrate);
functie kun je in de setup()
een seriële verbinding opzetten. Vervolgens kun je met de Serial.println(message);
functie een bericht naar de monitor sturen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Functies
Functies kun je gebruiken om je code meer structuur te geven of om stukken code her te gebruiken. Je moet een functie eerst definiëren voordat je hem kunt gebruiken.
1 2 3 |
|
Een void
functie geeft geen waarde terug maar je kunt een funtie ook een datatype geven en een waarde terug geven door middel van return
. Verder is het mogelijk om parameters aan de functie toe te voegen aan de functie zodat je waarden aan de funtie mee kunt geven. In het voorbeeld hieronder wordt een optel functie getoond die de twee parameters bij elkaar opteld en terug geeft. Na het uitvoeren van deze code is de waarde van de variabele result
dus 3.
1 2 3 4 5 |
|
Conclusie
Als je tot in detail informatie wilt over hoe programmeren met Arduino werkt kun je altijd een blik werpen in de reference. Maar er zijn ook veel handleidingen online te vinden. We hopen dat je dit een overzicht geeft waarmee je aan de slag kunt. Kijk ook eens op de meer informatie pagina over handige websites over hoe je kunt programmeren met Arduino en de ESP.