Program yazarken çoğu zaman her şey ak ve kara gibi net olmaz, çoğu zaman çeşitli koşullara göre farklı komutlar çalıştırmamız gerekir. Benzer şekilde çoğu komutun da yalnızca bir kez çalıştırılması bizim için yeterli gelmez, belli koşulları sağladığı sürece sürekli çalıştırılmasını istediğimiz komutlar olabilir. İşte bu gibi durumlar için Arduino programlama dilinde akış kontrol mekanizmaları vardır. Aslında en basitinden en karmaşığına kadar bütün programlama dillerinde bu mekanizmalar mevcuttur ve programlama dillerinin en önemli ögelerinden birisidir.
Karar verme kontrol deyimleri verilen şartı kontrol eder ve istenen sonuca göre istenen işlemleri yapar. Arduino programlama dilinde karar verme komutları; if, if else ve switch case’dir.
“if” Deyimi
if(şart)
{
komut veya komutlar;
}
if deyiminin içerisinde ki şart doğru(true) ise deyim içerisindeki komut çalışır, şart yanlış(false) ise komutları pas geçer.
if(butondurumu == HIGH)
{
digitalWrite(13,HIGH);
}
Örnekte butondurum adlı değişkenin içeriği okunur. İçerik HIGH ise 13 nolu pin Lojik 1 yapılır.
“if-else” Deyimi
if(şart)
{
komut veya komutlar;
}
else
{
komut veya komutlar;
}
if-else deyimi söz dizimi olarak if deyimine benzemektedir. if-else deyiminde şart doğru ise if deyiminin altındaki komut, şart yanlış ise else kelimesinin altında ki komut çalıştırmaktadır.
int x = 5;
if(x > 10);
{
digitalWrite(13,HIGH);
}
else
{
digitalWrite(13,LOW);
}
x adında tamsayı türündeki değişkene 5 sayı değeri atanır. İlk koşul ile x değişkeni 10 sayısından büyük mü? Sonuç True yani büyük ise 13 nolu pin Lojik 1 yapılır, değilse else komutuna atlar ve 13 nolu pin Lojik 0 yapılır.
int x = 4;
if(x > 10);
{
digitalWrite(13,HIGH);
}
else if (x < 5)
{
digitalWrite(13,LOW);
}
if/else dallanması if komutu içeriği yanlış ise else kısmına atlayarak else içerisinde ki komutu çalıştırmaktaydı. if/else-if dallanmasında ise if koşul içeriği kontrol edilir. Koşul doğru yani x değişkeni 10’dan büyük ise 13 nolu pin Lojik 1 yapılır. Koşul yanlış ise else kısmında ki if koşulu kontrol edilir. x küçük müdür 5’den? Koşul doğru ise 13 nolu pin Lojik 0 yapılır.
Switch case Komutu:
Switch komutu, if-else if-else sorgulama mantığıyla benzer şekilde işlemektedir. Burada herhangi bir değer söz konusudur. Mesela; program içerisinde herhangi bir değişkenden değer alınır. Bu değere göre farklı işlemler yaptırılır. Blok şeması aşağıdaki gibidir.
Kullanım şekli ise aşağıdaki gibidir.
switch-case olarakta kullanılan bu komutun çalışması şu şekildedir;
- öncelikle a adında bir değişken tanımlanmıştır. Blok diyagramda değer adında verilen kavramı a değişkeni karşılamaktadır.
- switch, anahtar kelime anlamında kullanılmaktadır. a değişkeninin aldığı değeri hangi case değeri karşılıyorsa o komut satırı işletilecektir.
- verilen örnekte a değişkeni içerisine “5” sayısı kaydedildiğinden “case 5” olarak ifade edilen satıra program akışı geçecek ve o satırda bulunan komut/komutlar çalıştırılacaktır.
- Burada çok önemli bir detay bulunmaktadır. Örneğin yukarıdaki program satırı incelendiğinde “case 5” çalıştırıldığında “case 5″ten sonraki tüm case değerleri(örnekte, case 7: ve default:) sırasıyla çalışacaktır. a değeri 3 olsaydı sırasıylao yüzden bu komut kullanıldığında istediğimiz case değerinin arkasından diğer case’lerinde çalışması istenmiyorsa break; komutu kullanılmalıdır. Kullanım formatı aşağıda görülmektedir.
break: komutu kullanıldığında, a değeri hangi case değerini karşılıyorsa o değerin olduğu case işletilecek ve bloktan çıkarak sona gidecektir. Programda bulunan default: değeri ise hiçbir case değerine karşılık bulunmadığında işletilir.
Switch Case Örnek Programı 1
int gun=5; //gun'e 5 değerini atadık
void setup()
{
Serial.begin(9600);
}
void loop()
{
switch (gun)
{
case 1:
Serial.println("Pazar");
break;
case 2:
Serial.println("Pazartesi");
break;
case 3:
Serial.println("Salı");
break;
case 4:
Serial.println("Çarşamba");
break;
case 5:
Serial.println("Perşembe");
break;
case 6:
Serial.println("Cuma");
break;
case 7:
Serial.println("Cumartesi");
break;
default:
// bu sayılardan herhangi biri girilmediyse
//yani yukarıdaki hiç bir koşulun gerçekleşmediği durumda
Serial.println("Yanlış bir değer girdiniz");
break;
}
}
Switch Case Örnek Programı 2
Seri ekrandan girilen a,b,c,d,e tuşlarına bağlı olarak ledleri yakan program.
void setup()
{
Serial.begin(9600);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
Serial.println("Bir harf giriniz: ");
}
void loop()
{
if (Serial.available() > 0)
{
int inByte = Serial.read();
switch (inByte)
{
case 'a':
digitalWrite(2, HIGH);
Serial.println("Bugün Pazartesi"); //örnek olarak yazdik
break;
case 'b':
digitalWrite(3, HIGH);
break;
case 'c':
digitalWrite(4, HIGH);
break;
case 'd':
digitalWrite(5, HIGH);
break;
case 'e':
digitalWrite(6, HIGH);
break;
default:
for (int thisPin = 2; thisPin < 7; thisPin++)
{
digitalWrite(thisPin, LOW);
}
}
}
}