Bu uygulamada, tek bir LED yerine bünyesinde Kırmızı (Red), Yeşil (Green) ve Mavi (Blue) olmak üzere 3 farklı diyot barındıran RGB LED'i kontrol edeceğiz. ESP32'nin 3 farklı donanımsal PWM kanalını kullanarak renkleri karıştıracak ve gökkuşağı efekti oluşturacağız.
Ortak katot RGB LED'lerde en uzun bacak eksi (-) ucudur. Diğer 3 bacak ise sırasıyla Kırmızı, Yeşil ve Mavi renkleri temsil eder. Her renk bacağına akım sınırlama için ayrı birer direnç bağlanmalıdır.
GND pinine.GPIO 17 (PWM Kanal 0).GPIO 4 (PWM Kanal 1).GPIO 16 (PWM Kanal 2).
Görsel 1: ESP32 RGB LED Şeması
Aşağıdaki kod, 3 bağımsız PWM kanalına farklı görev döngüleri (duty cycle) göndererek renk spektrumu oluşturur.
#define RED_PIN 17
#define GREEN_PIN 4
#define BLUE_PIN 16
// PWM Yapılandırması
const int frekans = 5000;
const int cozunurluk = 8; // 8-bit (0 - 255)
// Her renk için ayrı bir donanımsal kanal tanımlanır
const int redKanal = 0;
const int greenKanal = 1;
const int blueKanal = 2;
void setup() {
// PWM Kanallarının yapılandırılması
ledcSetup(redKanal, frekans, cozunurluk);
ledcSetup(greenKanal, frekans, cozunurluk);
ledcSetup(blueKanal, frekans, cozunurluk);
// Kanalların ilgili GPIO pinlerine bağlanması
ledcAttachPin(RED_PIN, redKanal);
ledcAttachPin(GREEN_PIN, greenKanal);
ledcAttachPin(BLUE_PIN, blueKanal);
}
void loop() {
// Kırmızıdan Yeşile Geçiş
renkAyarla(255, 0, 0); delay(1000);
// Yeşilden Maviye Geçiş
renkAyarla(0, 255, 0); delay(1000);
// Maviden Beyaza Geçiş
renkAyarla(0, 0, 255); delay(1000);
// Ara Renk Karışımı (Örn: Sarı)
renkAyarla(255, 255, 0); delay(1000);
// Mor Karışımı
renkAyarla(128, 0, 128); delay(1000);
}
// Renk değerlerini ilgili kanallara yazan fonksiyon
void renkAyarla(int red, int green, int blue) {
ledcWrite(redKanal, red);
ledcWrite(greenKanal, green);
ledcWrite(blueKanal, blue);
}
3V3 pinine bağlamalısınız. Bu durumda kod mantığı tersine döner; renkleri yakmak için 255 yerine 0, söndürmek için ise 0 yerine 255 değeri (yani lojik tersleme) göndermeniz gerekir.Henüz yorum yapılmamış. İlk yorumu siz yapın!