Using an RGB LED you can cycle through all colours. Useful to make, Mood Lamp, expressive robot or cool light effects.

But to simply set the colour (Hue) can be a little tricky because you need to convert that to individual brightness value for each of the Red, Green and Blue LEDs.

Wire the circuit as shown below:

Red LED Anode : D3

Green LED Anode : D5

Blue LED Anode : D6

Common Cathode -> 220 Ohm resistor -> Gnd

NOTE: Whist a common Cathode resistor gives you the simplest wiring, the colour matching to the Hue value can be a little inaccurate because the forward Voltage drop of the coloured LEDs is very different. For more accurate colour rendition use 3 220Ohm resistors from the Arduino pins to the Anodes and connect the Cathode directly to Gnd.

Step 1: Hue and Brightness

Hue is a value from 0 to 360 (degrees) that describes the location of the chosen colour on the colour wheel.

See the picture to see the various colours (source: http://en.wikipedia.org/wiki/File:HueScale.svg)
Brightness is controlled separately.

We need some code to convert Hue and Brightness to RGB levels to go to the LEDs.

Note: The max value an 8bit number can hold is 255. So the Hue values are scaled to go from 0 to 255 rather than 0 to 360.

Step 2: Here's the Code

* From Arduino Cookbook, Recipe 7.4 (Open Source), Michael Margolis
* RGB_LEDs sketch
* RGB LEDs driven from analog output ports

const int redPin   = 3;        // choose the pin for each of the LEDs
const int greenPin = 5;
const int bluePin  = 6;
const boolean invert = false; // set true if common anode, false if common cathode

int color = 0; // a value from 0 to 255 representing the hue
int R, G, B;  // the Red Green and Blue color components

void setup()
  // pins driven by analogWrite do not need to be declared as outputs

void loop()
  int brightness = 255; // 255 is maximum brightness
  hueToRGB( color, brightness);  // call function to convert hue to RGB
  // write the RGB values to the pins
  analogWrite(redPin, R);
  analogWrite(greenPin, G);
  analogWrite(bluePin, B );

  color++;           // increment the color
  if(color > 255)
     color = 0;

// function to convert a color to its Red, Green, and Blue components.

void hueToRGB( int hue, int brightness)
    unsigned int scaledHue = (hue * 6);
    unsigned int segment = scaledHue / 256; // segment 0 to 5 around the
                                            // color wheel
    unsigned int segmentOffset =
      scaledHue - (segment * 256); // position within the segment

    unsigned int complement = 0;
    unsigned int prev = (brightness * ( 255 -  segmentOffset)) / 256;
    unsigned int next = (brightness *  segmentOffset) / 256;

      brightness = 255-brightness;
      complement = 255;
      prev = 255-prev;
      next = 255-next;

    switch(segment ) {
    case 0:      // red
        R = brightness;
        G = next;
        B = complement;
    case 1:     // yellow
        R = prev;
        G = brightness;
        B = complement;
    case 2:     // green
        R = complement;
        G = brightness;
        B = next;
    case 3:    // cyan
        R = complement;
        G = prev;
        B = brightness;
    case 4:    // blue
        R = next;
        G = complement;
        B = brightness;
   case 5:      // magenta
        R = brightness;
        G = complement;
        B = prev;

Step 3: Try These Things to Make It Better

  1. Add a Potentiometer to change the colour depending on how the Potentiometer is turned
  2. Make the colour change depending on an LDR
  3. Program the colour from a web page
  4. Try more projects here
<p>i have finally made it, all I had to do was to set the code to &quot;true&quot;</p><p>here is a video in action; <iframe allowfullscreen="" frameborder="0" height="281" src="//www.youtube.com/embed/ZAJp0k6DLZc" width="500"></iframe></p><p>thank you.!</p>
<p>hello sir, can you tell me by looking at this <a href="http://www.ebay.com/itm/330833693803?_trksid=p2060778.m2749.l2648&ssPageName=STRK%3AMEBIDX%3AIT" rel="nofollow">item </a>if it is a common anode or cathode? thank you!!</p>
<p>That looks like Common Anode. See how <br>pin 1 connects to the Anodes of all the LEDs. This Instructable works <br>with Common Anode LEDs by changing this line in the code:</p><p>const boolean invert = false; // set true if common anode, false if common cathode</p>
<p>ok so what I don't understand is that where does the GND go then??? the R,G,B of the led goes to &quot;Dout&quot; of the arduino, and what about the anode leg? this is where I am confused.. thank you for your reply, i'm a beginner in all of this..</p>
<p>The current flows in the direction of the LED &quot;arrow&quot;. So The Anode would be connected to Vdd and the current flows into the Arduino pins to illuminate the LED.</p>
<p>great thanks, I ordered the RGBs. I'll message back if I can't figure it out once they arrive. thank you very much</p>

About This Instructable




Bio: Technologist, Electronic Engineer, sometime Coderdojo mentor.
More by akellyirl:Arduino Guitar Tuner Using DSP Techniques Smart Home Thermostat Arduino Yun Messager 
Add instructable to: