2 / 8 tamamlandı
görev 2 · ~30 dk

Sayıya anlam vermek

Eşik koy, karar verdir — sensör anlam vermez, sen verirsin

hedef

Gelen sayıya bakıp karar veren bir kod yazmak. Kitlerdeki her sistemin kalbi bu.

Önce şunu bil

Toprak nemi sensörü sana 612 der. Bu ne demek? Islak mı, kuru mu?

Sensör bunu bilmiyor. O sadece bir sayı üretiyor. "612 kuru demektir" kararını veren sen olacaksın.

Bu ayrım göründüğünden büyük. Sensörler ölçer, anlamı insan koyar. Termometre 38 der; onun "ateş" olduğuna karar veren doktordur. Sensör 612 der; onun "susuz" olduğuna karar veren sensin.

Bu karar sınırına eşik deniyor.

Eşiği koda dökmek

Karar vermenin aracı if — Kodun dili Görev 4'te karşılaştırma işaretleriyle birlikte anlatıldı. Burada aracı değil, eşiğin kendisini konuşuyoruz:

kod · .ino
if (deger > 600) {
  Serial.println("SUSUZ");
} else {
  Serial.println("iyi");
}

Buradaki asıl soru if'in nasıl yazıldığı değil: 600 sayısı nereden geliyor?

Cevap: senden. Sensör onu vermiyor, kitapta yazmıyor, internette doğrusu yok. Kendi toprağını kendi sensörünle ölçüp bulacaksın. İki ölçüm yeter — kuru toprakta bir sayı, sulanmış toprakta bir sayı. Eşik ikisinin arasında bir yerde.

Eşik bir ölçüm sonucu, bir tahmin değil. Başkasının 600'ü senin toprağında 450 olabilir. Kopyaladığın eşik, kopyaladığın varsayımdır.

Kod

kod · .ino
const int ESIK = 600;

void setup() {
  Serial.begin(9600);
  Serial.println("Toprak degeri gir (0-1023):");
}

void loop() {
  if (Serial.available() > 0) {
    int deger = Serial.parseInt();
    while (Serial.available()) Serial.read();

    Serial.print(deger);
    Serial.print("  ->  ");

    // ŞİMDİ SEN YAZ:
    // deger ESIK'ten buyukse "SUSUZ", degilse "iyi" yazdir.
  }
}

const ne demek? "Bu değişmeyecek" demek. ESIK bir kez 600 oluyor ve kod boyunca öyle kalıyor. Değiştirmeye kalkarsan derleyici hata verir — bu iyi bir şey, seni kendi hatandan koruyor.

Büyük harfle yazmak zorunlu değil ama alışkanlık: kodda BÜYÜK bir isim görünce "bu bir ayar, yukarıda tanımlı" diye anlarsın. Kitlerde SUSUZ_ESIGI, ACIK_KALMA, KART_SAYISI göreceksin — hepsi aynı fikir.

Şimdi sen yaz

🔍 İpucu 1

if (...) { ... } else { ... } kalıbını kullan.

Yazdırmak için Serial.println("SUSUZ");

✅ Cevap
kod · .ino
if (deger > ESIK) {
  Serial.println("SUSUZ");
} else {
  Serial.println("iyi");
}

Şarta 600 değil ESIK yazdığımıza dikkat et. İkisi de çalışır — ama eşiği değiştirmen gerektiğinde birinde tek satır düzeltirsin, diğerinde kodun içinde 600'leri aramaya başlarsın.

Sihirli sayıları koda dağıtma. Bir sayıyı bir kereden fazla kullanacaksan ya da ileride değiştirebileceksen, ona bir isim ver ve yukarıda tanımla.

📄 Görevin tam kodu
kod · .ino
const int ESIK = 600;

void setup() {
  Serial.begin(9600);
  Serial.println("Toprak degeri gir (0-1023):");
}

void loop() {
  if (Serial.available() > 0) {
    int deger = Serial.parseInt();
    while (Serial.available()) Serial.read();

    Serial.print(deger);
    Serial.print("  ->  ");

    if (deger > ESIK) {
      Serial.println("SUSUZ");
    } else {
      Serial.println("iyi");
    }
  }
}

Çalıştı mı?

Sırayla şunları yaz:

kod
300   ->  iyi
612   ->  SUSUZ
599   ->  iyi
601   ->  SUSUZ

Son ikisine dikkat et: iki sayı arasında sadece 2 fark var ama kararlar zıt. Eşik tam oradan geçiyor.

Olmadıysa

Ne görüyorsun Ne yap
Hep "iyi" yazıyor Karşılaştırmayı ters yazmışsın: < yerine > olacak
Derleme hatası: expected ')' if parantezinde = yazmışsın, > olacak
Derleme hatası: ESIK was not declared const int ESIK satırını setup'ın üstüne, en dışa yazdın mı?

Kendini test et

Soru: Gerçek bir toprak sensöründe eşiği 600 yapmak doğru mu?

Cevabı gör

Bilinemez. Çünkü 600 senin sensörünün sayısı değil.

Sensörün verdiği aralık kartına göre değişiyor: Arduino UNO'da 0–1023, Deneyap'ta 0–4095. Toprağın cinsine, sensörün yaşına, hatta suyun mineraline göre de değişiyor.

İnternette gördüğün "500'ün altındaysa sula" gibi hazır sayılar bu yüzden sende çalışmaz.

Doğru yöntem: sensörü havada okut, suda okut, iki sayıyı yaz, eşiği aralarından seç. Buna kalibrasyon denir ve ölçüm yapan her cihazın ilk işi budur.

Akıllı Sera kitinin ilk görevi tam olarak bu. Şimdi oraya geldiğinde ne yaptığını biliyor olacaksın.


Takıldın, hata tablosu da yetmedi mi?

WhatsApp'tan sor — hangi görevdesin, ekranda ne yazıyor, devrenin fotoğrafı.