Les 2 - Arduino programma's uitgelegd.

Het programma

In deze les kijken we hoe een Arduino programma eigenlijk werkt. Je hoeft de voorbeelden niet in te voeren, maar probeer te begrijpen hoe het in elkaar zit. Je mag het natuurlijk wel invoeren als je wil experimenteren.

Je programma of 'sketch' uit les 1 ziet er ongeveer als volgt uit: leeg programma Het programma bestaat dus uit drie delen.


Commentaar

// Dit programma laat een lichtje knipperen

Misschien heb commentaar in je programma, misschien niet. Commentaar is alleen voor jezelf. Het helpt je herinneren wat de bedoeling is van de code. De Arduino kijkt hier niet naar, dus je mag het ook weglaten. Maar als je programma wat ingewikkelder word is het toch wel handig.


Variabelen

Dit zijn een soort vooraf afspraken met de Arduino.

int rood = 9;
int oranje = 10;
int groen = 11;

Variabelen zijn een soort doosjes met een naam, waar iets in zit. Hier vertel je dat bijvoorbeeld in het doosje rood het getal 9 zit. Als je dus later weer rood noemt, zal de Arduino weten dat je eigenlijk 9 bedoeld. Dit lijkt omslachtig, maar is handig als later je programma wat ingewikkeld wordt. Je hoeft dan niet steeds te onthouden dat je rode LED aan pin 9 zat. En als je het later eens wil veranderen heb je één centrale plek waar je dit kunt doen. Deze plek is dus nog voor de setup().


setup

Bij de setup begint het programma echt. De setup code wordt maar één keer uitgevoerd, zodra de Arduino opstart.

void setup()
{
  // Pin van de Arduino's als uitgang (OUTPUT) voor LED
  pinMode(rood, OUTPUT);
  pinMode(oranje, OUTPUT);
  pinMode(groen, OUTPUT);
}

Alles tussen de accolades { en } hoort bij de setup, In dit geval de pinMode voor de gebruikte LED lampjes.


loop

De loop code komt na de setup en blijft zich oneindig herhalen. Ook nu weer hoort alles tussen de accolades { en } bij de loop. Er mag dus geen code meer na de laatste accolade }.

void loop()
{
  digitalWrite(rood, HIGH); // Stroom op pin rood (LED aan)
  delay(1000);              // Wacht 1000ms
  digitalWrite(rood, LOW);  // Geen stroom op pin rood
  delay(1000);              // Weer 1000ms, daarna herhalen
}

In deze loop wordt een LED lampje aangezet, daarna doet de Arduino 1000 milliseconden niks. Dan gaat de LED weer uit en wacht de Arduino weer 1000 milliseconden. Daarna begint de loop weer van voor af aan.


Compleet programma

Dus een compleet programma ziet er zo uit:

int links = 13;  // pin 13 is links
int rechts = 12; // pin 12 is rechts

void setup()
{
  pinMode(links, OUTPUT);     // pin links (13) is uitgang
  pinMode(rechts, OUTPUT);    // pin rechts (12) is uitgang
}

void loop()
{
  digitalWrite(links, HIGH);  // links aan)
  digitalWrite(rechts, LOW);  // rechts uit
  delay(1000);                // wacht 1 seconde
  digitalWrite(links, LOW);   // links uit
  digitalWrite(rechts, HIGH); // rechts aan
  delay(1000);                // wacht 1 seconde
}

Accolades, accolades, accolades

Nog even over die {accolades}. Accolades maken een groepje van een aantal commando's. Dus bijvoorbeeld alle commando's die bij setup of bij loop horen. Een openings { heeft altijd een sluit }. Binnen een groepje kun je weer kleinere groepjes hebben. Om duidelijk te maken welke accolades bij elkaar horen en welke code bij elkaar hoort laten we de accolades inspringen. Dus extra spaties zoals hieronder.

{
  {
    {

    }
  }
}

Nog een voorbeeld.

Het onderstaande voorbeeldprogramma hoef je niet helemaal te begrijpen, maar probeer te snappen hoe de accolades werken:

void loop()
{                               // begin loop{}
  for (int i = 0; i<10; i++)
  {                             // begin for()
    if (i > 5)
    {                           // begin als i > 5
      digitalWrite(rood, HIGH);
      digitalWrite(groen, LOW);
    }                           // einde if()
    else
    {                           // begin niet i > 5
      digitalWrite(rood, LOW);
      digitalWrite(groen, HIGH);
    }                           // einde else()
  }                             // einde for()
}                               // einde loop()