Go Down

### Topic: [RESOLVED] led RGB strange colors (Read 937 times)previous topic - next topic

#### NicolaBu

##### Jan 19, 2013, 04:14 pmLast Edit: Jan 19, 2013, 04:40 pm by NicolaBu Reason: 1
Hello,

I'm trying to use my common anode rgb led but i don't understand how the mixing colors work.
RGB led: R = 1.9V , G = 3.0V , B = 3.0V; 20mA.
I calculated the resistor (5V - 1.9V) / 20mA = 150 ohm for Red
(5V - 3.0V) / 20mA = 100 ohm for Green and Blue.

I tried many colors but the don't seems right:
(i tried with Blue)

analogWrite(red, 0);
analogWrite(green, 0);
analogWrite(blue, 255);

But the color was yellow. Is it right? For me is really strange
I also tried to work with a RGB color picker online:
i tried a pink rgb color (235, 47, 166) but the result was a blue-green color.

Please help! Thank you!

#### NicolaBu

#1
##### Jan 19, 2013, 04:39 pm
Hello,
I resolved my problem! I don't know why but my values were inverted (0 was 255), so i mapped my color variables.
Thanks anyway

#### Jack Christensen

#2
##### Jan 19, 2013, 04:40 pm
With a common-anode LED, pulling a pin low will illuminate it. Pulling red and green low together will give yellow. For blue, try:

Code: [Select]
`analogWrite(red, 255);analogWrite(green, 255);analogWrite(blue, 0);`

This is why programmers are crazy, it comes from having to think backwards sometimes

#### tack

#3
##### Jan 19, 2013, 07:33 pm
Create yourself a function that does the inverting for you, and then you don't have to worry about it afterwards.

I.e

Void setRGB(int redBrightbess, int greenBeightness, int blueBrightness)

Within your function take each value and invert the brightness before do an analogWrite, such as analogWrite(redPin, 255 - redBrightness)

Set the relevant LED pin assignments elsewhere.

Call your function like setRGB(255,0,0) to turn the red lED on.

If you want to do it for more than one RGB LED then you could pass the pin numbers for each one to the function or even do in a number of other ways.

#### Grumpy_Mike

#4
##### Jan 19, 2013, 07:47 pm
Quote
Create yourself a function that does the inverting for you

Or even simpler just subtract the value you want to set from 255 like this:-
Code: [Select]
`analogWrite(red, 255-redVal);analogWrite(green, 255-greenVal);analogWrite(blue, 255-blueVal);`

Go Up

Please enter a valid email to subscribe

### Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy