detachInterrupt関数
使用例
試しにこのプログラムを実行すると、0番ピンがLOWの時は1番ピンに電圧変化が有った時刻(マイコンが起動してから何ms経過したか)をPCのシリアルモニター上に表示します。 0番ピンがHIGHの時は1番ピンに電圧の変化が有っても経過時間は更新されなくなります。
volatile unsigned long Val; void setup() { attachInterrupt(digitalPinToInterrupt(0), Toggle, CHANGE);//ピン割込時実行 attachInterrupt(digitalPinToInterrupt(1), In, CHANGE); //ピン割込時実行 Serial.begin(9600); //9600bpsでシリアルポートを開く } void loop() { Serial.print(Val); //最後に割込みピンに変化が有った時刻を出力します delay(1000); //1000ms(1秒)待ちます } void In() { Val = millis(); //ピンの状態が変化した時の時刻を変数に代入する } void Toggle() { if (digitalRead(1) == LOW) { //もし1番ピンがLOWなら割り込みを許可する attachInterrupt(digitalPinToInterrupt(1), In, CHANGE); } else { //もし1番ピンがHIGHなら割り込みを許可しない detachInterrupt(digitalPinToInterrupt(1)); } }
図1:プログラム例
励みになりますのでよければクリック下さい(^o^)/