Les 4: Programmeren aan de hand van voids

Efficiëntie is de sleutel tot een succesvol en overzichtelijk programma! Leren programmeren met voids is hiervoor zeer belangrijk … en gemakkelijker dan het lijkt! Geïnteresseerd? Na deze les weet je er alles over!

Het belang van programmeren met voids zit in hun aangename manier van werken. Voids helpen ons aan de ene kant onze code kort en efficiënt te houden en aan de andere kant overzichtelijker te maken…

Programmeren met voids:

Ook hier, zoals in les 3, zullen we een verkeerslicht programmeren. Desondanks de gelijkenis in het eindresultaat, zal deze code een andere opbouw hebben. Het programmeren met voids,verandert dus noch de werking noch de schakeling, alleen de opbouw van de code verschilt. Hoe we dit bereiken wordt later uitgelegd, allereerst zullen we, zoals gewoonlijk, de Arduino-verwerker onderwijzen.

We werken met 3 ledjes, de 3 kleuren van een verkeerslicht. Groen, geel en rood respectievelijk geschakeld op poorten 12, 11 en 10. We maken gebruik van constanten omdat deze woorden onveranderlijk zijn doorheen het programma.

Opbouw:

We declareren, net zoals in les 3, onze ledjes in de void setup als OUTPUT. Zo weet de Arduino dat hij van de circuits, geschakeld op deze poorten, geen info zal krijgen. Deze circuits hebben dus een uitvoerende functie.

Onze void loop bestaat uit een korte code:

verkeersLicht ( lichtGroen , 1000);
verkeersLicht ( lichtGeel , 200 );
verkeersLicht ( lichtRood , 1000 );

Uiteraard is ‘verkeersLicht();’ geen commando van arduino. Dit ‘commando’ is een verwijzing naar een ander deel in de code. Telkens wanneer de Arduino-verwerker deze regel analyseert, zal deze het ander deel van de code doorlopen, alvorens verder te gaan in de void loop. Kortom, we programmeren met voids.

Opbouw van een void:

Ook de void loop is een void, wel één die vooraf geprogrammeerd is om oneindig malen doorlopen te worden. De voids die wij maken hebben ‘carte blanche’. Onze void ziet er als volgt uit:

void verkeersLicht (int ledje , long pauze){
   digitalWrite ( ledje , HIGH);
   delay( pauze);
   digitalWrite ( ledje , LOW);
   }

Algemeen kunnen we stellen dat wanneer we programmeren met voids we telkens twee delen hebben: een code en een naam die de void ‘vertegenwoordigt’. ‘int ledje, long pauze’ zijn geen verplichting om een void te maken. Deze ruimte kan evengoed leeg zijn, zoals bij de void loop en void setup. Echter zul je vaak merken dat dit wel het geval is. Het stelt ons namelijk in staat om een herhaling in commando’s te versimpelen in een void, terwijl, zonder deze mogelijkheid, slechts een herhaling in commando’s met eenzelfde variabelen en waarden vereenvoudigt zou kunnen worden.

void verkeersLicht (int ledje , long pauze){ 
digitalWrite ( ledje , HIGH);
delay( pauze);
digitalWrite ( ledje , LOW);
}

// void met variabelen.

// doel: eenzelfde commando’s met verschillende variabelen vervangen. Bijvoorbeeld:

digitalWrite ( lichtGroen , HIGH);
delay ( 2000);
digitalWrite ( lichtGroen , LOW);
digitalWrite ( lichtGeel , HIGH);
delay (500);
digitalWrite ( lichtGeel , LOW);

void verkeerLicht (){

digitalWrite ( ledRood, HIGH);

delay ( 2000);

digitalWrite ( ledRood, LOW);

}

// void zonder variabelen.

// doel: eenzelfde commando’s met eenzelfde variabelen 

vervangen. Vaak gebruikt om de code te verkorten. 

Bijvoorbeeld:

digitalWrite ( ledRood, HIGH);

delay ( 2000);

digitalWrite ( ledRood, LOW);

digitalWrite ( ledRood, HIGH);

delay ( 2000);

digitalWrite ( ledRood, LOW);

Voids gebruiken in je code:

