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(), 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.
| Kavram | Görevi | Buton örneğindeki rolü |
|---|---|---|
pinMode() | Pinin çalışma biçimini ayarlar. | Buton pinini giriş olarak yapılandırır. |
INPUT | Dahili pull-up etkin olmadan giriş seçer. | Giriş düzeyi bağlantıda ayrıca belirlenmelidir. |
INPUT_PULLUP | Giriş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?

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.
- Kodda kullanacağın dijital pini belirle. Örnekte bu pin
buttonPin = 2olarak tanımlanmıştır. - Butonun bir tarafını seçtiğin dijital pine, diğer tarafını Arduino üzerindeki
GNDpinine bağla. - Bu bağlantıda butona ayrıca
5Vvermen gerekmez.5VileGND'yi doğrudan birleştiren bir köprü oluşturma.
- Buton bırakılmışsa:
digitalRead()sonucuHIGH - Butona basılmışsa:
digitalRead()sonucuLOW
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.
- Pin: Kodda
buttonPiniç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ı yerineLED_BUILTINkullan; LED’in pin eşlemesi karttan karta değişebilir. - Mod:
pinMode(buttonPin, INPUT_PULLUP);vepinMode(LED_BUILTIN, OUTPUT);satırlarısetup()içinde mi? Buton pini yanlışlıklaOUTPUT, LED pini giriş olarak ayarlanmış olabilir.pinMode(), pinin giriş veya çıkış davranışını belirler. - Bağlantı: Butonun bir ucu seçtiğin dijital pine, diğer ucu GND’ye bağlı mı?
INPUT_PULLUPkullanı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. - Okunan değer: Buton bırakıldığında
digitalRead()sonucuHIGH, basıldığındaLOWolmalı. SürekliHIGHokunuyorsa buton ile GND arasındaki yol kesik olabilir. SürekliLOWokunuyorsa pin GND’ye bağlı kalmış olabilir. - Çıktı: Koşulun basılma durumunu
state == LOWile 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.