こちらのArduino用に書かれたコードからmbed用に移植したものを公開していたのだが、いかんせん何年も放ったらかしにしていたため、重い腰を上げて最新のコードに追従させた。特に何か大きく新しい機能が入ったとかは無いようで、リファクタリング程度の更新だった(とはいえ未だコードの品質は良いとは言えない…)。 mbed用のライブラリはこちら。使用方法はこちら
mbedのライブラリに加えた変更点は
- Arduino側のライブラリで変更があった箇所(接続テスト用の関数のようだが、なぜ追加したのかよくわからない)の修正
- I2Cに流すデータのフォーマットなどを決めている便利クラスI2Cdevのメンバ関数をArduinoに倣って全部staticにした。pinName をマクロで指定しなきゃいけないとか、複数のMPU6050を複数のi2cポートで使うのが難しくなるとかあるので、本当はやりたくなかったけど、Arduinoにコードを近づければ、ほぼコピペするだけで移植を終わらせることができるから、そうした。
- ArduinoのSerial.printをエミュレートするクラスを作った。これでArduinoのprintデバッグ部分をちょっと書き換えるだけで移植できるようになった。
Arduinoからmbedに移植するときに書き換えないといけないのは、
- MPU6050.h : 48-52行のコメントアウトされているのを外す。なんでこれコメントアウトされているんだ?コンパイル通らない。
- MPU6050.cpp : 何もなし
- MPU6050_6Axis_MotionApps20.h : 103-108行 のデバッグ出力の部分をArduinoSerialに書き換える
- helper_3dmath.h : sqrtを使っているところを
sqrt((float)(x*x + y*y + z*z));
に書き換える
今後変更があっても簡単に追従できるようにできたのは良かった。 MPU9150も動かしたいというようなリクエストも今まで何回か来ていたので、MPU9150の方もちゃっちゃとやってしまおうかなと思っている。
おわり。
追記
MPU9150のライブラリも移植した。MPU6050のために周辺を整備していたおかげで一瞬で移植できた。