2014.06.17.
18:20

Írta: harsanyireka

10. Vezérlő struktúrák

Lektorált tananyag, ami a BKF Digitális és Kollaboratív Művészet (DIKOM) pályázatnak keretén belül valósult meg.

Szerző: Harsányi Réka, Társszerző: Juhász Márton András, Lektor: Fernezelyi Márton

If állítás

Az if() állítás a legalapvetőbb vezérlő struktúra. Lehetővé teszi, hogy valami megtörténjen, vagy ne történjen meg, attól függően, hogy a feltétel igaz vagy hamis. Így néz ki:

if (someCondition) {
   // csinálj dolgokat, ha a feltétel igaz
}

Van egy gyakoribb verziója is, amit if-else-nek neveznek:

if (someCondition) {
   // csinálj dolgokat, ha a feltétel igaz

} else {
   // csinálj dolgokat, ha a feltétel hamis
}

Létezik az else-if verzió is, ebben az esetben, ha az első feltétel hamis, akkor a másodikat is megvizsgálja:

if (someCondition) {
   // csinálj dolgokat, ha a feltétel igaz
} else if (anotherCondition) {
   // csinálj dolgokat, ha a feltétel hamis
   // és a második feltétel igaz
} 

Az alábbi példa bekapcsolja a LED-et, ha az analóg bemeneten kiolvasott érték a küszöbérték alá megy.

Bekötése: A LED pozitív lába elé kössünk be egy 220 ohmos ellenállást is, a potméter középső lábát az A0-ba, a két szélsőt az 5 V-ba és a feszültségbe.

10.1. †bra PotmÇter LED-del.png

Potméter LED-del

Az analogValue nevű változóban fogjuk eltárolni a potméterből kiolvasott adatokat. Ezeket hasonlítjuk majd össze a küszöbértékkel. Ha a felett van az érték, bekapcsol a LED, ha alatta van, akkor kikapcsol.

Arduino kód: 32if

For ciklus

Néha arra van szükség, hogy ismétlődjön a folyamat, pl. pinek sorozatán ugyanaz a parancs fusson le, vagy növelni, illetve csökkenteni akarunk egy változót és újra elvégezni rajtuk az utasításokat. Ilyenkor a for() ciklus a legmegfelelőbb megoldás.

A következő példában digitális 2–7 pinbe egy-egy LED-et kötünk és egymás utáni sorban be- és kikapcsoljuk őket egyik irányba, majd visszafelé is. A cikluson belül a digitalWrite() és a delay() függvényeket fogjuk használni.

Bekötése: Mindegyik piros 5 mm-es LED-ünk pozitív lába elé bekötünk egy-egy 220 ohmos ellenállást, ezeket a digitális 2, 3, 4, 5, 6, 7 pinekbe kötjük, a negatív lábakat pedig leföldeljük.

10.2 †bra 6 LED bekîtÇse.png

6 LED bekötése 

Arduino kód: 33for

A loopban két for() ciklus szerepel, az elsőben a 2. pintől indulva lépkedünk a 7-ig, a másodikban fordítva, a 7-estől indulunk, és mindig eggyel csökkentve az értéket eljutunk a 2-ig. Illetve a pineket is for ciklussal inicializáljuk. A for ciklus addig ismétlődik, amíg a kerek zárójelben lévő feltétel teljesül, utána továbblép.

 

Tömbök

A for ciklus példáját alakítjuk át úgy, hogy a pinek értékeit tömbben tároljuk el, és innen olvassuk ki őket mind az inicializálásnál, mind a loopban szereplő két for ciklusban.

Bekötése: Mindegyik piros 5 mm-es LED-ünk pozitív lába elé bekötünk egy-egy 220 ohmos ellenállást, ezek kerülnek bekötésre a digitális 2, 3, 4, 5, 6, 7 pinekbe, a negatív lábakat pedig leföldeltük.

 10.3 †bra 6 LED bekîtÇse.png

 6 LED bekötése

Arduino kód: 34tombok

 

While ciklus

A while ciklus addig fut, amíg a feltétele teljesül. Ebben az esetben, amikor megnyomjuk a gombot, lefut a fotóellenállás kalibrálására vonatkozó parancssor. Ezután a fotóellenállásból kiolvasott analóg értékeket skálázás után kiküldjük a LED fényerejét vezérlő PWM pinre. Minél nagyobb a beérkező érték, annál erősebben világít a LED.

Bekötése: A LED pozitív lábát a 220 ohmos ellenálláson át a 9 PWM pinbe kötjük, a negatívat a földelésbe. A kapcsolóhoz 10 kiloohmos ellenállást használunk, ezen keresztül a bal alsó lábát bekötjük a földelésbe, a jobb alsót az 5 V pinbe, a bal felsőt pedig a 2 pinbe. A fotóellenállás bármilyen irányban beköthető, egyik oldala az 5 V pinbe, a másik szintén 10 kiloohmos át a földelésbe és az analóg 0 pinbe is megy.

10.4 †bra Nyom¢gomb, fot¢ellen†ll†s Çs LED bekîtÇse.png

Nyomógomb, fotóellenállás és LED bekötése

Arduino kód: 35while

 

Switch utasítás szenzor kiolvasással

Az if feltételnek két kimenetele lehet, igaz vagy hamis, ettől függően lefut vagy nem fut le a parancs. A switch kifejezésben egyszerre több feltételt vizsgálhatunk, és az fut le közülük, amelyik épp teljesül. Ebben a példában a fotóellenállásból kiolvasott értékekhez rendelünk a fényre vonatkozó definíciókat: sötét (dark), gyenge (dim), közepes (medium), világos (bright). A szenzor érzékelési tartományát a kód elején adjuk meg, most 0–600 közötti, de ennek megváltoztatásával kísérletezhetünk. A beolvasott értéket a map() utasítással 0–3 közötti értékre skálázzuk, ez összesen négy darab lehetőséget eredményez (0, 1, 2, 3), mindegyikhez tartozik egy switch utasítás.

Bekötése: A fotóellenállás egyik lábát az 5 V pinbe, a másikat az analóg 0-ba és egy 10 kiloohmos ellenálláson át a földelésbe is bekötjük.

 10.5 †bra Fot¢ellen†ll†s bekîtÇse.png

Fotóellenállás bekötése

Arduino kód: 36switchSzenzor

 

Switch utasítás soros bemenettel

Most a switch case-t LED-ek bekapcsolására fogjuk használni. Attól függően kapcsol be egyik vagy másik LED, hogy a soros porton a, b, c, d vagy e érték érkezik be. Ha megnyitjuk a serial monitort, le tudjuk őket követni. ASCII táblázatban meg tudjuk nézni, melyik karakternek mennyi a számértéke, pl. „a” = 97, „b” = 98 stb.

Bekötése: Mindegyik piros 5 mm-es LED-ünk pozitív lába elé bekötünk egy-egy 220 ohmos ellenállást, ezek mennek a digitális 2, 3, 4, 5, 6, 7 pinekbe, a negatív lábakat pedig leföldeljük.

10.6 †bra 6 LED bekîtÇse.png

6 LED bekötése

Arduino kód: 37switchSoros

 

forrás: http://arduino.cc/en/Tutorial/HomePage

Szólj hozzá!

Címkék: leckék lektorált

A bejegyzés trackback címe:

https://harsanyireka.blog.hu/api/trackback/id/tr166315146

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása