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
BMX055.cpp@3:58349cbf9ed9, 2020-08-31 (annotated)
- Committer:
- falconsyunya
- Date:
- Mon Aug 31 11:21:16 2020 +0000
- Revision:
- 3:58349cbf9ed9
- Parent:
- 2:7e049ebd96ab
2020/08/31
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
makidia | 0:d56d821617b6 | 1 | #include "mbed.h" |
makidia | 0:d56d821617b6 | 2 | #include "BMX055.h" |
makidia | 0:d56d821617b6 | 3 | |
falconsyunya | 3:58349cbf9ed9 | 4 | BMX055::BMX055(PinName SDA, PinName SCL) : bmx055(SDA,SCL) |
falconsyunya | 3:58349cbf9ed9 | 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 | 3:58349cbf9ed9 | 12 | char buf[2]= {0}; |
makidia | 0:d56d821617b6 | 13 | printf("accel setting\r\n"); |
falconsyunya | 3:58349cbf9ed9 | 14 | buf[0]=0x14; |
falconsyunya | 3:58349cbf9ed9 | 15 | buf[1]=0xB6; |
falconsyunya | 3:58349cbf9ed9 | 16 | bmx055.write(ACC,buf,2); |
falconsyunya | 3:58349cbf9ed9 | 17 | wait_ms(2); |
falconsyunya | 3:58349cbf9ed9 | 18 | buf[0]=0x0F; |
falconsyunya | 3:58349cbf9ed9 | 19 | buf[1]=0x11;//加速度の計測レンジの設定 |
falconsyunya | 3:58349cbf9ed9 | 20 | bmx055.write(ACC,buf,2); |
falconsyunya | 3:58349cbf9ed9 | 21 | buf[0]=0x10; |
falconsyunya | 3:58349cbf9ed9 | 22 | buf[1]=0x08; |
falconsyunya | 3:58349cbf9ed9 | 23 | bmx055.write(ACC,buf,2); |
falconsyunya | 3:58349cbf9ed9 | 24 | buf[0]=0x11; |
falconsyunya | 3:58349cbf9ed9 | 25 | buf[1]=0x00; |
makidia | 0:d56d821617b6 | 26 | bmx055.write(ACC,buf,2); |
falconsyunya | 3:58349cbf9ed9 | 27 | wait_ms(2); |
falconsyunya | 3:58349cbf9ed9 | 28 | |
makidia | 0:d56d821617b6 | 29 | printf("gyroscope setting\r\n"); |
falconsyunya | 3:58349cbf9ed9 | 30 | buf[0]=0x0F; |
falconsyunya | 3:58349cbf9ed9 | 31 | buf[1]=0x04;//角加速度の計測レンジの設定 |
falconsyunya | 3:58349cbf9ed9 | 32 | bmx055.write(GYRO,buf,2); |
falconsyunya | 3:58349cbf9ed9 | 33 | wait(0.1); |
falconsyunya | 3:58349cbf9ed9 | 34 | buf[0]=0x10; |
falconsyunya | 3:58349cbf9ed9 | 35 | buf[1]=0x07; |
falconsyunya | 3:58349cbf9ed9 | 36 | bmx055.write(GYRO,buf,2); |
falconsyunya | 3:58349cbf9ed9 | 37 | wait(0.1); |
falconsyunya | 3:58349cbf9ed9 | 38 | buf[0]=0x11; |
falconsyunya | 3:58349cbf9ed9 | 39 | buf[1]=0x00; |
falconsyunya | 3:58349cbf9ed9 | 40 | bmx055.write(GYRO,buf,2); |
falconsyunya | 3:58349cbf9ed9 | 41 | wait(0.1); |
makidia | 0:d56d821617b6 | 42 | |
makidia | 0:d56d821617b6 | 43 | printf("magnet setting\r\n"); |
falconsyunya | 3:58349cbf9ed9 | 44 | buf[0]=0x4B; |
falconsyunya | 3:58349cbf9ed9 | 45 | buf[1]=0x82; |
falconsyunya | 3:58349cbf9ed9 | 46 | bmx055.write(MAG,buf,2); |
falconsyunya | 3:58349cbf9ed9 | 47 | wait(0.1); |
falconsyunya | 3:58349cbf9ed9 | 48 | buf[0]=0x4B; |
falconsyunya | 3:58349cbf9ed9 | 49 | buf[1]=0x01; |
makidia | 0:d56d821617b6 | 50 | bmx055.write(MAG,buf,2); |
falconsyunya | 3:58349cbf9ed9 | 51 | wait(0.1); |
falconsyunya | 3:58349cbf9ed9 | 52 | buf[0]=0x4C; |
falconsyunya | 3:58349cbf9ed9 | 53 | buf[1]=0x00; |
makidia | 0:d56d821617b6 | 54 | bmx055.write(MAG,buf,2); |
falconsyunya | 3:58349cbf9ed9 | 55 | buf[0]=0x4E; |
falconsyunya | 3:58349cbf9ed9 | 56 | buf[1]=0x84; |
makidia | 0:d56d821617b6 | 57 | bmx055.write(MAG,buf,2); |
falconsyunya | 3:58349cbf9ed9 | 58 | buf[0]=0x51; |
falconsyunya | 3:58349cbf9ed9 | 59 | buf[1]=0x04; |
falconsyunya | 3:58349cbf9ed9 | 60 | bmx055.write(MAG,buf,2); |
falconsyunya | 3:58349cbf9ed9 | 61 | buf[0]=0x52; |
falconsyunya | 3:58349cbf9ed9 | 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 | 3:58349cbf9ed9 | 72 | void BMX055::getAcc(void) |
falconsyunya | 3:58349cbf9ed9 | 73 | { |
falconsyunya | 3:58349cbf9ed9 | 74 | uint8_t data[6]= {0}; |
falconsyunya | 3:58349cbf9ed9 | 75 | char reg = 0x02; |
falconsyunya | 3:58349cbf9ed9 | 76 | bmx055.write(ACC,®,1,true); |
makidia | 0:d56d821617b6 | 77 | bmx055.read(ACC,(char*)data,6); |
makidia | 0:d56d821617b6 | 78 | |
falconsyunya | 3:58349cbf9ed9 | 79 | for(int i=0; i<3; i++) { |
falconsyunya | 3:58349cbf9ed9 | 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 | 3:58349cbf9ed9 | 84 | void BMX055::getGyro(void) |
falconsyunya | 3:58349cbf9ed9 | 85 | { |
falconsyunya | 3:58349cbf9ed9 | 86 | uint8_t data[6]= {0}; |
falconsyunya | 3:58349cbf9ed9 | 87 | char reg = 0x02; |
falconsyunya | 3:58349cbf9ed9 | 88 | bmx055.write(GYRO,®,1,true); |
falconsyunya | 3:58349cbf9ed9 | 89 | bmx055.read(GYRO,(char*)data,6); |
makidia | 0:d56d821617b6 | 90 | |
falconsyunya | 3:58349cbf9ed9 | 91 | for(int i=0; i<3; i++) { |
falconsyunya | 3:58349cbf9ed9 | 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 | 3:58349cbf9ed9 | 96 | void BMX055::getMag(void) |
falconsyunya | 3:58349cbf9ed9 | 97 | { |
falconsyunya | 3:58349cbf9ed9 | 98 | uint8_t data[8]= {0}; |
falconsyunya | 3:58349cbf9ed9 | 99 | char reg = 0x42; |
falconsyunya | 3:58349cbf9ed9 | 100 | bmx055.write(MAG,®,1,true); |
falconsyunya | 3:58349cbf9ed9 | 101 | bmx055.read(MAG,(char*)data,8); |
makidia | 0:d56d821617b6 | 102 | |
falconsyunya | 3:58349cbf9ed9 | 103 | magnet[0]=(int16_t)(((int16_t)data[1]<<8) | data[0]) >> 3; |
falconsyunya | 3:58349cbf9ed9 | 104 | magnet[1]=(int16_t)(((int16_t)data[3]<<8) | data[2]) >> 3; |
falconsyunya | 3:58349cbf9ed9 | 105 | magnet[2]=(int16_t)(((int16_t)data[5]<<8) | data[4]) >> 1; |
makidia | 0:d56d821617b6 | 106 | } |