Bird
Raised Fist0
Arduinoprogramming~10 mins

delay() function behavior in Arduino - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Concept Flow - delay() function behavior
Start Program
Call delay(ms)
Pause execution for ms milliseconds
Resume next instruction
End or loop
The delay() function pauses the Arduino program for a set number of milliseconds, stopping all code execution during that time.
Execution Sample
Arduino
void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);
  delay(1000);
  digitalWrite(LED_BUILTIN, LOW);
  delay(1000);
}
This code turns the built-in LED on and off, pausing 1 second between changes using delay().
Execution Table
StepActionTime Passed (ms)LED StateNotes
1Start loop0OFFLoop begins
2digitalWrite HIGH0ONLED turned on
3delay(1000)0 to 1000ONProgram pauses 1000 ms
4digitalWrite LOW1000OFFLED turned off
5delay(1000)1000 to 2000OFFProgram pauses 1000 ms
6Loop repeats2000OFFBack to step 1
💡 Loop repeats indefinitely; delay pauses execution for specified milliseconds each time.
Variable Tracker
VariableStartAfter Step 2After Step 3After Step 4After Step 5After Step 6
LED StateOFFONONOFFOFFOFF
Key Moments - 3 Insights
Why does the LED stay on during delay(1000)?
Because delay() pauses the program but does not change outputs; the LED stays ON until the next instruction changes it (see step 3 in execution_table).
Does delay() allow other code to run during the pause?
No, delay() stops all code execution for the given time, so nothing else runs during the delay period (see time passed column in execution_table).
What happens after delay finishes?
After delay ends, the program continues with the next instruction immediately (see step 4 in execution_table).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the LED state during step 3?
AOFF
BBlinking
CON
DUndefined
💡 Hint
Check the LED State column for step 3 in the execution_table.
At which step does the program pause for the first time?
AStep 3
BStep 2
CStep 4
DStep 5
💡 Hint
Look at the Action and Time Passed columns in execution_table to find when delay starts.
If delay(1000) was changed to delay(500), how would the Time Passed column change at step 3?
A500 to 1000
B0 to 500
C0 to 1000
DNo change
💡 Hint
Delay time controls the pause duration shown in Time Passed column in execution_table.
Concept Snapshot
delay(ms) pauses Arduino code for ms milliseconds.
During delay, no other code runs.
Outputs stay as last set until changed.
Use delay for simple timing but beware it blocks code.
For multitasking, use millis() instead.
Full Transcript
The delay() function in Arduino stops the program from running for a set number of milliseconds. In the example, the LED turns on, then delay(1000) pauses the program for 1 second while the LED stays on. After the delay, the LED turns off, then delay(1000) pauses again for 1 second. This cycle repeats forever. During delay, no other code runs, so the program is paused completely. After delay finishes, the program continues with the next instruction immediately. This behavior is shown step-by-step in the execution table and variable tracker.

Practice

(1/5)
1. What does the delay(1000); function do in an Arduino program?
easy
A. Pauses the program for 1000 milliseconds (1 second)
B. Stops the program permanently
C. Speeds up the program by 1000 times
D. Restarts the Arduino board

Solution

  1. Step 1: Understand the delay() parameter

    The number inside delay() is the time in milliseconds to pause the program.
  2. Step 2: Interpret delay(1000)

    1000 milliseconds equals 1 second, so the program pauses for 1 second.
  3. Final Answer:

    Pauses the program for 1000 milliseconds (1 second) -> Option A
  4. Quick Check:

    delay(1000) = 1 second pause [OK]
Hint: delay(x) pauses for x milliseconds, 1000ms = 1 second [OK]
Common Mistakes:
  • Thinking delay stops the program forever
  • Confusing milliseconds with seconds
  • Assuming delay speeds up the program
2. Which of the following is the correct syntax to pause an Arduino program for half a second?
easy
A. delay(0.5);
B. delay = 500;
C. delay(500s);
D. delay(500);

