nanagagatata Log

Grove I2C 三軸加速度センサ サンプルコード内バグ

grove_3axis_accelerometer

arduinoにセンサー類をつないでワンタッチですぐに使えるようにするGROVEを最近気に入って使っています。
しかし、三軸加速度センサ[SEN21853P]を使おうとしたのですが、以下条件で動かした場合に問題が出て困っていました。

問題は上記サンプルコード内の「MMA7760.cpp」のgetXYZ()メソッドにありました
元ファイルの86行目のif文は以下の様になっています

if(count < 3) {
  while ( val[count] > 63 ) // reload the damn thing it is bad
  {
    val[count] = Wire.read();
  }
}

ここのwhile文はマスタが要求した値より短いバイト数のデータが来た場合の保護として使われるはずですが機能していません。そこでwhile文を削除してやります

if(count < 3) {
  val[count] = Wire.read();
}

これで、「MMA7760.h」をインクルードしたスケッチを動かした場合にも動作が止まることはなくなります。
上記コードで意図した短いバイト数のデータが来た場合の正しい保護方法はまた後日追記したいと思います。