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 |
---|---|---|
if | Belirtilen 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); } |
else | Hiç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°C | LED yanar. |
Sıcaklık <= 30°C | LED 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 == 1 | Kırmızı LED yanar. |
Durum == 2 | Sarı LED yanar. |
Durum == 3 | Yeş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 |
---|---|
1 | Kırmızı LED yanar. |
2 | Sarı LED yanar. |
3 | Yeş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
Ö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.
Bu Gönderiye Yorum Yapılmamış