ESP32【6】GPIO割込

ESPはマイコンなので、GPIOによる割込み欲しくなる場合があります。前回のブログで書いたように、リアルタイム性をあまり必要としないアプリケーションなら、毎回GPIOの状態を確認すれば済むかもしれません。このような場合はあえて、割込を使わなくてもポーリング方式で確認すればよいでしょう。ただ、変化が短い時間であったり、立ち上がりや立下りエッジを捕まえたいというときは、やはり割込が使いたくなります。

GPIOの割込も割込発生時の関数の呼び出し方は似ています。

attachInterrupt(GPIO_NUM_XX, 呼び出し関数, MODE );

使用する GPIO はINPUTで宣言しておきます。

MODEは以下のようになっています。

LOW Triggers interrupt whenever the pin is LOW
HIGH Triggers interrupt whenever the pin is HIGH
CHANGE Triggers interrupt whenever the pin changes value, from HIGH to LOW or LOW to HIGH
FALLING Triggers interrupt when the pin goes from HIGH to LOW
RISING Triggers interrupt when the pin goes from LOW to HIGH

呼び出される関数は

void IRAM_ATTR呼び出し関数 f() {

do something;

}

応用例として、CHANGEを選択して、割込み関数の中でLOWかHIGHを確認すればFALLINGとRASINGの両方を使わなくても判断できます。


void IRAM_ATTR aenc_change() {
  aenc_count++;
}

 void setup() {
    pinMode(AENC, INPUT_PULLUP);
    attachInterrupt(AENC, aenc_change, RISING );
}