Giriş:
Elektronik projelerde buton kullanımı yaygındır, ancak her butona ayrı bir dijital pin ayırmak, özellikle Arduino Uno gibi pin sayısı kısıtlı kartlarda sorun yaratabilir. Bu makale, tek bir analog pin kullanarak 5 farklı butonu nasıl okuyabileceğinizi gösteriyor. Bu yöntem, pin tasarrufu sağlayarak daha karmaşık projeler için yer açar.
Başlangıç: Tek Buton Örneği
Normalde tek bir butonun durumu, bir Analog veya Dijital pine bağlanarak kontrol edilir.

Görsel 1: Tek Buton Bağlantısı Arduino Uno’ya bağlı tek bir basmalı buton ve pull-down direnci gösteren basit bir devre şeması.
Analog Pinden Çoklu Buton Okuma
Gerekli Malzemeler
- 1 x Arduino Uno veya (Herhangi bir Geliştirme Kartı)
- 5 x Basmalı buton
- 5 x 4.7 kΩ direnç
- 1 x 10 kΩ direnç
- Jumper kabloları
- Breadboard
Birden fazla buton için pin tasarrufu yapmak amacıyla tek bir analog pini kullanabiliriz. Bu projede, her butona basıldığında analog pin üzerinde farklı bir voltaj değeri oluşturarak, hangi butona basıldığını “gerilim bölücü” prensibiyle ayırt ediyoruz.

Görsel 2: Proje Devre Kurulumu Arduino Uno, tek bir analog pin (A0) üzerinden 5 adet basmalı butona ve seri bağlı dirençlere sahip projemizin genel devre kurulumu. Her butona basıldığında analog girişte farklı bir voltaj seviyesi oluşur.
Yukarıdaki bağlantı şemasında da gördüğünüz gibi, 5 adet buton, her birinin önüne 4.7K Ohm direnç eklenerek Arduino Uno’nun tek bir analog pinine (A0) bağlanmıştır. Butonlara basılmadığında A0 pini GND’ye çekilir (pull-down direnci aracılığıyla), basıldığında ise 5V ile GND arasında farklı bir gerilim bölücü oluşur.
Kodlama
Aşağıdaki Arduino kodu, analog pinden okunan ham değeri yorumlayarak hangi butona basıldığını tespit eder:
const int analogPin = A0; int sonButon = 0; // Son basılan buton numarası void setup() { Serial.begin(9600); } void loop() { int deger = analogRead(analogPin); int basilanButon = 0; // Okunan analog değere göre hangi butona basıldığını belirleme if (deger > 1000) { // Bu değerler, devrenizdeki dirençlere göre kalibre edilmelidir. basilanButon = 1; } else if (deger > 700 && deger < 750) { basilanButon = 2; } else if (deger > 550 && deger < 600) { basilanButon = 3; } else if (deger > 450 && deger < 500) { basilanButon = 4; } else if (deger > 350 && deger < 400) { basilanButon = 5; } else { basilanButon = 0; // Hiçbir butona basılmadı } // Butona basıldığında ve durumu değiştiğinde seri monitöre yaz if (basilanButon != 0 && basilanButon != sonButon) { Serial.print("BUTON "); Serial.print(basilanButon); Serial.print(" BASILI - OKUNAN DEGER: "); Serial.println(deger); sonButon = basilanButon; // Son basılan butonu güncelle } // Eğer buton bırakıldıysa, sonButon değerini sıfırla ki bir sonraki basış algılansın if (basilanButon == 0) { sonButon = 0; } delay(100); // Debounce ve okuma gecikmesi }
Kod Açıklaması:
analogRead(analogPin)
: A0 pininden 0 ile 1023 arasında bir analog değer okur.- Değer Aralıkları:
if-else if
blokları, okunan değeri belirli aralıklarla karşılaştırarak hangi butona basıldığını tespit eder. Bu aralıklar, kullandığınız direnç değerlerine ve Arduino’nuzun analog okuma hassasiyetine göre kalibre edilmelidir. - Çıktı Kontrolü ve Debounce:
basilanButon != 0 && basilanButon != sonButon
kontrolü ile yalnızca butona basıldığında ve durumu değiştiğinde çıktı verilir.delay(100)
ise buton titreşimlerini (debounce) gidermek için basit bir gecikme sağlar.
Seri Monitör Çıktısı
Kodun çalıştığını görmek için Seri Monitörü açtığınızda, her butona basıldığında aşağıdaki gibi bir çıktı görmelisiniz:
Görsel 3: Seri Monitör Çıktısı Farklı butonlara basıldığında Arduino Seri Monitöründen alınan çıktılar. Her butona basıldığında, basılan buton numarası ve o anki analog okuma değeri gösterilir.

Sonuç
Bu proje, Arduino’da pin tasarrufu yapmanın ve birden fazla fiziksel girişi tek bir analog pine yoğunlaştırmanın etkili bir yoludur. Küçük projeler ve sınırlı pin kaynaklarına sahip mikrodenetleyiciler için oldukça kullanışlıdır. Direnç değerlerini dikkatlice seçip, analog okuma aralıklarını sisteminize göre kalibre ederek bu yöntemi birçok uygulamada kullanabilirsiniz.