NOBのArduino日記!

NOBのArduino日記!

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

Arduino IDE(volatileの使い方)

volatile
 
 Arduino IDEで使用するvolatileは、変数を修飾するキーワードで、型宣言の前に付け、コンパイラが変数を取り扱う方法を変更します。 

 割り込み(attachInterrupt関数)等によってメインルーチンと並行して実行されるサービスルーチンは変数の扱いがそれぞれで異なっております。
 通常の変数(レジスタに記憶された値)は異なるルーチン間でその値を共用出来ませんが、宣言時にvolatileを付ける事で変数がRAMに記憶される様になり異なるルーチン間でその値を共用する事が出来るようになります。

 以下volatileの使用例です。
 2番ピンの電圧の変化を監視し、0V(Low)に変化を確認するとLEDを消灯し、5V(High)に変化を確認するとLEDを点灯します。
 
volatile int TOGGLE = LOW;          //並行して動作するコード用変数にLEDをトグルする値を格納

void setup() {                      //一回だけ実行
  pinMode(13, OUTPUT);              //LEDが接続された13番ピンを出力に設定
  pinMode(2, INPUT_PULLUP);         //外部割込みを監視する2番ピンをプルアップし入力に設定
  attachInterrupt(0, blink, CHANGE);//割り込み番号0(2番ピン)の電圧に変化があったらblink関数を実行
}

void loop() {                       //{}内を無限ループで実行
  digitalWrite(13, TOGGLE);         //LEDが接続された13番ピンをトグルする
}

void blink() {                      //割り込み番号0(2番ピン)の電圧に変化があった時のみ実行される
  if (digitalRead(2)==LOW){         //もし2番ピンがLOWなら{}内を実行する
    TOGGLE=LOW;                     //LEDトグル変数をLOWにする
  }
  else{                             //もし2番ピンがLOWでなかったら(HIGHなら)以下の{}内を実行する
    TOGGLE=HIGH;                    //LEDトグル変数をHIGHにする
  }
}
イメージ 1
図1:プログラム例

 割り込み(attachInterrupt関数)を使うときはvolatileはほぼセットです

 

イメージ 1 イメージ 3
励みになりますのでよければクリック下さい(^o^)/

↩【ArduinoIDE reference】目次に戻る