Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 5:92d3913dcaee, committed 2017-01-28
- Comitter:
- Gaku0606
- Date:
- Sat Jan 28 20:39:30 2017 +0000
- Parent:
- 4:c4ab5c6e45c8
- Child:
- 6:813fb8b332ee
- Commit message:
- lll
Changed in this revision
| mpu9250_i2c.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/mpu9250_i2c.h Sat Jan 28 20:32:54 2017 +0000
+++ b/mpu9250_i2c.h Sat Jan 28 20:39:30 2017 +0000
@@ -66,31 +66,31 @@
#define GYRO_LSB (0.007630) //[(degree / s) / LSB]
#define MAG_LSB (0.150) //[uT / LSB]
-typedef enum AD0{
+typedef enum AD0 {
AD0_HIGH = 1,
- AD0_LOW = 0
-}ad0;
+ AD0_LOW = 0
+} ad0;
-typedef enum ACC_RANGE{
+typedef enum ACC_RANGE {
_2G = 1,
_4G = 2,
_8G = 4,
_16G = 8
-}acc_range;
+} acc_range;
-typedef enum GYRO_RANGE{
+typedef enum GYRO_RANGE {
_250DPS = 1,
_500DPS = 2,
_1000DPS = 4,
_2000DPS = 8
-}gyro_range;
+} gyro_range;
-typedef enum MAG_RATE{
+typedef enum MAG_RATE {
_8HZ = 0,
_100HZ = 1
-}mag_rate;
+} mag_rate;
-typedef enum A_BAND_WIDTH{
+typedef enum A_BAND_WIDTH {
NO_USE = 0b00000000,
_460HZ = 0b00001000,
_184HZ = 0b00001001,
@@ -99,140 +99,141 @@
_20HZ = 0b00001100,
_10HZ = 0b00001101,
_5HZ = 0b00001110,
-}a_band_width;
+} a_band_width;
-class mpu9250{
+class mpu9250
+{
public:
- /**
- * @brief mpu9250インスタンスを生成する
- * @param _i2c メインプログラムで宣言したI2Cインスタンスのアドレス
- * @param celect AD0ピンがHIGHならAD0_HIGH,LOWならAD0_LOW
- * @note 第二引数なしだとAD0_HIGHになります.
- */
+ /**
+ * \bref mpu9250インスタンスを生成する
+ * \param _i2c メインプログラムで宣言したI2Cインスタンスのアドレス
+ * \param celect AD0ピンがHIGHならAD0_HIGH,LOWならAD0_LOW
+ * \note 第二引数なしだとAD0_HIGHになります.
+ */
mpu9250(I2C &_i2c, AD0 celect = AD0_HIGH);
-
+
I2C *_nine;
public:
void writeReg(char addr, char data);
void writeReg(char addr, char reg, char data);
char readReg(char addr, char reg);
void readReg(char addr, char start_reg, char* buff, char num);
-
- /**
- * @brief 慣性センサと通信ができているか確認する
- * @note trueが返ってきたら成功,falseなら...
- */
+
+ /**
+ * \bref 慣性センサと通信ができているか確認する
+ * \note trueが返ってきたら成功,falseなら...
+ */
bool senserTest();
-
- /**
- * @bref 地磁気センサと通信ができているか確認する
- * @note trueが返ってきたら成功,falseなら...
- */
+
+ /**
+ * @bref 地磁気センサと通信ができているか確認する
+ * @note trueが返ってきたら成功,falseなら...
+ */
bool mag_senserTest();
-
- /**
- * @bref 加速度センサのレンジを設定
- * @param a_range _2G, _4G, _8G, _16Gの中から選択
- * @note 引数無しで±4Gになる
- */
+
+ /**
+ * @bref 加速度センサのレンジを設定
+ * @param a_range _2G, _4G, _8G, _16Gの中から選択
+ * @note 引数無しで±4Gになる
+ */
void setAcc(ACC_RANGE a_range = _4G);
-
- /**
- * @bref 角速度センサのレンジ設定
- * @param g_range _250DPS, _500DPS, _1000DPS, _2000DPSの中から選択
- * @note 引数無しで±500DPS
- */
+
+ /**
+ * @bref 角速度センサのレンジ設定
+ * @param g_range _250DPS, _500DPS, _1000DPS, _2000DPSの中から選択
+ * @note 引数無しで±500DPS
+ */
void setGyro(GYRO_RANGE g_range = _500DPS);
-
- /**
- * @bref 地磁気センサのデータレート設定
- * @param rate _8HZ か _100HZを選択
- * @note あえて8Hzにする必要は無いと思います.
- */
+
+ /**
+ * @bref 地磁気センサのデータレート設定
+ * @param rate _8HZ か _100HZを選択
+ * @note あえて8Hzにする必要は無いと思います.
+ */
void setMag(MAG_RATE rate = _100HZ);
-
+
void init();
-
-
- /**
- * @bref I2Cの通信速度を変更できます.余程のことがない限り使用しなくていいです・
- */
+
+
+ /**
+ * @bref I2Cの通信速度を変更できます.余程のことがない限り使用しなくていいです・
+ */
void frequency(int Hz);
-
- /**
- * @bref mpu9250のデジタルローパスフィルタの設定
- * @param band NO_USE, _460HZ, _184HZ, _92HZ, _41HZ, _20HZ, _10HZ, _5HZから選択
- * @note カットオフ周波数なのかサンプルレートなのかよく分かりません.正直効果が見られません
- */
+
+ /**
+ * @bref mpu9250のデジタルローパスフィルタの設定
+ * @param band NO_USE, _460HZ, _184HZ, _92HZ, _41HZ, _20HZ, _10HZ, _5HZから選択
+ * @note カットオフ周波数なのかサンプルレートなのかよく分かりません.正直効果が見られません
+ */
void setAccLPF(A_BAND_WIDTH band);
-
- /**
- * @bref ゼロ点のずれを補正するオフセット値を設定する
- * @param ax,ay,az 加速度のオフセット
- * @param gx,gy,gz 角速度のオフセット
- * @param mx,my,mz 地磁気のオフセット
- * @note とても重要です.地磁気は定期的にキャリブレーションをしてください.ちなみに,これらの値は測定値より引かれています.
- */
+
+ /**
+ * @bref ゼロ点のずれを補正するオフセット値を設定する
+ * @param ax,ay,az 加速度のオフセット
+ * @param gx,gy,gz 角速度のオフセット
+ * @param mx,my,mz 地磁気のオフセット
+ * @note とても重要です.地磁気は定期的にキャリブレーションをしてください.ちなみに,これらの値は測定値より引かれています.
+ */
void setOffset(double ax, double ay, double az,
double gx, double gy, double gz,
double mx, double my, double mz);
-
- /**
- * @bref 加速度を取得します.
- * @param ax x軸方向の加速度[G]
- * @param ay y軸方向の加速度[G]
- * @param az z軸方向の加速度[G]
- * @note 型はfloat でも doubleでも構いません.
- */
+
+ /**
+ * @bref 加速度を取得します.
+ * @param ax x軸方向の加速度[G]
+ * @param ay y軸方向の加速度[G]
+ * @param az z軸方向の加速度[G]
+ * @note 型はfloat でも doubleでも構いません.
+ */
template<typename T>void getAcc(T *ax, T *ay, T *az);
-
- /**
- * @bref 加速度を取得します.
- * @param acc 各軸方向の加速度[G],x,y,zの順
- * @note 型はfloat でも doubleでも構いません.
- */
+
+ /**
+ * @bref 加速度を取得します.
+ * @param acc 各軸方向の加速度[G],x,y,zの順
+ * @note 型はfloat でも doubleでも構いません.
+ */
template<typename T>void getAcc(T *acc);
-
- /**
- * @bref 角速度を取得します.
- * @param gx x軸方向の角速度[degree/s]
- * @param gy y軸方向の角速度[degree/s]
- * @param gz z軸方向の角速度[degree/s]
- * @note 型はfloat でも doubleでも構いません.
- */
+
+ /**
+ * @bref 角速度を取得します.
+ * @param gx x軸方向の角速度[degree/s]
+ * @param gy y軸方向の角速度[degree/s]
+ * @param gz z軸方向の角速度[degree/s]
+ * @note 型はfloat でも doubleでも構いません.
+ */
template<typename T>void getGyro(T *gx, T *gy, T *gz);
-
- /**
- * @bref 角速度を取得します.
- * @param gyro 各軸方向の角速度[degree/s], x,y,zの順
- * @note 型はfloat でも doubleでも構いません.
- */
+
+ /**
+ * @bref 角速度を取得します.
+ * @param gyro 各軸方向の角速度[degree/s], x,y,zの順
+ * @note 型はfloat でも doubleでも構いません.
+ */
template<typename T>void getGyro(T *gyro);
-
- /**
- * @bref 磁束密度を取得します.
- * @param mx x軸方向の磁束密度[uT]
- * @param my y軸方向の磁束密度[uT]
- * @param mz z軸方向の磁束密度[uT]
- * @note 型はfloat でも doubleでも構いません.
- */
+
+ /**
+ * @bref 磁束密度を取得します.
+ * @param mx x軸方向の磁束密度[uT]
+ * @param my y軸方向の磁束密度[uT]
+ * @param mz z軸方向の磁束密度[uT]
+ * @note 型はfloat でも doubleでも構いません.
+ */
template<typename T>void getMag(T *mx, T *my, T *mz);
-
-
- /**
- * @bref 磁束密度を取得します.
- * @param mag 各軸方向の磁束密度[uT],x,y,zの順
- * @note 型はfloat でも doubleでも構いません.
- */
- template<typename T>void getMag(T *mag);
+
- /**
- * @bref 角速度と加速度を同時に取得します.
- * @param imu データを入れる配列,角速度[degree/s],加速度[G]の順
- * @note 配列数は6以上で
- */
+ /**
+ * @bref 磁束密度を取得します.
+ * @param mag 各軸方向の磁束密度[uT],x,y,zの順
+ * @note 型はfloat でも doubleでも構いません.
+ */
+ template<typename T>void getMag(T *mag);
+
+ /**
+ * @bref 角速度と加速度を同時に取得します.
+ * @param imu データを入れる配列,角速度[degree/s],加速度[G]の順
+ * @note 配列数は6以上で
+ */
template<typename T>void getGyroAcc(T *imu);//gx,gy,gz,ax,ay,az
private:
@@ -247,22 +248,26 @@
-inline void mpu9250::writeReg(char addr, char data){
+inline void mpu9250::writeReg(char addr, char data)
+{
_nine->write( addr | WRITE_FLAG, &data, 1, false);
}
-inline void mpu9250::writeReg(char addr, char reg, char data){
+inline void mpu9250::writeReg(char addr, char reg, char data)
+{
char temp[2] = { reg, data};
_nine->write(addr | WRITE_FLAG, temp, 2, false);
}
-inline char mpu9250::readReg(char addr, char reg){
+inline char mpu9250::readReg(char addr, char reg)
+{
char buff[1];
writeReg(addr, reg);
_nine->read(addr | READ_FLAG, buff, 1, true);
- return buff[0];
+ return buff[0];
}
-inline void mpu9250::readReg(char addr, char start_reg, char* buff, char num){
+inline void mpu9250::readReg(char addr, char start_reg, char* buff, char num)
+{
writeReg(addr, start_reg);
- _nine->read(addr | READ_FLAG, buff, num, true);
+ _nine->read(addr | READ_FLAG, buff, num, true);
}
#endif
\ No newline at end of file