Projects4edu

Tutorial : functies

Een functie is een stuk programma die je schrijft buiten de loop() , dit is nuttig omdat je op deze manier (door van de code een functie te maken) het stukje code kan hergebruiken. Als je alles in loop() zou zetten kan je programma zeer lang worden terwijl veel code zo goed als een exacte copy is van code die al eerder aan bod is gekomen.


Er zijn drie verschillende soorten functies, je hebt functies die geen resultaat hebben en die ook geen gegevens meekrijgen. Je hebt functies die geen resultaat hebben en die gegevens meekrijgen en als laatste heb je de functie die een resultaat heeft en die ook nog eens gegevens meekrijgt. Een functie die een resultaat heeft en geen gegevens meekrijgt zou in principe wel kunnen maar heb ik zelf nog nooit nodig gehad en ook nog niet gezien.

1) Functie zonder resultaat en zonder gegevens die meegegeven worden.

vb : morse …—…
voor SETUP schrijf je dus de functie

void morse(void) {
for (int i=0; i<3; i++){
for (int j=0; j<3;j++){
if((i==0) | (i==2)) {
digitalWrite(LED,HIGH);
delay(1000);
digitalWrite(LED,LOW);
delay(1000);
}
else {
digitalWrite(LED,HIGH);
delay(3000);
digitalWrite(LED,LOW);
delay(1000);
}
}
}
}

IN LOOP kan je dan het volgende schrijven
morse();

Nu lijkt het niet nuttig om van morse een functie te maken en in deze toepassing is dat ook het geval want je gebruikt de code maar 1 keer. Maar stel dat je in je programma op verschillende plaatsen de morse code wil uitvoeren dan zou je die morse code drie keer in loop() geplaatst hebben waar je nu dit VOOR setup zet (eenmalig) en de oproep morse() op verschillende plaatsen in loop() kan plaatsen. Op deze manier verminder je het aantal lijnen code. Hoe de functie morse werkt kan je zeer makkelijk ontcijferen als je de for lus en de if else controlestructuur goed verstaat. Dit zou moeten aangezien dit de in de eerste reeks al verklaard werd.

2) functie zonder resultaat en met gegevens die worden meegegeven

Deze functie gebruiken we bij het aansturen van het 7segment display, hier word een getal aan de functie gegeven en zal het display in de functie worden aangestuurd. Er is geen resultaat die terugkeert.

3) functie met resultaat en met gegevens die worden meegegeven

vb : Het berekenen van de spanning van de potentiometer.
De spanning van de potentiometer kan geregeld worden tussen 0 en 5V. Door analogRead() te gebruiken krijg je een getal tussen 0 en 1024. Dit wil zeggen dat 0 gelijk is aan 0 en 1024 gelijk is aan 5V. Wil je dus de spanning kennen en niet de digitale waarde dan moet je dit getal delen door 205. Je kan dan dat getal weergeven op het LCD display maar dan moet je ook nog weten hoe het LCD scherm werkt dus we zullen het sturen naar de serial monitor.
double voltage(int value) {
double volt = value/205.0;
return volt;
}

Dit is de functie, het getal dat je meegeeft bij het oproepen van de functie zal worden omgezet naar de waarde in volt en deze waarde zal teruggegeven worden aan de oproeper.
In loop() staat dan volgend stukje code die dus de meting doet en dan de omzetting vraagt en dan het omgezette getal op de seriale verbinding plaatst.

int meting = analogRead(A0);
double volt = voltage(meting);
Serial.println(volt);
delay(1000);

Nu krijg je een getal tussen 0.00 en 4.99 op het beeldscherm via de serial monitor. Dit getal komt overeen met de spanning op de input A0, dit is waar de regelbare weerstand is aangesloten.

Algemene uitleg functies

functies bestaan zoals je gemerkt hebt uit een woord met daarna haakjes, setup() , loop(), pinMode(), digitalRead(), … zijn dus ook allemaal functies.

functies worden VOOR setup aangemaakt, en de eerste regel bestaat uit drie gedeelten
WELK Returntype is er ? Als er GEEN returntype is schrijft men void
WELKE naam ? Deze kan je zelf kiezen maar kies je best logisch, de naam vertelt wat de code doet.
WELKE gegevens ? Tussen () staat welk type en welke naam de gegevens hebben die de functie krijgt tijdens de oproep. Als er meerdere gegevens zijn dan worden deze gescheiden door een ,

functies worden op eender welke plaats opgeroepen (men kan een functie oproepen in een andere functie). De oproep is afhankelijk van het type.
type 1 : naam();
type 2 : naam(gegeven); zijn er meerdere gegevens dan naam(gegeven1,gegeven2);
De gegevens kunnen vaste getallen zijn maar kan een de waarde van een geheugen zijn.
type 3 : geheugen = naam(gegevens); dit omdat het resultaat ergens opgeslagen moet worden. Het resultaat kan ook direct gebruikt worden in een controlestructuur zonder op te slaan. Het handigste is echter toch het resultaat op te slaan voor later gebruik.

Volgende tutorial : 7 segment display

Aangezien we voor het aansturen van een 7 segment display functies gebruiken is dit de volgende tutorial.

Vorige tutorial : analogRead()

De vorige tutorial had het over de analogRead instructie, nu je deze informatie gelezen hebt zie je vast dat die instructie eigenlijk ook een functie is.

Mobiele versie afsluiten