クオータニオンを出力してくれる9軸センサ,BNO055のライブラリ

Dependents:   SWAN_IZU2019_v1

Files at this revision

API Documentation at this revision

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);