only gyro and angle accel

Dependencies:   mbed MPU9250_test

Dependents:   MPU9250_test

Files at this revision

API Documentation at this revision

Comitter:
yukiTakezawa
Date:
Sat Feb 16 09:46:10 2019 +0000
Parent:
2:617daf2877fa
Commit message:
init;

Changed in this revision

MPU9250.cpp Show annotated file Show diff for this revision Revisions of this file
MPU9250.h Show annotated file Show diff for this revision Revisions of this file
MPU9250.lib Show diff for this revision Revisions of this file
MPU9250_test.lib Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MPU9250.cpp	Sat Feb 16 09:46:10 2019 +0000
@@ -0,0 +1,61 @@
+#include "MPU9250.h"
+
+MPU9250::MPU9250(PinName sda,PinName scl) : i2c(sda,scl){
+    wakeUp();
+};
+
+int MPU9250::wakeUp(){
+    int errorFlag = write2Bytes(MPU9250_ADDRESS,PWR_MGMT_1,0x00);
+    int errorFlag2 = write2Bytes(MPU9250_ADDRESS,0x37,0x02);
+    if(errorFlag ==0 && errorFlag2==0){
+        return 0;
+    }
+    return -1;
+}
+
+int MPU9250::getAccelAndGyroRawData(float* accelX,float* accelY,float* accelZ,float* gyroX,float* gyroY,float* gyroZ){
+    int16_t ax,ay,az,gx,gy,gz;
+    int errorFlag = getAccelAndGyroBitData(&ax,&ay,&az,&gx,&gy,&gz);
+    
+    /*実際の値に変換*/
+    *accelX = (float)ax * ACCEL_RANGE / 32768.0;
+    *accelY = (float)ay * ACCEL_RANGE / 32768.0;
+    *accelZ = (float)az * ACCEL_RANGE / 32768.0;
+    
+    /*あとで*/
+    *gyroX = gx;
+    *gyroY = gy;
+    *gyroZ = gz;
+    return errorFlag;
+}
+
+int MPU9250::getAccelAndGyroBitData(int16_t* ax,int16_t* ay,int16_t* az,int16_t* gx,int16_t* gy,int16_t* gz){
+    const char cmd[1] = {0x3b};
+    char data[14];
+    int errorFlag = i2c.write(MPU9250_ADDRESS,cmd,1);
+    int errorFlag2 = i2c.read(MPU9250_ADDRESS,data,14);
+    if(errorFlag == 0 && errorFlag2 == 0){
+        *ax = ((int)data[0] << 8) | (int)data[1];
+        *ay = ((int)data[2] << 8) | (int)data[3];
+        *az = ((int)data[4] << 8) | (int)data[5];
+        *gx = ((int)data[8] << 8) | (int)data[9];
+        *gy = ((int)data[10] << 8) | (int)data[11];
+        *gz = ((int)data[12] << 8) | (int)data[13];
+        return 0;
+    }
+    return -1;
+}
+
+int MPU9250::whoAmI(char* address){
+    char data = WHO_AM_I;
+    i2c.write(MPU9250_ADDRESS,&data,1);
+    wait(0.07);
+    int errorFlag = i2c.read(MPU9250_ADDRESS,&data,1);;
+    *address = data;
+    return errorFlag;
+}
+
+int MPU9250::write2Bytes(char address,char reg,char data){
+    char tmp[2] = {reg,data};
+    return i2c.write(address,tmp,2);
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MPU9250.h	Sat Feb 16 09:46:10 2019 +0000
@@ -0,0 +1,33 @@
+#ifndef MPU9250_INCLUDED
+#define MPU9250_INCLUDED
+
+#include "mbed.h"
+
+#define MPU9250_ADDRESS (0x68 << 1)
+#define PWR_MGMT_1 0x6b
+#define WHO_AM_I 0x75
+
+class MPU9250{
+    I2C i2c;
+    const static int ACCEL_RANGE = 2;
+    
+public:
+    MPU9250(PinName sda,PinName scl);
+    
+    /*データシートによると0x75が返ってくるはずが0x73が返ってくる。原因不明*/
+    int whoAmI(char* address);
+    
+    /*ジャイロと加速度の補正前の生データ*/
+    int getAccelAndGyroRawData(float* accelX,float* accelY,float* accelZ,float* gyroX,float* gyroY,float* gyroZ);
+    
+    /*ジャイロと加速度のbitデータ*/
+    int getAccelAndGyroBitData(int16_t* ax,int16_t* ay,int16_t* az,int16_t* gx,int16_t* gy,int16_t* gz);
+    
+private:
+    /*最初はsleep modeなので起動する*/
+    int wakeUp();
+    
+    int write2Bytes(char address,char register,char data);
+};
+
+#endif
\ No newline at end of file
--- a/MPU9250.lib	Sat Feb 16 09:37:29 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-https://os.mbed.com/teams/kubtss/code/MPU9250/#e0755540a52a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MPU9250_test.lib	Sat Feb 16 09:46:10 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/teams/kubtss/code/MPU9250_test/#617daf2877fa