ArduinoDe sketch

Een programma heet in Arduino taal een Sketch. Hier kun je zelf commando's ingeven.

Om de taal te leren adviseer ik sterk om het prachtige boek The C Programming Language geschreven door Brian The C Programming Language (book), a book written by Brian Kernighan and Dennis Ritchie te lezen. In begrijpelijk Engels beschrijven die hoe je moet programmeren in de taal C. Dit boek is voor het laatst uitgebracht in 1988 (2nd edition), deze is nogsteeds geldig.

De C taal gebruik je ook om de Arduino te programmeren.




ArduinoDe sketch

We hebben al gezien waaraan een sketch minimaal moet voldoen.

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}

De basis van een sketch bestaat uit 2 delen, de setup en de loop. Iedere sketch heeft verplicht deze 2 delen nodig. Later zullen we zien dat we ook andere onderdelen nodig hebben, maar voor nu is dit voldoende.

  • Setup

De code die in de setup komt zal een (1) keer worden doorlopen bij de start van de sketch. Daarna niet meer. Dit doorlopen zal automatisch gebeuren. De setup gebruiken we om instellingen gereed te zetten.

  • Loop

De code in de loop zal continue worden doorlopen. Als de code in de loop is afgelopen dan start deze loop direct overnieuw. Dit gaat maar door-en-door-en-door. Zeg maar een herhaling (loop in het Engels). Misschien dat daar de naam ook vandaan zal komen?

Als je je sketch gaat uitbreiden dan zullen er andere functies bijkomen. De bovengenoemde 2 functies heb je altijd nodig.



ArduinoCommentaar

Tussen de code staat commentaar. Dit zijn opmerkingen die de programmeur heeft toegevoegd om alles leesbaarder te maken. Commentaar kan op 2 manieren worden opgenomen.

  • Gebied /* ... */

Een stuk tekst staat altijd tussen /* en */ tekens. Alles tussen deze tags is commentaar. Ook als hierin code statements staan zullen die niet worden uitgevoerd.

  • Regel // ...

Een andere manier van commentaar is //, alles wat er verder rechts op de regel staat is commentaar.

Het is belangrijk om veel commentaar op te nemen, zodat je later nog steeds begrijpt wat iedere regel doet. Goed programmeren is goed commentaar toevoegen!



ArduinoBLINK

We gaan een eenvoudig programma gebruiken. Dat een LED zal laten knipperen.

  • Klik op "Open"
  • Kies "01.Basics"
  • En dan voor "Blink"

Er zal een nieuw venster openen maar hierin de sketch van het Blink programma. Het eerste deel is een groot stuk commentaar, tussen de /* en */ tekens, dat heb ik hieonder weggelaten. Scroll in de IDE naar beneden en daar is de code. Ik heb de code voor de leesbaarheid iets aangepast.

Als je deze code wilt proberen, kopier dan de code in onderstaand blok en zet deze in je eigen editor zetten.

// Constants
const int ledRed = 2;

// Setup function runs once when powerup the board and on reset 
void setup() {
  // Initialize LED as an output.
  pinMode(ledRed, OUTPUT);
}

// The loop function runs over and over again forever
void loop() {
  digitalWrite(ledRed, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                  // wait for a second
  digitalWrite(ledRed, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                  // wait for a second
}

Hier herkennen we de indeling van hierboven in, met nog een extra stukje waarin we constanten definieren, dit voor de leesbaarheid.

We lopen door het programma heen. Onder constants geven we aan de variabele met de naam ledRed de waarde 2. De term const wil zeggen dat het een constate is. Het is niet toegestaan deze waarde aan te passen. Het woordje int wil zeggen dat het een integer is. Een integer is een getal. Hier maken we een constate variabele van het type integer met de waarde 2 en noemen deze ledRed. Hier heeft dat nog geen verdere functie, dit is voor gebruik later in het programma.

Dan komt de setup functie, voorafgegaan door een commentaar regel. Het is goed gebruik om alle functies te voorzien van commentaar, zodat iemand anders, of jijzelf na enkele maanden, nog eenvoudig kan zien wat de functie doet.

In de setup gaan we de waarde van de constant, de variabele ledRed, meteen gebruiken. Met het statement

pinMode(ledRed, OUTPUT)

geven we aan dat pin ledRed (die hebben we op nummer 2 gezet) een output pin is. Dat wil zeggen dat we hier waarden uit gaan sturen, uitgaand. We zouden dezelfde pin ook kunnen gebruiken voor het lezen van een waarde, input, bijvoorbeeld om de waarde van een knop, lichtsensor etc in te lezen. Hier sturen we een LED aan, we gaan aangeven of de LED aan of uit staat, dus is het een als output gedefinieerde pin.

Dan komen we bij de loop aan. Het eerste commando is een digitalWrite. We schrijven naar de pin ledRed (nummer 2 dus) een HIGH (hoge) waarde. Met andere woorden, we zetten stroom op deze pin en als de aansluiting goed is, dan zal de LED gaan branden.

Delay is Engels voor vertraging. Hier vertragen we 1000 milliseconden. Dat is precies 1 seconde. Het programma zal een seconde lang hier gaan staan wachten. Er gebeurd niets. Maar de stroom die we hierboven met de digitalWrite op de pin ledRed hebben gezet blijft wel gewoon lopen. De LED brand dus nog steeds.

We komen nu weer bij een digitalWrite. We schrijven naar de pin ledRed (nummer 2 nog steeds) een LOW (lage) waarde. Hiermee zetten we de stroom op deze pin uit en zal de LED uitgaan. Omdat we een delay van 1 seconde hadden was de LED dus 1 seconde aan.

Dan komt er weer een Delay van 1000 milliseconden. Waarin we wachten, terwijl de LED dus niet brand.

We zijn nu op het einde van de loop gekomen. De sketch zal 'loopen' en weer bovenaan beginnen bij de digitalWrite op HIGH, waarmee dus de LED weer zal aangaan.

Samengevat de acties die gebeuren:

  • Zet LED aan
  • Wacht 1000 millisec
  • Zet LED uit
  • Wacht 1000 millisec
  • Zet LED aan
  • Wacht 1000 millisec
  • Zet LED uit
  • Wacht 1000 millisec
  • ...etc

Een prachtig knipperlicht dus.



ArduinoVerifieren en Compileren

De code die je schrijft kan (of zal) soms fouten bevatten. Het is niet mogelijk om code die fouten bevat te gebruiken. In de IDE kun je de code verifieren. Al je geschreven code zal worden nagelopen en als er fouten in zitten dan zal dat worden aangegeven. Je moet eerst de fouten herstellen voordat je verder kunt.

Als de code juist is dan kun je deze compileren en uploaden. Dit gaat in de IDE met een knop. Het compileren is het omzetten van je geschreven code naar een formaat dat de Arduino microcontroller begrijpt, zodat dat is gedaan zal deze machinecode worden overgepompt naar de Arduino. Sluit hiervoor de Arduino aan op je computer. De LEDs op de Arduino zullen even knipperen tijdens het laden en daarna gaat de Arduino meteen aan de slag.



ArduinoSyntax en semantische fouten

Er bestaan 2 soorten fouten. Een syntax fout is bijvoorbeeld een verkeerd geschreven woord. De compiler kan hier niets mee en zal een fout rapporteren. Code met syntax fouten kan niet worden gebruikt.

  dely(1000);                  // wait for a second

Hierboven een syntax fout, omdat het commando delay verkeerd is geschreven.

De andere fout is vaak lastiger, dat is een semantische fout. Bijvoorbeeld als je wilt dat iets 5 keer gebeurd, maar het gebeurd maar 4 keer, dan is er iets mis. De compiler weet niet dat er iets fout is. Het programma loopt immers gewoon goed. Maar de gebruiker ziet en weet dat er iets verkeerd is. Deze fouten kun je enkel vinden door goed te testen.

  delay(1);                  // wait for a second

Hierboven een semantische fout. Het commentaar geeft aan dat er een wacht periode van 1 seconde zal gebeuren. In werkelijkheid zal er slechts 1/1000 seconde worden gewacht.


2018 Punthooft