this code will control the color of a rgb led using pwm and one potentiometer the only problem is it is written for common anode leds and i need it to do this with a common cathode led... will the code work as is or does it need to be changed some?... if it does need changed then what changes need to be made?...
thanx
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;
}
}