Les 7: Ledje dimmen met een for-functie

We leerden al dat we kunnen programmeren met analogWrite(); om een ledje op halve kracht te laten werken. In deze les zullen we hiervan gebruik maken om een ledje te laten dimmen. We zullen hiervoor gebruik maken van een nieuw functie, de for-functie. Voor aanvullende uitleg over functies, raadpleeg onze programmeeromgeving Arduino sectie.

Ledje dimmen:

We programmeren een ledje die geleidelijk aan feller zal branden om daarna ook weer geleidelijk aan het ledje te doven. Met enkel het commando analogWrite(); zou dit zeker mogelijk zijn. Echter zou dit resulteren in een code die lang, onoverzichtelijk en vervelend is om aan te passen. We willen natuurlijk zo efficiënt mogelijk werken en introduceren daarom een nieuw functie: de for-functie.

Voor we beginnen met het doorgronden van deze functie, onderwijzen we onze Arduino in onze, menselijke, taal. Ons ledje is vanzelfsprekend een constante waarde, deze zal namelijk niet opeens veranderen van poort. Voor onze for-functie zullen we een extra variabele nodig hebben, deze declareren we dan ook voor onze void setup(). Deze variabele gebruiken we als een voorwaarde om onze for-functie te doorlopen. We kiezen in deze for-functie voor de variabele ‘i’, zo creëren we een duidelijk verschil tussen de verschillende functies: ‘i’ voor de for-functie en ‘a’ als algemene variabele. Net als in andere lecturen wordt vaak de letter ‘i’ gebruikt.

Opbouw:

We declareren ons ledje als een uitvoerende component, als een OUTPUT. Aangezien we slechts met één component werken en dus ook maar één poort gebruiken, is dit het enigste wat gedeclareerd moet worden. Onze void setup is dus zeer kort, maar zoals altijd uiterst belangrijk.

Onze void loop begint onmiddellijk met onze nieuwe functie. Maar wat kunnen we nu juist met deze functie? Wel, het stelt ons in staat een code een aantal , al dan niet variabel, keer te doorlopen per analyse van de void loop. Concreet wil dat zeggen dat we op voorhand of door gebruik van andere parameters kunnen beslissen hoeveel maal een code gelezen wordt.

Een normale code wordt eenmaal gelezen per analyse van de void loop. De verwerker leest namelijk de code door zonder ooit op zijn stappen terug te keren. Maar met de for-functie kunnen we hem opleggen om na het doorlopen van een stuk van de code terug te keren naar het begin en het opnieuw te doorlopen. Dit zal de verwerker blijven doen tot de voorwaarde in de for-functie niet meer voldaan wordt.

Zo creëren we echter een stuk code die meer doorlopen wordt dan de rest. Deze functie is uniek in het feit dat het de code enorm kan inkorten. Een kleine code is een efficiënte code en efficiëntie is de sleutel tot succes. We leerden al reeds een manier om dit te doen, namelijk met voids! Raadpleeg onze les 4: programmeren met voids voor een uitgebreide uitleg van deze handige tool.

Notities:

De for-loop stelt ons in staat om een code een eindig aantal keer te laten doorlopen. Er zal steeds een maximale waarde zijn, hoe groot we ook onze voorwaarde maken of hoe klein we onze stap ook maken. Er bestaat ook een oneindige for-functie, sterker nog: we hebben hem al oneindige malen vermeld en gebruikt. De void loop is een oneindige for-functie! De code in de void loop wordt namelijk steeds opnieuw doorlopen.

De for-functie

Concreet wordt een for-loop gebruikt om een analoog commando meerdere malen te laten uitvoeren met steeds een andere waarde. Ook wanneer een code meerdere malen doorlopen moet worden wordt de for-functie gebruikt. Voor een code die tweemaal of driemaal doorlopen moet worden is dit niet zo nuttig, maar wanneer we werken met tientallen keren glanst deze functie. Om dit aan ons te kunnen bieden heeft deze functie uiteraard een totaal verschillende opbouw dan onze reeds gekende functies:

 

for ( variabele; voorwaarde; stap ){

aanvullende code

}

 

De for-functie wordt getypeerd door de ‘for’ voor de haakjes, net zoals de ‘if’ bij een if-functie. Bij deze functie hebben we echter wel drie, gescheiden door ‘;’-tekens parameters. De interactie tussen deze drie bepalen het aantal keer dat de aanvullende code zal doorlopen worden.

Eerst wordt de variabele gekozen en zou het nodig zijn gedeclareerd. Dit hebben we al gedaan voor de void setup. Hoewel het in principe niet verkeerd is en dus geaccepteerd zal worden door de Arduino-verwerker, raad ik jullie alle variabele te groeperen voor de void setup. Deze variabele omvat tevens de startwaarde, aangezien de gekozen variabele een waarde heeft. Wanneer deze waarde, zoal in deze code, niet bepaalt is, krijgt deze de waarde nul toegekend. 

Daarna wordt de voorwaarde bepaalt. Deze wordt steeds getest en bepaalt dus of de code wel of niet nogmaals doorlopen wordt. Tot slot hebben we de stap. Dit is de bewerking die de gekozen variabele ondergaat nadat deze gecontroleerd is aan de voorwaarde. De interactie tussen de startwaarde, de stap en de voorwaarde bepaalt het aantal uitvoeringen van de aanvullende code.

Gebruik van de for-functie:

for (i = 0 ; i <= 255 ; i+=5){

analogWrite ( ledRood , i );
delay (30);

}

In deze for-functie zal de variabele starten met de waarde nul. De aanvullende code zal doorlopen worden tot ‘i’ groter of gelijk is aan 255. Bij elke keer dat de aanvullende code zal doorlopen zijn, wordt dit dus gecontroleerd. Na deze controle wordt de ‘i’ verhoogd met vijf. Deze combinatie zorgt ervoor dat de aanvullende code exact 51 maal doorlopen zal worden.

En zo zal het commando analogWrite(); eerst 0, dan 5, 10 ,15 ,20 … sturen naar onze rode led. Deze zal dus steeds feller branden. Wanneer onze led de waarde van 255 zal leveren, is deze functie doorbroken en wordt de volgende for-functie geïnitialiseerd. Deze werkt op eenzelfde manier, maar verlaagd de variabele steeds met vijf. Zo zal het commando analogWrite(); eerst 255, dan 250, 245, 240, 235 … sturen naar onze led. Deze zal dus langzamerhand doven.

Notities:

De getallen in de for-loop zijn in de meeste gevallen een eigen keuze. In deze code is de variabele ‘i’ echter ook verbonden aan het commando analogWrite();. Daarom moet onze ‘i’ binnen het interval [0;255] blijven. Meer informatie over deze voorwaarden vindt je in onze sectie Arduino commando’s.

Code:

Schakeling:

We schakelen een ledje in serie met weerstand van 220 ohm. De  anode verbinden verbinden we  met poort 11 en de cathode met de ground.

For-functie

Basislessen Arduino 58.3%

Ook raden we jou aan om bepaalde waardes of commando’s te vervangen of te veranderen. Zo wordt het al snel duidelijke welke invloed een commando heeft op de werking van de schakeling. In deze code kan je eens proberen om niet met slechts één, maar met meerder ledjes te werken.

Als je deze code vlotjes beheerst, ga dan over naar les 8!

Geplaatst in Programmeren Arduino voor dummies.

Geef een reactie

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