v

                           Számlálós ciklus


Mint a neve is mutatja, most a számlálós ciklusokkal fogunk ismerkedni néhány példa program segítségével. A ciklus lényege, hogy az utasítása csak megadott számban hajtódnak végre, amit
persze mi állítunk be előzőleg.

Első lépésben nézzük a hardvert:

egy Arduino Uno + Usb kábel,
próbapanel összekötő vezetékekkel,
8db led bármilyen színben,
8db 270-330ohmos előtét ellenállás.

A kapcsolás lényege, hogy az 8 led, 8digitális kivezetést jelöl, az Uno kimeneteinek ki- bekapcsolását jelzi számunkra.

Első lépésben a nyolc lábat kimenetnek kell állítani. Ezt megtehetnénk úgy, hogy írnánk nyolc
darab pinMode-t és egyesével beállítanánk kimenetnek a pineket, de ennél van egyszerűbb megoldás is, mégpedig a számlálós ciklus használata. Nézzük:

void setup(){
for(int i=1; i<9; i++){
pinMode(i,OUTPUT);
}
}

A for a mi számlálós ciklusunk. A zárójeleken belül három kifejezés található:
-az első létrehoz a cikluson belül egy lokális(helyi) változót, ez fogja számlálni nekünk, hogy
hányszor fut le a ciklusunk. Itt mindig meg kell adnunk a kezdő értéket is, ugyanis az üres változó
deklarálás után bármilyen véletlenszerű értéket eltárolhat, amolyan memória szemetet, ha nincs
beállítva a kezdő érték, akkor az eltárolt értéket fogja a ciklusunk vizsgálgatni.

-a második kifejezés egy egyenlőség vagy egyenlőtlenség, a ciklus mindaddig fut míg ez a kifejezés igaz.
Itt esetünkben addig hajtódik végre míg i változó értéke kisebb mint kilenc.

-a harmadik a ciklus érték adó része, esetünkben az i++ kifejezés,  jelentése: i= i+1, tehát
minden futásnál eggyel növeljük i értékét.( lehet, hogy egy kicsit furcsa az i= i+1, de ez nem
egyenlőség hanem értékadás programozási nyelven). Még egy fontos dolog, a for ciklus
első futásánál az i változóhoz nem adódik +1, tehát int i=1 akkor pinMode(i,OUTPUT)
egyenlő lesz pinMode(1,OUTPUT)-al.


A zárójelen belül egyes kifejezések elhagyhatók, de a pontosvesszőt akkor is ki kell tenni.

for(i=0;;) 

A setup-ban leírt utasítások beállítják egytől nyolcig a lábakat kimenetnek. Most nézzük a
főprogramrészt:

void loop(){
for (int i=1;i<9;i++){
digitalWrite(i,HIGH);
delay(300);
digitalWrite(i,LOW);
}
}

Itt teljesen ugyan az a helyzet a for ciklussal, a belső utasításai mások. Először bekapcsoljuk az
i-edik kimenetet, várunk, majd kikapcsoljuk. Újra kezdődik a for ciklus, i értéke eggyel nagyobb
ha nem érte még el a kilencet, ha igen akkor újra indul a loop ciklus és nulláról kezd az i is.

Persze az i értékét a for cikluson belül nem csak egyesével lehet növelni, más értékadásokat is
megvalósíthatunk a következő összevont értékadásokkal:

i++ → i = i+1
i-- → i = i-1
i+=y → i = i+y
i-=y → i = i-y
i*=y → i = i*y
i/=y → i = i/y


Ennek fényébe nézzünk egy for ciklust ami 5-ösével számlál 25-ig:
for(int i=0; i<25; i+=5){
}
i értékei a következők:

  1. kör i = 0

  2. kör i = 5

  3. kör i = 10

  4. kör i = 15

  5. kör i = 20
    a következő ciklus már nem hajtódik végre i értéke eléri a 25-öt .

Nézzük a teljes programot egy kicsit megspékelve:

void setup(){
for(int i=0;i<9;i++){
pinMode(i,OUTPUT);
}
}

void loop(){
for (int i=0;i<9;i++){
digitalWrite(i,HIGH);
delay(300);
digitalWrite(i,LOW);
}

for (int i=8;i>0;i--){
digitalWrite(i,HIGH);
delay(300);
digitalWrite(i,LOW);
}
}

folyt. Köv.