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

Sistem konuşuyor, sen cevap veriyorsun

Serial Monitor'ü sahte sensöre çevir

hedef

Koda sayı göndermek ve onu geri okumak. Bu kursun tamamı bunun üstüne kurulacak.

Önce şunu bil: sensör sihirli bir şey değil

Kitlerde bir toprak nemi sensörü takacaksın. İçinde ne var, nasıl çalışıyor, önemli değil. Koda dokunduğu yerde yaptığı tek şey şu:

Bir sayı üretmek.

O kadar. analogRead(A0) dediğinde sana 612 gelir. Sensörün bütün marifeti budur.

Peki sensör olmadan bunu nasıl öğreneceksin? Sayıyı sen yazarak. Klavyeden 612 yaz, kod onu sensörden gelmiş gibi işlesin.

Bu bir hile değil, mühendislikte gerçek bir yöntem. Sistemi kurarken sensör henüz gelmemiş olabilir, ya da test etmek istediğin durumu sensörle üretemiyor olabilirsin. O zaman veriyi taklit edersin. Buna benzetim denir.

Üstelik bir avantajı var: gerçek sensörle "peki 1023 gelirse ne olur" diye soramazsın, toprağı çöle çeviremezsin. Klavyeyle sorabilirsin.

Değişken — hatırlatma

kod · .ino
int deger = 612;

Kutu, etiket, içindeki. Kodun dili Görev 2 ve Görev 3'te ayrıntısıyla var; burada sadece kullanıyoruz.

Bu kursta önemli olan tek tip ayrıntısı şu: sensörden gelen sayı tam sayı, o yüzden int. Sıcaklık ondalıklı, o yüzden float. Hangisini seçtiğin yer kaplar ve hız değiştirir — bedava bir şey yok.

Kod

kod · .ino
void setup() {
  Serial.begin(9600);
  Serial.println("Bir sayi yaz ve Enter'a bas:");
}

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

    Serial.print("Aldigim sayi: ");
    Serial.println(deger);
  }
}

Yükle, Serial Monitor'ü aç, üstteki kutuya 612 yaz ve Enter'a bas.

Üç satırı tanı:

Serial.available() — "gelen bir şey var mı?" diye sorar. Sen bir şey yazana kadar sıfır döner, bu yüzden if içindeki kod hiç çalışmaz. Yazdığın an içeri girer.

Serial.parseInt() — gelen karakterleri okuyup sayıya çevirir. "612" yazısını 612 sayısına.

while (Serial.available()) Serial.read(); — Enter'a bastığında görünmez bir satır sonu karakteri de gider. Onu temizlemezsen bir sonraki okumaya karışır. Bu satır artıkları süpürüyor.

Çalıştı mı?

kod
Bir sayi yaz ve Enter'a bas:
Aldigim sayi: 612
Aldigim sayi: 480

Her yazdığın sayı geri gelmeli.

Şimdi sen yaz

Kod şu an sayıyı alıp geri yazıyor, başka bir şey yapmıyor. Ona bir iş ver: aldığı sayının iki katını da yazsın.

🔍 İpucu 1

Yeni bir değişkene ihtiyacın var. int ile tanımla, içine deger * 2 koy.

Çarpma işareti *.

✅ Cevap
kod · .ino
int iki_kati = deger * 2;
Serial.print("Iki kati: ");
Serial.println(iki_kati);

Değişkene ihtiyacın var mıydı? Hayır — Serial.println(deger * 2); de yazabilirdin, aynı sonucu verirdi.

Ama bir hesabı bir kereden fazla kullanacaksan ona isim vermek işini kolaylaştırır. Ve isim verirken ne olduğunu yaz, nasıl hesaplandığını değil. iki_kati iyi bir isim; x değil.

📄 Görevin tam kodu
kod · .ino
void setup() {
  Serial.begin(9600);
  Serial.println("Bir sayi yaz ve Enter'a bas:");
}

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

    int iki_kati = deger * 2;

    Serial.print("Aldigim sayi: ");
    Serial.println(deger);
    Serial.print("Iki kati: ");
    Serial.println(iki_kati);
  }
}

Olmadıysa

Ne görüyorsun Ne yap
Ekranda anlamsız karakterler Serial Monitor'ün hızı 9600 değil, sağ alttan düzelt
Yazdığım sayı hep 0 çıkıyor Sayı yazmadan Enter'a basmışsın olabilir; tekrar dene
Hiçbir şey olmuyor Üstteki yazı kutusuna yazıp Enter'a bastın mı?
Her sayıdan sonra fazladan bir 0 satırı while (Serial.available()) Serial.read(); satırını yazmamışsın

Kendini test et

Soru: Bu kod loop içinde saniyede binlerce kez dönüyor. Peki neden ekran sürekli yazıyla dolmuyor?

Cevabı gör

Çünkü if (Serial.available() > 0) satırı bekçilik yapıyor.

loop gerçekten binlerce kez dönüyor. Ama her seferinde ilk satırda "gelen bir şey var mı?" diye soruyor ve cevap neredeyse hep "hayır" oluyor. O zaman if'in içine hiç girmeden dönüp başa gidiyor.

Bu kalıbı aklında tut: loop sürekli döner, ama içindeki işler bir şart sağlandığında yapılır. Kitlerdeki bütün sistemler böyle çalışıyor — sulama sistemi saniyede bin kez toprağa bakar ama yılda sadece birkaç yüz kez sular.


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

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