Lesson 2 Controlling LED by PWM

Share for us
Share on facebook
Share on twitter
Share on pinterest
Share on whatsapp


In this lesson, let’s try something a little easier – gradually changing the luminance of an LED through programming. Since the pulsing light looks like breathing, we give it a magical name – breathing LED. We’ll accomplish this effect with pulse width modulation (PWM). 


– 1 * SunFounder Uno board

– 1 * Breadboard

– Jumper wires

– 1 * LED

– 1 * Resistor (220Ω)

– 1 * USB cable



Pulse width modulation, or PWM, is a technique for getting analog results with digital means. Digital control is used to create a square wave, a signal switched between on and off. This on-off pattern can simulate voltages in between full on (5 Volts) and off (0 Volts) by changing the portion of the time the signal spends on versus the time that the signal spends off. The duration of “on time” is called the pulse width. To get varying analog values, you change, or modulate, that pulse width. If you repeat this on-off pattern fast enough with an LED for example, the result is as if the signal is a steady voltage between 0 and 5V controlling the brightness of the LED. (See the PWM description on the official website of Arduino).

We can see from the top oscillogram that the amplitude of the DC voltage output is 5V. However, the actual voltage output is only 3.75V through PWM because the high level only takes up 75% of the total voltage within a period.

Here is an introduction to the three basic parameters of PWM:

  1. Duty cycle describes the proportion of “on” time to the regular interval or period of time.
  2. Period describes the reciprocal of pulses in one second.
  3. The voltage amplitude here is 0V–5V.

Experimental Procedures

Step 1: Build the circuit

The schematic diagram

Step 2: Program (Please refer to the example code in LEARN -> Get Tutorials on our website)

Step 3: Compile the code

Step 4: Upload the sketch to the SunFounder Uno board

Here you should see the LED gets brighter and then dimmer and brighter again regularly.


//Controlling LED By PWM
//The led the LED lights up gradually,and then goes out gradually,repeatedly
const int ledPin = 9; // the pin that the LED is attached tovoid setup ()
  pinMode(ledPin, OUTPUT); // declare pin 9 to be an output:

void loop()
  for (int a=0; a<=255;a++) //loop from 0 to 255
    analogWrite(ledPin, a); // set the brightness of pin 9:
    delay(8); //wait for 8 microseconds
  for (int a=255; a>=0;a–) //loop from 255 down to 0
    analogWrite(ledPin, a); // set the brightness of pin 9:
    delay(8); //wait for 8 microseconds
  delay(800); //wait for 800 microseconds