1. Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.
    Dismiss Notice

RGB LED control with arduino

Discussion in 'Arduino' started by xXAxHillbillyXx, Aug 10, 2010.

  1. xXAxHillbillyXx

    xXAxHillbillyXx New Member

    Joined:
    Mar 16, 2010
    Messages:
    55
    Likes:
    0
    Can anyone help me adapt this code for a common CATHODE rgb led? or will it work as is?

    Code (text):
    The circuit:
     * Potentiometer connected to analog pin 2 w/ pos 5v and grounded neg
     * RGB LED connections are in this order when looking at LED:  Red, Common Annode(Longest - also where 5v power is connected), Green, Blue
     * RGB LED attached from digital pin 9(red), 10(green), 11(blue) w/ common annode to 5v power.

     Created 8 May 2010
     Commented by Dave a.k.a Ka0ticstyle

     */

    int potpin = 2;       // POT connected to digital pin 2 - pos/neg are left and right connections on POT
    int rpin = 9;           // Red
    int gpin = 10;         // Green
    int bpin = 11;         // Blue
    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

    void h2rgb(float h, int& R, int& G, int& B); // Instantiate h2rgb and it's variables  a.k.a  Hue to RGB

    void setup()              // Run once, when the sketch starts
    {
      Serial.begin(9600);       // Begin the output of data to serial
    }


    void loop()            // Run over and over again
    {
      val = analogRead(potpin);    // 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(rpin, r);   // Changes red led
      analogWrite(gpin, g);   // Changes green led
      analogWrite(bpin, 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;
      }
    }
     

     
     
  2. tytower

    tytower Banned

    Joined:
    Oct 18, 2006
    Messages:
    406
    Likes:
    13
    Location:
    Caloundra
    Did u get this going?
    I have only seen common cathode types. I think this may be a typo in the program
    LED´s only work one way
    Normally the cathode is the shorter lead but with these they made it the longest lead
    Cathode goes to ground and Anode to positive via resistor

    http://www.kpsec.freeuk.com/components/led.htm


    Wonderfully satisfying piece of electronics is this RGB LED.
     
    Last edited: Oct 23, 2010
    • Like Like x 1

Share This Page