Created
November 22, 2011 17:13
-
-
Save lmorchard/1386240 to your computer and use it in GitHub Desktop.
Hue and brightness control over an RGB LED with two potentiometers.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Hue and brightness control over an RGB LED with two potentiometers. | |
// | |
// Components: | |
// - 1 x RGB LED | |
// - 2 x POTs | |
// - 3 x 330ohm resistors | |
// | |
// Wiring: | |
// - LED R->330o->D9; G->330o->D10; B->330o->D11; A->5V | |
// - POT 1 1->5V; 2->A0; 3->GND | |
// - POT 0 1->5V; 2->A1; 3->GND | |
// | |
const int pot1_in = 0; | |
const int pot2_in = 1; | |
const int led_red = 9; | |
const int led_green = 10; | |
const int led_blue = 11; | |
int pot1_val = 0; | |
int pot2_val = 0; | |
int red_val = 255; | |
int green_val = 255; | |
int blue_val = 255; | |
float h_val = 0.0; | |
float b_val = 0.0; | |
void setup () { | |
pinMode(led_red, OUTPUT); | |
pinMode(led_green, OUTPUT); | |
pinMode(led_blue, OUTPUT); | |
} | |
void loop () { | |
pot1_val = analogRead(pot1_in); | |
pot2_val = analogRead(pot2_in); | |
h_val = (float)map(pot1_val, 0, 1023, 0, 1000) / 1000.0; | |
b_val = (float)map(pot2_val, 0, 1023, 0, 1000) / 1000.0; | |
hsv2rgb(h_val, 1.0, b_val, red_val, green_val, blue_val); | |
analogWrite(led_red, red_val); | |
analogWrite(led_green, green_val); | |
analogWrite(led_blue, blue_val); | |
} | |
void hsv2rgb(float H, float S, float V, int& R, int& G, int& B) { | |
int var_i; | |
float 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; | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment