Sayıya anlam vermek
Eşik koy, karar verdir — sensör anlam vermez, sen verirsin
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:
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
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.
}
}
constne demek? "Bu değişmeyecek" demek.ESIKbir 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_SAYISIgöreceksin — hepsi aynı fikir.
Şimdi sen yaz
🔍 İpucu 1
if (...) { ... } else { ... } kalıbını kullan.
Yazdırmak için Serial.println("SUSUZ");
✅ Cevap
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
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:
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ı.