Bird
Raised Fist0
Arduinoprogramming~5 mins

attachInterrupt() function in Arduino - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of the attachInterrupt() function in Arduino?
The attachInterrupt() function is used to set up an interrupt on a specific pin. It tells the Arduino to watch for a change on that pin and run a special function (called an interrupt service routine) when that change happens.
Click to reveal answer
beginner
What are the three main parameters of attachInterrupt()?
The three main parameters are:
1. interrupt number: which interrupt to use (often linked to a pin)
2. ISR function: the function to run when the interrupt happens
3. mode: the condition that triggers the interrupt (like RISING, FALLING, CHANGE, or LOW)
Click to reveal answer
beginner
What does the mode parameter in attachInterrupt() control?
The mode parameter controls when the interrupt triggers. It can be:
- RISING: when the pin goes from LOW to HIGH
- FALLING: when the pin goes from HIGH to LOW
- CHANGE: when the pin changes in any way
- LOW: when the pin is LOW (only on some boards)
Click to reveal answer
intermediate
Why should the function called by attachInterrupt() be short and fast?
Because interrupt functions stop the main program to run immediately, they should be quick to avoid delaying the rest of the program. Long or slow code in interrupts can cause missed events or unstable behavior.
Click to reveal answer
beginner
How do you detach an interrupt that was set with attachInterrupt()?
You use the detachInterrupt() function with the interrupt number to stop the Arduino from watching that interrupt pin.
Click to reveal answer
Which parameter of attachInterrupt() specifies the function to run when the interrupt triggers?
AInterrupt number
BPin number
CMode
DISR function
What does the RISING mode mean in attachInterrupt()?
APin stays LOW
BPin changes from HIGH to LOW
CPin changes from LOW to HIGH
DPin changes in any way
Why should interrupt service routines be kept short?
ATo avoid blocking the main program for too long
BTo make the code easier to read
CTo save memory
DTo use more CPU power
Which function stops an interrupt set by attachInterrupt()?
AstopInterrupt()
BdetachInterrupt()
CremoveInterrupt()
DdisableInterrupt()
What happens if you use CHANGE mode in attachInterrupt()?
AInterrupt triggers on any change from HIGH to LOW or LOW to HIGH
BInterrupt triggers only on LOW state
CInterrupt triggers only on RISING edge
DInterrupt triggers only on FALLING edge
Explain how to use attachInterrupt() to run a function when a button is pressed.
Think about what happens electrically when the button is pressed.
You got /4 concepts.
    Describe why interrupt service routines should be short and what problems can happen if they are not.
    Imagine stopping your friend while they are talking for a quick question versus a long story.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of the attachInterrupt() function in Arduino?
      easy
      A. To start the main program loop
      B. To set the baud rate for serial communication
      C. To run a function automatically when a specific pin changes state
      D. To declare a variable as volatile

      Solution

      1. Step 1: Understand the role of attachInterrupt()

        The function attachInterrupt() is used to make Arduino respond immediately when a pin changes, without waiting for the main loop.
      2. Step 2: Identify the correct purpose

        It triggers a specific function automatically on pin state changes, unlike other options which are unrelated to interrupts.
      3. Final Answer:

        To run a function automatically when a specific pin changes state -> Option C
      4. Quick Check:

        attachInterrupt() triggers functions on pin changes [OK]
      Hint: attachInterrupt() runs code on pin change instantly [OK]
      Common Mistakes:
      • Confusing attachInterrupt() with serial communication setup
      • Thinking it starts the main loop
      • Mixing it with variable declarations
      2. Which of the following is the correct syntax to attach an interrupt on pin 2 that triggers on a rising edge and calls the function handleInterrupt?
      easy
      A. attachInterrupt(2, handleInterrupt, RISING);
      B. attachInterrupt(digitalPinToInterrupt(2), handleInterrupt, RISING);
      C. attachInterrupt(handleInterrupt, 2, RISING);
      D. attachInterrupt(2, RISING, handleInterrupt);

      Solution

      1. Step 1: Recall correct attachInterrupt() syntax

        The correct syntax uses digitalPinToInterrupt(pin) to convert the pin number to an interrupt number.
      2. Step 2: Match parameters order

        The order is: interrupt number, function name, mode (like RISING). Only attachInterrupt(digitalPinToInterrupt(2), handleInterrupt, RISING); follows this correctly.
      3. Final Answer:

        attachInterrupt(digitalPinToInterrupt(2), handleInterrupt, RISING); -> Option B
      4. Quick Check:

        Use digitalPinToInterrupt(pin) for correct interrupt number [OK]
      Hint: Use digitalPinToInterrupt(pin) for correct interrupt number [OK]
      Common Mistakes:
      • Passing pin number directly without digitalPinToInterrupt()
      • Mixing parameter order
      • Using pin number instead of interrupt number
      3. What will be the output on the serial monitor after pressing the button connected to pin 2 once, given this code?
      volatile int count = 0;
      
      void setup() {
        Serial.begin(9600);
        pinMode(2, INPUT_PULLUP);
        attachInterrupt(digitalPinToInterrupt(2), incrementCount, FALLING);
      }
      
      void loop() {
        Serial.println(count);
        delay(500);
      }
      
      void incrementCount() {
        count++;
      }
      medium
      A. The count will increase continuously without button presses
      B. The count will stay 0 because interrupts are not enabled
      C. The program will crash due to volatile misuse
      D. The count will increase by 1 each time the button is pressed

      Solution

      1. Step 1: Analyze interrupt setup and button wiring

        The button is connected to pin 2 with INPUT_PULLUP, so pressing it pulls pin 2 LOW, triggering FALLING edge interrupt.
      2. Step 2: Understand interrupt effect on count

        Each button press triggers incrementCount(), increasing count by 1, which is printed repeatedly in loop.
      3. Final Answer:

        The count will increase by 1 each time the button is pressed -> Option D
      4. Quick Check:

        Interrupt increments count on button press [OK]
      Hint: FALLING triggers on button press with INPUT_PULLUP [OK]
      Common Mistakes:
      • Ignoring INPUT_PULLUP logic and edge type
      • Assuming count won't change without delay
      • Thinking volatile causes crashes
      4. Identify the error in this code snippet using attachInterrupt():
      volatile int flag = 0;
      
      void setup() {
        pinMode(3, INPUT);
        attachInterrupt(3, interruptHandler, CHANGE);
      }
      
      void loop() {
        if (flag == 1) {
          Serial.println("Interrupt triggered");
          flag = 0;
        }
      }
      
      void interruptHandler() {
        flag = 1;
      }
      medium
      A. Pin number 3 is used directly instead of digitalPinToInterrupt(3)
      B. Interrupt mode CHANGE is invalid
      C. Flag variable should not be volatile
      D. Interrupt handler function must return int

      Solution

      1. Step 1: Check attachInterrupt() parameter usage

        The first parameter must be the interrupt number, obtained by digitalPinToInterrupt(pin), not the pin number directly.
      2. Step 2: Verify other parts

        CHANGE is a valid mode, flag should be volatile, and interrupt handlers return void, so no other errors.
      3. Final Answer:

        Pin number 3 is used directly instead of digitalPinToInterrupt(3) -> Option A
      4. Quick Check:

        Use digitalPinToInterrupt(pin) for correct interrupt number [OK]
      Hint: Always convert pin to interrupt number with digitalPinToInterrupt() [OK]
      Common Mistakes:
      • Passing pin number directly to attachInterrupt()
      • Misunderstanding valid interrupt modes
      • Incorrect return type for interrupt handler
      5. You want to count how many times a sensor connected to pin 4 triggers a LOW signal, but only if the sensor stays LOW for at least 50 milliseconds to avoid false triggers. Which approach using attachInterrupt() is best?
      hard
      A. Use attachInterrupt() on CHANGE, record the time in ISR, and check duration in loop()
      B. Use attachInterrupt() on FALLING edge and increment count immediately without delay
      C. Use attachInterrupt() on RISING edge and increment count immediately
      D. Use attachInterrupt() on FALLING edge and in the ISR check if LOW lasts 50ms using delay()

      Solution

      1. Step 1: Understand the need for debouncing or filtering

        To avoid false triggers, you must check if the LOW state lasts at least 50ms, which requires timing logic outside the interrupt.
      2. Step 2: Evaluate options for timing and counting

        Using CHANGE interrupt and recording time in ISR, then checking duration in loop() allows safe timing without delay() inside ISR, which is not allowed.
      3. Step 3: Reject unsafe or incorrect options

        Using delay() inside the ISR is bad practice; incrementing the count immediately on an edge without checking duration ignores the 50ms requirement.
      4. Final Answer:

        Use attachInterrupt() on CHANGE, record the time in ISR, and check duration in loop() -> Option A
      5. Quick Check:

        Record time in ISR, check duration in loop for debounce [OK]
      Hint: Never use delay() in ISR; check timing in main loop [OK]
      Common Mistakes:
      • Using delay() inside interrupt routine
      • Ignoring debounce timing
      • Incrementing count immediately on edge
      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