NOBのArduino日記!

NOBのArduino日記!

趣味は車・バイク・自転車・ラジコン・電子工作です。

Arduino IDE(interrupts関数の使い方)

interrupt関数

 Arduino IDEで使用するinterrupts関数は、一度noInterrupts関数で停止した全ての外部割込みを再開します。
 時間に敏感な重要な処理を行う時は割り込みによる影響を回避する為、処理の前に割り込みを停止してから処理し、処理後割り込みを再開するなどの使い方をします。
 
使用例
 Arduino IDEで使用するinterrupts関数の使用例は以下の通りです。
 試しにこのプログラムを実行すると、1秒毎に経過時間をPCのシリアルモニター上に表示します。
 2番ピンをGNDに接触すると経過時間はリセットされ再び0からカウントが再開します。
volatile unsigned long Val;          //変数Valの宣言

void setup() {
  pinMode(2, INPUT_PULLUP);       //外部割込みの2番ピンをプルアップし入力に設定
  attachInterrupt(digitalPinToInterrupt(2), Reset, FALLING);//2番ピン割込時実行
  Serial.begin(9600);                  //9600bpsでシリアルポートを開く
}

void loop() {
  float A;                                       //変数Aの宣言
  interrupts();                                //割り込み開始
  for (byte i = LOW;; !i) {               //breakするまで無限ループするfor文です
    A = millis() % 1000;                  //経過時間(ms)を1000で割った余りをAに代入
    if (A == 0) {
      break; //もし余りが0ならfor文を抜ける
    }
  }
  noInterrupts();                            //割り込み停止
  Val++ ;                                      //1秒カウントアップする
  Serial.println(Val);                       //経過時間を出力します
  delay(1);                                     //プログラムが早すぎるので少し待つ
}

void Reset() {                            //2番ピンをGNDに接触で経過時間をリセット
  Val = 0;
}
イメージ 1
図1:プログラム例

 

interruptsにパラメータ及び戻り値はありません 。
 
イメージ 1 イメージ 3
励みになりますのでよければクリック下さい(^o^)/

↩【ArduinoIDE reference】目次に戻る