2020/10/29

Committer:
falconsyunya
Date:
Thu Oct 29 13:43:31 2020 +0000
Revision:
2:f42c49d6360b
Parent:
0:d56d821617b6
2020/10/29;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
makidia 0:d56d821617b6 1 #include "mbed.h"
makidia 0:d56d821617b6 2 #include "BMX055.h"
makidia 0:d56d821617b6 3
falconsyunya 2:f42c49d6360b 4 BMX055::BMX055(PinName SDA, PinName SCL) : bmx055(SDA,SCL)
falconsyunya 2:f42c49d6360b 5 {
makidia 0:d56d821617b6 6 bmx055.frequency(100000);
makidia 0:d56d821617b6 7 bmx_init();
makidia 0:d56d821617b6 8 }
makidia 0:d56d821617b6 9
makidia 0:d56d821617b6 10 void BMX055::bmx_init(void)
makidia 0:d56d821617b6 11 {
falconsyunya 2:f42c49d6360b 12 char buf[2]= {0};
makidia 0:d56d821617b6 13 printf("accel setting\r\n");
falconsyunya 2:f42c49d6360b 14 buf[0]=0x14;
falconsyunya 2:f42c49d6360b 15 buf[1]=0xB6;
falconsyunya 2:f42c49d6360b 16 bmx055.write(ACC,buf,2);
falconsyunya 2:f42c49d6360b 17 wait_ms(2);
falconsyunya 2:f42c49d6360b 18 buf[0]=0x0F;//加速度の計測レンジの設定
falconsyunya 2:f42c49d6360b 19 buf[1]=0x08;//
falconsyunya 2:f42c49d6360b 20 bmx055.write(ACC,buf,2);
falconsyunya 2:f42c49d6360b 21 buf[0]=0x10;
falconsyunya 2:f42c49d6360b 22 buf[1]=0x0B;//加速度のODRとフィルターの帯域幅の設定,更新時間8ms
falconsyunya 2:f42c49d6360b 23 bmx055.write(ACC,buf,2);
falconsyunya 2:f42c49d6360b 24 buf[0]=0x11;
falconsyunya 2:f42c49d6360b 25 buf[1]=0x00;
makidia 0:d56d821617b6 26 bmx055.write(ACC,buf,2);
falconsyunya 2:f42c49d6360b 27 wait_ms(2);
falconsyunya 2:f42c49d6360b 28
makidia 0:d56d821617b6 29 printf("gyroscope setting\r\n");
falconsyunya 2:f42c49d6360b 30 buf[0]=0x0F;
falconsyunya 2:f42c49d6360b 31 buf[1]=0x04;//角加速度の計測レンジの設定
falconsyunya 2:f42c49d6360b 32 bmx055.write(GYRO,buf,2);
falconsyunya 2:f42c49d6360b 33 wait(0.1);
falconsyunya 2:f42c49d6360b 34 buf[0]=0x10;
falconsyunya 2:f42c49d6360b 35 buf[1]=0x06;//角加速度のODRとフィルターの帯域幅の設定,ODR:200Hz
falconsyunya 2:f42c49d6360b 36 bmx055.write(GYRO,buf,2);
falconsyunya 2:f42c49d6360b 37 wait(0.1);
falconsyunya 2:f42c49d6360b 38 buf[0]=0x11;
falconsyunya 2:f42c49d6360b 39 buf[1]=0x00;
falconsyunya 2:f42c49d6360b 40 bmx055.write(GYRO,buf,2);
falconsyunya 2:f42c49d6360b 41 wait(0.1);
makidia 0:d56d821617b6 42
makidia 0:d56d821617b6 43 printf("magnet setting\r\n");
falconsyunya 2:f42c49d6360b 44 buf[0]=0x4B;
falconsyunya 2:f42c49d6360b 45 buf[1]=0x82;
falconsyunya 2:f42c49d6360b 46 bmx055.write(MAG,buf,2);
falconsyunya 2:f42c49d6360b 47 wait(0.1);
falconsyunya 2:f42c49d6360b 48 buf[0]=0x4B;
falconsyunya 2:f42c49d6360b 49 buf[1]=0x01;
makidia 0:d56d821617b6 50 bmx055.write(MAG,buf,2);
falconsyunya 2:f42c49d6360b 51 wait(0.1);
falconsyunya 2:f42c49d6360b 52 buf[0]=0x4C;
falconsyunya 2:f42c49d6360b 53 buf[1]=0x00;
makidia 0:d56d821617b6 54 bmx055.write(MAG,buf,2);
falconsyunya 2:f42c49d6360b 55 buf[0]=0x4E;
falconsyunya 2:f42c49d6360b 56 buf[1]=0x84;
makidia 0:d56d821617b6 57 bmx055.write(MAG,buf,2);
falconsyunya 2:f42c49d6360b 58 buf[0]=0x51;
falconsyunya 2:f42c49d6360b 59 buf[1]=0x04;
falconsyunya 2:f42c49d6360b 60 bmx055.write(MAG,buf,2);
falconsyunya 2:f42c49d6360b 61 buf[0]=0x52;
falconsyunya 2:f42c49d6360b 62 buf[1]=0x16;
makidia 0:d56d821617b6 63 bmx055.write(MAG,buf,2);
makidia 0:d56d821617b6 64 wait(0.1);
makidia 0:d56d821617b6 65
makidia 0:d56d821617b6 66 buf[0]=0x00;
makidia 0:d56d821617b6 67 bmx055.write(MAG,buf,1,1);
makidia 0:d56d821617b6 68 bmx055.read(MAG,buf,1);
makidia 0:d56d821617b6 69 printf("read:0x%02x\r\n",buf[0]);
makidia 0:d56d821617b6 70 }
makidia 0:d56d821617b6 71
falconsyunya 2:f42c49d6360b 72 void BMX055::getAcc(void)
falconsyunya 2:f42c49d6360b 73 {
falconsyunya 2:f42c49d6360b 74 uint8_t data[6]= {0};
falconsyunya 2:f42c49d6360b 75 char reg = 0x02;
falconsyunya 2:f42c49d6360b 76 bmx055.write(ACC,&reg,1,true);
makidia 0:d56d821617b6 77 bmx055.read(ACC,(char*)data,6);
makidia 0:d56d821617b6 78
falconsyunya 2:f42c49d6360b 79 for(int i=0; i<3; i++) {
falconsyunya 2:f42c49d6360b 80 accel[i]=(int16_t)(((int16_t)data[i*2+1]<<8) | data[i*2]) >> 4;//ビット演算
makidia 0:d56d821617b6 81 }
makidia 0:d56d821617b6 82 }
makidia 0:d56d821617b6 83
falconsyunya 2:f42c49d6360b 84 void BMX055::getGyro(void)
falconsyunya 2:f42c49d6360b 85 {
falconsyunya 2:f42c49d6360b 86 uint8_t data[6]= {0};
falconsyunya 2:f42c49d6360b 87 char reg = 0x02;
falconsyunya 2:f42c49d6360b 88 bmx055.write(GYRO,&reg,1,true);
falconsyunya 2:f42c49d6360b 89 bmx055.read(GYRO,(char*)data,6);
makidia 0:d56d821617b6 90
falconsyunya 2:f42c49d6360b 91 for(int i=0; i<3; i++) {
falconsyunya 2:f42c49d6360b 92 gyroscope[i]=(int16_t)(((int16_t)data[i*2+1]<<8) | data[i*2]);
makidia 0:d56d821617b6 93 }
makidia 0:d56d821617b6 94 }
makidia 0:d56d821617b6 95
falconsyunya 2:f42c49d6360b 96 void BMX055::getMag(void)
falconsyunya 2:f42c49d6360b 97 {
falconsyunya 2:f42c49d6360b 98 uint8_t data[8]= {0};
falconsyunya 2:f42c49d6360b 99 char reg = 0x42;
falconsyunya 2:f42c49d6360b 100 bmx055.write(MAG,&reg,1,true);
falconsyunya 2:f42c49d6360b 101 bmx055.read(MAG,(char*)data,8);
makidia 0:d56d821617b6 102
falconsyunya 2:f42c49d6360b 103 magnet[0]=(int16_t)(((int16_t)data[1]<<8) | data[0]) >> 3;
falconsyunya 2:f42c49d6360b 104 magnet[1]=(int16_t)(((int16_t)data[3]<<8) | data[2]) >> 3;
falconsyunya 2:f42c49d6360b 105 magnet[2]=(int16_t)(((int16_t)data[5]<<8) | data[4]) >> 1;
makidia 0:d56d821617b6 106 }