2020/10/29

Revision:
2:f42c49d6360b
Parent:
0:d56d821617b6
diff -r 43c83e461ea4 -r f42c49d6360b BMX055.cpp
--- a/BMX055.cpp	Mon Sep 02 09:12:25 2019 +0000
+++ b/BMX055.cpp	Thu Oct 29 13:43:31 2020 +0000
@@ -1,43 +1,65 @@
 #include "mbed.h"
 #include "BMX055.h"
 
-BMX055::BMX055(PinName SDA, PinName SCL) : bmx055(SDA,SCL){
+BMX055::BMX055(PinName SDA, PinName SCL) : bmx055(SDA,SCL)
+{
     bmx055.frequency(100000);
     bmx_init();
 }
 
 void BMX055::bmx_init(void)
 {
-    char buf[2]={0};
+    char buf[2]= {0};
     printf("accel setting\r\n");
-    buf[0]=0x14; buf[1]=0xB6;
-    bmx055.write(ACC,buf,2); wait_ms(2);
-    buf[0]=0x0F; buf[1]=0x05;
-    buf[0]=0x10; buf[1]=0x08;
+    buf[0]=0x14;
+    buf[1]=0xB6;
+    bmx055.write(ACC,buf,2);
+    wait_ms(2);
+    buf[0]=0x0F;//加速度の計測レンジの設定
+    buf[1]=0x08;//
+    bmx055.write(ACC,buf,2);
+    buf[0]=0x10;
+    buf[1]=0x0B;//加速度のODRとフィルターの帯域幅の設定,更新時間8ms
+    bmx055.write(ACC,buf,2);
+    buf[0]=0x11;
+    buf[1]=0x00;
     bmx055.write(ACC,buf,2);
-    buf[0]=0x11; buf[1]=0x00;
-    bmx055.write(ACC,buf,2); wait_ms(2);
-    
+    wait_ms(2);
+
     printf("gyroscope setting\r\n");
-    buf[0]=0x0F; buf[1]=0x04;
-    bmx055.write(GYRO,buf,2); wait(0.1);
-    buf[0]=0x10; buf[1]=0x07;
-    bmx055.write(GYRO,buf,2); wait(0.1);
-    buf[0]=0x11; buf[1]=0x00;
-    bmx055.write(GYRO,buf,2); wait(0.1);
+    buf[0]=0x0F;
+    buf[1]=0x04;//角加速度の計測レンジの設定
+    bmx055.write(GYRO,buf,2);
+    wait(0.1);
+    buf[0]=0x10;
+    buf[1]=0x06;//角加速度のODRとフィルターの帯域幅の設定,ODR:200Hz
+    bmx055.write(GYRO,buf,2);
+    wait(0.1);
+    buf[0]=0x11;
+    buf[1]=0x00;
+    bmx055.write(GYRO,buf,2);
+    wait(0.1);
 
     printf("magnet setting\r\n");
-    buf[0]=0x4B; buf[1]=0x82;
-    bmx055.write(MAG,buf,2); wait(0.1);
-    buf[0]=0x4B; buf[1]=0x01;
-    bmx055.write(MAG,buf,2); wait(0.1);
-    buf[0]=0x4C; buf[1]=0x00;
+    buf[0]=0x4B;
+    buf[1]=0x82;
+    bmx055.write(MAG,buf,2);
+    wait(0.1);
+    buf[0]=0x4B;
+    buf[1]=0x01;
     bmx055.write(MAG,buf,2);
-    buf[0]=0x4E; buf[1]=0x84;
+    wait(0.1);
+    buf[0]=0x4C;
+    buf[1]=0x00;
     bmx055.write(MAG,buf,2);
-    buf[0]=0x51; buf[1]=0x04;
+    buf[0]=0x4E;
+    buf[1]=0x84;
     bmx055.write(MAG,buf,2);
-    buf[0]=0x52; buf[1]=0x16;
+    buf[0]=0x51;
+    buf[1]=0x04;
+    bmx055.write(MAG,buf,2);
+    buf[0]=0x52;
+    buf[1]=0x16;
     bmx055.write(MAG,buf,2);
     wait(0.1);
 
@@ -46,60 +68,39 @@
     bmx055.read(MAG,buf,1);
     printf("read:0x%02x\r\n",buf[0]);
 }
- 
- void BMX055::getAcc(void){
-    uint8_t data[6]={0};
-    char send[1], get[1];
-    char temp;
 
-    send[0]=(char)(2);
-    bmx055.write(ACC,send,1,true);
+void BMX055::getAcc(void)
+{
+    uint8_t data[6]= {0};
+    char reg = 0x02;
+    bmx055.write(ACC,&reg,1,true);
     bmx055.read(ACC,(char*)data,6);
 
-    for(int i=0;i<3;i++){
-        accel[i]=(int16_t)(((int16_t)data[i*2+1]<<8) | data[i*2]) >> 4;
-        if(accel[i]>2047)accel[i]-=4096;
+    for(int i=0; i<3; i++) {
+        accel[i]=(int16_t)(((int16_t)data[i*2+1]<<8) | data[i*2]) >> 4;//ビット演算
     }
 }
 
-void BMX055::getGyro(void){
-    int data[6]={0};
-    char send[1],get[1];
-    char temp;
-    
-    for(int i=0;i<6;i++){
-        send[0]=(char)(2+i);
-        bmx055.write(GYRO,send,1);
-        bmx055.read(GYRO,get,1);
-        temp=get[0];
-        data[i]=temp;
-    }
+void BMX055::getGyro(void)
+{
+    uint8_t data[6]= {0};
+    char reg = 0x02;
+    bmx055.write(GYRO,&reg,1,true);
+    bmx055.read(GYRO,(char*)data,6);
 
-    for(int i=0;i<3;i++){
-        gyroscope[i]=(int16_t)(((int16_t)data[i*2+1]<<8) | data[i*2]) >> 4;
-        if(gyroscope[i]>32767)gyroscope[i]-=65536;
-//        gyroscope[i]=gyroscope[i]*0.0038;
+    for(int i=0; i<3; i++) {
+        gyroscope[i]=(int16_t)(((int16_t)data[i*2+1]<<8) | data[i*2]);
     }
 }
 
-void BMX055::getMag(void){
-    int data[8]={0};
-    char send[1],get[1];
-    char temp;
+void BMX055::getMag(void)
+{
+    uint8_t data[8]= {0};
+    char reg = 0x42;
+    bmx055.write(MAG,&reg,1,true);
+    bmx055.read(MAG,(char*)data,8);
 
-    for(int i=0;i<8;i++){
-        send[0]=(char)(0x42+i);
-        bmx055.write(MAG,send,1);
-        bmx055.read(MAG,get,1);
-//        printf("%02X ",get[0]);
-        temp=get[0];
-        data[i]=temp;
-    }
-
-    for(int i=0;i<3;i++){
-        if(i!=2)magnet[i]=(int16_t)(((int16_t)data[i*2+1]<<8) | data[i*2]) >> 3;
-        else magnet[i]=(int16_t)(((int16_t)data[i*2+1]<<8) | data[i*2]) >> 1;
-        if(i==2 && magnet[i]>16383)magnet[i]-=32768;
-        else if(i!=2 && magnet[i]>4095)magnet[i]-=8092;
-    }    
+    magnet[0]=(int16_t)(((int16_t)data[1]<<8) | data[0]) >> 3;
+    magnet[1]=(int16_t)(((int16_t)data[3]<<8) | data[2]) >> 3;
+    magnet[2]=(int16_t)(((int16_t)data[5]<<8) | data[4]) >> 1;
 }