Wi-Fi・BLEハイブリッドリモコンのカーソル泳ぎ対策
主にラグビーをテレビ観戦するために作ったWi-Fi・BLEハイブリッドリモコンを
前々回、前回の2回で紹介しました。特に前回のスリープモード導入で復帰後のBLE接続が安定して使いやすくなりました。
ただ、ひとつ引っかかりが残っていました。何らかの不具合が生じて処理が著しく遅くなる(またはフリーズする)とウォッチドッグタイマが検知して自動的にリブートし、そのリブート後にジョイスティックの校正をするようになっているのですが、ジョイスティックを触っている時にリブートが掛かると中点でないところを中点だとみなして校正してしまうので、手放すとカーソルが勝手に動き出してしまうのです。ThinkPadのトラックポイントのようなポインティング・スティックを使ったことがある人の多くが経験した「カーソルが泳ぐ」という現象です。これが自爆的に発生してしまうのでした。
今回マイコンに(紆余曲折を経て)ESP32を使っているため、内部のフラッシュメモリであるSPIFFSを使ってCALデータを保存することにしました。幸い使い方はExamplesのSPIFFS_Test.inoを読んだらすぐ分かりました。ところが動かそうとすると一筋縄ではいかず、
E (98) SPIFFS: mount failed, -10025
というエラーが出て暫くしてリブートが掛かってしまいます。実はこれ、SPIFFSを初めて使うときに SPIFFS.begin(true) でフォーマットが掛かるのですが、この作業に40秒ぐらいかかり、その完了前にウォッチドッグタイマが作動していたのでした。これはフォーマットの時だけWDTを60秒にすることで解消しました。また、CALデータが古くなるとまたカーソルが泳ぎだす可能性があるので、Optionを押しながら起動することでCALデータを書き換えるように仕込みました。 ついでにキーアサインを1つ変更しています。RugbyPass TVでフルスクリーンにするときだけ使える'F'をOption+ESCに割り当てていたのですが、それよりもFirefoxのタブを閉じる方がよく使うので、'Ctrl+w'に変更しています。この変更を加えた回路図が次です:

修正したコードはGitHubに置いておきました。コード中のコメント等も見直しています。 以上、何かの参考になれば幸いです。 パドラッパ from MacBook Air (M2)
E (98) SPIFFS: mount failed, -10025
というエラーが出て暫くしてリブートが掛かってしまいます。実はこれ、SPIFFSを初めて使うときに SPIFFS.begin(true) でフォーマットが掛かるのですが、この作業に40秒ぐらいかかり、その完了前にウォッチドッグタイマが作動していたのでした。これはフォーマットの時だけWDTを60秒にすることで解消しました。また、CALデータが古くなるとまたカーソルが泳ぎだす可能性があるので、Optionを押しながら起動することでCALデータを書き換えるように仕込みました。 ついでにキーアサインを1つ変更しています。RugbyPass TVでフルスクリーンにするときだけ使える'F'をOption+ESCに割り当てていたのですが、それよりもFirefoxのタブを閉じる方がよく使うので、'Ctrl+w'に変更しています。この変更を加えた回路図が次です:

修正したコードはGitHubに置いておきました。コード中のコメント等も見直しています。 以上、何かの参考になれば幸いです。 パドラッパ from MacBook Air (M2)
| 固定リンク | 0
コメント