3rd Inning
Jump to navigation
Jump to search
Introduction
Tri-color LED fading
This is the way to hook up a tri-color LED. Basically you are hooking up 3 leds that have a common ground. The average voltage that each led uses to power itself is varied using pulse width modulation. The code basically does a neato nested loop to vary the colors. This is a fun circuit to play with. Make sure to use the resistors or you may burn up your LED - The cost a couple of bucks!
Components Needed
- Freeduino or Arduino or clone
- USB cable for Freeduino
- Freeduino development software - download here!
- Solderless Breadboard
- Hookup wire 22gauge solid
- Common Cathode LED
How to
- refer to the fritzing drawing to place the wires
- upload the code below using cut and paste
- Run and watch the fading of the led!
Schematic
Fritzing
Code
Cut and paste this into your Arduino code window!
int RED = 9; // RED pin of the LED to PWM pin 9 int GREEN = 10; // GREEN pin of the LED to PWM pin 10 int BLUE = 11; // BLUE pin of the LED to PWM pin 11 void setup() { // nothing for setup } void loop() { for(int r = 0; r < 1024; r+=5) { for(int g = 0; g < 1024; g+=5) { for(int b = 0; b < 1024; b+=5) { analogWrite(RED, r); analogWrite(GREEN, g); analogWrite(BLUE, b); delay(30); } } } }
or cut and paste this one... it is neater
//This code comes from... //http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1207331496 //modified to just go through a pretty color loop! //use tools->serial monitor to watch the values //bpw 5/10/10 int rpin = 9; // RED pin of the LED to PWM pin 9 int gpin = 10; // GREEN pin of the LED to PWM pin 10 int bpin = 11; // BLUE pin of the LED to PWM pin 11 int r=0, g=0, b=0; float h; void h2rgb(float h, int &R, int &G, int &B); void setup() // run once, when the sketch starts { Serial.begin(9600); } void loop() // run over and over again { for (int val = 0; val <1024; val++) { h = ((float)val)/1024; h2rgb(h,r,g,b); Serial.println (val) ; Serial.println (h) ; Serial.println (r) ; Serial.println (g) ; Serial.println (b) ; Serial.println (" ") ; analogWrite(rpin, r); analogWrite(gpin, g); analogWrite(bpin, b); //delay(50); } } void h2rgb(float H, int& R, int& G, int& B) { int var_i; float S=1, V=1, var_1, var_2, var_3, var_h, var_r, var_g, var_b; if ( S == 0 ) //HSV values = 0 ÷ 1 { R = V * 255; G = V * 255; B = V * 255; } else { var_h = H * 6; if ( var_h == 6 ) var_h = 0; //H must be < 1 var_i = int( var_h ) ; //Or ... var_i = floor( var_h ) var_1 = V * ( 1 - S ); var_2 = V * ( 1 - S * ( var_h - var_i ) ); var_3 = V * ( 1 - S * ( 1 - ( var_h - var_i ) ) ); if ( var_i == 0 ) { var_r = V ; var_g = var_3 ; var_b = var_1 ; } else if ( var_i == 1 ) { var_r = var_2 ; var_g = V ; var_b = var_1 ; } else if ( var_i == 2 ) { var_r = var_1 ; var_g = V ; var_b = var_3 ; } else if ( var_i == 3 ) { var_r = var_1 ; var_g = var_2 ; var_b = V ; } else if ( var_i == 4 ) { var_r = var_3 ; var_g = var_1 ; var_b = V ; } else { var_r = V ; var_g = var_1 ; var_b = var_2 ; } R = (1-var_r) * 255; //RGB results = 0 ÷ 255 G = (1-var_g) * 255; B = (1-var_b) * 255; } }
Troubleshooting
- is your led in correctly (the longest pin(cathode) should connect to ground)
- code for the pins on Arduino correct
Resources
Most of this example is from http://wiring.org.co/learning/basics/rgbled.html.
A great thread on hue controlled tri-colored LEDs is here... http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1207331496