• Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

RGB LED control with arduino

Status
Not open for further replies.

xXAxHillbillyXx

New Member
Can anyone help me adapt this code for a common CATHODE rgb led? or will it work as is?

Code:
The circuit:
 * Potentiometer connected to analog pin 2 w/ pos 5v and grounded neg
 * RGB LED connections are in this order when looking at LED:  Red, Common Annode(Longest - also where 5v power is connected), Green, Blue
 * RGB LED attached from digital pin 9(red), 10(green), 11(blue) w/ common annode to 5v power.

 Created 8 May 2010
 Commented by Dave a.k.a Ka0ticstyle

 */

int potpin = 2;		  // POT connected to digital pin 2 - pos/neg are left and right connections on POT
int rpin = 9;		    // Red
int gpin = 10;		   // Green
int bpin = 11;		   // Blue
float h;			   // Hue range
int h_int;			 // Hue color
int r = 0, g = 0, b = 0;	     // Default RGB values

int val = 0;			 // Set POT value to default 0

void h2rgb(float h, int& R, int& G, int& B); // Instantiate h2rgb and it's variables  a.k.a  Hue to RGB

void setup()			  // Run once, when the sketch starts
{
  Serial.begin(9600);	    // Begin the output of data to serial
}


void loop()			   // Run over and over again
{
  val = analogRead(potpin);    // Read the pin and display the value
  h = ((float)val)/1024;	 // Get the range. pot value / 1024
  h_int = (int) 360*h;	   // Get the color hue by multiplying by 360

  h2rgb(h,r,g,b);		  // Call the h2rgb function passing it the hue value

  Serial.print("POT value: ");
  Serial.print(val);	     // Pot value
  Serial.print(" = Hue of ");
  Serial.print(h_int);	   // Color Hue value
  Serial.print(" degrees. RGB values: ");
  Serial.print(r);		 // Red value
  Serial.print(" ");
  Serial.print(g);		 // Green value
  Serial.print(" ");
  Serial.println(b);	     // Blue value

  analogWrite(rpin, r);	  // Changes red led
  analogWrite(gpin, g);	  // Changes green led
  analogWrite(bpin, b);	  // Changes blue led
  
}

void h2rgb(float h, int& R, int& G, int& B) {

  // Used HSV --> RGB function
  // HSV - Hue, Saturation, Value
  // RGB - Red, Green, Blue - example (255,255,255)
  // Function below does a bunch of math to convert HSV values to RGB
  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;
  }
}
 

tytower

Banned
Did u get this going?
I have only seen common cathode types. I think this may be a typo in the program
LED´s only work one way
Normally the cathode is the shorter lead but with these they made it the longest lead
Cathode goes to ground and Anode to positive via resistor

http://www.kpsec.freeuk.com/components/led.htm


Wonderfully satisfying piece of electronics is this RGB LED.
 
Last edited:
Status
Not open for further replies.

EE World Online Articles

Loading

 
Top