Het werkt werkt als volgt: wanneer we de void opvragen in de void loop, dan word deze steeds vermeld met waarden. Deze waarden zijn geschreven tussen de haakjes en worden gescheiden door een komma. Bij het maken van de void werd er tussen de haakjes variabelen gedeclareerd. Deze variabelen worden dan gebruikt in de code van de void. Ook deze variabelen werden gescheiden door komma’s..

Bij het oproepen worden de variabelen gelijkgesteld aan de overeenkomstige waarde. Hierna wordt de void uitgevoerd met de juist bepaalde waarden. Zo kunnen we bij eenzelfde reeks van commando’s telkens andere waarden kiezen. Bijgevolg moeten we deze commando’s niet onnodig herhalen.

Voorbeeld:

In de void loop wordt ‘verkeersLicht ( lichtGroen , 1000);’ opgeroepen:

verkeersLicht ( lichtGroen , 1000);   // in code 

void verkeersLicht (int ledje , long pauze)  // algemeen

int ledje = lichtGroen  // waarde toegekend aan variabele ‘ int  ledje’
long pauze = 1000  // waarde toegekend aan variabele ‘ long pauze’

digitalWrite ( ledje , HIGH);
delay( pauze);
digitalWrite ( ledje , LOW);

digitalWrite ( lichtGroen , HIGH);
delay( 1000);
digitalWrite ( lichtGroen , LOW);

Notities:

Dit is de algemene opbouw van een void:

void ‘naam’ ( ‘ mogelijkheid tot variablelen, aantal onbeperkt’){
code
}

De naam van de void is naar volledig naar eigen keuze, net als de code en de variabelen. Je werkt dus met een ‘carte blanche’. Heeft je void nood aan 3,4 of 5 variabelen? Zolang ze juist gedeclareerd zijn is dit zeker geen probleem. Echter wanneer een void 3,4, of 5 variabelen heeft, moet de opgeroepen naam van deze void ook respectievelijk 3,4 of 5 waardes hebben. Ongeacht of deze voorkomen in de code. Dit kan dus niet:

void verkeersLicht(int ledje,long pauze,int GG){
digitalWrite ( ledje , HIGH);
delay( pauze);
digitalWrite ( ledje , LOW);

void verkeersLicht (int ledje , long pauze ){
digitalWrite ( ledje , HIGH);
delay( pauze);
digitalWrite ( ledje , LOW);

verkeersLicht(lichtGroen,1000);

verkeersLicht ( lichtGroen , 1000, 50);

Code:

// Eerst zetten we onze woorden om in taal die arduino begrijpt. 
const int lichtGroen = 12;
const int lichtGeel = 11;
const int lichtRood = 10;


void setup() {
// Aangezien dat deze ” loop ” slechts eenmaal doorlopen wordt, declareer je hier jouw poorten. 
pinMode ( lichtGroen, OUTPUT);
pinMode ( lichtGeel , OUTPUT);
pinMode ( lichtRood , OUTPUT);
}


void loop() {
// Vervolgens zetten we hier de opdrachten die uitgevoerd moeten worden. Deze “loop” wordt dus steeds herhaald. 
verkeersLicht ( lichtGroen , 1000);
verkeersLicht ( lichtGeel , 200 );
verkeersLicht ( lichtRood , 1000 );
}


void verkeersLicht (int ledje , long pauze){ 
// Tot slot hebben we onze void. Deze voids bevat twee variabele, namelijk ‘int ledje’ en ‘ long pauze’. 
digitalWrite ( ledje , HIGH);
delay( pauze);
digitalWrite ( ledje , LOW);
}

Schakeling:

Zoals in les 3 schakelen we drie ledjes in serie met een weerstand van 220 ohm. De anode van het groen, gele en rode ledje wordt respectievelijk met poorten 12,11 en 10 verbonden. De cathode wordt telkens met de ground verbonden.

programmeren met voids
Basislessen Arduino 33.3%

Ook raden we jou aan om bepaalde waardes of commando’s te vervangen of te veranderen. Zo wordt het snel duidelijke welke invloed een commando heeft op de werking van de schakeling.

Bij problemen met het programmeren met voids en het verkeerslicht, zeker niet aarzelen om contact op te nemen.

Als je het werken met het ledjes voldoende beheerst, ga dan over naar les 5!

Geplaatst in Programmeren Arduino voor dummies.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *