2020/10/29

Files at this revision

API Documentation at this revision

Comitter:
falconsyunya
Date:
Thu Oct 29 13:43:31 2020 +0000
Parent:
1:43c83e461ea4
Commit message:
2020/10/29;

Changed in this revision

BMX055.cpp Show annotated file Show diff for this revision Revisions of this file
BMX055.h Show annotated file Show diff for this revision Revisions of this file
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;
 }
diff -r 43c83e461ea4 -r f42c49d6360b BMX055.h
--- a/BMX055.h	Mon Sep 02 09:12:25 2019 +0000
+++ b/BMX055.h	Thu Oct 29 13:43:31 2020 +0000
@@ -70,17 +70,17 @@
 #ifndef BMX055_H_
 #define BMX055_H_
 
-#define ACC 0x19<<1
+#define ACC  0x19<<1
 #define GYRO 0x69<<1
-#define MAG 0x13<<1
+#define MAG  0x13<<1
 
 class BMX055
 {
     public:
         BMX055(PinName SDA, PinName SCL);
-        float accel[3];
-        float gyroscope[3];
-        float magnet[3];
+        int accel[3];
+        int gyroscope[3];
+        int magnet[3];
         void getAcc(void);
         void getGyro(void);
         void getMag(void);