Funktioner

Fra HTX Arduino
Spring til navigation Spring til søgning

En funktion i Arduino-C er en afgrænset kodedel, der kan kaldes fra forskellige steder, og herved anvendes i mange forskellige sammenhænge. Herved øges overskueligheden af koden, samtidig med at fejlrettelser og udvidelser gøres nemmere, da koden kun skal rettes et sted.

Grundelementerne i en funktion

En funktion skrives på følgende måde:

int Gange(int x, int y){
  int resultat;

  resultat = x*y;
  return resultat;
}
  • Første linje:
    • int: Her defineres typen af det resultat som funktionen skal returnere. Hvis funktionen ikke returnere noget angives typen til void.
    • Gange: Navnet på funtionen. Dette navn anvendes når funktion skal kaldes fra andre steder i koden.
    • int x, int y: Funktionens argumenter og deres typer. Funktionen kan have et valgfrit antal paramtre - inklusiv 0 paramtre.
  • Anden linje:
    • int resultat: Her initialiseres variable, der skal bruges i funktionen.
  • Tredje linje
    • resultat = x*y: Her placeres den kode som funktionen skal udføre. Koden kan strække sig over et vilkårligt antal linjer.
  • Fjerde linje
    • return resultat: return anvendes til at afbryde udførelsen af funktionen og returnere et resultat. Her returneres variablen resultat. Bemærk at typen af det der returneres skal matche den type der blev defineret i første linje.

Koden der tilhører funktionen indrammes af et sæt krøllede paranteser, som vist i eksemplet ovenfor.

Funktioner må ikke placeres inden i andre funktioner.

Argumenter til en funktion

En af styrkerne ved funktioner er at de kan udstyres med argumenter så de kan udføre den samme operation på forskellige data. Se følgende eksempel:

int Gange(int x, int y){
  int resultat;

  resultat = x*y;
  return resultat;
}

int a=3;
int b=5;
int c;
c = gange(a,b);
// c indeholder nu a*b = 3*5 = 15

int diameter = 13;
int pi = 3; //Ja-ja, pi er ikke 3, men nu er funktionen defineret til at bruge heltal - så kan vi jo ikke bruge decimaltal...
int omkreds;
omkreds = gange(diameter,pi);
//omkreds indeholder nu 3*13 = 39

Først defineres koden på samme måde som i det første eksempel. Herefter initialiseres tre variable: a,b og c, hvor a og b tildeles værdierne 3 hhv. 5. Så kaldes funtionen gange() med a og b som argumenter og resultatet placeres i c. Efterfølgende bruges gangefunktionen igen, men nu med et nyt sæt argumenter: pi og diameter.

Lokale variable i en funktion

I javaScript kan man arbejde med globale variabler, med de fordele og ulemper der er ved det.

Fordelen kan være at man laver en fornuftig navngivning af sine variable, og så kan man anvende dem uanset hvor man er i hele programmet.

Ulempen kan være i større programmer, at man ikke lige er opmærksom på at man har navngivet en variabel til det samme to forskellige steder, hvor man egentlig ønsker at det skal være to forskellige variabler (en klassiker er at man bruger n i en løkke i hoved-koden, og i løkken kalder man så en funktion der også bruger n i en løkke. Hvis der er den samme variabel n, så går det galt.

For at undgå den type problemer, så kan man lave lokale variabler inde i en funktion.

Et eksempel der illustrerer det kan være:

function registrer() {
    startTid = 5;
    var tid = 34;
    slutTid = startTid + tid;
}

I dette eksempel er startTid og slutTid globale variabler, mens tid er en lokal variabel, da den er defineret med var foran. Det betyder at variablen tid kun eksisterer og kan anvendes i funktionen registrer(), og at der kan eksistere en anden lokal variabel der hedder tid i en anden funktion, og der kan også eksistere en global variabel der også hedder tid, uden at de variabler har noget med hinanden at gøre.

Teknisk siger man at variablens scope er begrænset til funktionen.

Programmering
Programmeringsbegreber Initialisering - Sekvens - Algoritme - Hexadecimal - Det Binære Talsystem - HEX-fil - ASCII - Interrupt - Events - Styresystem - Autocomplete - Selvstudie Programmering - Hour Of Code - Stepwise Improvement - Syntaks - Prog-links - Microcontroller - ChatGPT
Grundlæggende C C float - C double - C-løkker - Datatyper - Konstanter - Regnearter - Funktioner - Return - Returværdi - Rekursion - Semikolon
Variabel Typer boolean - byte - int - unsigned int - word - long - unsigned long - short - float - double - char - unsigned char - string - char array - String - object - Array - 2-dimensionelt Array - void
Program-klassikere Polling - State-machine - Trykknap - Forkant - Bagkant - Prel
Arduino Arduino til Programmering - C til Arduino - Programmering Shield - Arduino PC-software - Arduino Udviklingsmiljø - Arduino Pin Library - Funktion - Arduino Seriel - Arduino String - Arduino String Split - Arduino StateChangeDetection - setup() - loop() - Compilerdirektiver - Asynkron kommunikation - millis() - micros() - Scratch for Arduino - Send fra Arduino til Excel - [[]] - [[]]
Processing Grafik i Processing‎ - Keyboard i Processing - Mus i Processing‎ - Tid i Processing‎ - Draw() - Setup() - Tal Input til Processing - Syntaksfarvning - Kommunikation fra Arduino til Processing - Kommunikation fra Processing til Arduino
javaScript Javascript input‎ - Javascript output‎ - Javascript strukturer‎ - Javascript syntaks‎ - Tid i javaScript - Objekt‎ - AJAX
Serverprogrammering PHP - MySQL - Task Scheduler - WeMOS
PIC JAL - [[]]
Scratch for Arduino S4A Installation - S4A programmering - S4A undervisningsforløb - S4A begrænsninger
Program Dokumentation Algoritme - Flowchart - Pseudokode - Datastruktur - Dataabstraktion - Pulsplaner - Program-kommentar - Teori - Test - UML