Ana Sayfa · Akademi · Robotik ve Kodlama · Arduino · Dijital Giriş ve Çıkış

Dijital Giriş ve Çıkış

digitalRead ve digitalWrite ile bir butonla LED'i kontrol etmeyi öğren.

DERS PUSULASI

Bu sayfayı ne için kullanacaksın?

Ana fikir

Dijital çıkış bir pini açıp kapatarak LED gibi bir parçayı kontrol etmemizi, dijital giriş ise bir butonun basılı olup olmadığını okumamızı sağlar; bu iki fikri birleştirince Arduino'ya "butona basınca ışığı yak" gibi kararlar aldırabiliriz.

Üretilecek kanıt

Yukarıdaki butonlu LED devresini kurup çalıştır. Sonra kodu şöyle değiştir: butona her basıldığında LED durum değiştirsin (yanıyorsa sönsün, sönükse yansın) — tıpkı gerçek bir oda lambası anahtarı gibi. İpucu: Bir değişkende LED'in durumunu tut. Butonun basıldığı anı yakalamak için önceki okumayı da sakla. int butonPin = 2; int ledPin = 8; bool ledAcik =…

Kontrol tuzağı

pinMode satırını unutmak Pin türünü ayarlamazsan giriş ve çıkış beklendiği gibi çalışmaz. Butonu INPUT_PULLUP , LED'i OUTPUT olarak ayarlamayı setup içinde yap. Dirençsiz LED bağlamak LED'i doğrudan pine takarsan aşırı akım geçer. LED sönebilir veya pin zarar görebilir. Her zaman 220–330 ohm dirençle bağla.…

Sonraki bağlantı

Analog Okuma: Bir pin yalnızca açık/kapalı değil, arada birçok değer de okuyabilir. analogRead ile bir potansiyometreyi veya ışık sensörünü okuyup 0–1023 arası sayılara dönüştürmeyi öğreneceğiz.

Modül kaynakları: Python Tutorial · Arduino Learn

SeviyeBaşlangıç
Yaş10–16
Süre30–45 dk
Ön koşulİlk Kod: Blink
İçerikStandart ders · 1.502 kelime
Son güncelleme

Bir cümlelik özet

Dijital çıkış bir pini açıp kapatarak LED gibi bir parçayı kontrol etmemizi, dijital giriş ise bir butonun basılı olup olmadığını okumamızı sağlar; bu iki fikri birleştirince Arduino'ya "butona basınca ışığı yak" gibi kararlar aldırabiliriz.

Neden önemli?

Blink dersinde bir LED'i yakıp söndürmüştük. Ama o LED bizden hiçbir şey duymuyordu; sadece kodda yazdığımız süre kadar yanıp sönüyordu. Gerçek cihazlar ise çevrelerini dinler: bir düğmeye basarsın, ışık yanar; bir tuşa dokunursun, kapı açılır.

Bu derste Arduino'nun iki yönünü tanıyacağız. Dijital çıkış, Arduino'nun dünyaya bir şey göndermesidir: bir pini açar (5 volt) veya kapatır (0 volt). Dijital giriş ise Arduino'nun dünyayı dinlemesidir: bir pinde sinyal var mı, yok mu diye bakar.

"Dijital" kelimesi burada sadece iki değer olduğu anlamına gelir: açık ya da kapalı, 1 ya da 0. Arada bir yer yoktur. Bir buton için bu tam uyar; buton ya basılıdır ya değildir. Bu ikili mantık, tüm bilgisayarların temelidir.

Dijital çıkış: Bir pini kontrol etmek

Blink dersinden hatırlayacaksın: digitalWrite komutu bir pini HIGH (yaklaşık 5 volt, açık) veya LOW (0 volt, kapalı) yapar. LED'i o pine bir dirençle bağladığımızda, pin açıldığında LED yanar.

Bağlantı

Direnç şart. Onsuz LED'den geçen akım çok yükselir ve LED (bazen de pin) zarar görür. Direnci LED'e su borusundaki daraltma gibi düşün: akışı güvenli seviyede tutar.

Kod

int ledPin = 8;

void setup() {
  pinMode(ledPin, OUTPUT); // 8. pin cikis olacak
}

void loop() {
  digitalWrite(ledPin, HIGH); // LED yansin
  delay(1000);
  digitalWrite(ledPin, LOW);  // LED sonsun
  delay(1000);
}

Bu Blink'in aynısı, sadece pini bir değişkende tuttuk. pinMode(ledPin, OUTPUT) satırı Arduino'ya "bu pinden sinyal göndereceğim" der. Bir pini çıkış olarak ayarlamayı unutursak digitalWrite düzgün çalışmaz.

Dijital giriş: Bir butonu okumak

Şimdi Arduino'nun dinlemesini istiyoruz. Bir butonun durumunu digitalRead komutuyla okuruz. Bu komut bize HIGH veya LOW döndürür.

INPUT_PULLUP neden gerekli?

Bir buton pinini boşta bıraktığında garip bir sorun çıkar: pin ne açık ne kapalıdır, havadaki elektriksel gürültüyü toplar ve rastgele HIGH/LOW okunur. Buna "yüzen giriş" (floating input) denir.

Çözüm bir dirençle pini sabit bir değere çekmektir. Arduino bunu bizim için içeride yapabilir: pinMode(pin, INPUT_PULLUP) yazdığımızda pin, dahili bir dirençle HIGH'a çekilir. Yani buton basılı değilken digitalRead HIGH okur.

Butonun diğer ucunu GND'ye bağlarız. Butona basınca pin GND'ye bağlanır ve LOW okunur. Bu biraz ters gelebilir: basılı = LOW, serbest = HIGH. Ama harici dirence gerek kalmaması bunu değerli kılar.

Bağlantı

Butonu Serial ile izlemek

Önce butonun ne okuduğunu gözümüzle görelim. Serial bize Arduino'dan bilgisayara mesaj göndermeyi sağlar.

int butonPin = 2;

void setup() {
  Serial.begin(9600);
  pinMode(butonPin, INPUT_PULLUP);
}

void loop() {
  int durum = digitalRead(butonPin);
  Serial.println(durum); // basili=0, serbest=1
  delay(200);
}

Kodu yükleyip Seri Monitör'ü açtığında, butona basmadan 1 (HIGH), basınca 0 (LOW) görürsün. Elektriğin görünmez dilini böylece okuyabiliriz.

İkisini birleştir: Butonla LED kontrolü

Şimdi asıl hedef: butona basınca LED yansın, bıraktığında sönsün. Giriş ve çıkışı tek programda birleştiriyoruz.

int butonPin = 2;
int ledPin = 8;

