Arduino

Koşullu İfadeler (if-else) ile Arduino'da Karar Verme İşlemleri

Aykut AKMAN 8 ay önce Yorumlar (0) 5 Dakika Okuma
Koşullu İfadeler (if-else) ile Arduino'da Karar Verme İşlemleri
E-Posta : 571 0

Arduino projelerinde koşullu ifadeler, belirli bir duruma göre karar vermek ve farklı işlemler gerçekleştirmek için kullanılır. if, else if ve else ifadeleri, sensörlerden gelen verilerle işlem yapmak, LED’leri kontrol etmek veya motor gibi cihazları çalıştırmak için temel programlama yapılarıdır.

Koşullu İfadelerin Temel Yapısı

Koşullu YapıAçıklamaÖrnek Kod
ifBelirtilen koşul doğruysa kod bloğu çalışır.if (deger > 50) { digitalWrite(ledPin, HIGH); }
else ifİlk koşul yanlışsa ve belirtilen başka bir koşul doğruysa çalışır.else if (deger > 30) { digitalWrite(ledPin, HIGH); }
elseHiçbir koşul sağlanmazsa çalışır.else { digitalWrite(ledPin, LOW); }

Örneklerle Koşullu İfadeler

1. LED’i Sıcaklık Sensörüne Göre Kontrol Etme

Durumİşlem
Sıcaklık > 30°CLED yanar.
Sıcaklık <= 30°CLED söner.
int ledPin = 13;
int sensorPin = A0; // Sıcaklık sensörü bağlı
int sensorValue = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  sensorValue = analogRead(sensorPin); // Sensör verisi oku
  int temperature = map(sensorValue, 0, 1023, -40, 125); // Sıcaklık hesapla

  if (temperature > 30) {
    digitalWrite(ledPin, HIGH); // LED'i yak
  } else {
    digitalWrite(ledPin, LOW); // LED'i söndür
  }

  Serial.print("Temperature: ");
  Serial.println(temperature);
  delay(1000); // 1 saniye bekle
}

2. Birden Fazla Koşulla Trafik Lambası Simülasyonu

Durumİşlem
Durum == 1Kırmızı LED yanar.
Durum == 2Sarı LED yanar.
Durum == 3Yeşil LED yanar.
int redLed = 13;
int yellowLed = 12;
int greenLed = 11;
int state = 1;

void setup() {
  pinMode(redLed, OUTPUT);
  pinMode(yellowLed, OUTPUT);
  pinMode(greenLed, OUTPUT);
}

void loop() {
  if (state == 1) {
    digitalWrite(redLed, HIGH);
    digitalWrite(yellowLed, LOW);
    digitalWrite(greenLed, LOW);
  } else if (state == 2) {
    digitalWrite(redLed, LOW);
    digitalWrite(yellowLed, HIGH);
    digitalWrite(greenLed, LOW);
  } else if (state == 3) {
    digitalWrite(redLed, LOW);
    digitalWrite(yellowLed, LOW);
    digitalWrite(greenLed, HIGH);
  }
  
  state++;
  if (state > 3) {
    state = 1;
  }
  delay(1000);
}

3. Hareket Sensörüne Göre Alarm Sistemi

Durumİşlem
Hareket algılandıBuzzer çalar ve LED yanar.
Hareket algılanmadıBuzzer kapanır ve LED söner.
int motionPin = 2;
int buzzer = 3;
int led = 13;

