← Kodun diligörev 2 / 10
2 / 10 tamamlandı
görev 2 · ~30 dk

Değişken — sayıyı bir yere koymak

Etiketli kutu, "=" işareti ve Serial Monitor

hedef

Klavyeden yazdığın bir sayıyı kod alacak, bir yere koyacak, üstünde işlem yapıp geri yazacak.

Önce şunu bil: değişken etiketli bir kutudur

Karalama kâğıdında bir hesap yapıyorsun. Ara sonucu bir kenara yazıyorsun, yanına "toplam" diye not düşüyorsun. Sonra ona geri dönüp kullanıyorsun.

Değişken bu. Üstünde etiket olan bir kutu: içine bir şey koyuyorsun, sonra adıyla çağırıyorsun.

kod · .ino
int puan = 0;

Üç parça:

= işareti "eşittir" demek değil. "İçine koy" demek.

Sağdakini al, soldaki kutuya koy. Bu cümleyi ezberle; Görev 4'te hayat kurtaracak.

Bu yüzden şu satır matematikte saçma ama kodda gayet anlamlı:

kod · .ino
puan = puan + 1;

"Kutudakini al, bir ekle, geri koy." Puan 0'dı, 1 oldu. Bir daha çalışırsa 2 olur.

Serial Monitor — kartla konuşma yolu

Kartın ekranı yok. Ama USB kablosundan bilgisayara yazı yollayabiliyor ve senin yazdığını okuyabiliyor. Bu pencereye Serial Monitor deniyor. Bu kursun geri kalanını burada geçireceksin.

IDE'de sağ üstteki büyüteç simgesine bas. Sağ alttaki hız kutusunu 9600 yap — kodda da 9600 yazacağız, ikisi tutmazsa anlamsız karakterler görürsün.

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 42 yaz, Enter'a bas.

Yeni satırlar:

Serial.begin(9600) — konuşmayı başlat. Bir kez, o yüzden setup'ta.

Serial.println("...") — tırnak içindekini ekrana yaz ve satırı bitir. print aynı şeyi yapar ama satırı bitirmez, sonraki yazı yanına gelir.

if (Serial.available() > 0) — "gelen bir şey var mı?" Sen bir şey yazana kadar cevap hayır, içerideki satırlar çalışmıyor. if'i Görev 4'te tam öğreneceksin; şimdilik "şart sağlanırsa içeriye gir" diye oku.

Serial.parseInt() — gelen yazıyı sayıya çevirir. "42" yazısını 42 sayısına. Ve onu deger kutusuna koyuyoruz.

while (Serial.available()) Serial.read(); — Enter'a basınca görünmez bir karakter de gidiyor, bu satır onu süpürüyor. Şimdilik olduğu gibi kopyala; while'ı Görev 6'da öğreneceksin.

Çalıştı mı?

kod
Bir sayi yaz ve Enter'a bas:
Aldigim sayi: 42
Aldigim sayi: 7

Her yazdığın sayı geri gelmeli.

Şimdi hata yap

Şu satırı loop içindeki int deger = ... satırının hemen altına ekle:

kod · .ino
int deger = 100;

Yani deger adında ikinci bir kutu açmaya çalışıyorsun. Yükle.

kod
error: redeclaration of 'int deger'

Aynı odada iki kutuya aynı etiketi yapıştıramazsın — kart hangisini kastettiğini bilemez. Her ad bir kez tanımlanır. Değerini değiştirmek istiyorsan int yazmadan sadece deger = 100; dersin: yeni kutu açmıyorsun, olanın içini değiştiriyorsun.

Eklediğin satırı sil.

Şimdi sen yaz

Kod bir sayı alıyor. Sen iki sayı al, toplamlarını üçüncü bir kutuda tut ve yazdır.

İki sayıyı aynı satıra, aralarında boşluk bırakarak yazacaksın: 3 5 sonra Enter. parseInt ilk sayıyı okur, boşluğu atlar; ikinci parseInt ikinciyi okur.

kod · .ino
void setup() {
  Serial.begin(9600);
  Serial.println("Iki sayi yaz, arada bosluk birak, Enter'a bas:");
}

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

    // ŞİMDİ SEN YAZ: toplam adinda bir kutu ac, icine ikisinin toplamini koy

    // ŞİMDİ SEN YAZ: toplami ekrana yazdir
  }
}
🔍 İpucu 1

Yeni kutu açmanın kalıbı: tür, ad, =, değer. Toplama işareti +.

🔍 İpucu 2

int toplam = birinci + ikinci; — sonra Serial.println(toplam);

✅ Cevap
kod · .ino
int toplam = birinci + ikinci;
Serial.print("Toplam: ");
Serial.println(toplam);

Üçüncü kutuya gerçekten ihtiyaç var mıydı? Hayır — Serial.println(birinci + ikinci); de olurdu. Ama bir hesabı bir kereden fazla kullanacaksan ona ad vermek işi kolaylaştırır. Ve ad verirken ne olduğunu yaz: toplam iyi, t kötü, x daha kötü. Üç ay sonra kendi kodunu okuyacaksın.

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

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

    int toplam = birinci + ikinci;
    Serial.print("Toplam: ");
    Serial.println(toplam);
  }
}

Olmadıysa

Ne görüyorsun Ne yap
Ekranda anlamsız karakterler Serial Monitor'ün hızı 9600 değil. Sağ alttaki kutudan düzelt
Yazdığım sayı hep 0 çıkıyor Sayı yazmadan Enter'a basmışsın olabilir. Bir de sayı yazdığından emin ol — harf yazarsan 0 gelir
Hiçbir şey olmuyor Üstteki kutuya yazıp Enter'a bastın mı? Yazmak yetmiyor
'toplam' was not declared Kutuyu açmadan kullanmışsın. int toplam = ... satırı Serial.println(toplam) satırından önce olmalı
İkinci sayı hep 0 çıkıyor İki sayıyı aynı satıra yazdın mı? 3 5 gibi, arada boşluk. Ayrı ayrı Enter'larsan ikincisi yetişmez

Kendini test et

Soru: puan = puan + 1; satırı çalıştıktan sonra puan'ın eski değeri nerede?

Cevabı gör

Hiçbir yerde. Gitti.

Kutuya yeni bir şey koyduğunda eskisi silinir. Kutunun hafızası yok, sadece içindeki var. Eski değeri saklamak istiyorsan yeni bir kutu açıp önce oraya kopyalaman gerekir.

Bu kulağa küçük bir ayrıntı gibi geliyor ama Sera kitinde tam bu yüzden bir hata yapacaksın: "bir önceki okuma neydi" diye bakmak isteyeceksin ve o değer çoktan üzerine yazılmış olacak. O zaman bu görevi hatırla.

Sera kitinde toprak sensöründen gelen sayı tam böyle bir kutuda duruyor: int toprak = analogRead(TOPRAK_PIN);. Pinin numarasını doğrudan yazmak yerine ona da bir ad veriyorsun — sebebi aynı: ad, sayının ne olduğunu söylüyor. Sensör sayıyı üretiyor, sen onu kutuya koyuyorsun, gerisi bu kursun konusu.


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

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