Berk Akademi
Birebir ders başvurusu Ücretsiz ön görüşme Ana Sayfa

Arduino Dijital Giriş Nasıl Okunur? digitalRead() ve INPUT_PULLUP

arduino-dijital-giris-nasil-okunur-digitalread-input-pullup
Bu yazıda neler var?
  1. Arduino dijital giriş nasıl okunur?
  2. pinMode(), INPUT ve INPUT_PULLUP ne işe yarar?
  3. Buton INPUT_PULLUP ile nasıl bağlanır?
  4. Butona basıldığında LED nasıl yakılır?
  5. Pin, mod, bağlantı, okunan değer, çıktı: Beş adımda teşhis
  6. Sık Sorulan Sorular

Arduino dijital giriş nasıl okunur? Önce pini giriş olarak ayarlarsın, ardından digitalRead() ile pinin durumunu HIGH veya LOW olarak okursun. Butonun bir ucu dijital pine, diğer ucu GND’ye bağlıysa ve pin INPUT_PULLUP modundaysa buton bırakıldığında HIGH, basıldığında LOW görülür.

Arduino dijital giriş nasıl okunur?

digitalRead() butonun kendisini değil, butonun bağlı olduğu dijital pinin elektriksel durumunu okur. Bu ayrım önemlidir: HIGH tek başına “butona basıldı”, LOW ise “buton bırakıldı” demek değildir. Hangi değerin basılmaya karşılık geldiğini bağlantı düzeni belirler.

Bu örnekte butona basınca dijital pin GND’ye bağlanır ve LOW okunur. Buton bırakıldığında bağlantı açılır; dahili pull-up, pini HIGH düzeyinde tutar. “Ters mantık” denmesinin nedeni budur: Basma eylemi değeri yükseltmek yerine düşürür.

Giriş pininin boşta kalması, otomatik olarak LOW okunacağı anlamına gelmez. Elektriksel düzeyi belirlenmemiş bir pinin okuması değişebilir. Bu yüzden butonun bırakıldığı durum için de tanımlı bir düzey gerekir.

pinMode(), INPUT ve INPUT_PULLUP ne işe yarar?

pinMode(), INPUT ve INPUT_PULLUP ne işe yarar?

pinMode(), pinin giriş mi çıkış mı olarak kullanılacağını belirler. INPUT ve INPUT_PULLUP giriş seçenekleridir; ikincisi dahili pull-up direncini de etkinleştirir. digitalRead() ise yapılandırılmış pinin o andaki durumunu okur.

KavramGöreviButon örneğindeki rolü
pinMode()Pinin çalışma biçimini ayarlar.Buton pinini giriş olarak yapılandırır.
INPUTDahili pull-up etkin olmadan giriş seçer.Giriş düzeyi bağlantıda ayrıca belirlenmelidir.
INPUT_PULLUPGirişi dahili pull-up ile ayarlar.Buton bırakıldığında pini HIGH düzeyinde tutar.
digitalRead()Pinin dijital durumunu okur.Basma ve bırakma durumlarını kodda ayırt etmeyi sağlar.

Yalnızca INPUT seçip butonu pin ile GND arasına bağlarsan, buton bırakıldığında girişin düzeyi belirlenmemiş kalabilir. Bu düzen için INPUT_PULLUP pratiktir: Dahili direnç bırakılma durumunu tanımlar, basılan buton ise pini GND’ye bağlar. Başka bir bağlantı düzeninde harici pull-up veya pull-down direnci de kullanılabilir.

Aşağıdaki kısa örnekte buton, dahili pull-up destekleyen bir kartın dijital 2 pini ile GND arasındadır. Kartında kullanacağın pinin özelliklerini pin şemasından kontrol et. Kod, okunan mantıksal düzeyi seri ekrana yazar.

const int butonPini = 2;

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

void loop() {
  if (digitalRead(butonPini) == LOW) {
    Serial.println("LOW");
  } else {
    Serial.println("HIGH");
  }
  delay(200);
}

Beklenen sonuç, buton bırakılmışken seri ekranda HIGH, basılı tutulurken LOW görünmesidir. Burada LOW bir arıza değil, butona basıldığını gösteren değerdir.

Buton INPUT_PULLUP ile nasıl bağlanır?

Buton INPUT_PULLUP ile nasıl bağlanır?

INPUT_PULLUP kullanırken butonun bir tarafını seçtiğin dijital pine, diğer tarafını GND'ye bağlarsın. Ardından bu pini pinMode(buttonPin, INPUT_PULLUP); ile giriş olarak ayarlarsın. İç pull-up direnci sayesinde buton açıkken giriş HIGH, butona basıldığında pin GND'ye bağlandığı için giriş LOW okunur. Kullandığın kartta seçtiğin dijital pinin bu modu desteklediğini kartın pin belgelerinden kontrol et, çünkü pin özellikleri modele göre değişebilir.

  1. Kodda kullanacağın dijital pini belirle. Örnekte bu pin buttonPin = 2 olarak tanımlanmıştır.
  2. Butonun bir tarafını seçtiğin dijital pine, diğer tarafını Arduino üzerindeki GND pinine bağla.
  3. Bu bağlantıda butona ayrıca 5V vermen gerekmez. 5V ile GND'yi doğrudan birleştiren bir köprü oluşturma.
  • Buton bırakılmışsa: digitalRead() sonucu HIGH
  • Butona basılmışsa: digitalRead() sonucu LOW

Bağlantı beklediğin gibi çalışmıyorsa önce kodda yazan pin numarasıyla kablonun gerçekten bağlandığı pinin aynı olduğunu kontrol et. Ardından GND hattını ve breadboard üzerindeki gevşek kabloları gözden geçir. Bu bağlantıda amaç, butona basıldığında dijital pini doğrudan GND seviyesine çekmektir.

