Misschien heb je ondertussen al met een paar Arduino voorbeelden gewerkt. Hoe zit dat nou in elkaar, en waarom gebruiken we juist deze woorden en tekens? Op deze pagina kan je dat makkelijk ontdekken. Hoe het in de praktijk voor je werkt, dat ontdek je verder ook door alle andere labs te doen, zoals ze in onze lesagenda’s staan genoemd.

Klik je mee in jouw eigen Arduino IDE?

Arduino IDE instellen en troubleshooten

Voor de zekerheid noem ik dit hier nog een keer:

Installeren Arduino IDE, een eerste programma, en wat doe ik als het niet lukt

Een leeg begin: void setup() en void loop()

Voor onze labs starten we meestal met een voorbeeld programma waar al code in zit. Maar deze keer open je een nieuw, leeg programma.

  • In de Arduino IDE kies je linksboven voor File > New.

Er opent een nieuwe editor, met een nieuw, leeg programma. De woorden en tekens die je in elk programma nodig hebt, staan al voor je ingevuld.

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

}

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

}

 

De functies void setup() en void loop()

Wat je hier ziet, dat zijn de twee ‘functies’ die in elk Arduino programma precies één keer aanwezig moeten zijn. Dit zijn ‘void loop’ en ‘void setup’. De Arduino zal de ‘setup()’ één keer uitvoeren, en daarna zal hij de ‘loop()’ blijven herhalen.

Uitleg: Hoe noteer je een functie

Elke functie heeft:

  • Een naam, hier is dat ‘setup’ en ‘loop’. Je mag deze naam maar één keer gebruiken.
  • Een lijst met parameters of inputs, tussen booghaakjes (). Bij ‘setup’ en ‘loop’ is deze lijst altijd leeg.
  • De variabele type voor de output. Bij ‘setup’ en ‘loop’ is er geen output en daarom zetten we daar ‘void’.
  • De programma code voor de functie, tussen krulhaakjes {}. In ons voorbeeld is dat nog leeg.

Kan je al deze onderdelen herkennen in ons lege voorbeeld?

De editor van de Arduino IDE helpt je door de belangrijke woorden een kleur te geven. Verander ‘setup’ maar eens in ‘Setup’. De kleur verandert, je ziet daarmee dat je het hier echt met een kleine letter moet schrijven.

Daarnaast is het een goede gewoonte om met commentaar aan jezelf uit te leggen wat je wilt dat het programma gaat doen. Commentaar krijgt in de IDE een grijze kleur.

  • Aan een regel voeg je commentaar toe met  //
  • Een commentaar van meerdere regels begint met /* en eindigt met */

Verschillen zoeken met Blink voorbeeld

Voordat we zelf code kunnen schrijven, kijken we naar het Blink voorbeeld.

  • Open het Blink voorbeeld: File > Examples > 01.Basics > Blink
/*
  Blink

  Turns an LED on for one second, then off for one second, repeatedly.

  Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
  it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
  the correct LED pin independent of which board is used.
  If you want to know what pin the on-board LED is connected to on your Arduino
  model, check the Technical Specs of your board at:
  https://www.arduino.cc/en/Main/Products

  modified 8 May 2014
  by Scott Fitzgerald
  modified 2 Sep 2016
  by Arturo Guadalupi
  modified 8 Sep 2016
  by Colby Newman

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/Blink
*/

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

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

Een eerste verschil: commentaar tussen /* en */

We zien op de eerste regel meteen een commentaar tussen /* en */. Haal het wwerste streepje / even weg, varandert de kleur? Druk eens op de eerste ronde knop linksboven om de syntax te controleren, krijg je een error? Zet het streepje weer terug, en controleer opnieuw.

Meestal vraag ik iedereen om de eerste commentaar regels allemaal weg te halen, inclusief de /* en */.

Nog een verschil, pinMode() in de setup(): functie parameters

Aan de Arduino zitten een aantal pinnen. Die kunnen we aansturen, of uitlezen. In de setup() maken we voordat de rest van het programma een keuze hoe we de pinnen willen gebruiken. Laten we even naar deze regel kijken:

  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);

Deze pinMode opdracht is zelf ook weer een functie. Deze pinMode gebruik je met twee parameters, dit zijn de twee dingen die tussen de haakjes staan. De eerste parameter geeft aan welke poort, of welk pootje van de Arduino we instellen. De tweede parameter geeft aan hoe we hem instellen.

De regel voor deze opdracht geeft een commentaar, wat begint met //. Het mooie van de Arduino voorbeelden is dat ze jou al een beetje uitleggen wat de code doet.

In dit voorbeeld zien we als parameters:

  • LED_BUILTIN, dit geeft aan dat de de poort in willen stellen van de interne led
  • OUTPUT, dit geeft aan dat we ‘schrijven’ naar de led (om deze aan of uit te zetten)

Een constante: LED_BUILTIN

Afhankelijk van welk board je hebt gekozen zal het woord LED_BUILTIN sworden vervangen door het juiste poort nummer. Bij de Arduino Nano is dat, zoals bij de meeste Arduino’s poort 13.

Je kunt LED_BUILTIN niet veranderen, want het is een constante. Hoe hier de waarde 13 aan toe wordt gewezen wordt op een handige manier voor je geregeld.

Nog een constante: OUTPUT

Zodra het programma op de Arduino staat, werkt het met getallen, en niet met codewoorden. Om de functie pinMode te gebruiken wordt dit ongemerkt ook vertaald naar een getal – dit is voor ons geregeld, zoda we ons hier niet mee hoeven te bemoeien. Wij gebruiken gewoon de codewoorden INPUT en OUTPUT.

In de loop zie je digitalWrite() om een pootje aan te sturen

Je zag al dat de loop() functie continu wordt herhaald. De code van de loop bestaat uit vier regels. De eerste is:

digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) 

Met de functie digitalWrite stuur je een digitale waarde naar één van de poort of pin. De eerste parameter geeft aan welke poort, dat is weer de LED_BUILTIN. De tweede parameter geeft aan of de poort HIGH of LOW wordt.

Met HIGH en LOW schakel je een pootje

Een digitale poort kan je op HIGH (of 1) zetten of op LOW (of 0). Als je het nameet gaat het pennetje wat bij deze poort hoort dan naar 5 Volt of 0 Volt. Dit kan je gebruiken om bijvoorbeeld een led te plaatsen tussen de poort en bijvoorbeeld de GND of de 5V aansluiting. Gebruik dan wel altijd een weerstand.

Even wachten met delay()

Als je programma een led aan schakelt, dan wil je ook even wachten zodat de gebruiker kan zien dat de led aan is:

delay(1000); // wait for a second

De regel daarna zie je dat de led weer wordt uitgezet, en er is een delay zodat de gebruiker dit weer netjes kan zien.
Tip: Deze code is prima als jouw apparaat alleen met een ledje hoeft te knipperen. Let op, de delay zorgt ervoor dat je programma ondertussen stil staat. Als je tegelijk nog iets anders wilt bedienen, dan is het handig om een andere strategie te gebruiken. Een uitdagend lab daarover staat hier: https://junioriot.nl/blink-no-delay/

Verder met variabelen

Om nog meer te ontdekken, lees je meer over variabelen: https://junioriot.nl/arduino-variabelen-gebruiken/