Bird
Raised Fist0
Arduinoprogramming~10 mins

Timer interrupts with TimerOne library in Arduino - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to initialize TimerOne with a 1-second interval.

Arduino
#include <TimerOne.h>

void setup() {
  TimerOne.[1](1000000); // 1 second interval
}

void loop() {
  // main code
}
Drag options to blanks, or click blank then click option'
Astart
Binitialize
CsetPeriod
Dbegin
Attempts:
3 left
💡 Hint
Common Mistakes
Using start() instead of setPeriod().
Using initialize() which is not a TimerOne function.
2fill in blank
medium

Complete the code to attach an interrupt service routine named blinkLED.

Arduino
void setup() {
  TimerOne.setPeriod(500000); // 0.5 second
  TimerOne.[1](blinkLED);
}

void blinkLED() {
  // toggle LED
}
Drag options to blanks, or click blank then click option'
AattachInterrupt
BonTimer
CsetInterrupt
Dstart
Attempts:
3 left
💡 Hint
Common Mistakes
Using start() which only starts the timer.
Using setInterrupt() which is not a TimerOne method.
3fill in blank
hard

Fix the error in the code to start the timer after setting the period and ISR.

Arduino
void setup() {
  TimerOne.setPeriod(2000000); // 2 seconds
  TimerOne.attachInterrupt(blinkLED);
  TimerOne.[1]();
}

void blinkLED() {
  // toggle LED
}
Drag options to blanks, or click blank then click option'
Astart
Bbegin
Cenable
Drun
Attempts:
3 left
💡 Hint
Common Mistakes
Using begin() which is not a TimerOne method.
Using enable() or run() which do not exist.
4fill in blank
hard

Fill both blanks to create a dictionary of word lengths for words longer than 3 characters.

Arduino
String words[] = {"apple", "bat", "carrot", "dog"};
int lengths[4] = {0};

for (int i = 0; i < 4; i++) {
  if (words[i].length() [1] 3) {
    lengths[i] = words[i].[2]();
  }
}
Drag options to blanks, or click blank then click option'
A>
Blength
Csize
D<
Attempts:
3 left
💡 Hint
Common Mistakes
Using < instead of > in the if condition.
Using size() which is not a String method in Arduino.
5fill in blank
hard

Fill all three blanks to create a map of uppercase words to their lengths if length is greater than 4.

Arduino
String words[] = {"tree", "house", "car", "elephant"};
int lengths[4] = {0};

for (int i = 0; i < 4; i++) {
  if (words[i].[1]() [2] 4) {
    words[i].[3]();
    lengths[i] = words[i].length();
  }
}
Drag options to blanks, or click blank then click option'
Alength
B>
CtoUpperCase
Dsize
Attempts:
3 left
💡 Hint
Common Mistakes
Using size() which is not valid for Arduino String.
Using < instead of > in the condition.

Practice

(1/5)
1. What is the main purpose of using the TimerOne library in Arduino programming?
easy
A. To run code at precise time intervals using interrupts
B. To control the speed of the Arduino board
C. To manage power consumption automatically
D. To connect Arduino to the internet

Solution

  1. Step 1: Understand TimerOne library role

    The TimerOne library is designed to help run code at exact time intervals by using hardware timer interrupts.
  2. Step 2: Compare options with library purpose

    Only To run code at precise time intervals using interrupts correctly describes this purpose. Other options describe unrelated features.
  3. Final Answer:

    To run code at precise time intervals using interrupts -> Option A
  4. Quick Check:

    TimerOne = precise timed interrupts [OK]
Hint: TimerOne = precise timing with interrupts [OK]
Common Mistakes:
  • Thinking TimerOne controls Arduino speed
  • Confusing interrupts with internet connection
  • Assuming it manages power automatically
2. Which of the following is the correct way to start TimerOne with a 1-second interval?
easy
A. Timer1.initialize(1000000);
B. Timer1.start(1000);
C. Timer1.setInterval(1);
D. Timer1.begin(1000);

