...

Arduino LED Devresi #6 – Buton ile 3 Modlu LED Yanıp Sönme Projesi

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çaMiktar
Arduino UNO1 adet
LED1 adet
220Ω direnç1 adet
Buton1 adet
10kΩ direnç (pull-down)1 adet
Breadboard1 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 msLED 1 saniyede bir yanar
Orta500 msLED 0.5 saniyede bir yanar
Hızlı200 msLED ç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:

Seraphinite AcceleratorOptimized by Seraphinite Accelerator
Turns on site high speed to be attractive for people and search engines.