Your global variables R, G, and B are passed into the function by value. Your function has separate R, G and B variables that are not connected to the global variables. Changing them in the function has no effect on the values of the variables passed in.
You have two choices: use the globals, not function arguments, or pass the variables by reference.
Using the globals:
int R=0, G=0, B=0;
void draw()
{
hsvl2rgb(val, L);
arduino.analogWrite(ledPinRed, R);
arduino.analogWrite(ledPinBlue, G);
arduino.analogWrite(ledPinGreen, B);
}
void hsvl2rgb(float H, float L)
{
int var_i;
float S=1, V, lightness, var_1, var_2, var_3, var_h, var_r, var_g, var_b;
V = L * 2; // For the "darkness" of the LED
if ( V > 1 ) V = 1;
if ( S == 0 ) //HSV values = 0 ÷ 1
{
R = Math.round(V * 255);
G = Math.round(V * 255);
B = Math.round(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 ;
}
if ( L > 0.5 ) // Adjusting the Lightness (whiteness)
{
lightness = ( L - 0.5 ) / 0.5;
var_r += ( lightness * ( 1 - var_r ) );
var_g += ( lightness * ( 1 - var_g ) );
var_b += ( lightness * ( 1 - var_b ) );
}
R = Math.round((1-var_r) * 255); // RGB results = 0 ÷ 255. Reversed for common anode RGB LED's
G = Math.round((1-var_g) * 255);
B = Math.round((1-var_b) * 255);
}
}
Pass by reference. Changed the argument names to make it clearer that they are not the globals.
int R=0, G=0, B=0;
void draw()
{
hsvl2rgb(val, L, R, G, B);
arduino.analogWrite(ledPinRed, R);
arduino.analogWrite(ledPinBlue, G);
arduino.analogWrite(ledPinGreen, B);
}
void hsvl2rgb(float H, float L, int &argR, int &argG, int &argB)
{
int var_i;
float S=1, V, lightness, var_1, var_2, var_3, var_h, var_r, var_g, var_b;
V = L * 2; // For the "darkness" of the LED
if ( V > 1 ) V = 1;
if ( S == 0 ) //HSV values = 0 ÷ 1
{
argR = Math.round(V * 255);
argG = Math.round(V * 255);
argB = Math.round(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 ;
}
if ( L > 0.5 ) // Adjusting the Lightness (whiteness)
{
lightness = ( L - 0.5 ) / 0.5;
var_r += ( lightness * ( 1 - var_r ) );
var_g += ( lightness * ( 1 - var_g ) );
var_b += ( lightness * ( 1 - var_b ) );
}
argR = Math.round((1-var_r) * 255); // RGB results = 0 ÷ 255. Reversed for common anode RGB LED's
argG = Math.round((1-var_g) * 255);
argB = Math.round((1-var_b) * 255);
}
}