Merhaba arkadaşlar. Bugün sizlerle beraber buton kontrollü RGB LED uygulaması yapacağız.

Gerekli malzemeler:

Daha önceki derslerimizde beraber RGB LED uygulaması yapmıştık. Yine aynı şekilde dijital giriş dersimizde push butonlar ile LED yakıp söndürmeyi öğrenmiştik. Bu uygulamayı geçmişte yaptığımız iki uygulamanın birleşimi olarak düşünebiliriz. 3 adet butonumuz RBG LED’in kırmızı, yeşil ve mavi renklerinin parlaklıklarını kontrol edecek. Bu şekilde farklı renkleri her seferinde kodu değiştirmeden elde edebileceğiz.

Devre şeması 17/01/2017 tarihinde güncellenmiştir.

Kodumuz:

int kirmiziLEDPin = 11;
int yesilLEDPin = 10;
int maviLEDPin = 9;

int kirmiziSwitchPin = 7;
int yesilSwitchPin = 6;
int maviSwitchPin = 5;

int kirmizi = 0;
int mavi = 0;
int yesil = 0;

void setup()
{
  pinMode(kirmiziLEDPin, OUTPUT);
  pinMode(yesilLEDPin, OUTPUT);
  pinMode(maviLEDPin, OUTPUT);
  pinMode(kirmiziSwitchPin, INPUT_PULLUP);
  pinMode(yesilSwitchPin, INPUT_PULLUP);
  pinMode(maviSwitchPin, INPUT_PULLUP);
}

void loop()
{
  if (digitalRead(kirmiziSwitchPin) == LOW)
  {
    kirmizi ++;
    if (kirmizi > 255) {
      kirmizi = 0;
    }
  }
  if (digitalRead(yesilSwitchPin) == LOW)
  {
    yesil ++;
    if (yesil > 255) {
      yesil = 0;
    }
  }
  if (digitalRead(maviSwitchPin) == LOW)
  {
    mavi ++;
    if (mavi > 255) {
      mavi = 0;
    }
  }
  renkAyarla(kirmizi, yesil, mavi);
  delay(10);
}

void renkAyarla(int kirmizi, int yesil, int mavi)
{
  kirmizi = 255 - kirmizi; //ortak katot kullanılıyorsa silin
  yesil = 255 - yesil; //ortak katot kullanılıyorsa silin
  mavi = 255 - mavi; //ortak katot kullanılıyorsa silin
  analogWrite(kirmiziLEDPin, kirmizi);
  analogWrite(yesilLEDPin, yesil);
  analogWrite(maviLEDPin, mavi);
}

RGB LED kodumuzu hatırlayacak olursak, orada bulunan renkAyarla fonksiyonunu bu uygulamamızda tekrar kullandığımızı görebilirsiniz. Yaptığımız uygulamada, her bir renk için parlaklığı arttıran bir push buton mevcut. Bu butonlara basıldığı sürece o rengin parlaklık değeri artıyor, 255’e ulaştığında ise tekrardan 0’lanıyor.

Sizin kullandığınız LED, ortak katot yapıya sahipse, ilk RBG uygulamamızdaki değişikliklerin aynısını burada uygulayabilirsiniz.

İpucu: Her rengin o anki parlaklık değerini görmek isterseniz, seri port ekranına yazdırabilirsiniz. setup fonksiyonuna Serial.begin(9600) satırını ekl… hadi biraz da siz düşünün. Seri port haberleşme dersimizden kopya çekebilirsiniz 🙂

6 Yorumlar

  1. Merhabalar. Burada butonlara direnç bağlanmamış. Bu şekilde normal çalırmı. çünkü ben tek buton tek lamba devresinde direnç bağlamadığım için saliselik yanıp sönüyordu. tabi bunu gözle görmek mümkün değildi. ben aynı kod ile röle açıp kapatmak istediğimde farkettim bunu. Butona 10k direnç bağladıktan sonra bu sorun ortadan kalktı.

    • Merhaba, dikkat ettiyseniz kodun setup kısmında giriş pinleri INPUT_PULLUP olarak tanımlanmış. Giriş pinleri bu şekilde tanımlanınca harici olarak bahsettiğiniz 10k dirence gerek kalmadan Arduino’nun kendi içerisinde sahip olduğu pull-up dirençlerini aktifleştirebiliyoruz. İlginiz için teşekkür ederiz 🙂

  2. Butonların diğer uçlarına bağladığımızda basılı tutarak ışığın değerini yükseltebiliyoruz tabi değer maksimum olduğunda sıfırlanıyor. Sizin yaptığınız gibi yapınca da yavaş yavaş kendisi yükseltiyor ve maksimum olunca sıfırlanıyor?

    • Yazıdaki bağlantı şeması hatalı olabilir, kusura bakmayın. Siz doğru şekilde bağlayabildiyseniz sorun yok demektir 🙂

CEVAP VER