Tag

, , , ,

Terinspirasi dari situs ini, dengan gambar rangkaian seperti di bawah ini :

Karena kebetulan sudah punya RGB LED hasil beli di sini, sehingga rangkaian di atas bisa diganti dengan rangkaian yang sudah saya buat sebelumnya. Hanya tinggal mengubah sketch nya saja.

Kode program yang dibuat di sini, masih terbilang “urakan”. Jadi saya coba coding ulang, mudah-mudahan yang baca bisa lebih ngerti.

/*----------------------------------------------------------------
Nama Program : Crossfade RGB LED
Dibuat oleh  : Insan Sains, 21 Desember 2010
Sumber       : http://luckylarry.co.uk/arduino-projects/3-led-crossfade-with-pwm-and-arduino/
Keterangan   : Program animasi dimmer RGB LED : transisi lebih soft
Bahasa       : - Inggris untuk instruksi dan variable
               - Indonesia untuk comment dan keterangan  
-----------------------------------------------------------------*/

/* Program sumber mendefinisikan GREEN dengan variable bentuk int
Cara ini kurang efektif, karena makan memori
int GREEN = 9;   <-- tidak efektif
#define GREEN 9  <-- sederhana, dan menghemat memori
*/
#define BLUE   9       // BLUE alias 9
#define GREEN 10       // GREEN alias 10
#define RED   11       // RED alias 11

// Inisialisasi awal
int r = 255; // merah = full
int g = 1;   // hijau = off
int b = 1;   // biru  = off
int i = 0;   // variable pencacah

void setup() {
  // set tiga port sebagai output
  pinMode(RED, OUTPUT);
  pinMode(GREEN, OUTPUT);
  pinMode(BLUE, OUTPUT);
}

// dari MERAH -> HIJAU -> BIRU
// dengan transisi yang lembut
void loop() {
  i++;                   // naikkan counter
  if (i < 255) {         // FASE 1 ----- MERAH
    r-- ;                // Merah : turun
    g++ ;                // Hijau : naik
    b = 1;               // Biru  : -
  } else if (i < 509) {  // FASE 2 ----- HIJAU
    r = 1;               // Merah : -
    g-- ;                // Hijau : turun
    b++ ;                // Biru  : naik
  } else if (i < 763) {  // FASE 3 ----- BIRU
    r++ ;                // Merah : naik
    g = 1;               // Hijau : -
    b-- ;                // Biru  : turun
  } else {               // Melebihi 3x254 : MERAH
    i = 1;               // reset counter
  }

  // nyalakan RGB LED
  analogWrite(RED,   r);
  analogWrite(GREEN, g);
  analogWrite(BLUE,  b);
  delay(50);             // beri pewaktu agar terlihat

}