Arduino Programlamada Kullanılan Kontrol Yapıları

5 14.820

Arduino programlamada kullanılan kontrol yapılarının kullanımı ve işlevleri hakkında bilgi vereceğiz.

Arduino Programlama Kullanılan Kontrol Yapıları:

  • ‘İf , else if, else’ Yapısı:

İf ‘eğer’ anlamına gelmektedir.Karşılaştırma yapmak için sıklıkla kullanılan operatörlerin başında gelir.Örnek:

if (x < 500) { digitalWrite(led, HIGH);}

else if (x >= 1000) { digitalWrite(led, LOW);}

else { // digitalWrite(led, HIGH);

delay(500);

digitalWrite(led, LOW);}

Bu tanımlamamızda x değeri 500 den küçük ise ledi aç,1000 den büyük ise ledi kapat, 500 den büyük 1000 den küçük ise ledi 500 ms açıp kapatacaktır.Burada if ile else if aynı yapıda, else operatörü ise tanımlanan ifadelerin dışındaki ifadeleri kapsamaktadır.Yani else operatörüne tanım aralığı girmiyoruz.

  • ‘for’ Yapısı:

Genellikle artış veya azalış sayacı olarak kullanılır.Bir değerden başka bir değere kadar artıp yada azalarak son değerden sonra döngüyü bitiren operatördür.

Örnek:

for(int x = 1; x < 100; x = x+2)
{
println(x);
}

Bu örneğimizde x değerini birden başlatarak 2 şer arttırımla 100 den küçük olana kadar tüm değerlerin çıktısını aldık.
1,3,5,7,9,….97,99

  • ‘switch case’ Yapısı:

switch ifadesi bir nesneye atanan değerleri alır ve alt ifade ‘case’ operatörüne gönderir.Bu ifade de değerleri karşılaştırır ve denk gelen ifadeleri çalıştırır.Her ‘case’ ifadesinin sonunda ‘break’ komutu yer alır.Bu komutla döngü bitirilir.Yani ‘case’ komutuna yazılan ifadeler sadece bir kez çalışarak ‘break’ komutu ile sonlanır.Bu sayede algoritmada çakışmalar önlenmiş olur.Son olarak ‘default’ komutu ile de ‘case’ lerde tanımlanmamış ifadeler bu tanımlamaya girerek gerekli algoritma yapılandırılır.

Örnek:

switch (var)

{

case ‘1’:

digitalWrite(led,HIGH);

break;

case ‘2’:

digitalWrite(led,LOW);

default:

Serial.println(“Tanımlanmamış ifade”);

}
  • ‘do while’ Yapısı:

Burada while operatörü karşılaştırmalarda şartı içeriyorsa do ifadesine göndererek tekrar hesaplama yaptırarak yeni değeri karşılaştırır.

Örnek:

do
{
 delay(50); 
 x = readSensor(); 
} while (x < 100);

Bu örnekte x değeri 100 ün altında olduğu sürece sensörden veri okunacaktır.

  • ‘Continue’ Yapısı:

Do, while veya for döngülerinde bir aralığı atlamak istiyorsak bu ifadeyi kullanmamız gerekir.

Örnek:

for (x = 0; x < 255; x ++)
{
if (x > 30 && x < 110){
continue;
}
analogWrite(sensor, x);
delay(50);
}

 

Bu örnekte x değeri o dan 255 kadar birer artarak sensör değerine yazılmaktadır.Fakat 30 ile 110 arasındaki değerleri atlayarak sensöre yazmamaktadır.

  • ‘return’ Yapısı:

Bir fonksiyonu sonlandırarak yeni fonksiyon çağırarak yeni değerle döndürür.

Örnek:

double constrain(double x, float a, float b) 
{ 
if(x < a) return a;
 if(x> b) return b;
 return value;
}

Burada x değeri a dan küçük ise x e a değerini ata.x b den büyük ise x e b değerini ata.

  • ‘goto’ Yapısı:

Bu yapı bir döngüyü sona erdirerek başka bir ifadeye geçmeyi sağlar.

Örnek:

for(val r = 0; r < 255; r++){
 for(val g = 255; g > -1; g--){
 for(valb = 0; b < 255; b++){
 if (analogRead(0) > 250){ goto sensor;}
 
 }
 }
}
sensor:
Bunlar da İlgini Çekebilir

Cevap bırakın

E-posta hesabınız yayımlanmayacak.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

5 Yorum
  1. aytaç

    merhaba bizim akıllı tünel yapmak için bir projemiz var. amacımız araç tünele girdiğinde aracın yolunu aydınlatacak lambaların belirli zaman aralıklarında sıralı olarak yanıp tekrar sönmesi. programı yazdık infrared sensör kullanarak lambaları yaktık ve sonrasında söndürdük ancak döngü bitmeden yani 2. araç geldiğinde döngünün yeniden başlamasını nasıl yapabiliriz uyardımcı olursanız sevinirim.

  2. Mehmet Melikşah ÇALIŞKAN

    void setup() {
    // put your setup code here, to run once:
    #define BEKLEME_SURESI 28
    pinMode(13, OUTPUT);
    pinMode(12, OUTPUT);
    pinMode(11, OUTPUT);
    pinMode(10, OUTPUT);
    pinMode(9, OUTPUT);
    pinMode(8, OUTPUT);
    pinMode(7, OUTPUT);
    pinMode(6, OUTPUT);
    }

    void loop() {
    // put your main code here, to run repeatedly:
    digitalWrite(13, HIGH);
    delay(BEKLEME_SURESI);
    digitalWrite(12, HIGH);
    delay(BEKLEME_SURESI);
    digitalWrite(13, LOW);
    delay(BEKLEME_SURESI);
    digitalWrite(11, HIGH);
    delay(BEKLEME_SURESI);
    digitalWrite(12, LOW);
    delay(BEKLEME_SURESI);
    digitalWrite(10, HIGH);
    delay(1000);
    digitalWrite(11, LOW);
    delay(BEKLEME_SURESI);
    digitalWrite(9, HIGH);
    delay(BEKLEME_SURESI);
    digitalWrite(10, LOW);
    delay(BEKLEME_SURESI);
    digitalWrite(9, LOW);
    delay(BEKLEME_SURESI);
    digitalWrite(9, HIGH);
    delay(BEKLEME_SURESI);
    digitalWrite(10, HIGH);
    delay(BEKLEME_SURESI);
    digitalWrite(9, LOW);
    delay(BEKLEME_SURESI);
    digitalWrite(11, HIGH);
    delay(BEKLEME_SURESI);
    digitalWrite(10, LOW);
    delay(BEKLEME_SURESI);
    digitalWrite(12, HIGH);
    delay(BEKLEME_SURESI);
    digitalWrite(11, LOW);
    delay(BEKLEME_SURESI);
    digitalWrite(13, HIGH);
    delay(BEKLEME_SURESI);
    while(digitalWrite (10) == HIGH);
    {digitalWrite(8, HIGH);
    delay(BEKLEME_SURESI);
    digitalWrite(7, HIGH);
    delay(BEKLEME_SURESI);
    digitalWrite(8, LOW);
    delay(BEKLEME_SURESI);
    digitalWrite(6, HIGH);
    delay(BEKLEME_SURESI);
    digitalWrite(7, HIGH);
    delay(BEKLEME_SURESI);
    digitalWrite(8, HIGH);
    delay(BEKLEME_SURESI);
    digitalWrite(6, LOW);}
    delay(BEKLEME_SURESI);}
    }

    abi ben bu kodu çalıştıramıyom nedenini söylermisin
    arduıno uno

    1. asd

      bekleme süresini 28 sn değilde 28. pine atmışın sanki?

  3. bahtiyar Ayaz

    Gerçektende anlatım çok güzel olmuş emeğine sağlık

    1. Sezgin GÜL

      teşekkürler