volatile
通常の変数(レジスタに記憶された値)は異なるルーチン間でその値を共用出来ませんが、宣言時に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:プログラム例
割り込み(attachInterrupt関数)を使うときはvolatileはほぼセットです
励みになりますのでよければクリック下さい(^o^)/