Processing arayüzünü kullanarak tüm renkleri tek led ile elde edebiliyoruz.


Devre Şeması:


Processing kodu:
scription">Kod:
/**
 * Processing Örneği - 4
 * Processing ver ControlP5 Kütüphanesi ile
 * RGB LED Kontrolü 
 */

import controlP5.*;
import processing.serial.*;

ControlP5 controlP5;
Serial seriPort; 
ColorPicker cp; // Renj seçim nesnesi

int kirmiziDeger;
int yesilDeger;
int maviDeger;

void setup() {
  size(400, 100);
  controlP5 = new ControlP5(this);
  cp = controlP5.addColorPicker("renkSecici", 0, 0, 255, 20);  
  seriPort = new Serial(this, "COM7", 9600);
}

void draw() {
  background(cp.getColorValue()); // Arka plan rengini değiştir
  /* 
   Renk seçici nesnesindek rengin kırmızı,yeşil ve  
   mavi bileşenlerini ayırıp ilgili değişkenlere atıyoruz
   */
  kirmiziDeger = int(red(cp.getColorValue()));
  yesilDeger = int(green(cp.getColorValue()));
  maviDeger = int(blue(cp.getColorValue()));  
  delay(50);
}

/* Renk seçideki değerler değiştiğinde
 otomatik olarak çağırılan fonksiyon ile
 renk değerlerini konsola yazdırıyoruz
 */
void renkSecici(int renk) {
  println("KIRMIZI "+kirmiziDeger + " YESIL "+yesilDeger + " MAVI "+maviDeger);
  RenkGonder();
}

/* Renk değerleri,
 önce R karakter sonrasında kırmızı,yeşil,mavi
 sırasıyla gönderiliyor
 */
void RenkGonder()
{
  seriPort.write('R');
  seriPort.write(kirmiziDeger);
  seriPort.write(yesilDeger);
  seriPort.write(maviDeger);
}
Arduino kodu:
description">Kod:
/* 
 * Processing Örneği - 4
 * Processing ver ControlP5 Kütüphanesi ile
 * RGB LED Kontrolü   
 */

// LED bağlantı pinleri
const int kirmiziPin = 11;  // kırmızı
const int yesilPin = 10; // yeşil
const int maviPin = 9; // mavi

int kirmizi=0, yesil=0, mavi=0; // renk değerleri
int durum = 1; // gelen verileri işlemede kullanılacak
byte gelen = 0;

void setup()
{
  Serial.begin(9600);

}

void loop()
{
  while(Serial.available()>0)
  {
    /* 
     Gelen veriler işleniyor
     R karakteri geldikten sonra sırasıyla
     kirmizi,yeşil ve mavi baytları okunuyor.
     */
    gelen = Serial.read();
    switch(durum)
    {
    case 1:
      if(gelen == 'R'){
        durum = 2;
      }
      break;

    case 2:
      kirmizi = gelen;
      durum = 3;      
      break;

    case 3:
      yesil = gelen;
      durum = 4;
      break;

    case 4:
      mavi = gelen;
      durum = 1;
      break;
    }
  }

  // Ortak anot için
  analogWrite(kirmiziPin, 255 - kirmizi);
  analogWrite(yesilPin, 255 - yesil);
  analogWrite(maviPin, 255 - mavi);

  // Ortak katot için
  /* 
   analogWrite(rpin, r);
   analogWrite(gpin, g);
   analogWrite(bpin, b);
   */
  delay(20);
}
Orjinal konu: https://temrinlerim.org/index.php?topic=177.0