Eset választás


Ebben a cikkben olyan utasításokkal fogunk foglalkozni amik lehetővé teszik számunkra, hogy
bonyolult utasítás ciklusok felépítése nélkül, egyszerűen választhassunk a különböző lehetőségek
közül a programban. Erre kifejlesztett utasítás pár a switch – case, melyekkel könnyen orvosolhatjuk a többszörös elágazások problémáját.

Nézzünk egy ilyen esetválasztó mintát:

switch (változó) {

case érték1:

// utasítások1

break;

case érték2:

// utasítások2

break;

default:

// utasítások3

}


Switch (kapcsoló) ez után adjuk meg zárójelben azt a változót ami tárolja az összehasonlítandó
értékünket. A case érték1:ben tárolt utasítások végrehajtódnak ha „érték1” megegyezik „változó” értékével, ha nem ellenőrzi case érték2:-t. Egyezőség esetén végrehajtódik ez , különben tovább lép a következőre, ez itt a default (alapértelmezett) utasítás ami csak akkor hajtódik végre ha egyik case esetválasztás sem igaz.

A case blokkok záró utasítása a break, ami a kilépést biztosítja a switch esetválasztóból, de ugyan

így használható különböző ciklusokból való kilépésre is.


Első lépésben építsünk egy négy visszajelző ledböl álló kapcsolást, ezek fogják mutatni nekünk,
hogy rendesen működik-e a programunk. 270-330-as áramkorlátozó ellenállásokon keresztül kapcsoljuk a ledeket az Uno 2-5 kimeneteihez, kapcsoljunk rá még egy GND-t és kb. ennyi.


A következő progit töltsük fel:

void setup(){
pinMode(2,OUTPUT); // a setup beállítja a kimeneti pineket
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
Serial.begin(9600);//és a soros monitor sebességét
}

void loop(){
if(Serial.available())// figyeli a soros monitor bevitei mezőjét ha nem üres tovább lép a progi
{
int ertek= Serial.read();// beolvassa a soros monitorba beírt értéket
switch (ertek){ //itt pedig összehasonlítja azt esetválasztókkal
case 49: //ascII „1”
digitalWrite(2,HIGH);
break;
case 50: // ascII „2”
digitalWrite(3,HIGH);
break;
case 51: // asc”3”
digitalWrite(4,HIGH);
break;
default: // végrehajtódik ha egyik eset se igaz
digitalWrite(5,HIGH);
}
delay(1000); // várakozunk 1 mp eddig villágít az épp bekapcsolt led
digitalWrite(2,LOW); // aztán kikapcsoljuk azt
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
}
}


a progi a soros monitoron keresztül elküldött karakter asc kódját olvassa ki és ezt hasonlítja össze
a case-kban levő értékekkel.


Az ascII táblázat megtalálható :http://hu.wikipedia.org/wiki/ASCII oldalon.