Introduction: How to Use an RGB LED

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:
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


Akin Yildiz made it! (author)2014-11-25

i have finally made it, all I had to do was to set the code to "true"

here is a video in action;

thank you.!

Akin Yildiz (author)2014-10-25

hello sir, can you tell me by looking at this item if it is a common anode or cathode? thank you!!

akellyirl (author)Akin Yildiz2014-10-25

That looks like Common Anode. See how
pin 1 connects to the Anodes of all the LEDs. This Instructable works
with Common Anode LEDs by changing this line in the code:

const boolean invert = false; // set true if common anode, false if common cathode

Akin Yildiz (author)akellyirl2014-10-25

ok so what I don't understand is that where does the GND go then??? the R,G,B of the led goes to "Dout" 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..

akellyirl (author)Akin Yildiz2014-10-26

The current flows in the direction of the LED "arrow". So The Anode would be connected to Vdd and the current flows into the Arduino pins to illuminate the LED.

Akin Yildiz (author)akellyirl2014-10-26

great thanks, I ordered the RGBs. I'll message back if I can't figure it out once they arrive. thank you very much

About This Instructable




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