Mistake on this page?
Report an issue in GitHub or email us


InterruptIn class hierarchy

Use the InterruptIn interface to trigger an event when a digital input pin changes. You can trigger interrupts on the rising edge (change from 0 to 1) or falling edge (change from 1 to 0) of signals.

InterruptIn class reference

Public Member Functions
 InterruptIn (PinName pin)
 InterruptIn (PinName pin, PinMode mode)
int read ()
 operator int ()
void rise (Callback< void()> func)
template<typename T , typename M >
void rise (T *obj, M method)
void fall (Callback< void()> func)
template<typename T , typename M >
void fall (T *obj, M method)
void mode (PinMode pull)
void enable_irq ()
void disable_irq ()
Static Public Member Functions
static void _irq_handler (uint32_t id, gpio_irq_event event)
Protected Member Functions
void irq_init (PinName pin)
Protected Attributes
gpio_t gpio
gpio_irq_t gpio_irq
Callback< void()> _rise
Callback< void()> _fall


  • No blocking code in ISR: avoid any call to wait, infinite while loop or blocking calls in general.

  • No printf, malloc or new in ISR: avoid any call to bulky library functions. In particular, certain library functions (such as printf, malloc and new) are non re-entrant, and their behavior could be corrupted when called from an ISR.

  • For printfs from interrupt context, use Event instead.

To read an input, see DigitalIn.

InterruptIn hello, world

/* mbed Example Program
 * Copyright (c) 2006-2014 ARM Limited
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *     http://www.apache.org/licenses/LICENSE-2.0
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * See the License for the specific language governing permissions and
 * limitations under the License.
#include "mbed.h"
InterruptIn button(SW2);
DigitalOut led(LED1);
DigitalOut flash(LED4);
void flip() {
    led = !led;
int main() {
    button.rise(&flip);  // attach the address of the flip function to the rising edge
    while(1) {           // wait around, interrupts will interrupt this!
        flash = !flash;

InterruptIn example

Try the following example to count rising edges on a pin.

#include "mbed.h"

class Counter {
    Counter(PinName pin) : _interrupt(pin) {        // create the InterruptIn on the pin specified to Counter
        _interrupt.rise(callback(this, &Counter::increment)); // attach increment function of this counter instance

    void increment() {

    int read() {
        return _count;

    InterruptIn _interrupt;
    volatile int _count;

Counter counter(SW2);

int main() {
    while(1) {
        printf("Count so far: %d\n", counter.read());
Important Information for this Arm website

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies. If you are not happy with the use of these cookies, please review our Cookie Policy to learn how they can be disabled. By disabling cookies, some features of the site will not work.