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)
1Pinden 5 Volt geliyorsa, Arduino bunu "1" veya "HIGH" olarak okur. (Butona basıldı)
LOW (Düşük)
0Pinden 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.
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.
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.