Bu Arduino projesinde, bir buton kullanarak LED’in yanıp sönme hızını üç farklı moda (yavaş, orta, hızlı) göre değiştireceğiz. Her butona basışta LED’in çalışma modu değişecek. Bu sayede hem dijital giriş/çıkış mantığını hem de çok modlu kontrol sistemlerini öğreneceğiz.
Gerekli Malzemeler
Parça | Miktar |
---|---|
Arduino UNO | 1 adet |
LED | 1 adet |
220Ω direnç | 1 adet |
Buton | 1 adet |
10kΩ direnç (pull-down) | 1 adet |
Breadboard | 1 adet |
Jumper kabloları | Yeterli sayıda |
Devre Bağlantısı
LED Bağlantısı:
- LED’in uzun bacağı (anot): Arduino pin 2
- Kısa bacağı (katot): 220Ω direnç üzerinden GND
Buton Bağlantısı (pull-down yöntemiyle):
- Bir ucu: Arduino pin 3
- Diğer ucu: +5V
- Aynı bacak ile GND arasına: 10kΩ pull-down direnci
Pull-Down Direnci Nedir?
Dijital giriş pinleri boşta kaldığında, giriş durumu kararsız (floating) olabilir. Bu durumu engellemek için kullanılan 10kΩ’luk direnç, pinin düzgün şekilde LOW (düşük) durumda kalmasını sağlar. Bu, yanlış tetiklenmeleri önler.
LED Modları
Projede 3 farklı LED yanıp sönme modu vardır:
Mod Adı | Bekleme Süresi (ms) | Açıklama |
---|---|---|
Yavaş | 1000 ms | LED 1 saniyede bir yanar |
Orta | 500 ms | LED 0.5 saniyede bir yanar |
Hızlı | 200 ms | LED çok hızlı yanar |
Bağlantı Şeması:
Arduino Kodları – 3 Modlu LED Yanıp Sönme
int ledPin = 2; // LED'in bağlı olduğu pin
int butonPin = 3; // Butonun bağlı olduğu pin
int mod = 0; // Mod: 0 = yavaş, 1 = orta, 2 = hızlı
unsigned long sureler[] = {1000, 500, 200}; // Her mod için bekleme süresi (ms)
bool ledDurumu = false; // LED açık mı kapalı mı bilgisi
bool oncekiButonDurumu = LOW; // Butonun önceki durumu
unsigned long oncekiZaman = 0; // LED’in en son değiştiği zaman
unsigned long ledBeklemeSuresi = sureler[mod]; // Aktif modun süresi
void setup() {
pinMode(ledPin, OUTPUT); // LED pini çıkış olarak ayarlanır
pinMode(butonPin, INPUT); // Buton pini giriş olarak ayarlanır
}
void loop() {
unsigned long simdikiZaman = millis(); // Şu anki zamanı al
// LED’i belirli aralıklarla yanıp söndür
if (simdikiZaman - oncekiZaman >= ledBeklemeSuresi) {
oncekiZaman = simdikiZaman; // Zamanı güncelle
ledDurumu = !ledDurumu; // LED durumunu tersine çevir
digitalWrite(ledPin, ledDurumu); // LED’i aç/kapat
}
// Buton kontrolü
bool butonDurumu = digitalRead(butonPin); // Butonun şu anki durumu
if (butonDurumu == HIGH && oncekiButonDurumu == LOW) {
mod = (mod + 1) % 3; // Modu sırayla değiştir (0→1→2→0)
ledBeklemeSuresi = sureler[mod]; // Yeni moda göre bekleme süresi ata
delay(50); // Debounce (sıçrama engelleme) için kısa bekleme
}
oncekiButonDurumu = butonDurumu; // Butonun önceki durumu güncellenir
}
Kodun yorumsuz hali:
int ledPin = 2;
int butonPin = 3;
int mod = 0;
unsigned long sureler[] = {1000, 500, 200};
bool ledDurumu = false;
bool oncekiButonDurumu = LOW;
unsigned long oncekiZaman = 0;
unsigned long ledBeklemeSuresi = sureler[mod];
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(butonPin, INPUT);
}
void loop() {
unsigned long simdikiZaman = millis();
if (simdikiZaman - oncekiZaman >= ledBeklemeSuresi) {
oncekiZaman = simdikiZaman;
ledDurumu = !ledDurumu;
digitalWrite(ledPin, ledDurumu);
}
bool butonDurumu = digitalRead(butonPin);
if (butonDurumu == HIGH && oncekiButonDurumu == LOW) {
mod = (mod + 1) % 3;
ledBeklemeSuresi = sureler[mod];
delay(50);
}
oncekiButonDurumu = butonDurumu;
}
Serinin devamı için buradan devam edebilirsiniz: