Hello, I'm working on my first Arduino project. I plan on adding 7 pot controlled RGB LEDs to my PC.
I will be using this code that I found a while back:
/*
RGB LED w/ Potentiometer
Created 8 May 2010
Commented by Dave a.k.a Ka0ticstyle
*/
int potpin = A2; // POT connected to digital pin 2 - pos/neg are left and right connections on POT
int rpin = 6; // Red
int gpin = 5; // Green
int bpin = 3; // 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;
}
}
I plan on wiring it like this:
Questions:
Does everything look alright?
Can the Arduino handle that many LEDs connected to each pin?
Can I power the LEDs with 5v directly from the PC PSU? Since the Arduino will be powered by USB I believe that they'll share ground and this will be fine, but I'm not sure.