Bird
Raised Fist0
Arduinoprogramming~10 mins

Why timing control is needed in Arduino - Test Your Understanding

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
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to make the LED blink every second.

Arduino
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);
  delay([1]);
  digitalWrite(LED_BUILTIN, LOW);
  delay(1000);
}
Drag options to blanks, or click blank then click option'
A500
B2000
C1000
D0
Attempts:
3 left
💡 Hint
Common Mistakes
Using 0 or too small delay causes LED to blink too fast to see.
Using 2000 makes LED blink every 2 seconds, not 1.
2fill in blank
medium

Complete the code to measure elapsed time without stopping the program.

Arduino
unsigned long previousMillis = 0;
unsigned long interval = 1000;

void loop() {
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= [1]) {
    previousMillis = currentMillis;
    // do something
  }
}
Drag options to blanks, or click blank then click option'
A0
B1000
C2000
D500
Attempts:
3 left
💡 Hint
Common Mistakes
Using 0 causes the action to run continuously.
Using 2000 waits 2 seconds instead of 1.
3fill in blank
hard

Fix the error in the timing control code to avoid blocking the loop.

Arduino
void loop() {
  delay([1]);
  // other code that needs to run frequently
}
Drag options to blanks, or click blank then click option'
A0
Bmillis()
C1000
DdigitalRead()
Attempts:
3 left
💡 Hint
Common Mistakes
Using delay(1000) blocks the loop and stops other code from running.
Using millis() directly in delay causes errors.
4fill in blank
hard

Fill both blanks to create a non-blocking LED blink using millis().

Arduino
unsigned long previousMillis = 0;
const long interval = 1000;

void loop() {
  unsigned long currentMillis = [1]();
  if (currentMillis - previousMillis >= [2]) {
    previousMillis = currentMillis;
    // toggle LED
  }
}
Drag options to blanks, or click blank then click option'
Amillis
Bdelay
Cinterval
Dmicros
Attempts:
3 left
💡 Hint
Common Mistakes
Using delay() inside loop blocks the program.
Using micros() changes timing scale to microseconds.
5fill in blank
hard

Fill all three blanks to create a dictionary-like structure that stores sensor values with timing condition.

Arduino
struct SensorData {
  String name;
  int value;
};

SensorData data[] = {
  {"temp", [1],
  {"light", [2]
};

void loop() {
  if (millis() [3] 1000) {
    // update sensor values
  }
}
Drag options to blanks, or click blank then click option'
A0
BanalogRead(A0)
C>
D<
Attempts:
3 left
💡 Hint
Common Mistakes
Using '<' in timing condition causes code to run immediately.
Using wrong initial values causes sensor data errors.

Practice

(1/5)
1. Why do we need timing control in Arduino programs?
easy
A. To make sure actions happen at the right time
B. To increase the speed of the Arduino processor
C. To change the color of the Arduino board
D. To connect the Arduino to the internet

Solution

  1. Step 1: Understand the purpose of timing control

    Timing control allows the Arduino to perform tasks at specific times or intervals.
  2. Step 2: Identify the correct reason for timing control

    It helps in making sure actions like blinking LEDs or reading sensors happen when needed.
  3. Final Answer:

    To make sure actions happen at the right time -> Option A
  4. Quick Check:

    Timing control = right time actions [OK]
Hint: Timing control means doing things at the right moment [OK]
Common Mistakes:
  • Thinking timing control speeds up the processor
  • Confusing timing control with internet connection
  • Believing timing control changes hardware color
2. Which Arduino function is used to pause the program for a specific time?
easy
A. digitalWrite()
B. analogRead()
C. pinMode()
D. delay()

Solution

  1. Step 1: Recall Arduino functions for timing

    The delay() function pauses the program for a set number of milliseconds.
  2. Step 2: Match function to description

    delay() is the only function among options that pauses execution.
  3. Final Answer:

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

    Pause program = delay() [OK]
Hint: delay() pauses program; others control pins or read values [OK]
Common Mistakes:
  • Using digitalWrite() to pause program
  • Confusing pinMode() with timing control
  • Thinking analogRead() pauses execution
3. What will the following Arduino code do?
void setup() {
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);
  delay(1000);
}
medium
A. Turn LED on pin 13 on and off every second
B. Keep LED on pin 13 always on
C. Keep LED on pin 13 always off
D. Blink LED on pin 13 every 100 milliseconds

Solution

  1. Step 1: Analyze the loop code

    The code turns pin 13 HIGH (LED on), waits 1000 ms (1 second), then LOW (LED off), waits 1000 ms again.
  2. Step 2: Understand the effect on LED

    This causes the LED to blink on and off every second.
  3. Final Answer:

    Turn LED on pin 13 on and off every second -> Option A
  4. Quick Check:

    delay(1000) = 1 second blink [OK]
Hint: delay(1000) means 1 second pause, blinking LED [OK]
Common Mistakes:
  • Thinking delay(1000) is 100 milliseconds
  • Assuming LED stays always on or off
  • Ignoring the delay between on and off
4. Identify the problem in this Arduino code for blinking an LED:
void setup() {
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, HIGH);
  delay(1000);
}
medium
A. delay() function is used incorrectly
B. LED never turns off because digitalWrite(13, LOW) is missing
C. pinMode() should be in loop()
D. digitalWrite() should use pin 12 instead of 13

Solution

  1. Step 1: Check LED on/off commands

    The code sets pin 13 HIGH twice but never sets it LOW, so LED stays on.
  2. Step 2: Identify missing part for blinking

    To blink, the LED must be turned off with digitalWrite(13, LOW) between delays.
  3. Final Answer:

    LED never turns off because digitalWrite(13, LOW) is missing -> Option B
  4. Quick Check:

    Missing LOW command = LED stays on [OK]
Hint: Blink needs both HIGH and LOW commands [OK]
Common Mistakes:
  • Thinking delay() is wrong here
  • Moving pinMode() inside loop() unnecessarily
  • Changing pin number without reason
5. You want to read a sensor every 500 milliseconds without stopping other tasks. Which timing method should you use?
hard
A. Use delay(500) inside loop()
B. Use digitalWrite() to pause sensor reading
C. Use millis() to check elapsed time and read sensor when 500 ms passed
D. Use pinMode() to set sensor pin to INPUT every 500 ms

Solution

  1. Step 1: Understand delay() effect

    delay(500) pauses the whole program, stopping other tasks temporarily.
  2. Step 2: Use millis() for non-blocking timing

    millis() lets you check time passed without stopping the program, so other tasks run smoothly.
  3. Final Answer:

    Use millis() to check elapsed time and read sensor when 500 ms passed -> Option C
  4. Quick Check:

    Non-blocking timing = millis() [OK]
Hint: millis() checks time without stopping program [OK]
Common Mistakes:
  • Using delay() and freezing program
  • Confusing digitalWrite() with timing control
  • Resetting pinMode() repeatedly