2020/08/26
Dependents: STM32_MR_NOT_IM_REV2 STM32_MR_NOT_IM_REV2 STM32_MR_NOT_IM_REV2_829 STM32_MR_include_IM_rev2
Diff: BMX055.cpp
- Revision:
- 3:58349cbf9ed9
- Parent:
- 2:7e049ebd96ab
diff -r 7e049ebd96ab -r 58349cbf9ed9 BMX055.cpp --- a/BMX055.cpp Tue Aug 25 17:28:06 2020 +0000 +++ b/BMX055.cpp Mon Aug 31 11:21:16 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]=0x11;//加速度の計測レンジの設定 + bmx055.write(ACC,buf,2); + buf[0]=0x10; + buf[1]=0x08; + 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]=0x07; + 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,®,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,®,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,®,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; }