Merhaba arkadaşlar. Bugün sizlerle beraber buton kontrollü RGB LED uygulaması yapacağız.
Gerekli malzemeler:
- Arduino UNO
- Breadboard
- 1 adet ortak anot veya ortak katot RGB LED
- 3 adet 220 Ω direnç
- 3 adet push buton
- İki ucu erkek jumper kablo
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.
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 🙂
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 🙂
her butona mı?
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 🙂
avrdude: ser_open(): can’t open device “\\.\COM4”: Sistem belirtilen dosyayı bulamıyor. bu hatayı veriyor
Aşağıdaki resimde görüldüğü gibi menüden doğru COM portunun seçili olduğundan emin olun:
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.
merhaba umarım bakarsınız bende sadece kırmızı ve tonları var mavi vb. renkler yok umarım bakarsınız sevgilerimler
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.
Butona basıldığında en yüksek değere ulaşması için kodda nasıl bir değişiklik yapmalıyım? Teşekkür ederim.
if (digitalRead(kirmiziSwitchPin) == LOW)
{
digitalWrite(kirmiziLEDPin, HIGH);
}
Komutu ile PWM kullanmadan doğrudan çıkışa lojik 1, yani 5V verdirebilirsiniz.
Teşekkürler
Kaç defa yazdım ama olmadı. Her seferinde ‘renkayarla’ was not declared in this scope hatası veriyor. Ne sorun var anlamadım.
serial begin komutunu kullnarak yazdıramadım örnek yapabilirmisiniz?
Merhaba, seri haberleşme ile ilgili şu yazımızdaki örnek koddan yararlanabilirsiniz. -> maker.robotistan.com/arduino-dersleri-7-analog-girisler/
2 butonum var sizce onla nasıl 3 renk yapabilirim lütfen cevap verin???
Ortak katot led için değişen tek şey ledi taktığımız artının(şemadaki) eksi olması mı yoksa kodlarda da değişiklik var mı?
bastığım butonu bırakınca renk sönmüyor sinirimi bozdu
Butonun bağlantısını kontrol edebilir misiniz?