Single LED control in Raspberry Pi - Time & Space Complexity
When controlling a single LED on a Raspberry Pi, it's helpful to understand how the program's running time changes as we repeat actions.
We want to see how the time grows when we turn the LED on and off multiple times.
Analyze the time complexity of the following code snippet.
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
for i in range(n):
GPIO.output(18, GPIO.HIGH)
time.sleep(0.5)
GPIO.output(18, GPIO.LOW)
time.sleep(0.5)
GPIO.cleanup()
This code turns an LED on and off n times with a half-second pause each time.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The
forloop that turns the LED on and off repeatedly. - How many times: Exactly
ntimes, wherenis the number of cycles.
Each time we increase n, the program runs the on/off cycle that many times, so the total work grows directly with n.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 on/off cycles |
| 100 | 100 on/off cycles |
| 1000 | 1000 on/off cycles |
Pattern observation: The total time grows evenly as n increases; doubling n doubles the work.
Time Complexity: O(n)
This means the time to complete the LED blinking grows directly in proportion to the number of times we blink it.
[X] Wrong: "The LED blinking time stays the same no matter how many times it blinks."
[OK] Correct: Each blink takes time, so more blinks mean more total time. The program runs the on/off steps for each blink, so time adds up.
Understanding how loops affect running time is a key skill. It helps you explain how your code will behave as tasks repeat more times, which is useful in many real projects.
"What if we added a nested loop inside the existing loop to blink the LED multiple times per cycle? How would the time complexity change?"
Practice
output when controlling a single LED on a Raspberry Pi?Solution
Step 1: Understand GPIO pin modes
GPIO pins can be set as input or output. Output pins send signals to devices like LEDs.Step 2: Purpose of output mode for LED
Setting a pin as output allows the Raspberry Pi to send HIGH or LOW signals to turn the LED on or off.Final Answer:
To send signals that turn the LED on or off -> Option AQuick Check:
Output mode controls LED state [OK]
- Confusing input with output mode
- Thinking GPIO controls power supply
- Assuming GPIO reads LED brightness
Solution
Step 1: Import the correct library
Useimport RPi.GPIO as GPIOto access GPIO functions.Step 2: Set pin 18 as output
UseGPIO.setup(18, GPIO.OUT)to configure pin 18 for output.Final Answer:
import RPi.GPIO as GPIO\nGPIO.setup(18, GPIO.OUT) -> Option AQuick Check:
GPIO setup output = correct syntax [OK]
- Using GPIO.IN instead of GPIO.OUT
- Calling GPIO.output instead of GPIO.setup for pin mode
- Importing wrong library like gpiozero
import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(17, GPIO.OUT) GPIO.output(17, GPIO.HIGH) time.sleep(2) GPIO.output(17, GPIO.LOW) GPIO.cleanup()
Solution
Step 1: Analyze GPIO output commands
The code sets pin 17 HIGH, turning LED on, waits 2 seconds, then sets pin 17 LOW, turning LED off.Step 2: Understand timing and cleanup
The LED stays on duringtime.sleep(2), then turns off before cleanup.Final Answer:
LED turns on for 2 seconds, then turns off -> Option CQuick Check:
GPIO.HIGH = LED on, GPIO.LOW = LED off [OK]
- Confusing HIGH and LOW signals
- Ignoring the sleep delay effect
- Forgetting GPIO.cleanup() importance
import RPi.GPIO as GPIO GPIO.setmode(GPIO.BOARD) GPIO.setup(12, GPIO.OUT) GPIO.output(12, HIGH) GPIO.cleanup()
Solution
Step 1: Check GPIO output command
The code usesHIGHwithoutGPIO.prefix, causing a NameError.Step 2: Correct usage of HIGH signal
It should beGPIO.output(12, GPIO.HIGH)to properly reference the constant.Final Answer:
Incorrect use of GPIO.HIGH without prefix -> Option DQuick Check:
Use GPIO.HIGH, not just HIGH [OK]
- Using HIGH instead of GPIO.HIGH
- Calling cleanup before output
- Confusing BOARD and BCM modes
Solution
Step 1: Understand the loop for repetition
The code usesfor i in range(5):to repeat the on/off cycle 5 times.Step 2: Correct on/off timing inside loop
Inside the loop, the LED is turned on (GPIO.HIGH) for 1 second, then off (GPIO.LOW) for 1 second.Final Answer:
Code snippet C correctly repeats LED on/off 5 times with 1 second intervals -> Option BQuick Check:
Loop with GPIO.HIGH then GPIO.LOW and sleep [OK]
- Swapping HIGH and LOW timing order
- Missing import of time module
- Not using a loop for repetition
Ready to prove it?
Pass the test and this pattern moves unknown