Butona basıldığında LED nasıl yakılır?

Buton değerini digitalRead() ile okuyup sonuç LOW olduğunda LED_BUILTIN pinini HIGH yapabilirsin. Aşağıdaki örnek, butona basıldığı sürece yerleşik LED'i açık tutar:

const int buttonPin = 2;

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  int buttonState = digitalRead(buttonPin);

  if (buttonState == LOW) {
    digitalWrite(LED_BUILTIN, HIGH);
  } else {
    digitalWrite(LED_BUILTIN, LOW);
  }
}

Beklenen davranış şöyledir: Buton bırakılmışsa okunan değer HIGH olur ve LED kapalı kalır. Butona basılmışsa okunan değer LOW olur ve LED_BUILTIN açılır. LED_BUILTIN, kartın yerleşik LED'ine karşılık gelen sabittir; bu LED'in bağlı olduğu fiziksel pin kart modeline göre değişebilir. Bu kod, LED'in HIGH seviyesinde yandığı bağlantı düzenini temel alır.

LED_BUILTIN yerine harici LED kullanırsan LED'i doğrudan dijital pine bağlama. LED ile dijital pin arasına seri akım sınırlama direnci ekle; bu direnç hem LED'i hem de çıkış pinini korumaya yardımcı olur.

Pin, mod, bağlantı, okunan değer, çıktı: Beş adımda teşhis

Buton beklenen tepkiyi vermiyorsa kodu baştan değiştirmek yerine şu beş kontrolü sırayla yap. Her adım, farklı bir sorunu ayırmana yardımcı olur.

  1. Pin: Kodda buttonPin için yazan pin, kablonun bağlandığı dijital pinle aynı mı? Kartının pinout belgesinde bu pin dijital giriş olarak kullanılabiliyor mu? Dahili LED için sabit pin numarası yerine LED_BUILTIN kullan; LED’in pin eşlemesi karttan karta değişebilir.
  2. Mod: pinMode(buttonPin, INPUT_PULLUP); ve pinMode(LED_BUILTIN, OUTPUT); satırları setup() içinde mi? Buton pini yanlışlıkla OUTPUT, LED pini giriş olarak ayarlanmış olabilir. pinMode(), pinin giriş veya çıkış davranışını belirler.
  3. Bağlantı: Butonun bir ucu seçtiğin dijital pine, diğer ucu GND’ye bağlı mı? INPUT_PULLUP kullanılan bu düzende butonun 5V’a değil, GND’ye bağlanması gerekir. 5V ile GND’yi doğrudan birleştiren bir köprü kurma.
  4. Okunan değer: Buton bırakıldığında digitalRead() sonucu HIGH, basıldığında LOW olmalı. Sürekli HIGH okunuyorsa buton ile GND arasındaki yol kesik olabilir. Sürekli LOW okunuyorsa pin GND’ye bağlı kalmış olabilir.
  5. Çıktı: Koşulun basılma durumunu state == LOW ile kontrol ediyor mu? LED doğru pin üzerinden mi sürülüyor? Harici, çıplak bir LED kullanıyorsan seri akım sınırlama direnci ekle.
const int buttonPin = 2;

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  int state = digitalRead(buttonPin);

  if (state == LOW) {
    digitalWrite(LED_BUILTIN, HIGH);
  } else {
    digitalWrite(LED_BUILTIN, LOW);
  }
}

Bu testte beklenen davranış, buton bırakıldığında HIGH ve LED’in kapalı, butona basıldığında LOW ve LED’in açık olmasıdır. Bazı kartlarda dahili LED’in elektriksel mantığı ters olabilir. Böyle bir durumda LED için kullanılan HIGH ve LOW değerlerini kartın belgelerine göre yer değiştirmek gerekir.

Sık Sorulan Sorular

INPUT_PULLUP kullanırken buton neden LOW okunur?

INPUT_PULLUP, giriş pinini normal durumda dahili dirençle HIGH seviyesinde tutar. Butona basınca pin GND’ye bağlanır ve okunan değer LOW olur.

Butonu Arduino’nun hangi dijital pinine bağlamalıyım?

Pinout belgesinde dijital giriş olarak gösterilen ve başka bir işlev için kullanmadığın bir pini seçebilirsin. Örnekte 2 numaralı pin kullanıldı; kodda yazan pin ile fiziksel bağlantı aynı olmalıdır. Bazı kartlarda belirli pinlerin giriş özellikleri sınırlı olabilir.

INPUT yerine INPUT_PULLUP kullanınca bağlantıda ne değişir?

INPUT yalnızca pini giriş yapar ve girişin seviyesini ayrıca belirlemen gerekebilir. INPUT_PULLUP dahili pull-up direncini etkinleştirir. Bu nedenle buton, dijital pin ile GND arasına bağlanır ve mantık tersine döner: bırakılmış durum HIGH, basılmış durum LOW.

Harici LED bağlarsam seri direnç kullanmam gerekir mi?

Evet. Çıplak harici LED ile dijital pin arasına seri akım sınırlama direnci koymalısın. Direnç, LED’den ve Arduino pininden geçen akımı güvenli seviyede tutmaya yardımcı olur.

Bu beş kontrolü sırayla uyguladığında sorunun pin seçiminden, mod ayarından, bağlantıdan, okunan değerden veya LED çıkışından kaynaklanıp kaynaklanmadığını daha düzenli biçimde ayırabilirsin.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin, yazılım geliştirici ve eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara