Arduino pinMode INPUT ve OUTPUT farkı, pinin bilgi akış yönüyle ilgilidir. INPUT dışarıdan bilgi alan, OUTPUT dışarıya kontrol sinyali gönderen pin yönüdür. INPUT pin, dış dünyadan gelen dijital durumu okumak için kullanılır. OUTPUT pin ise ona bağlı bir bileşeni kontrol etmek için kullanılır. Bir pinin hangi işi yapacağını kartın kendisi değil, programda verdiğin yön belirler.
INPUT ve OUTPUT Arasındaki Fark: Pinin Yönü Ne Demek?
Dijital pin, iki durumlu bir sinyal ile çalışır. Bu iki durumun adı HIGH ve LOW'dur. Arduino'nun resmî referansı da dijital pinlerin bu iki değerden birini okuduğunu ya da yazdığını anlatır. Ara değerler yoktur; pin her an ya HIGH ya da LOW durumundadır. Aydınlık anahtarı gibi düşünebilirsin: ya açık ya kapalı.
Pinin yönü, bu iki durumlu bilginin kimden kime gittiğini söyler. Bunu iki ok olarak hayal et.
INPUT: ok karta doğru gelir
INPUT modunda bilgi dışarıdan karta doğru akar:
dış dünya → pin → program
Pin burada bir dinleyicidir. Dışarıdaki bir şey durum üretir, programın ise o durumu okuması gerekir. Bilgi üreten bileşene en bilinen örnek bir butondur: basılıp basılmadığı, programın öğrenmek istediği bilgidir. Program bu bilgiyi okur ama pine kendi başına bir değer dayatmaz.
OUTPUT: ok karttan dışarı çıkar
OUTPUT modunda akış tersine döner:
program → pin → bileşen
Burada program karar verir, pin de bu kararı dışarıya taşır. Komut alan bileşene örnek olarak bir LED düşünebilirsin: yanıp yanmayacağına program karar verir, LED yalnızca gelen sinyale uyar. Bu yazıda buton ve LED yalnızca yönü anlamak için kullanılan kavramsal örneklerdir; bağlantı ya da devre kurulumu konu dışıdır.
Kısa bir kural işine yarar: bilgi sana geliyorsa INPUT, bilgiyi sen gönderiyorsan OUTPUT.
pinMode, digitalRead ve digitalWrite Birbirinden Nasıl Ayrılır?

Üç fonksiyon sık birlikte kullanıldığı için karıştırılır, oysa görevleri ayrıdır:
pinMode(): pinin yönünü belirler. Hiçbir veri taşımaz.digitalRead(): INPUT olarak ayarlanmış pindenHIGHya daLOWdeğerini okur ve programa döndürür.digitalWrite(): OUTPUT olarak ayarlanmış pineHIGHya daLOWdeğerini yazar.
Akış tarifi şöyle özetlenebilir: önce yönü seç, sonra oku ya da yaz. pinMode bir kapının hangi yöne açılacağını söyleyen tabela gibidir; digitalRead ve digitalWrite ise o kapıdan geçen bilgidir. Tabela yanlışsa geçiş de anlamlı olmaz.
En sık karışan nokta tam budur: pinMode okuma ya da yazma yapmaz, yalnızca yönü bildirir. Okuma ve yazma fonksiyonları ancak yön seçildikten sonra anlamlı çalışır.
void setup() {
pinMode(2, INPUT); // 2 numaralı pin: bilgi dışarıdan gelecek
pinMode(13, OUTPUT); // 13 numaralı pin: sinyal dışarıya gidecek
}
void loop() {
// Yönler setup() içinde bir kez belirlendi.
// Okuma için: digitalRead(2) -> HIGH ya da LOW döndürür
// Yazma için: digitalWrite(13, HIGH) -> pine HIGH yazar
}
Bu kod tek başına görünür bir çıktı üretmez; yalnızca iki pinin yönünü tanımlar ve hangi fonksiyonun nerede kullanılacağını gösterir. Örnekteki 2 ve 13 numaraları sadece örnektir. Kartının pin düzenini ve hangi pinlerin nasıl kullanılabileceğini kendi kartının dokümanından kontrol etmelisin.
pinMode'un genellikle setup() içinde çağrılmasının nedeni basittir: setup() program başlarken yalnızca bir kez çalışır, loop() ise sürekli tekrarlanır. Pinin yönü çoğu projede program boyunca değişmediği için her turda yeniden söylemeye gerek kalmaz.
INPUT_PULLUP ve seri port gibi konular ayrı birer başlıktır; bu yazı yalnızca INPUT ile OUTPUT arasındaki yön farkına odaklanır.
Bir Pin İçin INPUT mu OUTPUT mu Seçmeli? Tek Soruluk Karar Çerçevesi

