08. Uitleg programma structuur

08. Uitleg programma structuur

Doel van deze Experience

We beginnen nu met de basis van het programmeren. Je zult zien dat je leuke dingen kunt doen door een paar regels code te schrijven. Ook zul je leren wat accolades zijn en waarom we deze gebruiken. Hierna ga je je eerste stukje code schrijven met twee belangrijke commando’s, namelijk;

  • void setup()
  • void loop()
  • /* … */
  • //

Wat heb je nodig?

  • Arduino bord
  • 6 weerstanden van 220Ω
  • 5 rode en 1 groene LED

Theorie

In Experiences 1 en 6 heb je de Arduino al gebruikt. We hebben een sketch geüpload naar de Arduino waarna er LEDjes begonnen te knipperen.

Zoals je misschien wel hebt gezien bestaat de code uit verschillende onderdelen.  Voor het programmeren van de Arduino wordt gebruikt gemaakt van de programmeertaal c++ je spreekt dit uit als “c plus plus” . Dit is een zogenaamde low-level programmeertaal die je in staat stelt om direct te communiceren met de hardware op de Arduino. Dit is om te leren misschien niet de makkelijkste programmeer taal, echter wel de basis voor alle andere programmeertalen.  Er zijn heel veel verschillende programmeer talen. Een compleet overzicht kun je in deze lijst vinden op Wikipedia
(https://nl.wikipedia.org/wiki/Lijst_van_programmeertalen)

Voor de Arduino is voor C++ gekozen omdat het eenvoudig is en structuur vereist. Zonder structuur zal het programma niet werken en geeft het systeem een fout (error).

Wanneer je een sketch upload naar de Arduino wordt deze in het geheugen geplaatst. Dit geheugen is heel klein en niet te vergelijken met het geheugen van de computer waar je mee werkt. Omdat het geheugen klein is moeten we ook proberen zo krachtig mogelijk te programmeren, in één keer precies tegen de processor vertellen wat hij moet doen.

Er zijn een aantal basisregels en afspraken die we vanaf het begin gaan gebruiken;

  • Gebruik de camelCase notatie in al je code; dit bekent dat je de eerste lettergreep begin met een kleine letter, alle volgende lettergrepen met een hoofdletter. Bijvoorbeeld consumerSecretKey. Meer uitleg kun je hier vinden (https://en.wikipedia.org/wiki/CamelCase)
  • Gebruik Engelstalige woorden voor functies and variabelen. dus “ledPin” is goed en “lampjePin” is niet goed.
  • Gebruik de juiste data types zoals een byte, integer of een float. We gaan dit later nog uitleggen. Dit is belangrijk om zo weinig mogelijk geheugen van de Arduino te gebruiken.
  • Gebruik beschrijvende namen voor variabelen dus niet counter maar bijvoorbeeld loopCounter of geen val maar sensorValue, dit maakt het ook in de toekomst en voor andere programmeurs duidelijk waar de variabele voor dient.
  • Gebruik openings accolade “{” altijd op de regel van het begin en nooit op een nieuwe regel
  • Bij je eigen functies schrijf je een commentaar regel boven je functie waar in het kort staat wat de functie doet, wat de input waarden zijn en wat de output van een niet void functie is

De basis voor de Arduino en C++ bestaat uit twee blokken met programma commando’s; namelijk een setup en een loop. Het grootste verschil is dat de Setup maar één keer wordt uitgevoerd terwijl de Loop net zo lang door blijft lopen, en bij het einde weer opnieuw begint, tot de spanning van de Arduino afgaat of de reset knop wordt ingedrukt.

Video basisregels en afspraken;

Setup

Het eerste gedeelte is een setup waarbij we de voorbereidingen maken voor het programma zelf. We kunnen aangeven welke pinnen een ingang of uitgang worden, we kunnen namen geven aan pinnen zodat alles overzichtelijke blijft en we kunnen variabelen benoemen.

Het commando hiervoor is als volgt:

void setup() {

}

Tussen de accolades ({ en }) komen de commando’s te staan het zogenaamde functieblok. Door het gebruik van de accolades weet de Arduino waar dit blok begint en waar het eindigt. De begin accolade wordt achter de regel geplaatst, de eind accolade op een nieuwe regel.

Loop

Deze loop functie is een oneindige loop die, wanneer hij op het einde is, weer opnieuw begint. Alle instructies die in de loop staan worden uitgevoerd. De uitkomsten zijn niet altijd gelijk. Als er in de loop bijvoorbeeld moet staan dat de Arduino op een bepaalde ingang moet reageren, dan zal hij dat pas doen wanneer hij daar een bepaalde waarde meet. Pas dan zal de Arduino zeggen “deze waarde is nu zo hoog, dus nu moet ik dit schakelen of dat uitzetten of dat op het display zetten’’.

Het commando ziet er als volgt uit:

void loop()

In het stukje code dat je hier ziet, zie je beide commando’s duidelijk beschreven:

const int ledPin=13;
void setup() {
          pinMode(ledPin, OUTPUT);
}

void loop() {
   digitalWrite(ledPin,HIGH);
   delay(1000);
   digitalWrite(ledPin,LOW);
   delay(1000);
}

Video van de sketch opbouw uitleg:

Video van de Sketch opbouw in de praktijk:

 

Als je alles goed hebt ingetypt krijg je de volgende sketch. Als je nu op Schets / Verifiëren klikt dan zal de Arduino software checken of de code juist is. als het niet zo is, bijvoorbeeld een “;” vergeten dan zal het programma dit aangeven.

codeexp8

Uitleg code;

const int ledPin = 13, hiermee definiëren we een constante (hier komen we later op terug) genaamd ‘ledPin’ die de waarde 13 heeft.

In de setup zeggen we dat de digitale uitgang 13 een Uitgang (output) wordt. Dit wil zeggen dat als deze HOOG wordt (HIGH) er een spanning op komt te staan van 5 V, hiermee gaat het LEDje dus aan.

In de Loop zeggen we wat er continu moet gebeuren

digitalWrite (ledPin, HIGH); // hiermee maken we de digitale pen 13 HOOG (5V)
delay (1000); // dit laat de processor 1000ms (is 1 seconde) wachten.

digitalWrite (ledPin, LOW); // hiermee maken we de digitale pen 13 LAAG (0 V).
delay (1000); //  dit laat de processor 1000ms (is 1 seconde) wachten.

De code laat dus met een tussenpoos van 1 seconde het LEDje op 5 V of 0V branden
Bij 5 V geeft het LEDje licht en bij 0 V geeft het LEDje geen licht, op deze manier krijgen we dus een knipperend LEDje.

Het kleine stukje programma om het LEDje te laten knipperen doet dus het volgende:

• Stelt pin 13 in als uitgang
• Begint met een lus (loop)
• Schakelt de LED aan
• Wacht een seconde
• Schakelt de LED uit
• Wacht een seconde
• Begint opnieuw aan de lus

Video met de uitleg van de code;

 

Gebruik van de punt komma (;)

Je ziet ook dat elke regel eindigt met een punt komma (;), dit is zeer belangrijk omdat de Arduino dan begrijpt dat dit het einde van deze instructie is en hierna doorgaat naar de volgende.

Extra informatie toevoegen met // en /* … */ commando

Het huidige voorbeeld is nogal eenvoudig en bevat maar een paar regels code. Je kunt je voorstellen dat als er veel meer coderegels zijn (tienduizenden), je als programmeur het overzicht verliest. Daarnaast wil je ook dat een collega je werk kan overnemen. Daarom is het belangrijk om extra informatie toe te voegen die niet door de processor wordt uitgevoerd. We hebben hiervoor twee commando’s:

“//”  instructie

Door het plaatsen van “//” achter een commando kunnen we vrije tekst toevoegen.

Bijvoorbeeld:

const int ledPin=13;  // met dit commando geven we de constante ledPin de waarde 13

Het is nu dus duidelijk waar deze regel voor bedoeld is, ook voor andere programmeurs.

/* …… */ instructie

Door het plaatsen van het commando /* …… */ kunnen we een heel blok tekst plaatsen als een compleet blok.

Bijvoorbeeld:

/* hiermee leggen we uit wat het volgende
stukje code gaat doen. Je kunt hier veel tekst inzetten,
houd het echter kort en duidelijk.
*/

Video uitleg hulpteksten;

Opdrachten

Algemene video met de opbouw van de opdrachten en foutzoeken;

Uitleg van de opdrachten van deze Experience;

Opdracht 1

TIP: Lees altijd de opdrachten eerst helemaal goed door voordat je begint. Pas als je zeker weet dat je begrijpt wat er wordt gevraagd ga je aan de slag.

Schrijf een stukje code, zoals hierboven is beschreven, dat een rood LEDje dat is aangesloten op uitgang 10 gedurende een halve seconde aan laat en gedurende een kwart seconde uit laat (een halve seconde is 500ms en een kwart seconde is 250ms). Als basis gebruiken we het stukje code dat is geschreven om het LEDje dat is aangesloten op uitgang 13 te laten knipperen. In plaats van de contante ledPin  gebruik je een andere benaming in het Engels die je zelf verzint, bijvoorbeeld de kleur van de LED in het Engels. Verwerk ook wat opmerkingen bij de sketch als extra informatie. Zorg ook dat je de Sketch eerst opslaat voordat je gaat testen.

Op het experimenteer bord sluiten we eerst een LEDje aan met een weerstand van 220Ω. Dit kan er als volgt uit zien:

Exp8

Als je alles hebt aangesloten en de code upload zijn er twee mogelijkheden;

  1. Het werkt precies zoals je het bedoeld hebt ! super gedaan, ga door naar opdracht 2

2. Het werkt niet. Als het niet werkt heb je twee mogelijkheden; We proberen je hier te leren hoe je consequent fouten kunt zoeken.

  1. Het programma functioneert niet goed. Actie: kijk de code na en beredeneer of je alles goed hebt gedaan.
  2. De elektronica werkt niet goed.  Actie:
    • Check of het LEDje niet defect is (pak een draad en maak een 5V verbinding naar de weerstand)
    • Check of het LEdje goed is aangesloten, het lange pootje moet aan de plus zijde zijn aangesloten.
    • Check met de multimeter of je de juiste weerstand hebt gebruikt. Als de waarde van de weerstand te hoog is komt er te weinig stroom en zal de LED niet gaan branden.

Verwerk ook wat opmerkingen bij de sketch als extra informatie.

Opdracht 2

Schrijf een stukje software waarbij een tweede LED in de kleur groen gaat branden die je aansluit op uitgang 5. Ze mogen gelijkertijd branden. Ofwel als de groene aan is mag ook de rode aan.

Opdracht 3

We willen nu een signalering waarbij de groene en rode LED NIET gelijkertijd branden. Je kunt hiervoor heel eenvoudig de Sketch van Opdracht 2 aanpassen. Denk eerst goed na voordat je aan de slag gaat.

Opdracht 4

We hebben een opdracht van een klant ontvangen om de startlichten van de Formule 1 te ontwerpen.  In bijgaande video zie je gewenste werking.

 

Ontwerp een sketch en electronica die precies doet als op de video:

De 1e LED gaat aan, 0,5 seconde wachten, dan 1e en 2e LED aan etc. tot alle 5 LED’s aan zijn. Je kunt zelf bepalen hoe je de LED’s noemt als het maar Engels is. Je kunt ook zelf kiezen welke poorten je gaat gebruiken.

Heb je hulp en tips nodig ? post het op het forum.

Wat heb je deze Experience geleerd;

  • Het is belangrijk om gestructureerd te werken en de regels te volgen.
  • Hoe de opbouw van een sketch is.

 


1 gedachte over “08. Uitleg programma structuur”

Een reactie plaatsen