Multiple LED and button control in Arduino - Time & Space Complexity
Start learning this pattern below
Jump into concepts and practice - no test required
When controlling multiple LEDs and buttons, the time it takes to check and update each one matters.
We want to know how the program's work grows as we add more LEDs and buttons.
Analyze the time complexity of the following code snippet.
const int numDevices = 5;
int ledPins[numDevices] = {2, 3, 4, 5, 6};
int buttonPins[numDevices] = {7, 8, 9, 10, 11};
void loop() {
for (int i = 0; i < numDevices; i++) {
int buttonState = digitalRead(buttonPins[i]);
digitalWrite(ledPins[i], buttonState);
}
}
This code reads the state of 5 buttons and sets 5 LEDs accordingly in each loop cycle.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The for-loop that reads each button and sets each LED.
- How many times: It runs once per loop cycle, repeating for each of the 5 devices.
As the number of LEDs and buttons increases, the program checks and updates each one in turn.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 reads + 10 writes = 20 operations |
| 100 | 100 reads + 100 writes = 200 operations |
| 1000 | 1000 reads + 1000 writes = 2000 operations |
Pattern observation: The work grows directly with the number of devices; doubling devices doubles the work.
Time Complexity: O(n)
This means the time to check and update LEDs grows in a straight line as you add more devices.
[X] Wrong: "Adding more LEDs and buttons won't affect the program speed much because it just loops quickly."
[OK] Correct: Each added device means more work per loop, so the program takes longer to complete each cycle.
Understanding how your code scales with more inputs and outputs shows you can write efficient and reliable embedded programs.
"What if we added nested loops to check each button multiple times per cycle? How would the time complexity change?"
Practice
Solution
Step 1: Understand arrays usage
Arrays store multiple pin numbers for LEDs and buttons in one place.Step 2: Use loops for control
Loops can iterate over arrays to read buttons and control LEDs easily.Final Answer:
It allows controlling many LEDs and buttons efficiently with loops. -> Option AQuick Check:
Arrays + loops = efficient control [OK]
- Thinking arrays make LEDs brighter
- Confusing arrays with power saving
- Assuming arrays fix wiring automatically
Solution
Step 1: Recall button wiring
Buttons need a way to avoid floating input pins, usually with pull-up resistors.Step 2: Use built-in pull-up
INPUT_PULLUP mode activates Arduino's internal pull-up resistor, no external resistor needed.Final Answer:
INPUT_PULLUP -> Option BQuick Check:
Button mode = INPUT_PULLUP [OK]
- Using OUTPUT mode for buttons
- Forgetting pull-up resistor causes unstable reads
- Using ANALOG mode for digital buttons
const int buttonPins[] = {2, 3, 4};
const int ledPins[] = {8, 9, 10};
void setup() {
for (int i = 0; i < 3; i++) {
pinMode(buttonPins[i], INPUT_PULLUP);
pinMode(ledPins[i], OUTPUT);
}
}
void loop() {
for (int i = 0; i < 3; i++) {
if (digitalRead(buttonPins[i]) == LOW) {
digitalWrite(ledPins[i], HIGH);
} else {
digitalWrite(ledPins[i], LOW);
}
}
}Solution
Step 1: Identify button pressed
Button 2 is pressed, which is buttonPins[1] (pin 3).Step 2: Match LED to button
LED on ledPins[1] (pin 9) turns ON because buttonPins[1] is LOW.Final Answer:
Only LED on pin 9 turns ON. -> Option CQuick Check:
Button 2 pressed lights LED 9 [OK]
- Assuming all LEDs turn on when one button pressed
- Confusing pin numbers with array indexes
- Ignoring INPUT_PULLUP logic (LOW means pressed)
const int buttonPins[] = {2, 3};
const int ledPins[] = {8, 9};
void setup() {
for (int i = 0; i <= 2; i++) {
pinMode(buttonPins[i], INPUT_PULLUP);
pinMode(ledPins[i], OUTPUT);
}
}
void loop() {
for (int i = 0; i <= 2; i++) {
if (digitalRead(buttonPins[i]) == LOW) {
digitalWrite(ledPins[i], HIGH);
} else {
digitalWrite(ledPins[i], LOW);
}
}
}Solution
Step 1: Check loop conditions
Loops run from i = 0 to i <= 2, which means i = 0,1,2 (3 iterations).Step 2: Check array sizes
buttonPins and ledPins have only 2 elements (indexes 0 and 1). Accessing index 2 causes error.Final Answer:
The for loops use <= 2 instead of < 2, causing out-of-bounds access. -> Option DQuick Check:
Loop index out of range causes failure [OK]
- Using <= instead of < in loops
- Setting button pins as OUTPUT
- Confusing digitalRead with analogRead
Solution
Step 1: Understand toggle behavior
Toggle means LED changes state only when button is pressed, not continuously.Step 2: Track LED states
Store LED ON/OFF states in a boolean array and change state only on button press event.Step 3: Use arrays for pins
Arrays help manage multiple buttons and LEDs efficiently with loops.Final Answer:
Use arrays for pins and track LED states in a separate boolean array, toggling state on button press detection. -> Option AQuick Check:
Toggle needs state tracking + arrays [OK]
- Turning LED ON only while button pressed
- Using analogWrite for simple ON/OFF LEDs
- Wiring LEDs directly to buttons without control