Pin yönünü seçerken tek bir soru yeterli olur: Bu bileşen bilgi mi üretiyor, yoksa komut mu alıyor? Bileşen Arduino'ya bilgi gönderiyorsa pin INPUT olur. Bileşen Arduino'dan komut bekliyorsa pin OUTPUT olur. Buton ya da sensör çıkışı bilgi üretir. LED ise yalnızca komutu uygular.
Soruyu şöyle düşünebilirsin: veri bileşenden karta doğru akıyorsa kart okur, karttan bileşene doğru akıyorsa kart yazar. Okuma INPUT ile, yazma OUTPUT ile eşleşir. Seçimi bileşenin türüne değil, verinin yönüne göre yaparsın.
Dört maddelik kontrol listesi
Bir pini kodlamadan önce bu dört soruyu sırayla yanıtla:
- Veri hangi yöne akıyor? Bileşenden karta mı, karttan bileşene mi?
- Programda okuma mı yazma mı yapacağım? Okuyorsam giriş, yazıyorsam çıkış söz konusudur.
- Hangi fonksiyonu kullanacağım? Okuma için
digitalRead, yazma içindigitalWrite. - pinMode'u buna göre seçtim mi? Okuyacağım pine INPUT, yazacağım pine OUTPUT vermiş olmalıyım.
Dördüncü madde ilk üçünün sonucudur. Yön ile fonksiyon birbirini tutmuyorsa hata çoğunlukla ilk iki maddede aranır.
Bu akış sorusunu sormak, koddan önce yapılan bir mantık pratiğidir: önce adımları sırala, sonra satıra dök. Bu alışkanlığı dilden bağımsız çalıştırmak istersen ücretsiz Algoritmik Düşünme Testi bir seçenek olabilir. Test Arduino'ya özel değildir. Bir problemi adım adım düşünme becerini ölçmeye ve geliştirmeye yöneliktir.
Giriş Pinini Okuyup Çıkış Pinine Aktaran Kısa Bir Veri Akışı
Aşağıdaki örnek tek bir akışı kurar: giriş pinini oku, okuduğun değeri çıkış pinine yaz. Pin numaraları yalnızca örnektir. Kartının pin düzenini kendi resmî dokümanından kontrol edip numaraları ona göre değiştir.
const int girisPin = 2;
const int cikisPin = 8;
void setup() {
pinMode(girisPin, INPUT);
pinMode(cikisPin, OUTPUT);
}
void loop() {
int durum = digitalRead(girisPin);
digitalWrite(cikisPin, durum);
}
Kod satır satır
const int girisPin = 2;veconst int cikisPin = 8;: Pin numaralarına anlamlı isimler verir. Numarayı değiştirmek gerekirse tek yerden değiştirirsin.pinMode(girisPin, INPUT);: Bu pini okuma yönüne ayarlar. Yön ayarı bir kez,setup()içinde yapılır.pinMode(cikisPin, OUTPUT);: Bu pini yazma yönüne ayarlar.int durum = digitalRead(girisPin);: Giriş pinindeki değeri okur vedurumdeğişkenine koyar. Değer HIGH ya da LOW olur.digitalWrite(cikisPin, durum);: Değişkendeki değeri çıkış pinine yazar.
loop() sürekli tekrarlandığı için bu iki satır da sürekli çalışır.
Akışı okla görmek
Veri şu yolu izler: dış dünya → girisPin → durum değişkeni → cikisPin → bileşen. Dış dünyadaki değişiklik önce giriş pinine ulaşır. digitalRead onu durum değişkenine taşır. digitalWrite değişkeni çıkış pinine verir. Çıkışa bağlı bileşen de bu komutu uygular.
Beklenen davranış basittir: giriş HIGH iken çıkış HIGH, giriş LOW iken çıkış LOW olur. Çıkıştaki bileşen girişin durumunu izler. Devre kurulumu ve bağlantı detayı bu örneğin kapsamı dışındadır. Burada yalnızca yön kararı ile veri akışının kodda nasıl birleştiğine bakıyoruz.
Yanlış Yön Seçilirse Ne Görürsün? Belirti, Neden ve Kontrol
Pin yönü yanlış olduğunda kod çoğu zaman hata vermeden derlenir ve yüklenir. Sorun, bileşenin tepkisizliği ya da tutarsız okumalar olarak ortaya çıkar. Aşağıdaki tablo, gördüğün belirtiyi olası nedene ve ilk kontrole bağlar.
| Belirti | Olası neden | Kontrol |
|---|---|---|
| Çıkışa bağlı bileşen komutlara tepki vermiyor | Pin OUTPUT yerine INPUT yazılmış ya da pinMode satırı eksik olabilir | setup() içindeki pinMode satırına ve pin numarasına bak |
| Okunan değer kararsız, rastgele değişiyor | Pin INPUT modunda ama dışarıdan net bir durum almıyor olabilir | Pinin gerçekten bilgi üreten bir kaynağa bağlı olup olmadığını kontrol et |
| Okuma beklenmeyen biçimde hep aynı | Okunan pin yanlışlıkla OUTPUT ayarlanmış olabilir | Giriş ve çıkış pinlerinin değişken adlarının yer değiştirip değiştirmediğine bak |
| Tepki beklediğin yerde değil, başka bir bileşende ya da hiç yok | Giriş ve çıkış pinlerinin numaraları karışmış olabilir | Karar sorusuna dön: bileşen bilgi mi üretiyor, komut mu alıyor? |
Yön seçildikten sonra hatayı şu üç adımla ara:
- pinMode satırındaki yönün bileşenin rolüne uyup uymadığına bak: bilgi üreten bileşen INPUT, komut alan bileşen OUTPUT ister.
- O pinde kullandığın fonksiyonun yönle eşleştiğini doğrula:
digitalReadgiriş pininde,digitalWriteçıkış pininde anlam taşır. - Kodundaki pin numarasını kartın kendi dokümanındaki pin düzeniyle karşılaştır.
Boşta kalan girişleri sabitlemeye yarayan INPUT_PULLUP ile değerleri ekranda görmeyi sağlayan seri port ayrı konulardır; ikisi de bu üç adımı tamamladıktan sonra ele alınır.
Pin yönü küçük bir ayrıntı gibi görünse de her Arduino programının temelinde durur. Bir sorunla karşılaştığında önce "bu pin bilgi mi alıyor, komut mu gönderiyor?" sorusuna dön; çoğu zaman cevap, hatanın hangi satırda aranacağını da gösterir.