void setup() {
  pinMode(motionPin, INPUT);
  pinMode(buzzer, OUTPUT);
  pinMode(led, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int motion = digitalRead(motionPin);

  if (motion == HIGH) {
    digitalWrite(buzzer, HIGH); // Buzzer çalsın
    digitalWrite(led, HIGH);    // LED yansın
    Serial.println("Hareket algılandı!");
  } else {
    digitalWrite(buzzer, LOW);  // Buzzer kapansın
    digitalWrite(led, LOW);     // LED sönsün
    Serial.println("Hareket yok.");
  }

  delay(500);
}

4. Kullanıcıdan Gelen Girişe Göre LED Kontrolü

Kullanıcı Girişiİşlem
1Kırmızı LED yanar.
2Sarı LED yanar.
3Yeşil LED yanar.

int redLed = 13;
int yellowLed = 12;
int greenLed = 11;

void setup() {
  pinMode(redLed, OUTPUT);
  pinMode(yellowLed, OUTPUT);
  pinMode(greenLed, OUTPUT);
  Serial.begin(9600);
  Serial.println("1: Kırmızı, 2: Sarı, 3: Yeşil LED yak.");
}

void loop() {
  if (Serial.available()) {
    char input = Serial.read();
    if (input == '1') {
      digitalWrite(redLed, HIGH);
      digitalWrite(yellowLed, LOW);
      digitalWrite(greenLed, LOW);
    } else if (input == '2') {
      digitalWrite(redLed, LOW);
      digitalWrite(yellowLed, HIGH);
      digitalWrite(greenLed, LOW);
    } else if (input == '3') {
      digitalWrite(redLed, LOW);
      digitalWrite(yellowLed, LOW);
      digitalWrite(greenLed, HIGH);
    }
  }
}

Koşullu İfadelerle Çalışmanın Püf Noktaları

Doğru Karşılaştırma Operatörlerini Kullanın

  • == → Eşit mi?
  • != → Eşit değil mi?
  • > → Büyük mü?
  • < → Küçük mü?

else if Kullanımı

  • Birden fazla koşulu sıralamak için kullanışlıdır. Ancak gereksiz yere kullanılmamalıdır.

Mantıksal Operatörlerle Koşulları Birleştirin

  • &&: Tüm koşullar doğruysa çalışır.
  • ||: Koşullardan biri doğruysa çalışır.

Optimize Kod Yazımı

  • Fazla iç içe if kullanımlarından kaçının. Kod okunabilirliğini düşürür.

Koşullu ifadeler, Arduino'da karar verme işlemlerinin temelidir. Sensörlerden gelen verilerle hareket algılama, trafik lambası kontrolü veya kullanıcı girdilerine göre işlem yapma gibi çok sayıda senaryoda kullanılabilir. 

Sıkça Sorulan Sorular

  • if: Belirli bir koşul doğruysa bu bloğun içindeki kod çalıştırılır.
  • else if: İlk koşul doğru değilse ve başka bir koşul doğruysa bu blok çalıştırılır.
  • else: Hiçbir koşul sağlanmazsa bu blok çalıştırılır.
    Örnek:
  • if (sıcaklık > 30) {
      digitalWrite(ledPin, HIGH); // LED'i yak
    } else {
      digitalWrite(ledPin, LOW);  // LED'i söndür
    }

    Birden fazla koşul, mantıksal operatörler kullanılarak kontrol edilebilir:

    • && (VE): Tüm koşullar doğruysa çalışır.
    • || (VEYA): Koşullardan biri doğruysa çalışır.
      Örnek:
    if (deger1 > 100 && deger2 < 50) {
      digitalWrite(ledPin, HIGH); // LED yanar
    }

    Sıcaklık sensöründen gelen veriyi okuyarak bir LED kontrol edebilirsiniz:

    if (sıcaklık > 25) {
      digitalWrite(ledPin, HIGH); // LED'i yak
    } else {
      digitalWrite(ledPin, LOW);  // LED'i söndür
    }

    Hareket algılandığında bir buzzer çalmasını ve LED'in yanmasını sağlayabilirsiniz:

    if (motion == HIGH) {
      digitalWrite(buzzer, HIGH); // Buzzer çalar
      digitalWrite(ledPin, HIGH); // LED yanar
    } else {
      digitalWrite(buzzer, LOW);  // Buzzer kapanır
      digitalWrite(ledPin, LOW);  // LED söner
    }

    Bir trafik lambası simülasyonunda her LED’in belirli bir sırayla yanmasını sağlayabilirsiniz:

    if (state == 1) {
      digitalWrite(redLed, HIGH); // Kırmızı LED yanar
    } else if (state == 2) {
      digitalWrite(yellowLed, HIGH); // Sarı LED yanar
    } else if (state == 3) {
      digitalWrite(greenLed, HIGH); // Yeşil LED yanar
    }

    Seri monitörden alınan girişe göre LED kontrol edebilirsiniz:

    if (input == '1') {
      digitalWrite(redLed, HIGH); // Kırmızı LED yanar
    } else if (input == '2') {
      digitalWrite(yellowLed, HIGH); // Sarı LED yanar
    } else if (input == '3') {
      digitalWrite(greenLed, HIGH); // Yeşil LED yanar
    }

    Birden fazla sensörü kontrol etmek için if ve else if bloklarını kullanabilirsiniz:

    if (sensor1 > 500 && sensor2 < 300) {
      digitalWrite(ledPin, HIGH); // LED yanar
    } else {
      digitalWrite(ledPin, LOW);  // LED söner
    }

    Mantıksal operatörler (&&, ||, !) birden fazla koşulu bir arada kontrol etmek için kullanılır:

    if (x > 10 && y < 20) {
      Serial.println("Koşullar sağlandı.");
    }

    Karşılaştırma operatörleri şunlardır:

    • == (Eşittir): İki değerin eşit olup olmadığını kontrol eder.
    • != (Eşit Değildir): İki değerin eşit olmadığını kontrol eder.
    • > (Büyüktür): Sol değer sağ değerden büyükse doğru döner.
    • < (Küçüktür): Sol değer sağ değerden küçükse doğru döner.
      Örnek:
    if (x == y) {
      Serial.println("Eşit.");
    }

    else if, birden fazla koşulu kontrol etmek için gereklidir. Örneğin:

    if (sıcaklık > 30) {
      Serial.println("Sıcaklık çok yüksek!");
    } else if (sıcaklık > 20) {
      Serial.println("Sıcaklık normal.");
    } else {
      Serial.println("Sıcaklık çok düşük.");
    }

    Bu durumda, sıcaklık farklı aralıklarda olduğunda uygun mesaj görüntülenir.

    Aykut AKMAN

    Aykut AKMAN

    Bilişim Öğretmeni

    Bu Gönderiye Yorum Yapılmamış

    Yorum Yap

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

    Diğer Yazılar