External Interrupts

Interrupts are useful for making things happen automatically in microcontroller programs, and can help solve timing problems. Good tasks for using an interrupt may include reading a rotary encoder, or monitoring user input.

Assembly

Arduino.h

Summary

Methods
attachInterrupt - int attachInterrupt(PinName pin, Callback<void()> ISR, int mode)
detachInterrupt - int detachInterrupt(PinName pin)

Methods

attachInterrupt

int attachInterrupt(PinName pin, Callback<void()> ISR, int mode);

Attach interrupt callback to digital pin.

Parameters

Type Name Description
PinName pin Valid PinNames are: PA_4, PA_5, PA_10, PB_0, PB_2, PB_3, PB_6, PB_7, PB_8, PB_9, PB_13, PB_14, PB_15.
Callback<void()> ISR The callback function.
int mode Triggered event type, support CHANGE, RISING, FALLING now.

Return value

Type Description
int Result code, 0 in case of success, error code otherwise.

detachInterrupt

int detachInterrupt(PinName pin);

Detach interrupt callback from digital pin.

Parameters

Type Name Description
PinName pin Valid PinNames are: PA_4, PA_5, PA_10, PB_0, PB_2, PB_3, PB_6, PB_7, PB_8, PB_9, PB_13, PB_14, PB_15.

Return value

Type Description
int Result code, 0 in case of success, error code otherwise.

Sample code

volatile byte led = LOW;
volatile byte interruptOn = HIGH;

void setup() {
  // Use USER_BUTTON_B to control USER_BUTTON_A
  attachInterrupt(USER_BUTTON_B, interruptSwitch, FALLING);
  // Use USER_BUTTON_A to control LED_USER
  if (interruptOn)
  {
    attachInterrupt(USER_BUTTON_A, blink, CHANGE);
  }
}

void loop() {
  digitalWrite(LED_USER, led);
}

void blink()
{
  led = !led;
}

void interruptSwitch()
{
  interruptOn = !interruptOn;
  if (interruptOn)
  {
    attachInterrupt(USER_BUTTON_A, blink, CHANGE);
  }
  else
  {
    detachInterrupt(USER_BUTTON_A);
  }
}