Skip to content

Instantly share code, notes, and snippets.

@lmorchard
Created November 22, 2011 17:13
Show Gist options
  • Save lmorchard/1386240 to your computer and use it in GitHub Desktop.
Save lmorchard/1386240 to your computer and use it in GitHub Desktop.
Hue and brightness control over an RGB LED with two potentiometers.
// 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