back to top

Arduino Temelleri 6: Buton Kontrollü RGB LED

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 🙂

Son Çıkan Yazılar

21 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?

  3. Merhaba
    Butonlara bastığımızda normalde 1 değer yükseltmesi ve toplamda 255 kere basmamız gerekmiyor mu?
    Burada 16-17 kez bastıktan sonra maksimuma ulaşıyor. Kodda gözden kaçırdığım bir şey var mı diye soruyorum.

    • Mikrokontrolcüler çok hızlı şekilde çalıştığından bir kere basmanızı çok daha fazla sayıda algılamaktadır. Bahsettiğiniz durumun sebebi budur.

    • Bağlantılarınızı kontrol edebilir misiniz? LED’in kırmızı, yeşil ve mavi bacaklarını birer direnç ile doğrudan GND’ye bağlayarak teker teker deneyebilmeniz mümkündür.

    • Merhaba, seri haberleşme ile ilgili şu yazımızdaki örnek koddan yararlanabilirsiniz. -> maker.robotistan.com/arduino-dersleri-7-analog-girisler/

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz