Arduino Buton ile LED Kontrolü: digitalRead, Pull-up ve Pull-down Rehberi

Arduino Buton ile LED Kontrolü: digitalRead, Pull-up ve Pull-down Rehberi

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 konuBu 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-upHarici 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.

MalzemeAdetAçıklama
Arduino Uno veya uyumlu kart1Kodu çalıştıracak geliştirme kartı
LED1Butona göre yanıp sönecek çıkış elemanı
220 ohm veya 330 ohm direnç1LED üzerinden geçen akımı sınırlamak için
10K ohm direnç1Buton girişini pull-down yapmak için
Push button1Kullanıcının devreye giriş vermesi için
Breadboard1Lehim yapmadan devre kurmak için
Jumper kablo5-7Arduino, buton, LED ve direnç bağlantıları için
USB kablo1Arduino’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ığı
5VButonun bir bacağına gider
D2Butonun diğer bacağına ve 10K ohm dirence bağlanır
10K ohm dirençD2 hattından GND’ye iner
D13LED’in uzun bacağına, yani anot tarafına gider
LED kısa bacağı220 ohm direnç üzerinden GND’ye bağlanır
GNDLED 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.

ÖzellikPull-down dirençINPUT_PULLUP
Harici direnç gerekir mi?Evet, genellikle 10K ohmHayır
Buton bırakıldığında okunan değerLOWHIGH
Butona basıldığında okunan değerHIGHLOW
Yeni başlayan için mantıkDaha sezgiselTers mantık nedeniyle dikkat ister
Devre sadeliğiBiraz 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.

SorunMuhtemel nedenÇözüm
LED hiç yanmıyorLED ters bağlanmış olabilirLED’in uzun bacağını D13 tarafına, kısa bacağını GND tarafına alın
LED sürekli yanıyorButon bağlantısı veya kod mantığı ters olabilirPull-down mı INPUT_PULLUP mı kullandığınızı kontrol edin
Seri Monitör rastgele 0/1 gösteriyorGiriş pini floating durumda olabilirPull-down direnci veya INPUT_PULLUP ayarını kontrol edin
Butona basınca değer değişmiyorButon breadboard’a yanlış yönde takılmış olabilirButonu orta kanalın iki tarafına gelecek şekilde yeniden yerleştirin
Kod yüklenmiyorKart veya port seçimi hatalı olabilirArduino 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

  1. Arduino Docs, How to Wire and Program a Button. 2

  2. Arduino Docs, InputPullupSerial. 2

Benzer Yazılar

Arduino IDE Kurulumu: Windows, macOS ve Linux İçin Adım Adım Rehber

Arduino IDE Kurulumu: Windows, macOS ve Linux İçin Adım Adım Rehber

Arduino IDE kurulumu, Arduino ile proje geliştirmeye başlamadan önce tamamlanması gereken ilk yazılım adımıdır. Arduino kartınıza kod yüklemek, seri porttan veri okumak, örnek projeleri açmak ve t

Devamını Oku
Arduino ile LED Yakma: Devre Şeması, Kod ve Adım Adım Anlatım

Arduino ile LED Yakma: Devre Şeması, Kod ve Adım Adım Anlatım

Arduino ile LED yakma, robotik kodlama ve elektronik öğrenmeye başlayanların yaptığı ilk uygulamalardan biridir. Bu küçük proje, yalnızca bir LED'i açıp kapatmaktan ibaret değildir; aynı zamanda d

Devamını Oku
Arduino Nedir? Ne İçin Kullanılır? Yeni Başlayanlar İçin Kapsamlı Rehber

Arduino Nedir? Ne İçin Kullanılır? Yeni Başlayanlar İçin Kapsamlı Rehber

Arduino, hem donanım hem de yazılım tarafıyla elektronik prototipleme dünyasının en popüler açık kaynak platformudur. Hobi sahiplerinden eğitimcilere, sanatçılardan profesyonel mühendislere kadar

Devamını Oku
Arduino PWM ile LED Parlaklığını Ayarlama: analogWrite ve Fade Rehberi

Arduino PWM ile LED Parlaklığını Ayarlama: analogWrite ve Fade Rehberi

Arduino PWM ile LED parlaklığını ayarlama, LED'i yalnızca yakıp söndürmekten bir adım ileriye geçerek ışık şiddetini kademeli biçimde kontrol etmeyi öğretir. Bu uygulamada Arduino'nun dijital bir

Devamını Oku
Arduino Sensör Okuma: analogRead, A0 ve Seri Monitör ile İlk Sensör Değeri

Arduino Sensör Okuma: analogRead, A0 ve Seri Monitör ile İlk Sensör Değeri

Arduino sensör okuma, robotik kodlama öğrenirken dijital girişlerden analog değerlere geçiş yaptığınız en önemli aşamalardan biridir. [Arduino buton ile LED kontrolü](/blog/arduino-buton-ile-led-k

Devamını Oku
Arduino Uno Pinleri: Dijital, Analog, PWM ve Güç Pinleri Rehberi

Arduino Uno Pinleri: Dijital, Analog, PWM ve Güç Pinleri Rehberi

Arduino Uno pinleri, kartın sensörler, LED'ler, butonlar, motor sürücüler ve haberleşme modülleriyle bağlantı kurmasını sağlayan giriş-çıkış noktalarıdır. Arduino öğrenirken yalnızca kod yazmak ye

Devamını Oku