Solution

  1. Step 1: Check correct function usage

    delay() takes an integer number of milliseconds inside parentheses.
  2. Step 2: Validate each option

    A uses delay(0.5); which is a float and incorrect. B assigns delay which is invalid. C uses delay(500); which is correct for 500 milliseconds. D uses '500s' which is invalid syntax.
  3. Final Answer:

    delay(500); -> Option D
  4. Quick Check:

    delay(500) is correct syntax [OK]
Hint: Use delay(milliseconds); with integer inside parentheses [OK]
Common Mistakes:
  • Using decimal numbers instead of integers
  • Assigning delay like a variable
  • Adding units like 's' inside delay()
3. What will be the output on the Serial Monitor after running this Arduino code?
void setup() {
  Serial.begin(9600);
  Serial.println("Start");
  delay(2000);
  Serial.println("End");
}
void loop() {}
medium
A. Start and End printed immediately together
B. Only Start is printed, End never prints
C. Start immediately, then End after 2 seconds
D. No output because delay stops Serial

Solution

  1. Step 1: Analyze Serial prints and delay

    "Start" prints immediately, then delay(2000) pauses 2 seconds before next line.
  2. Step 2: Understand delay effect on output

    After 2 seconds pause, "End" prints. Both lines appear but with 2 seconds gap.
  3. Final Answer:

    Start immediately, then End after 2 seconds -> Option C
  4. Quick Check:

    delay pauses program, output delayed [OK]
Hint: delay pauses code, so output after delay appears later [OK]
Common Mistakes:
  • Thinking delay stops Serial output completely
  • Assuming both prints happen instantly
  • Believing delay affects only loop(), not setup()
4. Identify the problem in this Arduino code snippet:
void setup() {
  pinMode(13, OUTPUT);
}
void loop() {
  digitalWrite(13, HIGH);
  delay(1000)
  digitalWrite(13, LOW);
  delay(1000);
}
medium
A. pinMode should be in loop()
B. Missing semicolon after delay(1000)
C. digitalWrite needs delay before it
D. delay() cannot be used in loop()

Solution

  1. Step 1: Check syntax line by line

    delay(1000) is missing a semicolon at the end, causing a syntax error.
  2. Step 2: Validate other statements

    pinMode is correctly in setup(), digitalWrite and delay usage is correct except missing semicolon.
  3. Final Answer:

    Missing semicolon after delay(1000) -> Option B
  4. Quick Check:

    Every statement must end with ; [OK]
Hint: Check for missing semicolons after delay() calls [OK]
Common Mistakes:
  • Putting pinMode inside loop unnecessarily
  • Thinking delay() can't be in loop
  • Forgetting semicolons after statements
5. You want to blink an LED connected to pin 9 exactly 3 times with 0.5 second ON and 0.5 second OFF, then stop. Which code snippet correctly uses delay() to do this?
hard
A. for(int i=0; i<3; i++) { digitalWrite(9, HIGH); delay(500); digitalWrite(9, LOW); delay(500); }
B. while(true) { digitalWrite(9, HIGH); delay(500); digitalWrite(9, LOW); delay(500); }
C. digitalWrite(9, HIGH); delay(1500); digitalWrite(9, LOW); delay(1500);
D. for(int i=0; i<=3; i++) { digitalWrite(9, HIGH); delay(1000); digitalWrite(9, LOW); delay(1000); }

Solution

  1. Step 1: Understand blinking requirements

    LED must turn ON and OFF 3 times, each ON and OFF lasting 0.5 seconds (500 ms).
  2. Step 2: Analyze each option

    A uses a for loop 3 times with 500ms delay ON and OFF, matching requirements. B loops forever, no stop. C delays 1500ms which is too long and only blinks once. D loops 4 times (i<=3) with 1000ms delays, wrong timing and count.
  3. Final Answer:

    for(int i=0; i<3; i++) { digitalWrite(9, HIGH); delay(500); digitalWrite(9, LOW); delay(500); } -> Option A
  4. Quick Check:

    Loop 3 times with 500ms delay ON/OFF [OK]
Hint: Use for loop with delay(500) ON and OFF, repeat 3 times [OK]
Common Mistakes:
  • Using infinite loops instead of fixed count
  • Wrong delay times for ON/OFF
  • Looping one extra time with <= instead of <