void setup() {
  pinMode(butonPin, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  if (digitalRead(butonPin) == LOW) { // basili
    digitalWrite(ledPin, HIGH);       // LED yak
  } else {
    digitalWrite(ledPin, LOW);        // LED sondur
  }
}

Program sürekli loop içinde döner. Her turda butonu okur. Basılıysa (LOW) LED'i yakar, değilse söndürür. Bu, Algoritmalar dersindeki koşul yapısının gerçek donanımdaki halidir: "Eğer buton basılıysa, ışığı yak."

Günlük hayattan iki örnek

Kapı zili. Zil düğmesi tam olarak bu mantıkla çalışır. Sen basınca devre kapanır, içerideki ses açılır; bıraktığında susar. Bizim butonlu LED'imiz minik bir kapı zilidir; sadece ses yerine ışık verir.

Buzdolabı ışığı. Kapıyı açtığında ışık yanar, kapattığında söner. Kapının kenarındaki küçük düğme bir dijital girişi besler. Kapı kapalıyken düğme basılıdır (ışık kapalı), açıldığında serbest kalır (ışık yanar). Aynı "giriş oku, çıkışa karar ver" fikridir.

Mini uygulama

Yukarıdaki butonlu LED devresini kurup çalıştır. Sonra kodu şöyle değiştir: butona her basıldığında LED durum değiştirsin (yanıyorsa sönsün, sönükse yansın) — tıpkı gerçek bir oda lambası anahtarı gibi.

İpucu: Bir değişkende LED'in durumunu tut. Butonun basıldığı anı yakalamak için önceki okumayı da sakla.

int butonPin = 2;
int ledPin = 8;
bool ledAcik = false;
int oncekiDurum = HIGH;

void setup() {
  pinMode(butonPin, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  int durum = digitalRead(butonPin);
  if (oncekiDurum == HIGH && durum == LOW) { // yeni basis
    ledAcik = !ledAcik;
    digitalWrite(ledPin, ledAcik);
    delay(50); // titremeyi azalt
  }
  oncekiDurum = durum;
}

Çalıştır ve gözlemle: Bazen tek basışta iki kez değişiyormuş gibi olabilir. Bunun nedenini "Sık yapılan hatalar" bölümünde açıklıyoruz.

Uygulama laboratuvarı: Dijital Giriş ve Çıkış

Dijital Giriş ve Çıkış konusunu kalıcı hâle getirmenin en iyi yolu, kavramı küçük ve ölçülebilir bir göreve dönüştürmektir. Bu çalışmada Dijital çıkış: Bir pini kontrol etmek ile Kod arasındaki ilişkiyi kullanarak bağlantı şeması, derlenebilen Arduino kodu, seri monitör kaydı ve test sonucu hazırlayacaksın. Amaç yalnız sonucun çalışması değil; hangi kararı neden verdiğini, neyi test ettiğini ve hangi durumda tasarımı değiştireceğini açıklayabilmektir.

Görev senaryosu

Şu senaryoyu ele al: çizgiyi algılayan iki sensörün değerlerini seri monitörde karşılaştırma. Dersin ana hedefi “digitalRead ve digitalWrite ile bir butonla LED'i kontrol etmeyi öğren” olduğuna göre önce problemi tek cümleyle tanımla. Ardından sistemin alacağı girdiyi, uygulayacağı işlemi ve üreteceği çıktıyı ayrı ayrı yaz. Bilmediğin bir ayrıntı varsa onu varsayım olarak işaretle; varsayımı gerçek bilgi gibi kullanma.

  1. Planla: Başlangıç durumunu, beklenen sonucu ve kullanacağın kavramları yaz.
  2. En küçük sürümü kur: Yalnız temel davranışı çalıştır; süsleme ve ek özellikleri sonraya bırak.
  3. Üç test hazırla: Normal bir durum, sınırda bir durum ve hatalı ya da beklenmeyen bir durum seç.
  4. Sonucu kaydet: Beklenen ile gerçekleşeni yan yana yaz; fark varsa olası nedeni belirt.
  5. Tek değişiklik yap: Aynı anda birçok şeyi değiştirmek yerine bir kararı düzeltip testi yeniden çalıştır.

Başarı ölçütleri

“Dijital Giriş ve Çıkış” çalışmasını bitirdiğinde ürünü bir arkadaşına yalnız bölüm başlıklarıyla anlat. Arkadaşın çizgiyi algılayan iki sensörün değerlerini seri monitörde karşılaştırma senaryosundaki adımları ve karar nedenlerini takip edebiliyorsa anlatım yeterince açıktır. Anlaşılmayan noktayı daha fazla terim ekleyerek değil, Dijital çıkış: Bir pini kontrol etmek ve Kod ilişkisini daha küçük adımlara bölerek düzelt.

Sık yapılan hatalar

pinMode satırını unutmak

Pin türünü ayarlamazsan giriş ve çıkış beklendiği gibi çalışmaz. Butonu INPUT_PULLUP, LED'i OUTPUT olarak ayarlamayı setup içinde yap.

Dirençsiz LED bağlamak

LED'i doğrudan pine takarsan aşırı akım geçer. LED sönebilir veya pin zarar görebilir. Her zaman 220–330 ohm dirençle bağla.

INPUT_PULLUP mantığını ters düşünmek

INPUT_PULLUP ile buton serbestken HIGH, basılıyken LOW okunur. Kodda == LOW yerine == HIGH yazarsan LED tam tersine davranır.

Buton titremesi (debounce)

Butonlar metal temaslarla çalışır; bastığın an temas birkaç milisaniye titrer. Arduino bunu birden çok basış sanabilir. Küçük bir delay(50) veya millis ile bekleme, bu titremeyi (bounce) yumuşatır.

Güvenlik notu

Ders özeti

Kontrol soruları

  1. digitalWrite(8, HIGH) komutu ne yapar?
  2. Bir butonun durumunu okumak için hangi komutu kullanırız?
  3. INPUT_PULLUP kullanınca, buton serbestken digitalRead ne döndürür: HIGH mi LOW mu?
  4. LED'i dirençsiz bağlarsak ne olabilir?
  5. Butona basınca LED'i yakmak için if koşulunu digitalRead(butonPin) == ? şeklinde nasıl yazarız (INPUT_PULLUP ile)?

Cevaplar

  1. 8 numaralı pini HIGH (yaklaşık 5 volt) yapar; o pine dirençle bağlı bir LED varsa yanar.
  2. digitalRead komutunu kullanırız; bize HIGH veya LOW döndürür.
  3. HIGH döndürür. INPUT_PULLUP pini dahili dirençle HIGH'a çeker; buton basılınca pin GND'ye bağlanır ve LOW olur.
  4. LED'den çok fazla akım geçer; LED sönebilir veya Arduino pini zarar görebilir. Bu yüzden 220–330 ohm direnç kullanırız.
  5. if (digitalRead(butonPin) == LOW) yazarız. Çünkü INPUT_PULLUP ile basılı buton LOW okunur.

Kaynak ve doğrulama notu

“Dijital Giriş ve Çıkış” dersi için doğrulama odağı Dijital çıkış: Bir pini kontrol etmek ile Kod arasındaki ilişkinin örnekler üzerinde tutarlı çalışmasıdır. Arduino uyumlu kartlarda pin, gerilim ve akım sınırları modele göre değişebilir. Kod derlense bile devre güvenli olmayabileceğinden, motor ve servo gibi yükler uygun sürücü ve harici besleme ile kullanılmalıdır.

Sonraki ders

Analog Okuma: Bir pin yalnızca açık/kapalı değil, arada birçok değer de okuyabilir. analogRead ile bir potansiyometreyi veya ışık sensörünü okuyup 0–1023 arası sayılara dönüştürmeyi öğreneceğiz.

Quiz’i BaşlatArduino bölümüne dön
SORU HAVUZU

Bu dersi 10 soruyla pekiştir

Bu ders için 20 soruluk bir havuz hazırlandı. Her başlangıçta 10 soru ve seçenekler yeniden karıştırılır.