Funkcióhívások (rutinok) - Arduino és programozása

Keresés a weboldalon

Programozási alapismeretek
Tartalomhoz ugrás

Főmenü:

Funkcióhívások (rutinok)

Arduino programozása > Arduino programozása
A  programszerkezet 2 alapvető (dedikált) funkciójáról a setup () és loop () szerkezetről, működésükről, használatuk kötelezőségéről már esett szó. A programozás során előfordulhatnak ismétlődő funkciók (programrészek), amit tárhely kimélő módon, szükségtelen minden előfordulási helyen külön-külön megírni, hanem elég egyszer, azt hivatkozási névvel kell ellátni, és ahol szükség van rá, ott a nevével meghívhatjuk a funkciót!
A funkcióhívások formailag hasonlítanak az alapvető funkciók szintaktikájához, azaz:
void funkciónév ()   { //az utasítások kapcsos zárójelek közé kerülnek      
}
Fontos! A funkcióhívások csak a void loop () utasítás után helyezhetők el!
Példa
//  futófény a 30-37 portra kötött LED-eken tárhelyfoglalás: 2032 bájt
int t=100; // késleltetési idő (50ms)

void setup() {
 // put your setup code here, to run once:
 //port 30-37 beállítása kimenetnek
 
  pinMode(30, OUTPUT);
  pinMode(31, OUTPUT);
  pinMode(32, OUTPUT);
  pinMode(33, OUTPUT);
  pinMode(34, OUTPUT);
  pinMode(35, OUTPUT);
  pinMode(36, OUTPUT);
  pinMode(37, OUTPUT);           
}

void loop() {
 // put your main code here, to run repeatedly:
 //valamennyi LED alacsony szintre (LOW) állítása
 digitalWrite(30, LOW);
 digitalWrite(31, LOW);
 digitalWrite(32, LOW);
 digitalWrite(33, LOW);  
 digitalWrite(34, LOW);
 digitalWrite(35, LOW);
 digitalWrite(36, LOW);
 digitalWrite(37, LOW);

 digitalWrite(30, HIGH);//LED egyenkénti bekapcsolása
 delay(t);              //késleltetés t ideig
 digitalWrite(30, LOW);//LED egyenkénti lekapcsolása
 digitalWrite(31, HIGH);//LED egyenkénti bekapcsolása
 delay(t);              //késleltetés t ideig
 digitalWrite(31, LOW);//LED egyenkénti lekapcsolása
 digitalWrite(32, HIGH);//LED egyenkénti bekapcsolása
 delay(t);              //késleltetés t ideig
 digitalWrite(32, LOW);//LED egyenkénti lekapcsolása
 digitalWrite(33, HIGH);//LED egyenkénti bekapcsolása
 delay(t);              //késleltetés t ideig
 digitalWrite(33, LOW);//LED egyenkénti lekapcsolása
 digitalWrite(34, HIGH);//LED egyenkénti bekapcsolása
 delay(t);              //késleltetés t ideig
 digitalWrite(34, LOW);//LED egyenkénti lekapcsolása
 digitalWrite(35, HIGH);//LED egyenkénti bekapcsolása
 delay(t);              //késleltetés t ideig
 digitalWrite(35, LOW);//LED egyenkénti lekapcsolása
 digitalWrite(36, HIGH);//LED egyenkénti bekapcsolása
 delay(t);              //késleltetés t ideig
 digitalWrite(36, LOW);//LED egyenkénti lekapcsolása
 digitalWrite(37, HIGH);//LED egyenkénti bekapcsolása
 delay(t);
 digitalWrite(37, LOW);
 
 // visszafelé
 digitalWrite(36, HIGH);//LED egyenkéni bekapcsolása
 delay(t);              //késleltetés t ideig
 digitalWrite(36, LOW);//LED egyenkénti lekapcsolása
 digitalWrite(35, HIGH);//LED egyenkénti bekapcsolása
 delay(t);              //késleltetés t ideig
 digitalWrite(35, LOW);//LED egyenkénti lekapcsolása
 digitalWrite(34, HIGH);//LED egyenkénti bekapcsolása
 delay(t);              //késleltetés t ideig
 digitalWrite(34, LOW);//LED egyenkénti lekapcsolása
 digitalWrite(33, HIGH);//LED egyenkénti bekapcsolása
 delay(t);              //késleltetés t ideig
 digitalWrite(33, LOW);//LED egyenkénti lekapcsolása
 digitalWrite(32, HIGH);//LED egyenkénti bekapcsolása
 delay(t);              //késleltetés t ideig
 digitalWrite(32, LOW);//LED egyenkénti lekapcsolása
 digitalWrite(31, HIGH);//LED egyenkénti bekapcsolása
 delay(t);              //késleltetés t ideig
 digitalWrite(31, LOW);//LED egyenkénti lekapcsolása
}
Funkcióhívással
//  futófény a 30-37 portra kötött LED-eken tárhelyfoglalás: 1866 bájt
int t=100; // késleltetési idő (50ms)
int pin = 30;

void setup() {
 // put your setup code here, to run once:
 //port 30-37 beállítása kimenetnek
 
  pinMode(30, OUTPUT);
  pinMode(31, OUTPUT);
  pinMode(32, OUTPUT);
  pinMode(33, OUTPUT);
  pinMode(34, OUTPUT);
  pinMode(35, OUTPUT);
  pinMode(36, OUTPUT);
  pinMode(37, OUTPUT);           
}

void loop() {
 // put your main code here, to run repeatedly:
 //valamennyi LED alacsony szintre (LOW) állítása

LEDforward ();
pin = pin + 1;
LEDforward ();  
 pin = pin + 1;
LEDforward ();
 pin = pin + 1;
LEDforward ();
 pin = pin + 1;
LEDforward ();
 pin = pin + 1;
LEDforward ();
 pin = pin + 1;
LEDforward ();
 pin = pin + 1;
LEDforward ();
pin = pin - 1;
LEDforward ();
pin = pin - 1;
LEDforward ();
pin = pin - 1;
LEDforward ();
pin = pin - 1;
LEDforward ();
pin = pin - 1;
LEDforward ();
pin = pin - 1;
LEDforward ();
pin = pin - 1;
LEDforward ();
 }
 
void LEDforward () {
 digitalWrite(pin, HIGH);//LED egyenkénti bekapcsolása
 delay(t);              //késleltetés t ideig
 digitalWrite(pin, LOW);//LED egyenkénti lekapcsolása
}
Láthatóan funkcióhívással kevesebb programsorral, kisebb tárterületen is megvalósítható a feladat!
Vissza a tartalomhoz | Vissza a főmenühöz