MPU6050のサンプルプログラム2

Dependencies:   ConfigFile SDFileSystem mbed

Fork of LAURUS_program by LAURUS

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?

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;
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 }