Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
OrganizationEventAdvent CalendarQiitadon (β)
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

Arduino の attachInterrupt() での割り込み処理


Arduino Uno で Interrupt に割り当てられてるピンはデジタルピンの2(INT0)と3(INT1)。

attachInterrupt(digitalPinToInterrupt(2), callback_function, CHANGE);

と記述することで、デジタルピン2が変化したとき(CHANGE)、callback_function が割り込み処理として実行される。どのように状態が変わったかで呼ばれるかの定義は、以下の定数で指定する。

  • LOW to trigger the interrupt whenever the pin is low,
  • CHANGE to trigger the interrupt whenever the pin changes value
  • RISING to trigger when the pin goes from low to high,
  • FALLING for when the pin goes from high to low.

LOW と FALLING の違いがわからない(変化は HIGH -> LOW だから違いがあるのかな…)。

またオフィシャルドキュメントには罠があって、pin が 13 だと動かないと思う。ので

int ledPin = 13;
int interruptPin = 2;
volatile int state = LOW;

void setup() {
    pinMode(ledPin, OUTPUT);
    attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE);

void loop() {
    digitalWrite(pin, state);

void blink() {
    state = !state;


なお、意図しない最適化を防ぐため、割り込み関数の内部で変更する変数は volatile 修飾子を忘れずに。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Help us understand the problem. What are the problem?