Atividade 3

RGB com 1 potenciômetro

/*------------------------------------------------

Código original de Dave a.k.a Ka0ticstyle

Adaptado por César Bastos em 26 Outubro 2018

Esquema disponível em: https://www.tinkercad.com/things/0JD0Xgp9oAD-fabulous-jofo-bruticus/editel?sharecode=Tv9Z3_-dtkibOA0Njv8tFuqimkbKZ35DfigxBDvEdmo=

Potenciometro de 10k ohms

Resistores de 330 ohms

------------------------------------------------*/

int pinPotenciometer = 0;

int pinRed = 3;

int pinBlue = 5;

int pinGreen = 6;

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

// Instantiate h2rgb and it's variables a.k.a Hue to RGB

void h2rgb(float h, int& R, int& G, int& B);

void setup()

{

Serial.begin(9600);

}

void loop()

{

val = analogRead(pinPotenciometer); // 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(pinRed, r); // Changes red led

analogWrite(pinGreen, g); // Changes green led

analogWrite(pinBlue, 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;

}

}