Arduino Arduino Dersleri Gömülü Sistemler

Arduino Ders #5: Kontrol Yapıları “if-else, switch-case”

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.

SWİTCH

Kullanım şekli ise aşağıdaki gibidir.

sw,tch_ard

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.
sw_break

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);
         }
    }
  }
}

Similar Posts

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir