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.
- Arduino IDE en de extra driver installeren, voor windows en Linux: https://junioriot.nl/arduino-installeren/
- Daarna zorg je dat alles goed staat, en stuur je het Blink voorbeeld naar de Arduino. Op deze pagina vind je ook de probleemoplosser: https://junioriot.nl/voorbeeld-uploaden/
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 eerste streepje / even weg, varanderd 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, zodra 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/