Bij een Arduino programma zijn variabelen belangrijk om jouw machine precies te laten doen wat jij wilt. Met een voorbeeld ontdek je hoe het werkt.

In een voorgaand leeslab kan je zien hoe een eerste Arduino programma in elkaar zit: https://junioriot.nl/arduino-programma-leren/

Hoe de variabelen in het Fade voorbeeld worden gebruikt

De voorbeelden in de Arduino IDE helpen ons om in stappen te ontdekken hoe je zelf kunt programmeren. Open in de Arduino IDE het Fade voorbeeld: File > Examples > 01.Basics > Fade

Kijk even naar de toelichting of je daaraan al kunt zien wat het programma moet doen.

/*
  Fade

  This example shows how to fade an LED on pin 9 using the analogWrite()
  function.

  The analogWrite() function uses PWM, so if you want to change the pin you're
  using, be sure to use another PWM capable pin. On most Arduino, the PWM pins
  are identified with a "~" sign, like ~3, ~5, ~6, ~9, ~10 and ~11.

  This example code is in the public domain.

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

int led = 9; // the PWM pin the LED is attached to
int brightness = 0; // how bright the LED is
int fadeAmount = 5; // how many points to fade the LED by

// the setup routine runs once when you press reset:
void setup() {
  // declare pin 9 to be an output:
  pinMode(led, OUTPUT);
}

// the loop routine runs over and over again forever:
void loop() {
  // set the brightness of pin 9:
  analogWrite(led, brightness);

  // change the brightness for next time through the loop:
  brightness = brightness + fadeAmount;

  // reverse the direction of the fading at the ends of the fade:
  if (brightness <= 0 || brightness >= 255) {
    fadeAmount = -fadeAmount;
  }
  // wait for 30 milliseconds to see the dimming effect
  delay(30);
}

De grote comment staat tussen de /* op regel 1, en de */ verderop. Niet alles wat hier staat begrijp ik meteen. Maar ik krijg het idee dat er op pin 9 een led moet worden aangesloten. Die gaat dan tussen deze pin en de GND. Ook krijg ik het idee dat dit niet met alle pinnen kan. Met het Fade voorbeeld laat je de led rustig wat feller branden, en daarna zakt de lichtsterkte rustig weer af.

Variabelen aanmaken: led, brightness, fadeAmount

Ergens aan het begin van het programma wordt ingesteld welke variabelen je gaat gebruiken. WQe noemen dit: de variabelen worden hier aangemaakt.

int led = 9; // the PWM pin the LED is attached to
int brightness = 0; // how bright the LED is
int fadeAmount = 5; // how many points to fade the LED by

Variabele type

Op de regel zet je als eerste het variabele type. Hier is dat voor alledrie een ‘int’, en dat betekent dat het gehele getallen zijn.

Goede programmeurs kunnen met verstandige keuzes ook geheugenruimte besparen. Voor onze programma’s is dat nog niet belangrijk.

Je kunt hier heel veel types gebruiken. Deze zijn voor jou voorbereid in de Arduino IDE. Ook alle variabele types uit de C-programmeertaal kan je gebruiken. En, via de libraries die we in de voorbeelden tegenkomen worden nieuwe types of objecten toegevoegd, codewoorden die je op de plek van deze ‘int’ kunt gebruiken. Via de voorbeelden maak je kennis met de verschillende mogelijkheden.

Variabele naam

Na het gekleurde codewoord ‘int’ zie je de naam van de variabele.

Die naam mag je als programmeur zelf verzinnen. Een goed gekozen naam helpt voor de programmeur om te onthouden wat onze bedoeling is, hoe we dit willen gebruiken. Met een handige naam help je jezelf om programmeerfouten te voorkomen.

Wanneer je programmeert in de Arduino IDE, en elke andere C-programmeertaal, let er dan op dat je de naam iedere keer hetzelfde intiept. Je mag hoofdletters gebruiken om te helpen met de leesbaarheid, en dan tiep je dat altijd op dezelfde manier. Want ‘fadeamount’ en ‘fadeAmount’ zijn twee verschillende namen.

Waarde toekennen

Daarna mag je meteen een waarde toekennen, maar dat hoeft nog niet. In dit voorbeeld wordt aan de variabele ‘led’ de waarde 9 toegekend. In de uitleg daarnaast zie je dat dit de pin is waar de led aan zit, en dat je daarvoor een PWM pin kiest. Pin 9 is daarvoor bruikbaar.

De variabele ‘brightness’ krijgt hier de waarde 0. Ik denk nu dat dit de lichtsterkte voor de led is, en zoiets staat ook in de toelichting ernaast. Ik verwacht dan dat het programma dit getal zal gaan veranderen.

Ik verwacht dat de variabele ‘fadeAmount’ zal worden gebruikt om aan te geven hoeveel de lichtsterkte gaat veranderen.

