Arduino sadece LED yakıp söndürmek için değil, dış dünyadan gelen sinyalleri okumak için de kullanılır. Bu projede, bir butona basarak Arduino'ya "Işığı yak!" emrini vereceğiz. Bu mantık, klavyenizin tuşlarından asansör düğmelerine kadar her yerde aynıdır.

1. Dijital Okuma Nedir? (1 ve 0)

Arduino'nun dijital pinleri, voltajın varlığını (5V) veya yokluğunu (0V) algılayabilir.

HIGH (Yüksek)
1

Pinden 5 Volt geliyorsa, Arduino bunu "1" veya "HIGH" olarak okur. (Butona basıldı)

LOW (Düşük)
0

Pinden 0 Volt (GND) geliyorsa, Arduino bunu "0" veya "LOW" olarak okur. (Butona basılmadı)

2. Kritik Parça: Pull-Down Direnci

Önemli: Butonun bir bacağını 5V'a, diğerini Arduino'ya bağlarsanız; butona basınca 5V gider (Güzel). Ama elinizi çekince ne gider? 0V gitmez! Kablo havada kalır ve ortamdaki parazitleri toplar. Buna "Floating" (Kararsızlık) denir.
DURUM 1: BASILI DEĞİL 5V PIN 2 10kΩ GND Voltaj GND'ye çekilir (LOW) DURUM 2: BASILI 5V PIN 2 10kΩ GND Dirençsiz yol tercih edilir (HIGH)
Analoji: 10k Direnç zayıf bir yerçekimi gibidir. 5V (Güçlü el) butona basıp sizi yukarı kaldırmazsa, direnç sizi her zaman aşağıya (GND) çeker. Böylece havada asılı (kararsız) kalmazsınız.

3. Devre Şeması

Buton için Pin 2'yi, LED için Pin 3'ü kullanacağız.

ARDUINO UNO 5V GND D2 (Giriş) D3 (Çıkış) Buton 10kΩ LED + 220Ω

4. Yazılım (Kodlama)

Arduino'ya şu mantığı öğreteceğiz: "Eğer (if) butona basıldıysa ışığı yak, değilse (else) söndür."

Buton_LED.ino C++
// Pin Tanımlamaları
const int butonPin = 2;     // Butonun bağlı olduğu giriş pini
const int ledPin =  3;      // LED'in bağlı olduğu çıkış pini

// Değişken
int butonDurumu = 0;         // 0 (LOW) veya 1 (HIGH) değerini tutar

void setup() {
  pinMode(ledPin, OUTPUT);   // LED pini çıkış olarak ayarlandı
  pinMode(butonPin, INPUT);  // Buton pini giriş olarak ayarlandı
}

void loop() {
  // 1. Butonun durumunu oku
  butonDurumu = digitalRead(butonPin);

  // 2. Karar ver: Basıldı mı?
  if (butonDurumu == HIGH) {     
    // Evet, basıldı (5V geliyor) -> Işığı Yak
    digitalWrite(ledPin, HIGH);  
  } else {
    // Hayır, basılmadı (GND geliyor) -> Işığı Söndür
    digitalWrite(ledPin, LOW);   
  }
}
        

5. İpuçları ve Alternatifler

10k Pull-down direncini takmayı unuttunuz veya direnç temassızlık yapıyor. Arduino'nun pini havadaki elektromanyetik dalgaları (cep telefonu sinyalini bile) buton basılması sanıyor. Direnci kontrol edin.

Evet! Arduino'nun içinde dahili bir 20k direnç vardır. Kodda pinMode(butonPin, INPUT_PULLUP); yazarsanız harici dirence gerek kalmaz. Ancak mantık tersine döner: Basınca LOW (0), bırakınca HIGH (1) okursunuz. Başlangıç için harici direnç (bu proje) daha anlaşılırdır.