障害内容
開発中のセンサーで下記の三軸加速度センサーの値を取得しようとするとinit()メソッドを呼び出した場所でプログラムが落ちてしまう。
https://www.switch-science.com/catalog/823/
原因調査
1.挿し口が壊れている?
GroveシールドのI2Cの挿し口を変更してみたが、結果は変わらなかった。
2.単体で動作するか調査
Groveシールドに刺さっているほかのモジュールをすべて抜いて、サンプルコードを実行すると予想通りの値が取得できた。
三軸加速度センサーの故障ではないことが確認できた。
3.I2Cのほかのモジュール(光センサ)を接続してテスト
init()メソッドで落ちた。
このことにより、三軸加速度センサーの問題ではなく、別のI2Cモジュールが問題と推測した。
ネットで調べても複数のI2Cモジュールを接続したら動かなくなるという事象は見当たらなかった。
だいたいこういう時は初歩的なことでミスをしていることが多い。
案の定、配線を確認してみると、ケーブルグランドで束ねられた先の接続先モジュールがI2Cのモジュール(光センサ)ではなくLEDモジュールにつながってしまっていた。
LEDモジュールを外し、I2Cモジュール(光センサ)を接続すると正常な動作を確認することが出来た。
調査結果
I2CコネクタにI2C接続ではないモジュールを接続すると、他のI2Cモジュールも動かなくなることが分かりました。
複数のI2Cモジュールは当然、問題なく接続して動作させることが出来ました。
まとめ
接続をうっかり間違えたのがいけなかったのですが、もし同じうっかりをしてしまった人がいれば参考になるかなと思い記事とさせていただきました。
次からは気を付けないとということで、各接続先にテプラでラベルを張り間違えないようにしました。
しかし今回はうっかりでArduinoが壊れなかったのが幸いですw