De scope van een variabele

De ‘scope’ van een variabele is het gebied waar deze kan worden gebruikt. De verschillende gebieden zijn de code blokken die met de krulhaakjes {} staan aangegeven. Als code blokken zie ik in dit voorbeeld het blok tussen krulhaakjes bij de setup(), en die bij de loop(). Het hele gebied waar alles in zit is ook zo’n scope gebied.

Onze drie variabelen led, brightness, fadeAmount zijn in dit buitenste gebied aangemaakt. Binnen ditzelfde gebied staan ook de setup() en de loop(). Hierdoor mag je onze variabelen ook gebruiken binnen de setup() en de loop().

Als je een variabele zou aanmaken binnen de setup(), dan kan je deze niet gebruiken binnen bijvoorbeeld de loop(). Ook op andere manieren kan je nieuwe {} codegebieden maken, en daarvoor geldt hetzelfde. Een variabele kan niet worden gebruikt buiten de scope waar deze is aangemaakt.

Rekenen met variabelen

Je weet ondertussen dat het code blok van de loop telkens wordt herhaald. In het codeblok van de loop zie je dat we iets doen met de variabele ‘brightness’:

// change the brightness for next time through the loop:
brightness = brightness + fadeAmount;

In het ‘loop’ gedeelte zie je dat bij ‘brightness’ steeds iets wordt opgeteld: ‘fadeAmount’.

In het programma zie ik nog iets geks. Mijn eerste idee is dat met deze rekensom de helderheid van de led steeds feller wordt gemaakt. Ik zie alleen een optelling, maar wanneer wordt de led dan minder fel?

  // reverse the direction of the fading at the ends of the fade:&lt;/code&gt;
  if (brightness &lt;= 0 || brightness &gt;= 255) {
    fadeAmount = -fadeAmount;
  }

Als ik verder kijk, dan zie ik hoe wordt gewisseld van feller worden, naar minder fel worden. De waarde ‘fadeAmount’ wordt veranderd. In het begin heeft dit de waarde 5. Als de led fel genoeg is, dan wordt de waarde vermenigvuldigd met -1, dus dan wordt het -5. Als de led dan genoeg is gedimd, dan wordt weer met -1 vermenigvuldigd, en dan wordt de waarde weer 5.

Voorwaardelijke uitvoering met ‘if’

Variabelen gebruik je vaak om te keizen wanneer een gedeelte van je programma wel, of niet moet worden uitgevoerd. Met een ‘if’ maak je een code blok wat alleen wordt uitgevoerd als aan een voorwaarde wordt gedaan.

‘Als ze in de supermarkt open is, en ze hebben brood, koop er dan drie.’ Hierbij is de voorwaarde een combinatie: ‘supermarkt is open’ EN ‘supermarkt heeft brood’. Het code blok is ‘koop drie supermarkten’.

In ons voorbeeld programma:

  // reverse the direction of the fading at the ends of the fade:</code>
  if (brightness <= 0 || brightness >= 255) {
    fadeAmount = -fadeAmount;
  }

De voorwaarde van de if-statement staat tussen ronde haakjes (). Het code block bij de if-opdracht staat tussen krulhaken {}.

Voorwaarde: true of false, boolean waardes

De voorwaarde is waar of niet waar. Hiervoor hebben we een notatie: true of false, maar 1 en 0 werken net zo goed. Het variabele type wat hierbij hoort is ‘boolean’.

Meerdere voorwaarden combineren

Om verschillende ‘statements’ met een boolean true en false waarde te combineren, reken je met boolean vergelijkingen. De compacte notatie is soms lastig om te lezen.

Als twee statements beide waar moeten zijn, dan gebruik je AND. De boolean AND opdracht noteren we als ‘&&’.

‘Als ze in de supermarkt open is, en ze hebben brood, koop er dan drie.’ De voorwaarde schrijf je dan als ‘supermarkt is open’ && ‘supermarkt heeft brood’.

Als één van de twee statements waar moet zijn, dan gebruik je OR. Deze opdracht noteer je als ‘||’.

‘brightness <= 0 || brightness >= 255’. Hier staat dat het code blok wordt uitgevoerd als ‘brightness’ kleiner of gelijk aan 0 is, en ook als ‘brightness’ groter of gelijk aan 255 is.

Binair rekenen kan ook met getallen van meerdere bits. Daarbij gebruik je bitwise operators. Dit is relevant, omdat de notatie erg lijkt op de boolean operator. De boolean AND schrijf je als ‘&&’, en de bitwise als ‘&’. De details hoef je nu nog niet te kennen, maar als je wilt, kan je hier meer ontdekken: https://junioriot.nl/binair/

Verder met software structuren

Om nog meer te ontdekken, ga je verder met: https://junioriot.nl/arduino-software-structuren/