Solution

  1. Step 1: Recall TimerOne initialization syntax

    The TimerOne library uses initialize() with microseconds as argument to set the timer interval.
  2. Step 2: Match 1 second to microseconds

    1 second = 1,000,000 microseconds, so initialize(1000000) is correct.
  3. Final Answer:

    Timer1.initialize(1000000); -> Option A
  4. Quick Check:

    initialize uses microseconds = 1000000 [OK]
Hint: Use initialize() with microseconds for timing [OK]
Common Mistakes:
  • Using milliseconds instead of microseconds
  • Using non-existent start() or begin() methods
  • Confusing setInterval() with initialize()
3. What will be the output on the Serial Monitor if this code runs?
void blink() {
  Serial.println("Tick");
}

void setup() {
  Serial.begin(9600);
  Timer1.initialize(500000);
  Timer1.attachInterrupt(blink);
}

void loop() {
  // empty
}
medium
A. No output because loop is empty
B. Prints "Tick" once and stops
C. Prints "Tick" every 0.5 seconds repeatedly
D. Prints "Tick" continuously without delay

Solution

  1. Step 1: Understand Timer1 setup

    Timer1 is initialized to 500000 microseconds (0.5 seconds) and blink() is attached as interrupt.
  2. Step 2: Analyze interrupt behavior

    Every 0.5 seconds, blink() runs and prints "Tick" to Serial Monitor repeatedly.
  3. Final Answer:

    Prints "Tick" every 0.5 seconds repeatedly -> Option C
  4. Quick Check:

    attachInterrupt triggers blink() repeatedly [OK]
Hint: attachInterrupt runs function repeatedly at interval [OK]
Common Mistakes:
  • Thinking loop() must print for output
  • Assuming interrupt runs only once
  • Confusing timing units causing wrong intervals
4. Identify the error in this TimerOne usage:
void blink() {
  digitalWrite(13, !digitalRead(13));
}

void setup() {
  pinMode(13, OUTPUT);
  Timer1.initialize(1000000);
  Timer1.attachInterrupt(blink());
}

void loop() {}
medium
A. Timer1.initialize() argument should be in milliseconds
B. Missing Serial.begin() in setup()
C. Pin 13 cannot be used with TimerOne interrupts
D. Incorrect call: attachInterrupt(blink()) should be attachInterrupt(blink)

Solution

  1. Step 1: Check attachInterrupt usage

    attachInterrupt expects a function pointer, so it should be attachInterrupt(blink), not attachInterrupt(blink()).
  2. Step 2: Verify other parts

    Serial.begin() is not needed here, pin 13 can be toggled, and initialize() uses microseconds correctly.
  3. Final Answer:

    Incorrect call: attachInterrupt(blink()) should be attachInterrupt(blink) -> Option D
  4. Quick Check:

    attachInterrupt needs function name, no parentheses [OK]
Hint: Pass function name without () to attachInterrupt [OK]
Common Mistakes:
  • Calling function with () inside attachInterrupt
  • Confusing microseconds with milliseconds
  • Thinking Serial.begin() is always required
5. You want to toggle an LED every 200ms using TimerOne. Which code snippet correctly sets this up?
hard
A. Timer1.initialize(200); Timer1.attachInterrupt(blink);
B. Timer1.initialize(200000); Timer1.attachInterrupt([](){ digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); });
C. Timer1.start(200000); Timer1.attachInterrupt(blink());
D. Timer1.setInterval(200000); Timer1.attachInterrupt(blink);

Solution

  1. Step 1: Convert 200ms to microseconds

    200 milliseconds = 200,000 microseconds, so initialize(200000) is correct.
  2. Step 2: Check attachInterrupt syntax and function

    Using a lambda function without parentheses is valid and toggles LED correctly. Other options use wrong methods or call functions incorrectly.
  3. Final Answer:

    Timer1.initialize(200000); Timer1.attachInterrupt([](){ digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); }); -> Option B
  4. Quick Check:

    initialize with microseconds + correct attachInterrupt [OK]
Hint: Use initialize(microseconds) and attachInterrupt with function [OK]
Common Mistakes:
  • Using milliseconds instead of microseconds
  • Calling function with () inside attachInterrupt
  • Using non-existent start() or setInterval() methods
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard