Example to use MPU6050 library. This project contains usage of DMP and way to get raw values from the sensor. I ported here from this arduino's project https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050/Examples. See here if you want try visualization of sensor values. To get move this program, we need to connect pinName 27 to "SCL" pin, pinName 28 to "SDA" pin, and pinName 29 to "INT" pin of MPU6050.

Dependencies:   mbed MPU6050

Committer:
syundo0730
Date:
Sun Jan 31 14:12:13 2016 +0000
Revision:
2:42c4f3a7813f
integrated the example for DMP and raw value

Who changed what in which revision?

UserRevisionLine numberNew contents of line
syundo0730 2:42c4f3a7813f 1 #include "MPU6050_raw.h"
syundo0730 2:42c4f3a7813f 2
syundo0730 2:42c4f3a7813f 3 // I2Cdev and MPU6050 must be installed as libraries, or else the .cpp/.h files
syundo0730 2:42c4f3a7813f 4 // for both classes must be in the include path of your project
syundo0730 2:42c4f3a7813f 5 #include "I2Cdev.h"
syundo0730 2:42c4f3a7813f 6 #include "MPU6050.h"
syundo0730 2:42c4f3a7813f 7
syundo0730 2:42c4f3a7813f 8 #include "ArduinoSerial.h"
syundo0730 2:42c4f3a7813f 9
syundo0730 2:42c4f3a7813f 10 // uncomment "OUTPUT_READABLE_ACCELGYRO" if you want to see a tab-separated
syundo0730 2:42c4f3a7813f 11 // list of the accel X/Y/Z and then gyro X/Y/Z values in decimal. Easy to read,
syundo0730 2:42c4f3a7813f 12 // not so easy to parse, and slow(er) over UART.
syundo0730 2:42c4f3a7813f 13 #define OUTPUT_READABLE_ACCELGYRO
syundo0730 2:42c4f3a7813f 14
syundo0730 2:42c4f3a7813f 15 // uncomment "OUTPUT_BINARY_ACCELGYRO" to send all 6 axes of data as 16-bit
syundo0730 2:42c4f3a7813f 16 // binary, one right after the other. This is very fast (as fast as possible
syundo0730 2:42c4f3a7813f 17 // without compression or data loss), and easy to parse, but impossible to read
syundo0730 2:42c4f3a7813f 18 // for a human.
syundo0730 2:42c4f3a7813f 19 //#define OUTPUT_BINARY_ACCELGYRO
syundo0730 2:42c4f3a7813f 20
syundo0730 2:42c4f3a7813f 21 namespace MPU6050raw {
syundo0730 2:42c4f3a7813f 22 // class default I2C address is 0x68
syundo0730 2:42c4f3a7813f 23 // specific I2C addresses may be passed as a parameter here
syundo0730 2:42c4f3a7813f 24 // AD0 low = 0x68 (default for InvenSense evaluation board)
syundo0730 2:42c4f3a7813f 25 // AD0 high = 0x69
syundo0730 2:42c4f3a7813f 26 MPU6050 accelgyro;
syundo0730 2:42c4f3a7813f 27 //MPU6050 accelgyro(0x69); // <-- use for AD0 high
syundo0730 2:42c4f3a7813f 28
syundo0730 2:42c4f3a7813f 29 int16_t ax, ay, az;
syundo0730 2:42c4f3a7813f 30 int16_t gx, gy, gz;
syundo0730 2:42c4f3a7813f 31
syundo0730 2:42c4f3a7813f 32 DigitalOut led1(LED1);
syundo0730 2:42c4f3a7813f 33 ArduinoSerial arduinoSerial;
syundo0730 2:42c4f3a7813f 34
syundo0730 2:42c4f3a7813f 35 void setup() {
syundo0730 2:42c4f3a7813f 36 // initialize arduinoSerial communication
syundo0730 2:42c4f3a7813f 37 // (38400 chosen because it works as well at 8MHz as it does at 16MHz, but
syundo0730 2:42c4f3a7813f 38 // it's really up to you depending on your project)
syundo0730 2:42c4f3a7813f 39 arduinoSerial.begin(38400);
syundo0730 2:42c4f3a7813f 40
syundo0730 2:42c4f3a7813f 41 // initialize device
syundo0730 2:42c4f3a7813f 42 arduinoSerial.println("Initializing I2C devices...");
syundo0730 2:42c4f3a7813f 43 accelgyro.initialize();
syundo0730 2:42c4f3a7813f 44
syundo0730 2:42c4f3a7813f 45 // verify connection
syundo0730 2:42c4f3a7813f 46 arduinoSerial.println("Testing device connections...");
syundo0730 2:42c4f3a7813f 47 arduinoSerial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
syundo0730 2:42c4f3a7813f 48
syundo0730 2:42c4f3a7813f 49 // use the code below to change accel/gyro offset values
syundo0730 2:42c4f3a7813f 50 /*
syundo0730 2:42c4f3a7813f 51 arduinoSerial.println("Updating internal sensor offsets...");
syundo0730 2:42c4f3a7813f 52 // -76 -2359 1688 0 0 0
syundo0730 2:42c4f3a7813f 53 arduinoSerial.print(accelgyro.getXAccelOffset()); arduinoSerial.print("\t"); // -76
syundo0730 2:42c4f3a7813f 54 arduinoSerial.print(accelgyro.getYAccelOffset()); arduinoSerial.print("\t"); // -2359
syundo0730 2:42c4f3a7813f 55 arduinoSerial.print(accelgyro.getZAccelOffset()); arduinoSerial.print("\t"); // 1688
syundo0730 2:42c4f3a7813f 56 arduinoSerial.print(accelgyro.getXGyroOffset()); arduinoSerial.print("\t"); // 0
syundo0730 2:42c4f3a7813f 57 arduinoSerial.print(accelgyro.getYGyroOffset()); arduinoSerial.print("\t"); // 0
syundo0730 2:42c4f3a7813f 58 arduinoSerial.print(accelgyro.getZGyroOffset()); arduinoSerial.print("\t"); // 0
syundo0730 2:42c4f3a7813f 59 arduinoSerial.print("\n");
syundo0730 2:42c4f3a7813f 60 accelgyro.setXGyroOffset(220);
syundo0730 2:42c4f3a7813f 61 accelgyro.setYGyroOffset(76);
syundo0730 2:42c4f3a7813f 62 accelgyro.setZGyroOffset(-85);
syundo0730 2:42c4f3a7813f 63 arduinoSerial.print(accelgyro.getXAccelOffset()); arduinoSerial.print("\t"); // -76
syundo0730 2:42c4f3a7813f 64 arduinoSerial.print(accelgyro.getYAccelOffset()); arduinoSerial.print("\t"); // -2359
syundo0730 2:42c4f3a7813f 65 arduinoSerial.print(accelgyro.getZAccelOffset()); arduinoSerial.print("\t"); // 1688
syundo0730 2:42c4f3a7813f 66 arduinoSerial.print(accelgyro.getXGyroOffset()); arduinoSerial.print("\t"); // 0
syundo0730 2:42c4f3a7813f 67 arduinoSerial.print(accelgyro.getYGyroOffset()); arduinoSerial.print("\t"); // 0
syundo0730 2:42c4f3a7813f 68 arduinoSerial.print(accelgyro.getZGyroOffset()); arduinoSerial.print("\t"); // 0
syundo0730 2:42c4f3a7813f 69 arduinoSerial.print("\n");
syundo0730 2:42c4f3a7813f 70 */
syundo0730 2:42c4f3a7813f 71 }
syundo0730 2:42c4f3a7813f 72
syundo0730 2:42c4f3a7813f 73 void loop() {
syundo0730 2:42c4f3a7813f 74 // read raw accel/gyro measurements from device
syundo0730 2:42c4f3a7813f 75 accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
syundo0730 2:42c4f3a7813f 76
syundo0730 2:42c4f3a7813f 77 // these methods (and a few others) are also available
syundo0730 2:42c4f3a7813f 78 //accelgyro.getAcceleration(&ax, &ay, &az);
syundo0730 2:42c4f3a7813f 79 //accelgyro.getRotation(&gx, &gy, &gz);
syundo0730 2:42c4f3a7813f 80
syundo0730 2:42c4f3a7813f 81 #ifdef OUTPUT_READABLE_ACCELGYRO
syundo0730 2:42c4f3a7813f 82 // display tab-separated accel/gyro x/y/z values
syundo0730 2:42c4f3a7813f 83 arduinoSerial.print("a/g:\t");
syundo0730 2:42c4f3a7813f 84 arduinoSerial.print(ax); arduinoSerial.print("\t");
syundo0730 2:42c4f3a7813f 85 arduinoSerial.print(ay); arduinoSerial.print("\t");
syundo0730 2:42c4f3a7813f 86 arduinoSerial.print(az); arduinoSerial.print("\t");
syundo0730 2:42c4f3a7813f 87 arduinoSerial.print(gx); arduinoSerial.print("\t");
syundo0730 2:42c4f3a7813f 88 arduinoSerial.print(gy); arduinoSerial.print("\t");
syundo0730 2:42c4f3a7813f 89 arduinoSerial.println(gz);
syundo0730 2:42c4f3a7813f 90 #endif
syundo0730 2:42c4f3a7813f 91
syundo0730 2:42c4f3a7813f 92 #ifdef OUTPUT_BINARY_ACCELGYRO
syundo0730 2:42c4f3a7813f 93 arduinoSerial.write((uint8_t)(ax >> 8)); arduinoSerial.write((uint8_t)(ax & 0xFF));
syundo0730 2:42c4f3a7813f 94 arduinoSerial.write((uint8_t)(ay >> 8)); arduinoSerial.write((uint8_t)(ay & 0xFF));
syundo0730 2:42c4f3a7813f 95 arduinoSerial.write((uint8_t)(az >> 8)); arduinoSerial.write((uint8_t)(az & 0xFF));
syundo0730 2:42c4f3a7813f 96 arduinoSerial.write((uint8_t)(gx >> 8)); arduinoSerial.write((uint8_t)(gx & 0xFF));
syundo0730 2:42c4f3a7813f 97 arduinoSerial.write((uint8_t)(gy >> 8)); arduinoSerial.write((uint8_t)(gy & 0xFF));
syundo0730 2:42c4f3a7813f 98 arduinoSerial.write((uint8_t)(gz >> 8)); arduinoSerial.write((uint8_t)(gz & 0xFF));
syundo0730 2:42c4f3a7813f 99 #endif
syundo0730 2:42c4f3a7813f 100
syundo0730 2:42c4f3a7813f 101 // blink LED to indicate activity
syundo0730 2:42c4f3a7813f 102 if( led1 == 0 ) led1 = 0;
syundo0730 2:42c4f3a7813f 103 else led1 = 1;
syundo0730 2:42c4f3a7813f 104 }
syundo0730 2:42c4f3a7813f 105
syundo0730 2:42c4f3a7813f 106 };