setup() and loop() execution model in Arduino - Time & Space Complexity
Start learning this pattern below
Jump into concepts and practice - no test required
We want to understand how the Arduino program runs over time.
How does the time spent change as the program runs again and again?
Analyze the time complexity of the setup() and loop() functions.
void setup() {
// runs once
initializeSensors();
initializeDisplay();
}
void loop() {
readSensors();
updateDisplay();
delay(1000);
}
This code runs setup() once, then runs loop() repeatedly forever.
Look for parts that repeat many times.
- Primary operation: The loop() function runs repeatedly.
- How many times: loop() runs forever, setup() runs only once.
As time goes on, loop() keeps running the same steps.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 loops | 10 times the loop steps |
| 100 loops | 100 times the loop steps |
| 1000 loops | 1000 times the loop steps |
Pattern observation: The work grows directly with how many times loop() runs.
Time Complexity: O(n)
This means the total work grows in a straight line as the loop runs more times.
[X] Wrong: "setup() runs many times and affects total time a lot."
[OK] Correct: setup() runs only once, so its time does not grow with the number of loops.
Understanding how setup() and loop() run helps you explain how Arduino programs behave over time.
"What if loop() called another function that itself had a loop? How would the time complexity change?"
Practice
setup() function in an Arduino program?Solution
Step 1: Understand the role of
Thesetup()setup()function runs only once when the Arduino starts. It is used to prepare things like pin modes or initial settings.Step 2: Compare with other options
loop()runs repeatedly, so To run code repeatedly forever is incorrect. Options A and D describe actions not done bysetup().Final Answer:
To run code once at the start to prepare the Arduino -> Option DQuick Check:
setup()runs once = C [OK]
- Thinking setup() runs repeatedly
- Confusing setup() with loop()
- Believing setup() resets the board
loop() function in Arduino?Solution
Step 1: Recall Arduino function syntax
Arduino functions likeloop()are declared with return typevoidand empty parentheses:void loop() {}.Step 2: Check each option
void loop() {} matches correct syntax. int loop() {} wrongly usesintreturn type. void loop(void) {} is valid C++ but less common in Arduino examples. loop() void {} has incorrect order.Final Answer:
void loop() {} -> Option BQuick Check:
Standard Arduino loop syntax = A [OK]
- Using wrong return type like int
- Swapping order of function name and return type
- Adding parameters inside loop()
void setup() {
Serial.begin(9600);
Serial.println("Start");
}
void loop() {
Serial.println("Looping");
delay(1000);
}Solution
Step 1: Analyze setup() output
Serial.begin(9600)starts serial communication.Serial.println("Start")prints "Start" once at the beginning.Step 2: Analyze loop() output
loop()prints "Looping" every 1000 milliseconds (1 second) repeatedly.Final Answer:
Start printed once, then Looping printed every second -> Option CQuick Check:
setup()once, loop() repeats = B [OK]
- Thinking loop() runs once
- Missing Serial.begin() call
- Ignoring delay causing fast prints
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000)
}Solution
Step 1: Check syntax line by line
Inloop(), the linedelay(1000)is missing a semicolon at the end.Step 2: Verify other parts
pinMode is correctly placed insetup(). digitalWrite works with pin 13. delay() is allowed in loop().Final Answer:
Missing semicolon after delay(1000) in loop() -> Option AQuick Check:
Syntax error = missing semicolon [OK]
- Placing pinMode in loop() unnecessarily
- Assuming digitalWrite can't use pin 13
- Thinking delay() is disallowed in loop()
setup() and loop() to do this?Solution
Step 1: Understand blinking 5 times only once
Since blinking 5 times is a one-time task, it should be done insetup()which runs once.Step 2: Keep
Leavingloop()empty to stop further blinkingloop()empty prevents repeated blinking after the initial 5 times.Final Answer:
Use a counter insetup()to blink 5 times; leaveloop()empty -> Option AQuick Check:
One-time task in setup() = A [OK]
- Blinking in loop() without stopping
- Not using a counter to limit blinks
- Putting one-time code in loop() causing repeats
