We use PWM to change how bright an LED looks by quickly turning it on and off. This makes the LED appear dimmer or brighter without changing the power.
LED brightness control with PWM in Arduino
Start learning this pattern below
Jump into concepts and practice - no test required
or
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
Syntax
Arduino
analogWrite(pin, value);
pin is the Arduino pin connected to the LED that supports PWM.
value is a number from 0 (off) to 255 (fully on) controlling brightness.
Examples
Arduino
analogWrite(9, 128);
Arduino
analogWrite(6, 255);
Arduino
analogWrite(3, 0);
Sample Program
This program smoothly increases the LED brightness from off to full, then back down to off repeatedly. It uses PWM on pin 9.
Arduino
const int ledPin = 9; void setup() { pinMode(ledPin, OUTPUT); } void loop() { for (int brightness = 0; brightness <= 255; brightness++) { analogWrite(ledPin, brightness); delay(10); } for (int brightness = 255; brightness >= 0; brightness--) { analogWrite(ledPin, brightness); delay(10); } }
Important Notes
Not all Arduino pins support PWM. Check your board's pinout.
PWM frequency is fixed and fast, so the LED looks steady to your eyes.
Use delay() to slow down brightness changes for visible fading.
Summary
PWM lets you control LED brightness by changing how long it is on versus off.
Use analogWrite(pin, value) with values from 0 to 255 for brightness.
Fading effects are easy by gradually changing the PWM value in a loop.
Practice
1. What does
analogWrite(pin, 128) do to an LED connected to the specified pin?easy
Solution
Step 1: Understand PWM value range
TheanalogWritefunction accepts values from 0 (off) to 255 (full brightness).Step 2: Interpret the value 128
128 is about half of 255, so the LED brightness will be about half of maximum.Final Answer:
Sets the LED brightness to about half of its maximum brightness. -> Option AQuick Check:
PWM value 128 = half brightness [OK]
Hint: Remember 0=off, 255=full brightness, 128=half brightness [OK]
Common Mistakes:
- Thinking 128 turns LED off
- Confusing analogWrite with digitalWrite
- Assuming 128 means blinking
2. Which of the following is the correct syntax to set PWM brightness on pin 9 to maximum in Arduino?
easy
Solution
Step 1: Recall analogWrite syntax
The correct syntax isanalogWrite(pin, value)where pin is the pin number and value is 0-255.Step 2: Check each option
analogWrite(9, 255); usesanalogWrite(9, 255);which is correct. Others have wrong function names or argument order.Final Answer:
analogWrite(9, 255); -> Option CQuick Check:
Correct function and argument order = analogWrite(9, 255); [OK]
Hint: analogWrite(pin, value) sets PWM; pin first, value second [OK]
Common Mistakes:
- Swapping pin and value arguments
- Using digitalWrite instead of analogWrite
- Using analogRead instead of analogWrite
3. What will be the effect of this Arduino code snippet on an LED connected to pin 6?
for (int brightness = 0; brightness <= 255; brightness += 51) {
analogWrite(6, brightness);
delay(100);
}medium
Solution
Step 1: Analyze the for loop increments
The loop variable brightness starts at 0 and increases by 51 until it reaches 255, so values are 0, 51, 102, 153, 204, 255 (6 values, 5 steps).Step 2: Understand analogWrite effect
Each loop sets LED brightness to the current value, increasing brightness in steps with 100ms delay.Final Answer:
The LED brightness will increase in 5 steps from off to full brightness. -> Option DQuick Check:
Brightness steps with delay = gradual brightness increase [OK]
Hint: Loop increments PWM value to fade LED brightness up [OK]
Common Mistakes:
- Counting 6 steps instead of 5 increments
- Thinking LED blinks on/off instead of fading
- Assuming syntax error due to loop
4. Identify the error in this Arduino code that tries to fade an LED on pin 10:
for (int i = 0; i < 256; i++) {
analogWrite(10, i);
delay(50);
}
analogWrite(10, 256);medium
Solution
Step 1: Check analogWrite value limits
analogWrite accepts values from 0 to 255. Using 256 is out of range and invalid.Step 2: Verify other code parts
The for loop correctly uses i from 0 to 255. Pin 10 supports PWM on most Arduino boards. delay() is allowed inside loops.Final Answer:
The value 256 is invalid for analogWrite; max is 255. -> Option BQuick Check:
analogWrite max value = 255, 256 causes error [OK]
Hint: PWM values max at 255; never use 256 [OK]
Common Mistakes:
- Using values above 255 for analogWrite
- Thinking delay() is not allowed in loops
- Assuming pin 10 can't do PWM
5. You want to create a smooth breathing LED effect using PWM on pin 3. Which code snippet correctly achieves this effect?
hard
Solution
Step 1: Understand breathing LED effect
A breathing effect smoothly increases brightness from 0 to max, then back down to 0 repeatedly.Step 2: Analyze each option
for (int b = 0; b <= 255; b++) { analogWrite(3, b); delay(10); } for (int b = 255; b >= 0; b--) { analogWrite(3, b); delay(10); } uses two loops: one increasing PWM from 0 to 255, then decreasing back to 0 with small delays for smoothness. analogWrite(3, 255); delay(1000); analogWrite(3, 0); delay(1000); just turns LED fully on and off abruptly. for (int b = 0; b < 256; b += 50) { analogWrite(3, b); delay(100); } increases brightness in large steps, not smooth. digitalWrite(3, HIGH); delay(500); digitalWrite(3, LOW); delay(500); uses digitalWrite, which only turns LED fully on or off.Final Answer:
for (int b = 0; b <= 255; b++) { analogWrite(3, b); delay(10); } for (int b = 255; b >= 0; b--) { analogWrite(3, b); delay(10); } -> Option AQuick Check:
Smooth increase and decrease PWM = breathing LED [OK]
Hint: Use increasing then decreasing PWM values for breathing effect [OK]
Common Mistakes:
- Using digitalWrite instead of analogWrite for brightness
- Skipping the decreasing brightness loop
- Using large PWM steps causing jerky effect
