クオータニオンを出力してくれる9軸センサ,BNO055のライブラリ
Revision 1:6de1be86a23f, committed 2019-02-19
- Comitter:
- Sigma884
- Date:
- Tue Feb 19 14:57:28 2019 +0000
- Parent:
- 0:4c82133c291f
- Commit message:
- MODE -> BNO_MODE
Changed in this revision
BNO055_lib.cpp | Show annotated file Show diff for this revision Revisions of this file |
BNO055_lib.h | Show annotated file Show diff for this revision Revisions of this file |
diff -r 4c82133c291f -r 6de1be86a23f BNO055_lib.cpp --- a/BNO055_lib.cpp Tue Jan 22 11:47:28 2019 +0000 +++ b/BNO055_lib.cpp Tue Feb 19 14:57:28 2019 +0000 @@ -25,18 +25,52 @@ } void BNO055_lib::setAccRange(ACC_RANGE range){ + cmd[0] = BNO055_PAGE_ID; + cmd[1] = 0x01; + i2c -> write(slave << 1, cmd, 2); + cmd[0] = BNO055_ACC_CONFIG; - cmd[1] = 0x0F; + cmd[1] = (char)range | 0x0C; + i2c -> write(slave << 1, cmd, 2); + i2c -> write(slave << 1, cmd, 1); + i2c -> read(slave << 1 | 1, buff, 1); + + cmd[0] = BNO055_PAGE_ID; + cmd[1] = 0x00; i2c -> write(slave << 1, cmd, 2); } void BNO055_lib::setOperationMode(OPERATION_MODE mode){ + wait(0.05f); cmd[0] = BNO055_OPR_MODE; - //cmd[1] = 0x07; //AMG - cmd[1] = 0x0C; //NDOF + cmd[1] = (char)mode; + i2c -> write(slave << 1, cmd, 2); + wait(0.05f); +} + +void BNO055_lib::setAxis(AXIS x, AXIS y, AXIS z){ + if((x != y) && (y != z) && (z != x)){ + cmd[0] = BNO055_AXIS_MAP_CONFIG; + cmd[1] = ((char)z << 4) | ((char)y << 2) | (char)x; + i2c -> write(slave << 1, cmd, 2); + } +} + +void BNO055_lib::setAxisPM(int x_pm, int y_pm, int z_pm){ + cmd[0] = BNO055_AXIS_MAP_SIGN; + cmd[1] = 0x00; + if(x_pm < 0){ + cmd[1] = cmd[1] | 0x04; + } + if(y_pm < 0){ + cmd[1] = cmd[1] | 0x02; + } + if(z_pm < 0){ + cmd[1] = cmd[1] | 0x01; + } i2c -> write(slave << 1, cmd, 2); } - + void BNO055_lib::getAcc(float *acc){ cmd[0] = BNO055_ACC_DATA; i2c -> write(slave << 1, cmd, 1);
diff -r 4c82133c291f -r 6de1be86a23f BNO055_lib.h --- a/BNO055_lib.h Tue Jan 22 11:47:28 2019 +0000 +++ b/BNO055_lib.h Tue Feb 19 14:57:28 2019 +0000 @@ -1,6 +1,12 @@ #ifndef BNO055_LIB_ #define BNO055_LIB_ +/******************************************************************************* +付け加える予定の機能(未実装) +・単位の変更 +・オフセットの回り +*******************************************************************************/ + #define BNO055_ADDR_LOW 0x28 #define BNO055_ADDR_HIGH 0x29 @@ -21,6 +27,9 @@ #define BNO055_OPR_MODE 0x3D #define BNO055_PWR_MODE 0x3E +#define BNO055_AXIS_MAP_CONFIG 0x41 +#define BNO055_AXIS_MAP_SIGN 0x42 + ///////////////////////PAGE 1 #define BNO055_ACC_CONFIG 0x08 @@ -56,10 +65,18 @@ NDOF = 0x0C }OPERATION_MODE; + typedef enum{ + X = 0x00, + Y = 0x01, + Z = 0x02 + }AXIS; + BNO055_lib(I2C &user_i2c, AD0 ad0); int connectCheck(); void setAccRange(ACC_RANGE range); void setOperationMode(OPERATION_MODE mode); + void setAxis(AXIS x, AXIS y, AXIS z); + void setAxisPM(int x_pm, int y_pm, int z_pm); void getAcc(float *acc); void getAcc(double *acc);