MPU-9250 with Kalman Filter

Dependencies:   ADXL362-helloworld MPU9250_SPI mbed

Fork of ADXL362-helloworld by Analog Devices

Committer:
mfurukawa
Date:
Fri Jun 17 05:31:40 2016 +0000
Revision:
7:758a94e02aa7
Parent:
6:ea0804dc7cae
Child:
8:03f9b5289083
stable (allread)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mfurukawa 3:07aa20aa678d 1 /**
mfurukawa 3:07aa20aa678d 2 * Masahiro FURUKAWA - m.furukawa@ist.osaka-u.ac.jp
mfurukawa 3:07aa20aa678d 3 *
mfurukawa 6:ea0804dc7cae 4 * June 17, 2016
mfurukawa 3:07aa20aa678d 5 *
mfurukawa 6:ea0804dc7cae 6 * MPU9250 9DoF Sensor (Extended to Ch1 ~ Ch2)
mfurukawa 3:07aa20aa678d 7 *
mfurukawa 3:07aa20aa678d 8 **/
mfurukawa 3:07aa20aa678d 9
mfurukawa 1:f1e4ee4fc335 10
adisuciu 0:83fda1bfaffe 11 #include "mbed.h"
mfurukawa 6:ea0804dc7cae 12 #include "MPU9250.h"
mfurukawa 1:f1e4ee4fc335 13
mfurukawa 1:f1e4ee4fc335 14 /*
mfurukawa 1:f1e4ee4fc335 15 MOSI (Master Out Slave In) p5
mfurukawa 1:f1e4ee4fc335 16 MISO (Master In Slave Out p6
mfurukawa 1:f1e4ee4fc335 17 SCK (Serial Clock) p7
mfurukawa 6:ea0804dc7cae 18 ~CS (Chip Select) p8
mfurukawa 1:f1e4ee4fc335 19 */
adisuciu 0:83fda1bfaffe 20
mfurukawa 6:ea0804dc7cae 21 // https://developer.mbed.org/users/kylongmu/code/MPU9250_SPI_Test/file/5839d1b118bc/main.cpp
mfurukawa 4:5a9aa5ae928a 22
adisuciu 0:83fda1bfaffe 23 int main() {
mfurukawa 6:ea0804dc7cae 24
mfurukawa 6:ea0804dc7cae 25 Serial pc(USBTX, USBRX);
mfurukawa 2:9ef7a594159c 26 pc.baud(115200);
adisuciu 0:83fda1bfaffe 27
mfurukawa 6:ea0804dc7cae 28 SPI spi(p5, p6, p7);
mfurukawa 6:ea0804dc7cae 29
mfurukawa 6:ea0804dc7cae 30 //define the mpu9250 object
mfurukawa 6:ea0804dc7cae 31 mpu9250_spi *imu[2];
mfurukawa 3:07aa20aa678d 32
mfurukawa 6:ea0804dc7cae 33 imu[0] = new mpu9250_spi(spi, p8);
mfurukawa 6:ea0804dc7cae 34 imu[1] = new mpu9250_spi(spi, p9);
mfurukawa 6:ea0804dc7cae 35
mfurukawa 7:758a94e02aa7 36 for(int i=0;i<2;i++){
mfurukawa 6:ea0804dc7cae 37
mfurukawa 7:758a94e02aa7 38 imu[0]->deselect();
mfurukawa 7:758a94e02aa7 39 imu[1]->deselect();
mfurukawa 7:758a94e02aa7 40 imu[i]->select();
mfurukawa 7:758a94e02aa7 41
mfurukawa 7:758a94e02aa7 42 if(imu[i]->init(1,BITS_DLPF_CFG_188HZ)){ //INIT the mpu9250
mfurukawa 6:ea0804dc7cae 43 printf("\nCouldn't initialize MPU9250 via SPI!");
mfurukawa 6:ea0804dc7cae 44 }
mfurukawa 6:ea0804dc7cae 45 printf("\nWHOAMI=0x%2x\n",imu[i]->whoami()); //output the I2C address to know if SPI is working, it should be 104
mfurukawa 6:ea0804dc7cae 46 wait(1);
mfurukawa 6:ea0804dc7cae 47 printf("Gyro_scale=%u\n",imu[i]->set_gyro_scale(BITS_FS_2000DPS)); //Set full scale range for gyros
mfurukawa 6:ea0804dc7cae 48 wait(1);
mfurukawa 6:ea0804dc7cae 49 printf("Acc_scale=%u\n",imu[i]->set_acc_scale(BITS_FS_16G)); //Set full scale range for accs
mfurukawa 6:ea0804dc7cae 50 wait(1);
mfurukawa 6:ea0804dc7cae 51 printf("AK8963 WHIAM=0x%2x\n",imu[i]->AK8963_whoami());
mfurukawa 6:ea0804dc7cae 52 wait(0.1);
mfurukawa 6:ea0804dc7cae 53 imu[i]->AK8963_calib_Magnetometer();
mfurukawa 7:758a94e02aa7 54 }
mfurukawa 7:758a94e02aa7 55 imu[0]->select();
mfurukawa 7:758a94e02aa7 56 imu[1]->deselect();
mfurukawa 7:758a94e02aa7 57 while(1) {
mfurukawa 7:758a94e02aa7 58
mfurukawa 7:758a94e02aa7 59
mfurukawa 7:758a94e02aa7 60 //myled = 1;
mfurukawa 7:758a94e02aa7 61 wait_us(1);
mfurukawa 7:758a94e02aa7 62 /*
mfurukawa 7:758a94e02aa7 63 imu[i]->read_temp();
mfurukawa 7:758a94e02aa7 64 imu[i]->read_acc();
mfurukawa 7:758a94e02aa7 65 imu[i]->read_rot();
mfurukawa 7:758a94e02aa7 66 imu[i]->AK8963_read_Magnetometer();
mfurukawa 7:758a94e02aa7 67 */
mfurukawa 7:758a94e02aa7 68 for(int i=0;i<2;i++){
mfurukawa 7:758a94e02aa7 69 imu[0]->deselect();
mfurukawa 7:758a94e02aa7 70 imu[1]->deselect();
mfurukawa 7:758a94e02aa7 71 imu[i]->select();
mfurukawa 6:ea0804dc7cae 72 imu[i]->read_all();
mfurukawa 7:758a94e02aa7 73 printf("%10.3f,%10.3f,%10.3f,%10.3f,%10.3f,%10.3f,%10.3f,%10.3f,%10.3f,%10.3f ",
mfurukawa 6:ea0804dc7cae 74 imu[i]->Temperature,
mfurukawa 6:ea0804dc7cae 75 imu[i]->gyroscope_data[0],
mfurukawa 6:ea0804dc7cae 76 imu[i]->gyroscope_data[1],
mfurukawa 6:ea0804dc7cae 77 imu[i]->gyroscope_data[2],
mfurukawa 6:ea0804dc7cae 78 imu[i]->accelerometer_data[0],
mfurukawa 6:ea0804dc7cae 79 imu[i]->accelerometer_data[1],
mfurukawa 6:ea0804dc7cae 80 imu[i]->accelerometer_data[2],
mfurukawa 6:ea0804dc7cae 81 imu[i]->Magnetometer[0],
mfurukawa 6:ea0804dc7cae 82 imu[i]->Magnetometer[1],
mfurukawa 6:ea0804dc7cae 83 imu[i]->Magnetometer[2]
mfurukawa 6:ea0804dc7cae 84 );
mfurukawa 7:758a94e02aa7 85 //myled = 0;
mfurukawa 7:758a94e02aa7 86 //wait(0.5);
mfurukawa 6:ea0804dc7cae 87 }
mfurukawa 7:758a94e02aa7 88 printf("\n");
adisuciu 0:83fda1bfaffe 89 }
adisuciu 0:83fda1bfaffe 90 }