Arduino Buton ile LED Kontrolü: digitalRead, Pull-up ve Pull-down Rehberi
- Ersin Koşar
- Arduino
- 18 May, 2026
Arduino buton ile LED kontrolü, LED yakma uygulamasından sonra yapılabilecek en doğru ikinci başlangıç projesidir. Çünkü bu projede Arduino artık yalnızca bir çıkış elemanını çalıştırmaz; aynı zamanda dış dünyadan gelen bir bilgiyi okur ve bu bilgiye göre karar verir. Bir butona basıldığında LED’in yanması, basılmadığında sönmesi basit görünür; fakat bu küçük devre, robotik kodlama projelerinde çok sık kullanılacak olan giriş okuma, karar verme, pull-up/pull-down direnç, HIGH/LOW mantığı ve etkileşimli sistem kavramlarını öğretir.
Bir önceki adımda Arduino ile LED yakma uygulamasını yaptıysanız, Arduino’nun dijital pinlerden çıkış verebildiğini görmüş oldunuz. Bu yazıda aynı LED’i bu kez bir butonla kontrol edeceğiz. Böylece Arduino’nun bir dijital pini giriş olarak, diğer dijital pini ise çıkış olarak kullanılacak. Resmi Arduino Button örneğinde de pushbutton elemanının basıldığında devrede iki noktayı birbirine bağladığı ve bu bilginin LED kontrolünde kullanılabildiği anlatılır.1
Bu Projede Ne Öğreneceğiz?
Bu rehberin amacı, yalnızca çalışan bir buton devresi kurmak değildir. Asıl hedef, butonun Arduino tarafından nasıl okunduğunu ve kodun bu bilgiye göre nasıl tepki verdiğini anlamaktır. Çünkü robotik kodlama projelerinde buton, limit switch, manyetik switch, kapı sensörü ve bazı modüllerin dijital çıkışları aynı temel mantıkla okunur.
| Öğrenilecek konu | Bu projedeki karşılığı |
|---|---|
| Dijital giriş | Buton durumunu digitalRead() ile okuma |
| Dijital çıkış | LED’i digitalWrite() ile yakıp söndürme |
| Pull-down direnç | Buton bırakıldığında pinin net şekilde LOW okunmasını sağlama |
| Dahili pull-up | Harici direnç kullanmadan buton okuma alternatifi |
| Karar yapısı | if bloğu ile buton durumuna göre LED kontrolü |
Bu konuların anlaşılması, daha sonra yapılacak sensörlü alarm, çizgi izleyen robot, engelden kaçan robot, motor kontrol paneli veya basit oyun kumandası gibi projeler için sağlam bir temel oluşturur. Bir robotun çevresinden bilgi alması ve buna göre davranması, temelde bu yazıdaki giriş-okuma-karar-verme zincirinin gelişmiş hâlidir.
Gerekli Malzemeler
Arduino ile buton kullanımı için çok az malzeme yeterlidir. Bu yazıdaki ana devrede harici 10K ohm pull-down direnç kullanacağız. Daha sonra aynı mantığın INPUT_PULLUP ile nasıl daha sade kurulabileceğini de açıklayacağız.
| Malzeme | Adet | Açıklama |
|---|---|---|
| Arduino Uno veya uyumlu kart | 1 | Kodu çalıştıracak geliştirme kartı |
| LED | 1 | Butona göre yanıp sönecek çıkış elemanı |
| 220 ohm veya 330 ohm direnç | 1 | LED üzerinden geçen akımı sınırlamak için |
| 10K ohm direnç | 1 | Buton girişini pull-down yapmak için |
| Push button | 1 | Kullanıcının devreye giriş vermesi için |
| Breadboard | 1 | Lehim yapmadan devre kurmak için |
| Jumper kablo | 5-7 | Arduino, buton, LED ve direnç bağlantıları için |
| USB kablo | 1 | Arduino’ya kod yüklemek ve güç vermek için |
Butonların dört bacaklı olanları yeni başlayanlar için bazen karışık görünebilir. Bu tür butonlarda karşılıklı iki bacak aynı hat üzerinde olabilir. Breadboard üzerinde butonu orta kanalın iki tarafına yerleştirmek, yanlış kısa devre ihtimalini azaltır. Eğer buton sürekli basılı gibi davranıyorsa veya hiç tepki vermiyorsa, butonun breadboard üzerindeki yönünü kontrol etmek gerekir.
Buton Devresi Nasıl Çalışır?
Push button veya anahtar, basıldığında devrede iki noktayı birbirine bağlar. Basılı değilken bu iki nokta arasında bağlantı yoktur. Arduino’nun resmi Button dokümanında bu durum açıkça anlatılır: buton açıkken giriş pini pull-down direnç üzerinden GND’ye bağlı olduğu için LOW okunur; butona basıldığında pin 5V’a bağlandığı için HIGH okunur.1
Bu devrede Arduino’nun D2 pini buton durumunu okuyacak, D13 pini ise LED’i kontrol edecektir. Buton bırakıldığında D2 pininin rastgele değer üretmemesi için 10K ohm dirençle GND hattına bağlanır. Bu dirence pull-down direnç denir. Pull-down direnç, buton basılı değilken giriş pinini güvenli biçimde LOW seviyesinde tutar.
Bir dijital giriş pini hiçbir yere bağlı bırakılırsa “floating input” oluşabilir. Bu durumda Arduino bazen HIGH, bazen LOW okuyabilir. Bu yüzden buton devrelerinde pull-up veya pull-down mantığını doğru kurmak önemlidir.
Pull-down Bağlantı Şeması
Bu bölümde harici 10K ohm pull-down dirençle klasik buton bağlantısını kuracağız. Arduino’nun D2 pini giriş, D13 pini çıkış olarak kullanılacak.
| Arduino bağlantısı | Devredeki karşılığı |
|---|---|
| 5V | Butonun bir bacağına gider |
| D2 | Butonun diğer bacağına ve 10K ohm dirence bağlanır |
| 10K ohm direnç | D2 hattından GND’ye iner |
| D13 | LED’in uzun bacağına, yani anot tarafına gider |
| LED kısa bacağı | 220 ohm direnç üzerinden GND’ye bağlanır |
| GND | LED direnci ve buton pull-down direnci için ortak toprak hattıdır |
Devreyi kurarken önce Arduino’nun USB bağlantısını çıkarmanız daha güvenlidir. Breadboard üzerinde 5V ve GND hatlarını belirledikten sonra buton ve LED bağlantılarını yapabilirsiniz. LED’in uzun bacağı artı tarafa, kısa bacağı GND tarafına bakacak şekilde bağlanmalıdır. LED ile seri direnç kullanmayı ihmal etmeyin; bu direnç LED’i ve Arduino pinini korumaya yardımcı olur.
Arduino Buton ile LED Kontrol Kodu
Aşağıdaki kodda buton D2 pininden okunur. Butona basıldığında D2 pini HIGH olur ve LED yanar. Buton bırakıldığında D2 pini pull-down direnç sayesinde LOW olur ve LED söner.
const int BUTTON_PIN = 2;
const int LED_PIN = 13;
void setup() {
pinMode(BUTTON_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
}
void loop() {
int buttonState = digitalRead(BUTTON_PIN);
if (buttonState == HIGH) {
digitalWrite(LED_PIN, HIGH);
} else {
digitalWrite(LED_PIN, LOW);
}
}
Bu kodda pinMode(BUTTON_PIN, INPUT) satırı D2 pinini giriş olarak ayarlar. digitalRead(BUTTON_PIN) satırı ise butonun o andaki durumunu okur. Okunan değer HIGH ise butona basılmıştır; LOW ise buton bırakılmıştır. if bloğu bu bilgiyi değerlendirir ve LED’in yanıp sönmesine karar verir.
Kodun Satır Satır Açıklaması
Kodun başındaki const int tanımlamaları, pin numaralarını anlamlı isimlerle kullanmamızı sağlar. Böylece kodun içinde sürekli 2 ve 13 yazmak yerine BUTTON_PIN ve LED_PIN ifadelerini kullanırız. Bu yöntem hem kodun okunabilirliğini artırır hem de pin değiştirmek gerektiğinde yalnızca en üstteki satırları güncellememizi sağlar.
setup() fonksiyonu Arduino açıldığında bir kez çalışır. Bu bölümde buton pini giriş, LED pini çıkış olarak ayarlanır. loop() fonksiyonu ise Arduino çalıştığı sürece sürekli tekrar eder. Her döngüde butonun durumu okunur ve LED buna göre kontrol edilir.
| Kod satırı | Görevi |
|---|---|
pinMode(BUTTON_PIN, INPUT); | D2 pinini buton okumak için giriş yapar |
pinMode(LED_PIN, OUTPUT); | D13 pinini LED kontrol etmek için çıkış yapar |
digitalRead(BUTTON_PIN); | Butonun HIGH mı LOW mu olduğunu okur |
digitalWrite(LED_PIN, HIGH); | LED’i yakar |
digitalWrite(LED_PIN, LOW); | LED’i söndürür |
Bu proje, Arduino’nun bir giriş bilgisini okuyup bir çıkış üretmesine güzel bir örnektir. Robotik projelerde aynı mantıkla bir butonla motor başlatılabilir, bir limit switch ile robot kolu durdurulabilir veya bir sensör eşik değerine göre alarm çalıştırılabilir.
Seri Monitör ile Buton Durumunu İzleme
Yeni başlayanlar için en iyi hata ayıklama yöntemlerinden biri Seri Monitör kullanmaktır. Butonun gerçekten HIGH veya LOW okunduğunu görmek, bağlantı hatalarını hızlı bulmayı sağlar. Bunun için koda seri haberleşme satırları ekleyebiliriz.
const int BUTTON_PIN = 2;
const int LED_PIN = 13;
void setup() {
Serial.begin(9600);
pinMode(BUTTON_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
}
void loop() {
int buttonState = digitalRead(BUTTON_PIN);
Serial.println(buttonState);
if (buttonState == HIGH) {
digitalWrite(LED_PIN, HIGH);
} else {
digitalWrite(LED_PIN, LOW);
}
}
Arduino IDE’de Seri Monitör’ü açtığınızda butona basılmadığında 0, basıldığında 1 değerlerini görmelisiniz. Eğer değerler rastgele değişiyorsa pull-down direnç bağlantısı hatalı olabilir. Eğer değer hiç değişmiyorsa butonun yönü, D2 bağlantısı veya 5V/GND hatları kontrol edilmelidir.
INPUT_PULLUP ile Daha Sade Buton Bağlantısı
Arduino’da buton okumanın ikinci yolu INPUT_PULLUP kullanmaktır. Bu yöntemde Arduino’nun dahili pull-up direnci aktif edilir. Resmi InputPullupSerial örneğinde de pinMode(2, INPUT_PULLUP) satırıyla pinin dahili pull-up direnciyle giriş olarak ayarlandığı gösterilir.2
Bu bağlantıda butonun bir bacağı D2 pinine, diğer bacağı GND’ye bağlanır. Harici 10K ohm direnç kullanılmaz. Ancak önemli bir fark vardır: INPUT_PULLUP kullanıldığında butona basılmadığında pin HIGH, butona basıldığında LOW okunur. Yani mantık ters çalışır.2
const int BUTTON_PIN = 2;
const int LED_PIN = 13;
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
}
void loop() {
int buttonState = digitalRead(BUTTON_PIN);
if (buttonState == LOW) {
digitalWrite(LED_PIN, HIGH);
} else {
digitalWrite(LED_PIN, LOW);
}
}
Burada if (buttonState == LOW) şartını kullanmamızın nedeni butona basıldığında pinin GND’ye çekilmesidir. Bu durum yeni başlayanların çok sık karıştırdığı bir noktadır. Eğer INPUT_PULLUP devresinde butona basınca LED sönüyor, bırakınca yanıyorsa büyük ihtimalle kodda HIGH/LOW mantığı ters kurulmuştur.
Pull-down ve INPUT_PULLUP Arasındaki Fark
Her iki yöntem de doğru kullanıldığında güvenilir buton okuma sağlar. Pull-down bağlantı, başlangıçta görsel olarak daha anlaşılırdır; çünkü butona basıldığında HIGH okunur. INPUT_PULLUP ise daha az malzeme gerektirir ve pratik projelerde sık kullanılır.
| Özellik | Pull-down direnç | INPUT_PULLUP |
|---|---|---|
| Harici direnç gerekir mi? | Evet, genellikle 10K ohm | Hayır |
| Buton bırakıldığında okunan değer | LOW | HIGH |
| Butona basıldığında okunan değer | HIGH | LOW |
| Yeni başlayan için mantık | Daha sezgisel | Ters mantık nedeniyle dikkat ister |
| Devre sadeliği | Biraz daha fazla bağlantı | Daha az bağlantı |
Eğitim ortamlarında önce pull-down bağlantıyı öğrenmek, sonra INPUT_PULLUP yöntemine geçmek daha sağlıklı olabilir. Çünkü öğrenci önce dirençle giriş seviyesinin nasıl sabitlendiğini görür, ardından Arduino’nun dahili pull-up özelliğini daha kolay kavrar.
Sık Yapılan Hatalar ve Çözümleri
Buton devrelerinde hata yapmak çok normaldir. Özellikle dört bacaklı butonların breadboard üzerindeki yönü ve pull-up/pull-down mantığı başlangıçta kafa karıştırabilir.
| Sorun | Muhtemel neden | Çözüm |
|---|---|---|
| LED hiç yanmıyor | LED ters bağlanmış olabilir | LED’in uzun bacağını D13 tarafına, kısa bacağını GND tarafına alın |
| LED sürekli yanıyor | Buton bağlantısı veya kod mantığı ters olabilir | Pull-down mı INPUT_PULLUP mı kullandığınızı kontrol edin |
| Seri Monitör rastgele 0/1 gösteriyor | Giriş pini floating durumda olabilir | Pull-down direnci veya INPUT_PULLUP ayarını kontrol edin |
| Butona basınca değer değişmiyor | Buton breadboard’a yanlış yönde takılmış olabilir | Butonu orta kanalın iki tarafına gelecek şekilde yeniden yerleştirin |
| Kod yüklenmiyor | Kart veya port seçimi hatalı olabilir | Arduino IDE’de doğru kart ve port seçildiğinden emin olun |
Hata ayıklarken devreyi karmaşıklaştırmamak önemlidir. Önce yalnızca buton değerini Seri Monitör’de okuyun. Buton değeri doğru değişiyorsa LED kontrol kodunu ekleyin. Bu yaklaşım, sorunun devrede mi yoksa kodda mı olduğunu daha kolay anlamanızı sağlar.
Projeyi Nasıl Geliştirebiliriz?
Temel butonla LED kontrolü çalıştıktan sonra projeyi birkaç farklı şekilde geliştirebilirsiniz. Örneğin LED’in butona basılı tutulduğu sürece yanması yerine, her basışta durum değiştiren bir aç/kapa sistemi yapılabilir. Bu durumda önceki buton durumu ile yeni buton durumu karşılaştırılır. Daha ileri aşamada ise buton sıçraması anlamına gelen debounce konusu öğrenilebilir.
Bir başka geliştirme, butonla yalnızca LED değil, buzzer veya röle modülü gibi farklı çıkış elemanlarını kontrol etmektir. Ancak röle, motor veya yüksek akım çeken parçalar kullanılacaksa Arduino pininden doğrudan güç verilmemeli; uygun sürücü devresi veya modül kullanılmalıdır. Hangi pinlerin dijital giriş, dijital çıkış, PWM veya analog görevler için kullanılabileceğini netleştirmek için Arduino Uno pinleri rehberine bakabilirsiniz. LED gibi küçük bir çıkışla başlamak, bu nedenle güvenli ve öğretici bir ilk adımdır.
Sonuç
Arduino buton ile LED kontrolü, robotik kodlama öğrenenler için önemli bir geçiş projesidir. Arduino nedir? yazısında öğrendiğiniz kart mantığını ve Arduino IDE kurulumu sonrasında hazırladığınız geliştirme ortamını artık etkileşimli bir uygulamada kullanmış olursunuz. Bu projeyle Arduino’nun yalnızca komut veren değil, çevresinden bilgi alan ve bu bilgiye göre tepki üreten bir sistem olduğunu görürsünüz.
Bu yazıdaki temel mantığı anladıktan sonra sıradaki doğal adım, analog sensörlerden değer okumaktır. Buton yalnızca HIGH veya LOW üretirken, sensörler çoğu zaman 0 ile 1023 arasında değişen değerler verir. Bu farkı anlamak için bir sonraki rehber olan Arduino Sensör Okuma yazısına geçebilir, çıkış tarafını geliştirmek için de PWM ile LED parlaklığı kontrolü uygulamasını deneyebilirsiniz.
Kaynaklar
Footnotes
-
Arduino Docs, How to Wire and Program a Button. ↩ ↩2
-
Arduino Docs, InputPullupSerial. ↩ ↩2