「Arduinoの基礎」の版間の差分

ナビゲーションに移動 検索に移動
編集の要約なし
編集の要約なし
67行目: 67行目:
     Serial.println(fVoltage);
     Serial.println(fVoltage);
     delay(1000);  
     delay(1000);  
}
</source>
<br><br>
== 割り込みとISR ==
Arduinoのスケッチでのハードウェア割込み(hardware interrupt)の利用方法について記載する。<br>
<br>
Arduino Unoでは、2個のピン(D2, D3)が割込みに利用できる。D2は割込み番号が0、D3は割り込み番号が1である。<br>
Arduino Mega2560では、6個(D2, D3, D18, D19, D20, D21)が使えます使用できる。割込み番号は順に0, 1, 5, 4, 3, 2が設定されている。<br>
<br>
割込みサービスルーチン(ISR, interrupt service routine)は、引数および戻り値が無い(void)の関数が割り当てられる。<br>
attachInterrupt(割込み番号, 関数名, モード)でISRをセットする。<br>
また、attachInterruptの引数にはピンの番号ではなく、割込み番号を指定することに注意すること。<br>
ピン番号から割込み番号の解決には、digitalPinToInterruptを使用する。<br>
<br>
次のサンプルコードでは、toggle_ledという名前のISRを、D2ピンでの割込み処理に指定している。<br>
モードのFALLINGはHIGHからLOWの状態へ遷移したことで割込みを発生させることを意味する。<br>
ISRでLEDが接続されたピンの状態を表す変数をLOWまたはHIGHに変化させている。<br>
そして、loop()関数でその変数をdigitalWrite()関数に渡している。<br>
<source lang="c++">
const byte PIN_LED      = 10;
const byte PIN_INTERRUPT = 2;
volatile byte state      = LOW;
void setup()
{
    pinMode(PIN_LED, OUTPUT);
    digitalWrite(PIN_LED, state);
    attachInterrupt(digitalPinToInterrupt(PIN_INTERRUPT), toggle_led, FALLING);
}
void loop()
{
    digitalWrite(PIN_LED, state);
}
void toggle_led()
{
    state != state;
  }
  }
  </source>
  </source>
匿名利用者

案内メニュー