RGB Led (Anodo Comum – Common Anode) com potenciometro

O Led RGB que usei neste exemplo é um Anodo Comum de 5mm.

Adquiri na Tayda Electronics por US$ 0.24

A pinagem deste LED é conforme a figura abaixo. Veja que o pino maior é o anodo comum. Use-o para se guiar.

(imagens obtidas tech-fruits e Tayda)

A ligação é bem simples. É necessário usar um resistor para cada pino de cor (catodos). Neste exemplo usei resistores de 330 ohms.

A cor de cada catodo varia de 0 a 255 e o potenciometro é utilizado para ir alterando estes valores.

O código abaixo varia as cores conforme o pontenciometro é girado.

/*------------------------------------------------
  Código original de Dave a.k.a Ka0ticstyle
  Original code from Dave a.k.a Ka0ticstyle
------------------------------------------------*/

int pinPotenciometer = 2;
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;
  }
}

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s