Forked from Aaron Berk's ITG3200 driver class library, customized for my specific application using 9DoF-Stick by Sparkfun.
Fork of ITG3200 by
ITG-3200 is triple axis, digital interface, gyro sensor.
This library is forked from Aaron Berk's work.
This library is for specific application using 9DoF-Stick.
Datasheet:
http://invensense.com/mems/gyro/documents/PS-ITG-3200-00-01.4.pdf
This library has a feature to correct thermal drift of the device. For details, see Thermal Drift.
ITG-3200は3軸のデジタルインターフェースを備えたジャイロセンサです。
このライブラリは 9DoF-Stick を使用した特定の企画のために保守しています。
mbed IDEが日本語をサポートするまでは英語でコメントを書いていきますが、サポートした後もきっと英語で書いていくでしょう。
このライブラリはデバイスの熱ドリフトを補正する機能を持っています。詳しくは Thermal Drift。
Diff: ITG3200.cpp
- Revision:
- 3:eea9733ca427
- Parent:
- 2:f44a902ba081
- Child:
- 4:155c44407af5
--- a/ITG3200.cpp Wed Sep 12 11:36:48 2012 +0000 +++ b/ITG3200.cpp Wed Sep 12 14:37:34 2012 +0000 @@ -32,13 +32,12 @@ * http://invensense.com/mems/gyro/documents/PS-ITG-3200-00-01.4.pdf */ -/** - * Includes - */ #include "ITG3200.h" ITG3200::ITG3200(PinName sda, PinName scl) : i2c_(sda, scl) { + offset[0] = offset[1] = offset[2] = 0; + //400kHz, fast mode. i2c_.frequency(400000); @@ -266,7 +265,7 @@ } -void ITG3200::getGyroXYZ(int readings[3]){ +void ITG3200::getRawGyroXYZ(int readings[3]){ char tx = GYRO_XOUT_H_REG; char rx[2]; @@ -301,3 +300,22 @@ i2c_.write((ITG3200_I2C_ADDRESS << 1) & 0xFE, tx, 2); } + +void ITG3200::calibrate(double time){ + static const double deltaTime = 0.002; + long sum[3] = {0}; + int sumCount = 0; + for(; 0 < time; time -= deltaTime){ + int gyro[3]; + getGyroXYZ(gyro); + for(int i = 0; i < 3; i++) + sum[i] += gyro[i]; + sumCount++; + } + + // Avoid zero division + if(0 < sumCount){ + for(int i = 0; i < 3; i++) + offset[i] = sum[i] / sumCount; + } +}