Question on how led lights up with Example: AnalogInOutSerial?

Hi Everyone one, I have been trying for days to understand some basic concepts about electronics, as I recently purchased an Arduino.

I have a problem with understanding Leds. lets take for example a white led with forward voltage of 3.3 and a max amperage of 30ma.

How is it possible that with the example code below, the led lights up, when the output voltage is at a low amount for example on 50 (8bit) and by measuring the current, I see a max of 3.X ma?

From my point of view, if the led lights up with less forward voltage and less amperage than needed, I should also be able to light it up with a battery of 1.2 volts (with resistor between led only) but is not the case.

If I was not clear enough, please let me know, so I could try to simplify my question. and please, forgive my English and any mistake on the terms.

Thanks and kind regards,

  Analog input, analog output, serial output

 Reads an analog input pin, maps the result to a range from 0 to 255
 and uses the result to set the pulsewidth modulation (PWM) of an output pin.
 Also prints the results to the serial monitor.

 The circuit:
 * potentiometer connected to analog pin 0.
   Center pin of the potentiometer goes to the analog pin.
   side pins of the potentiometer go to +5V and ground
 * LED connected from digital pin 9 to ground

 created 29 Dec. 2008
 modified 9 Apr 2012
 by Tom Igoe

 This example code is in the public domain.


// These constants won't change.  They're used to give names
// to the pins used:
const int analogInPin = A0;  // Analog input pin that the potentiometer is attached to
const int analogOutPin = 9; // Analog output pin that the LED is attached to

int sensorValue = 0;        // value read from the pot
int outputValue = 0;        // value output to the PWM (analog out)

void setup() {
  // initialize serial communications at 9600 bps:

void loop() {
  // read the analog in value:
  sensorValue = analogRead(analogInPin);
  // map it to the range of the analog out:
  outputValue = map(sensorValue, 0, 1023, 0, 255);
  // change the analog out value:
  analogWrite(analogOutPin, outputValue);

  // print the results to the serial monitor:
  Serial.print("sensor = ");
  Serial.print("\t output = ");

  // wait 2 milliseconds before the next loop
  // for the analog-to-digital converter to settle
  // after the last reading:

I don't understand your question. At 50/255 duty cycle,the LED will be on about 25% of the time.

(Unless the LED is wired to +5V, in which case it'll be on 75% of the time)

Thanks AWOL,

If I understand what you said, it means that the led is right now blinking so fast that I cannot perceive it. instead of being on all the time?

I just attached a picture to clarify it a bit more my question.
if you see the voltimeter, shows V: 0.33, mA: 0.040 and the serial monitor shows 2/255.
and the led is lit.

the led is supposed to only light up with at least 3.3 volt min due to Vf? so how is it possible.


ok, thanks to the new keyword you provide me "Duty cycle" I was able to understand that voltage is not really decreasing, in fact the board is always providing 5+ to the led, the difference is the amount of "Duty cycle" provided.

then, I have a short question, why is my voltmeter showing those wrong values? is it too fast for it?

"why is my voltmeter showing those wrong values? is it too fast for it?" Yes, it is not made for measuring DC volts when the signal is pulsing at 490 or 980 Hz (cycles per second).

Forward voltage specs are not a dead cutoff minimum. They don't make LEDs with that much precision to be able to say. LEDs will emit dimmer and dimmer levels of light as voltage drops, and it will still be passing current after you can't see anymore visible light.

These pages might help you:-


@CrossRoads, AWOL, Thanks, Your reply were extremely helpful. It is clear for me now. really appreciated,

@INTP, thanks for the info, it is a quite interesting fact, which I will test.

@Grumpy_Mike, just finished reading the articles which are great for my level, specially the PWM, as it mentions something interesting that I have to try, "filters". thanks

+Karma :) @all.