MPUとHMCでうごくかもver

Dependencies:   ConfigFile SDFileSystem mbed

Fork of LAURUS_program by hiroya taura

Committer:
YusukeWakuta
Date:
Sat Dec 26 11:44:09 2015 +0000
Revision:
43:3a37e39b234c
Parent:
38:ada39f1c6c76
hmc??????????????????????????????????????????

Who changed what in which revision?

UserRevisionLine numberNew 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 }