![](https://garchiving.com/wordpress/wp-content/uploads/2016/02/00_top_view_image_arduino_04.jpg)
概要
ESP32でピン変化割り込みの動作が少しおかしくなりました。つい先日まで問題無く動いていたプログラムなのですが、プログラム修正したわけでもなく急におかしくなった感じです。
先日、PWM出力(LEDC関数)でも問題があり心当たりがあったので、とりあえずArduinoIDEのEPS32ボードのバージョンを2.xx以下に下げて試したところ、想定通りの動きに戻りました。LEDC関数と同様にバージョン3.xx以降でピン変化割り込みの関数にも何か変更が入ったよう??。ただ、LEDCの時はコンパイルエラーが出たのですがattachInterrupt();
関数はエラー無くコンパイルされてしまうため、原因が分り難かったです。
対処
実はボードのバージョンアップ自体は原因でなく、私のプログラムが原因だったのですがボードバージョンアップ変更の影響を受けて動作がおかしくなった感じです。詳細の確認していないためほんとの原因はよくわかっていません。ですが以下のようにピンアサインを追加したところ、問題無くピン変化割り込みが動作するようになりました。
▼動きがおかしくなった記述▼
attachInterrupt(PIN_ENC_A, CALL_ENC_A, CHANGE);
割り込みピンの設定のとこで上記のみ記述。ピンアサインを省略、というか記述を忘れてました。これでもバージョン2.xxではうまく動作してたのですが、3.xx以降では何か動きがおかしくなってしまいました。
▼修正した記述▼
pinMode(PIN_ENC_A, INPUT); attachInterrupt(PIN_ENC_A, CALL_ENC_A, CHANGE);
単純にピンアサインの記述を追加。これで3.xx以降でも問題無く動作しました。
ボードのバージョンアップで影響が出たのですが、元々は私の記述ミス。たまたまLEDC関数に変更が入ったタイミングと同じだったので気付けて良かったです。
コメント