Take the 2-minute tour ×
Arduino Stack Exchange is a question and answer site for developers of open-source hardware and software that is compatible with Arduino. It's 100% free, no registration required.

My scheme is very basic: I use RGB LED with Arduino Uno. 5v is connected to anode, and pins 9-11 are connected to cathodes.

When using following sketch, my LED is producing white colour, which red, green and blue components are on:

int redPin = 9;
int greenPin = 10;
int bluePin = 11;

void setup(){}

void loop(){
  analogWrite(redPin, 0);
  analogWrite(greenPin, 0);
  analogWrite(bluePin, 0);
}

But when I refer to docs for PWM:

A call to analogWrite() is on a scale of 0 - 255, such that analogWrite(255) requests a 100% duty cycle (always on)

When I write 0 to all pins, I expect led to be off. What am I missing?

share|improve this question

migrated from electronics.stackexchange.com Nov 30 '14 at 18:13

This question came from our site for electronics and electrical engineering professionals, students, and enthusiasts.

4 Answers 4

up vote 6 down vote accepted

With your LEDs connected to +5V (AKA "Common Anode"), the PWM signal is reversed.

  • When the output is "on", the voltage on the pin is 5v.
  • When the output is "off", the voltage on the pin is 0V.

The difference in voltage between +5V and the pin for those two different states is:

  • "On" = 5V - 5V = 0V
  • "Off" = 5V - 0V = 5V

So you can see than when the output is off the LED will on because it causes a difference in voltage from one side of the LED to the other, so current can flow. When the output is on the voltages either side of the LED are the same, so no current will flow.

share|improve this answer

When you set the pin value to 0 you are making that pin act as ground. Since the LED had a single anode that receives 5V. When the difference between the anode and cathode is high (Anode - 5V & Cathode - 0V) the LED turns on. When the difference between the anode and cathode is low (Anode - 5V & Cathode - 5V) the LED is off. The larger the difference between the two the brighter the LED. In your code use analogWrite(redPin, ~0); then everything should work. Change 0 above to whatever value you want, less than 255, and it should work. Also do the same for the green and plus pins too.

share|improve this answer
    
Note that PWM doesn't influence voltage, it just creates pulses. –  Annonomus Penguin Dec 5 '14 at 3:24

Since you've connected to the cathodes the pins are sinking current. As such the LEDS are active low with 0 being almost fully on and 255 being fully off.

share|improve this answer

Your LEDs are connected to the supply voltage. The output must be low to allow the LED to shine.

Output 0 ==> LED on

share|improve this answer
    
I guess this is very basic, but I don't get why. –  Mighter Nov 30 '14 at 13:56

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.