mpu9150&stm32f401_nucleo
Dependencies: CMSIS_DSP_401 MPU9150_DMP_Nucleo QuaternionMath mbed
Fork of MPU9150_nucleo_noni2cdev by
main.cpp@2:bf64742c8684, 2017-06-09 (annotated)
- Committer:
- wspytu
- Date:
- Fri Jun 09 02:18:06 2017 +0000
- Revision:
- 2:bf64742c8684
- Parent:
- 0:8070e5078178
MPU9150&stm32f401_nucleo ?????
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
akashvibhute | 0:8070e5078178 | 1 | #include "mbed.h" |
akashvibhute | 0:8070e5078178 | 2 | |
akashvibhute | 0:8070e5078178 | 3 | Serial debug(USBTX, USBRX); |
akashvibhute | 0:8070e5078178 | 4 | |
akashvibhute | 0:8070e5078178 | 5 | #include "MPU9150.h" |
akashvibhute | 0:8070e5078178 | 6 | #include "Quaternion.h" |
akashvibhute | 0:8070e5078178 | 7 | MPU9150 imu(D15, D14, D7); //scl sda int |
akashvibhute | 0:8070e5078178 | 8 | DigitalOut led(LED1); |
akashvibhute | 0:8070e5078178 | 9 | char buffer[200]; |
akashvibhute | 0:8070e5078178 | 10 | |
akashvibhute | 0:8070e5078178 | 11 | int main(){ |
wspytu | 2:bf64742c8684 | 12 | // debug.baud(921600); |
wspytu | 2:bf64742c8684 | 13 | debug.baud(115200); |
akashvibhute | 0:8070e5078178 | 14 | |
akashvibhute | 0:8070e5078178 | 15 | if(imu.isReady()){ |
akashvibhute | 0:8070e5078178 | 16 | debug.printf("MPU9150 is ready\r\n"); |
akashvibhute | 0:8070e5078178 | 17 | } else { |
akashvibhute | 0:8070e5078178 | 18 | debug.printf("MPU9150 initialisation failure\r\n"); |
akashvibhute | 0:8070e5078178 | 19 | } |
akashvibhute | 0:8070e5078178 | 20 | |
akashvibhute | 0:8070e5078178 | 21 | imu.initialiseDMP(); |
akashvibhute | 0:8070e5078178 | 22 | |
akashvibhute | 0:8070e5078178 | 23 | Timer timer; |
akashvibhute | 0:8070e5078178 | 24 | timer.start(); |
akashvibhute | 0:8070e5078178 | 25 | |
akashvibhute | 0:8070e5078178 | 26 | imu.setFifoReset(true); |
akashvibhute | 0:8070e5078178 | 27 | imu.setDMPEnabled(true); |
akashvibhute | 0:8070e5078178 | 28 | |
akashvibhute | 0:8070e5078178 | 29 | Quaternion q1; |
akashvibhute | 0:8070e5078178 | 30 | |
akashvibhute | 0:8070e5078178 | 31 | while(true){ |
akashvibhute | 0:8070e5078178 | 32 | |
akashvibhute | 0:8070e5078178 | 33 | if(imu.getFifoCount() >= 48){ |
akashvibhute | 0:8070e5078178 | 34 | imu.getFifoBuffer(buffer, 48); |
akashvibhute | 0:8070e5078178 | 35 | led = !led; |
akashvibhute | 0:8070e5078178 | 36 | } |
akashvibhute | 0:8070e5078178 | 37 | |
akashvibhute | 0:8070e5078178 | 38 | if(timer.read_ms() > 50){ |
akashvibhute | 0:8070e5078178 | 39 | timer.reset(); |
akashvibhute | 0:8070e5078178 | 40 | |
akashvibhute | 0:8070e5078178 | 41 | //This is the format of the data in the fifo, |
akashvibhute | 0:8070e5078178 | 42 | /* ================================================================================================ * |
akashvibhute | 0:8070e5078178 | 43 | | Default MotionApps v4.1 48-byte FIFO packet structure: | |
akashvibhute | 0:8070e5078178 | 44 | | | |
akashvibhute | 0:8070e5078178 | 45 | | [QUAT W][ ][QUAT X][ ][QUAT Y][ ][QUAT Z][ ][GYRO X][ ][GYRO Y][ ] | |
akashvibhute | 0:8070e5078178 | 46 | | 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | |
akashvibhute | 0:8070e5078178 | 47 | | | |
akashvibhute | 0:8070e5078178 | 48 | | [GYRO Z][ ][MAG X ][MAG Y ][MAG Z ][ACC X ][ ][ACC Y ][ ][ACC Z ][ ][ ] | |
akashvibhute | 0:8070e5078178 | 49 | | 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | |
akashvibhute | 0:8070e5078178 | 50 | * ================================================================================================ */ |
akashvibhute | 0:8070e5078178 | 51 | |
akashvibhute | 0:8070e5078178 | 52 | /* |
akashvibhute | 0:8070e5078178 | 53 | debug.printf("%d, %d, %d\r\n", (int32_t)(((int32_t)buffer[34] << 24) + ((int32_t)buffer[35] << 16) + ((int32_t)buffer[36] << 8) + (int32_t)buffer[37]), |
akashvibhute | 0:8070e5078178 | 54 | (int32_t)(((int32_t)buffer[38] << 24) + ((int32_t)buffer[39] << 16) + ((int32_t)buffer[40] << 8) + (int32_t)buffer[41]), |
akashvibhute | 0:8070e5078178 | 55 | (int32_t)(((int32_t)buffer[42] << 24) + ((int32_t)buffer[43] << 16) + ((int32_t)buffer[44] << 8) + (int32_t)buffer[45])); |
akashvibhute | 0:8070e5078178 | 56 | |
akashvibhute | 0:8070e5078178 | 57 | debug.printf("%d, %d, %d\r\n", (int32_t)(((int32_t)buffer[16] << 24) + ((int32_t)buffer[17] << 16) + ((int32_t)buffer[18] << 8) + (int32_t)buffer[19]), |
akashvibhute | 0:8070e5078178 | 58 | (int32_t)(((int32_t)buffer[20] << 24) + ((int32_t)buffer[21] << 16) + ((int32_t)buffer[22] << 8) + (int32_t)buffer[23]), |
akashvibhute | 0:8070e5078178 | 59 | (int32_t)(((int32_t)buffer[24] << 24) + ((int32_t)buffer[25] << 16) + ((int32_t)buffer[26] << 8) + (int32_t)buffer[27])); |
akashvibhute | 0:8070e5078178 | 60 | |
akashvibhute | 0:8070e5078178 | 61 | debug.printf("%d, %d, %d\r\n", (int16_t)(buffer[29] << 8) + buffer[28], |
akashvibhute | 0:8070e5078178 | 62 | (int16_t)(buffer[31] << 8) + buffer[30], |
akashvibhute | 0:8070e5078178 | 63 | (int16_t)(buffer[33] << 8) + buffer[32]); |
akashvibhute | 0:8070e5078178 | 64 | |
akashvibhute | 0:8070e5078178 | 65 | debug.printf("%f, %f, %f, %f\r\n", |
akashvibhute | 0:8070e5078178 | 66 | (float)((((int32_t)buffer[0] << 24) + ((int32_t)buffer[1] << 16) + ((int32_t)buffer[2] << 8) + buffer[3]))* (1.0 / (1<<30)), |
akashvibhute | 0:8070e5078178 | 67 | (float)((((int32_t)buffer[4] << 24) + ((int32_t)buffer[5] << 16) + ((int32_t)buffer[6] << 8) + buffer[7]))* (1.0 / (1<<30)), |
akashvibhute | 0:8070e5078178 | 68 | (float)((((int32_t)buffer[8] << 24) + ((int32_t)buffer[9] << 16) + ((int32_t)buffer[10] << 8) + buffer[11]))* (1.0 / (1<<30)), |
akashvibhute | 0:8070e5078178 | 69 | (float)((((int32_t)buffer[12] << 24) + ((int32_t)buffer[13] << 16) + ((int32_t)buffer[14] << 8) + buffer[15]))* (1.0 / (1<<30))); |
akashvibhute | 0:8070e5078178 | 70 | */ |
akashvibhute | 0:8070e5078178 | 71 | |
akashvibhute | 0:8070e5078178 | 72 | q1.decode(buffer); |
akashvibhute | 0:8070e5078178 | 73 | debug.printf("%f, %f, %f, %f\r\n", q1.w, q1.v.x, q1.v.y, q1.v.z); |
akashvibhute | 0:8070e5078178 | 74 | |
akashvibhute | 0:8070e5078178 | 75 | |
akashvibhute | 0:8070e5078178 | 76 | //TeaPot Demo Packet for MotionFit SDK |
akashvibhute | 0:8070e5078178 | 77 | /* |
akashvibhute | 0:8070e5078178 | 78 | debug.putc('$'); //packet start |
akashvibhute | 0:8070e5078178 | 79 | debug.putc((char)2); //assume packet type constant |
akashvibhute | 0:8070e5078178 | 80 | debug.putc((char)0); //count seems unused |
akashvibhute | 0:8070e5078178 | 81 | for(int i = 0; i < 16; i++){ //16 bytes for 4 32bit floats |
akashvibhute | 0:8070e5078178 | 82 | debug.putc((char)(buffer[i])); |
akashvibhute | 0:8070e5078178 | 83 | } |
akashvibhute | 0:8070e5078178 | 84 | for(int i = 0; i < 5; i++){ //no idea, padded with 0 |
akashvibhute | 0:8070e5078178 | 85 | debug.putc((char)0); |
akashvibhute | 0:8070e5078178 | 86 | } |
akashvibhute | 0:8070e5078178 | 87 | */ |
akashvibhute | 0:8070e5078178 | 88 | } |
akashvibhute | 0:8070e5078178 | 89 | } |
akashvibhute | 0:8070e5078178 | 90 | } |
akashvibhute | 0:8070e5078178 | 91 |