
MPUとHMCでうごくかもver
Dependencies: ConfigFile SDFileSystem mbed
Fork of LAURUS_program by
MPU6050/MPU6050.cpp@43:3a37e39b234c, 2015-12-26 (annotated)
- Committer:
- YusukeWakuta
- Date:
- Sat Dec 26 11:44:09 2015 +0000
- Revision:
- 43:3a37e39b234c
- Parent:
- 38:ada39f1c6c76
hmc??????????????????????????????????????????
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; |
YusukeWakuta | 38:ada39f1c6c76 | 26 | //12月19日18:45時点:上のどっかで0が返されてしまっているらしい |
ojan | 1:6cd6d2760856 | 27 | |
ojan | 0:bc6f14fc60c7 | 28 | return 1; |
ojan | 0:bc6f14fc60c7 | 29 | } |
ojan | 0:bc6f14fc60c7 | 30 | |
ojan | 0:bc6f14fc60c7 | 31 | int MPU6050::read() { |
ojan | 0:bc6f14fc60c7 | 32 | char cmd[1] = {0x3b}; |
YusukeWakuta | 38:ada39f1c6c76 | 33 | int val; |
ojan | 0:bc6f14fc60c7 | 34 | int ret = i2c->write(mpu_addr, cmd, 1, true); |
ojan | 0:bc6f14fc60c7 | 35 | if(ret != 0) return 0; |
YusukeWakuta | 38:ada39f1c6c76 | 36 | val = i2c->read(mpu_addr | 0x01, (char*)data.reg, 14, false); |
YusukeWakuta | 38:ada39f1c6c76 | 37 | checker_set(val); |
ojan | 0:bc6f14fc60c7 | 38 | // データのHとLが逆に読み込まれているのでスワップする |
ojan | 0:bc6f14fc60c7 | 39 | for(int i=0; i<7; i++) { |
ojan | 0:bc6f14fc60c7 | 40 | uint8_t temp = 0; |
ojan | 0:bc6f14fc60c7 | 41 | temp = data.reg[i*2]; |
ojan | 0:bc6f14fc60c7 | 42 | data.reg[i*2] = data.reg[i*2+1]; |
ojan | 0:bc6f14fc60c7 | 43 | data.reg[i*2+1] = temp; |
ojan | 0:bc6f14fc60c7 | 44 | } |
ojan | 0:bc6f14fc60c7 | 45 | |
ojan | 0:bc6f14fc60c7 | 46 | return 1; |
ojan | 0:bc6f14fc60c7 | 47 | |
ojan | 0:bc6f14fc60c7 | 48 | } |