MPU6050のサンプルプログラム2
Dependencies: ConfigFile SDFileSystem mbed
Fork of LAURUS_program by
MPU6050/MPU6050.cpp@36:94dc027e05cd, 2015-12-07 (annotated)
- Committer:
- taurin
- Date:
- Mon Dec 07 02:11:56 2015 +0000
- Revision:
- 36:94dc027e05cd
- Parent:
- 1:6cd6d2760856
MPU?HMC??????ver
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ojan | 0:bc6f14fc60c7 | 1 | #include "mbed.h" |
ojan | 0:bc6f14fc60c7 | 2 | #include "MPU6050.h" |
ojan | 0:bc6f14fc60c7 | 3 | |
ojan | 1:6cd6d2760856 | 4 | MPU6050::MPU6050(I2C* p_i2c): i2c(p_i2c){ |
ojan | 0:bc6f14fc60c7 | 5 | } |
ojan | 0:bc6f14fc60c7 | 6 | |
ojan | 0:bc6f14fc60c7 | 7 | MPU6050::~MPU6050() { |
ojan | 0:bc6f14fc60c7 | 8 | i2c = NULL; |
ojan | 0:bc6f14fc60c7 | 9 | } |
ojan | 0:bc6f14fc60c7 | 10 | |
ojan | 0:bc6f14fc60c7 | 11 | int MPU6050::init() { |
ojan | 1:6cd6d2760856 | 12 | // スリープモード解除 |
ojan | 0:bc6f14fc60c7 | 13 | char cmd[2] = {0x6b, 0x00}; |
ojan | 0:bc6f14fc60c7 | 14 | int ret = i2c->write(mpu_addr, cmd, 2); |
ojan | 1:6cd6d2760856 | 15 | if(ret != 0) return 0; |
ojan | 0:bc6f14fc60c7 | 16 | |
ojan | 1:6cd6d2760856 | 17 | // ジャイロのレンジを500deg/sに設定 |
ojan | 1:6cd6d2760856 | 18 | char data = 0; |
ojan | 1:6cd6d2760856 | 19 | cmd[0] = 0x1b; |
ojan | 1:6cd6d2760856 | 20 | ret = i2c->write(mpu_addr, cmd, 1, true); |
ojan | 0:bc6f14fc60c7 | 21 | if(ret != 0) return 0; |
ojan | 1:6cd6d2760856 | 22 | i2c->read(mpu_addr | 0x01, &data, 1, false); |
ojan | 1:6cd6d2760856 | 23 | cmd[1] = data | 0x08; |
ojan | 1:6cd6d2760856 | 24 | ret = i2c->write(mpu_addr, cmd, 2); |
ojan | 1:6cd6d2760856 | 25 | if(ret != 0) return 0; |
ojan | 1:6cd6d2760856 | 26 | |
ojan | 0:bc6f14fc60c7 | 27 | return 1; |
ojan | 0:bc6f14fc60c7 | 28 | } |
ojan | 0:bc6f14fc60c7 | 29 | |
ojan | 0:bc6f14fc60c7 | 30 | int MPU6050::read() { |
ojan | 0:bc6f14fc60c7 | 31 | char cmd[1] = {0x3b}; |
ojan | 0:bc6f14fc60c7 | 32 | int ret = i2c->write(mpu_addr, cmd, 1, true); |
ojan | 0:bc6f14fc60c7 | 33 | if(ret != 0) return 0; |
ojan | 0:bc6f14fc60c7 | 34 | |
ojan | 0:bc6f14fc60c7 | 35 | i2c->read(mpu_addr | 0x01, (char*)data.reg, 14, false); |
ojan | 0:bc6f14fc60c7 | 36 | |
ojan | 0:bc6f14fc60c7 | 37 | // データのHとLが逆に読み込まれているのでスワップする |
ojan | 0:bc6f14fc60c7 | 38 | for(int i=0; i<7; i++) { |
ojan | 0:bc6f14fc60c7 | 39 | uint8_t temp = 0; |
ojan | 0:bc6f14fc60c7 | 40 | temp = data.reg[i*2]; |
ojan | 0:bc6f14fc60c7 | 41 | data.reg[i*2] = data.reg[i*2+1]; |
ojan | 0:bc6f14fc60c7 | 42 | data.reg[i*2+1] = temp; |
ojan | 0:bc6f14fc60c7 | 43 | } |
ojan | 0:bc6f14fc60c7 | 44 | |
ojan | 0:bc6f14fc60c7 | 45 | return 1; |
ojan | 0:bc6f14fc60c7 | 46 | |
ojan | 0:bc6f14fc60c7 | 47 | } |