Skip to main content
#include "Wire.h" #include "I2Cdev.h" #include "MPU9150.h" #include "helper_3dmath.h" // class default I2C address is 0x68 // specific I2C addresses may be passed as a parameter here // AD0 low = 0x68 (default for InvenSense evaluation board) // AD0 high = 0x69 MPU9150 accelGyroMag; #define LED_PIN 13 volatile boolean state_fifo_int = false; uint16_t fifo_count; uint8_t fifo_buffer[8]; int16_t acc_temp[3]; int16_t gyro_x; void setup(){ // join I2C bus (I2Cdev library doesn't do this automatically) Wire.begin(); // initialize serial communication // (38400 chosen because it works as well at 8MHz as it does at 16MHz, but // it's really up to you depending on your project) Serial.begin(115200); // initialize device Serial.println("Initializing I2C devices..."); accelGyroMag.initialize(); // verify connection Serial.println("Testing device connections..."); Serial.println(accelGyroMag.testConnection() ? "MPU9150 connection successful" : "MPU9150 connection failed"); // configure Arduino LED for pinMode(LED_PIN, OUTPUT); attachInterrupt(0,fifo_int,CHANGE); } void fifo_int() { state_fifo_int = true; } void loop(){ while(!state_fifo_int) { accelGyroMag.setIntFIFOBufferOverflowEnabled(true); // enable fifo_interrupt accelGyroMag.setFIFOEnabled(true); accelGyroMag.setAccelFIFOEnabled(true); accelGyroMag.getXGyroFIFOEnabled(); accelGyroMag.getAccelFIFOEnabled(); fifo_count = accelGyroMag.getFIFOCount(); accelGyroMag.getFIFOBytes(fifo_buffer,8); // fill in fifo bytes acc_temp[0] = (((int16_t)fifo_buffer[0]) << 8) | fifo_buffer[1]; acc_temp[1] = (((int16_t)fifo_buffer[2]) << 8) | fifo_buffer[3]; acc_temp[2] = (((int16_t)fifo_buffer[4]) << 8) | fifo_buffer[5]; gyro_x = (((int16_t)fifo_buffer[6]) << 8) | fifo_buffer[7]; Serial.print((float)acc_temp[0]/16384); Serial.print(" "); Serial.print((float)acc_temp[1]/16384); Serial.print(" "); Serial.print((float)acc_temp[2]/16384); Serial.print(" "); Serial.println(gyro_x); } accelGyroMag.setIntFIFOBufferOverflowEnabled(false); // disable fifo_interrupt accelGyroMag.resetFIFO(); state_fifo_int = false; } 
#include "Wire.h" #include "I2Cdev.h" #include "MPU9150.h" #include "helper_3dmath.h" // class default I2C address is 0x68 // specific I2C addresses may be passed as a parameter here // AD0 low = 0x68 (default for InvenSense evaluation board) // AD0 high = 0x69 MPU9150 accelGyroMag; #define LED_PIN 13 volatile boolean state_fifo_int = false; uint16_t fifo_count; uint8_t fifo_buffer[8]; int16_t acc_temp[3]; int16_t gyro_x; void setup(){ // join I2C bus (I2Cdev library doesn't do this automatically) Wire.begin(); // initialize serial communication // (38400 chosen because it works as well at 8MHz as it does at 16MHz, but // it's really up to you depending on your project) Serial.begin(115200); // initialize device Serial.println("Initializing I2C devices..."); accelGyroMag.initialize(); // verify connection Serial.println("Testing device connections..."); Serial.println(accelGyroMag.testConnection() ? "MPU9150 connection successful" : "MPU9150 connection failed"); // configure Arduino LED for pinMode(LED_PIN, OUTPUT); attachInterrupt(0,fifo_int,CHANGE); } void fifo_int() { state_fifo_int = true; } void loop(){ while(!state_fifo_int) { accelGyroMag.setIntFIFOBufferOverflowEnabled(true); // enable fifo_interrupt accelGyroMag.setFIFOEnabled(true); accelGyroMag.setAccelFIFOEnabled(true); accelGyroMag.getXGyroFIFOEnabled(); accelGyroMag.getAccelFIFOEnabled(); fifo_count = accelGyroMag.getFIFOCount(); accelGyroMag.getFIFOBytes(fifo_buffer,8); // fill in fifo bytes acc_temp[0] = (((int16_t)fifo_buffer[0]) << 8) | fifo_buffer[1]; acc_temp[1] = (((int16_t)fifo_buffer[2]) << 8) | fifo_buffer[3]; acc_temp[2] = (((int16_t)fifo_buffer[4]) << 8) | fifo_buffer[5]; gyro_x = (((int16_t)fifo_buffer[6]) << 8) | fifo_buffer[7]; Serial.print((float)acc_temp[0]/16384); Serial.print(" "); Serial.print((float)acc_temp[1]/16384); Serial.print(" "); Serial.print((float)acc_temp[2]/16384); Serial.print(" "); Serial.println(gyro_x); } accelGyroMag.setIntFIFOBufferOverflowEnabled(false); // disable fifo_interrupt accelGyroMag.resetFIFO(); state_fifo_int = false; } 
#include "Wire.h" #include "I2Cdev.h" #include "MPU9150.h" #include "helper_3dmath.h" // class default I2C address is 0x68 // specific I2C addresses may be passed as a parameter here // AD0 low = 0x68 (default for InvenSense evaluation board) // AD0 high = 0x69 MPU9150 accelGyroMag; #define LED_PIN 13 volatile boolean state_fifo_int = false; uint16_t fifo_count; uint8_t fifo_buffer[8]; int16_t acc_temp[3]; int16_t gyro_x; void setup(){ // join I2C bus (I2Cdev library doesn't do this automatically) Wire.begin(); // initialize serial communication // (38400 chosen because it works as well at 8MHz as it does at 16MHz, but // it's really up to you depending on your project) Serial.begin(115200); // initialize device Serial.println("Initializing I2C devices..."); accelGyroMag.initialize(); // verify connection Serial.println("Testing device connections..."); Serial.println(accelGyroMag.testConnection() ? "MPU9150 connection successful" : "MPU9150 connection failed"); // configure Arduino LED for pinMode(LED_PIN, OUTPUT); attachInterrupt(0,fifo_int,CHANGE); } void fifo_int() { state_fifo_int = true; } void loop(){ while(!state_fifo_int) { accelGyroMag.setIntFIFOBufferOverflowEnabled(true); // enable fifo_interrupt accelGyroMag.setFIFOEnabled(true); accelGyroMag.setAccelFIFOEnabled(true); accelGyroMag.getXGyroFIFOEnabled(); accelGyroMag.getAccelFIFOEnabled(); fifo_count = accelGyroMag.getFIFOCount(); accelGyroMag.getFIFOBytes(fifo_buffer,8); // fill in fifo bytes acc_temp[0] = (((int16_t)fifo_buffer[0]) << 8) | fifo_buffer[1]; acc_temp[1] = (((int16_t)fifo_buffer[2]) << 8) | fifo_buffer[3]; acc_temp[2] = (((int16_t)fifo_buffer[4]) << 8) | fifo_buffer[5]; gyro_x = (((int16_t)fifo_buffer[6]) << 8) | fifo_buffer[7]; Serial.print((float)acc_temp[0]/16384); Serial.print(" "); Serial.print((float)acc_temp[1]/16384); Serial.print(" "); Serial.print((float)acc_temp[2]/16384); Serial.print(" "); Serial.println(gyro_x); } accelGyroMag.setIntFIFOBufferOverflowEnabled(false); // disable fifo_interrupt accelGyroMag.resetFIFO(); state_fifo_int = false; } 
#include "Wire.h" #include "I2Cdev.h" #include "MPU9150.h" #include "helper_3dmath.h" // class default I2C address is 0x68 // specific I2C addresses may be passed as a parameter here // AD0 low = 0x68 (default for InvenSense evaluation board) // AD0 high = 0x69 MPU9150 accelGyroMag; #define LED_PIN 13 volatile boolean state_fifo_int = false; uint16_t fifo_count; uint8_t fifo_buffer[8]; int16_t acc_temp[3]; int16_t gyro_x; void setup(){ // join I2C bus (I2Cdev library doesn't do this automatically) Wire.begin(); // initialize serial communication // (38400 chosen because it works as well at 8MHz as it does at 16MHz, but // it's really up to you depending on your project) Serial.begin(115200); // initialize device Serial.println("Initializing I2C devices..."); accelGyroMag.initialize(); // verify connection Serial.println("Testing device connections..."); Serial.println(accelGyroMag.testConnection() ? "MPU9150 connection successful" : "MPU9150 connection failed"); // configure Arduino LED for pinMode(LED_PIN, OUTPUT); attachInterrupt(0,fifo_int,CHANGE); } void fifo_int() { state_fifo_int = true; } void loop(){ while(!state_fifo_int) { accelGyroMag.setIntFIFOBufferOverflowEnabled(true); // enable fifo_interrupt accelGyroMag.setFIFOEnabled(true); accelGyroMag.setAccelFIFOEnabled(true); accelGyroMag.getXGyroFIFOEnabled(); accelGyroMag.getAccelFIFOEnabled(); fifo_count = accelGyroMag.getFIFOCount(); accelGyroMag.getFIFOBytes(fifo_buffer,8); // fill in fifo bytes acc_temp[0] = (((int16_t)fifo_buffer[0]) << 8) | fifo_buffer[1]; acc_temp[1] = (((int16_t)fifo_buffer[2]) << 8) | fifo_buffer[3]; acc_temp[2] = (((int16_t)fifo_buffer[4]) << 8) | fifo_buffer[5]; gyro_x = (((int16_t)fifo_buffer[6]) << 8) | fifo_buffer[7]; Serial.print((float)acc_temp[0]/16384); Serial.print(" "); Serial.print((float)acc_temp[1]/16384); Serial.print(" "); Serial.print((float)acc_temp[2]/16384); Serial.print(" "); Serial.println(gyro_x); } accelGyroMag.setIntFIFOBufferOverflowEnabled(false); // disable fifo_interrupt accelGyroMag.resetFIFO(); state_fifo_int = false; } 
spelling, code formatting, removed MIT license text, thak you very much
Source Link

MPU9150 (JEFF LIB) + FIFOOVERFLOWFIFO_OVERFLOW INTERRUPT + SERIAL PRINT

I am trying to logglog accelerometer and gyro data using Serial.print. I have enabled the FIFO_Overflow interrupt. Whenever I loggI log data, the serial port freezes. I am suspecting an interrupt issue while I am using Serial.print. Is there any way to get continouscontinuous data for debugging purposes  ? I know that the Serial library can affect interrupts and wonder ifwhether you guys could help me a little bit ?

// I2C device class (I2Cdev) demonstration Arduino sketch for MPU9150 // 1/4/2013 original by Jeff Rowberg <[email protected]> at https://github.com/jrowberg/i2cdevlib // modified by Aaron Weiss <[email protected]> // // Changelog: // 2011-10-07 - initial release // 2013-1-4 - added raw magnetometer output /* ============================================ I2Cdev device library code is placed under the MIT license Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. =============================================== */ // Arduino Wire library is required if I2Cdev I2CDEV_ARDUINO_WIRE implementation // is used in I2Cdev.h #include "Wire.h" // I2Cdev and MPU9150 must be installed as libraries, or else the .cpp/.h files // for both classes must be in the include path of your project #include "I2Cdev.h" #include "MPU9150.h" #include "helper_3dmath.h"   // class default I2C address is 0x68 // specific I2C addresses may be passed as a parameter here // AD0 low = 0x68 (default for InvenSense evaluation board) // AD0 high = 0x69 MPU9150 accelGyroMag;    #define LED_PIN 13 volatile boolean state_fifo_int = false; uint16_t fifo_count; uint8_t fifo_buffer[8]; int16_t acc_temp[3]; int16_t gyro_x; void setup(){ // join I2C bus (I2Cdev library doesn't do this automatically) Wire.begin();    // initialize serial communication // (38400 chosen because it works as well at 8MHz as it does at 16MHz, but // it's really up to you depending on your project) Serial.begin(115200); // initialize device Serial.println("Initializing I2C devices..."); accelGyroMag.initialize();  // verify connection Serial.println("Testing device connections..."); Serial.println(accelGyroMag.testConnection() ? "MPU9150 connection successful" : "MPU9150 connection failed");   // configure Arduino LED for pinMode(LED_PIN, OUTPUT); attachInterrupt(0,fifo_int,CHANGE);   } void fifo_int(){  { state_fifo_int = true; } void loop(){   while(!state_fifo_int) { accelGyroMag.setIntFIFOBufferOverflowEnabled(true);  // enable fifo_interrupt accelGyroMag.setFIFOEnabled(true); accelGyroMag.setAccelFIFOEnabled(true); accelGyroMag.getXGyroFIFOEnabled(); accelGyroMag.getAccelFIFOEnabled(); fifo_count = accelGyroMag.getFIFOCount(); accelGyroMag.getFIFOBytes(fifo_buffer,8); // fill in fifo bytes acc_temp[0] = (((int16_t)fifo_buffer[0]) << 8) | fifo_buffer[1]; acc_temp[1] = (((int16_t)fifo_buffer[2]) << 8) | fifo_buffer[3]; acc_temp[2] = (((int16_t)fifo_buffer[4]) << 8) | fifo_buffer[5]; gyro_x = (((int16_t)fifo_buffer[6]) << 8) | fifo_buffer[7];  Serial.print((float)acc_temp[0]/16384); Serial.print(" "); Serial.print((float)acc_temp[1]/16384); Serial.print(" "); Serial.print((float)acc_temp[2]/16384); Serial.print(" "); Serial.println(gyro_x);    }   accelGyroMag.setIntFIFOBufferOverflowEnabled(false);  // disable fifo_interrupt   accelGyroMag.resetFIFO();   state_fifo_int = false; } 

The library for the MPU9150 is Jeffby Jeff Rowberg.

MPU9150 (JEFF LIB) + FIFOOVERFLOW INTERRUPT + SERIAL PRINT

I am trying to logg accelerometer and gyro data using Serial.print. I have enabled FIFO_Overflow interrupt. Whenever I logg data, the serial port freezes. I am suspecting an interrupt issue while I am using Serial.print. Is there any way to get continous data for debugging purposes  ? I know that the Serial library can affect interrupts and wonder if you guys could help me a little bit ?

// I2C device class (I2Cdev) demonstration Arduino sketch for MPU9150 // 1/4/2013 original by Jeff Rowberg <[email protected]> at https://github.com/jrowberg/i2cdevlib // modified by Aaron Weiss <[email protected]> // // Changelog: // 2011-10-07 - initial release // 2013-1-4 - added raw magnetometer output /* ============================================ I2Cdev device library code is placed under the MIT license Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. =============================================== */ // Arduino Wire library is required if I2Cdev I2CDEV_ARDUINO_WIRE implementation // is used in I2Cdev.h #include "Wire.h" // I2Cdev and MPU9150 must be installed as libraries, or else the .cpp/.h files // for both classes must be in the include path of your project #include "I2Cdev.h" #include "MPU9150.h" #include "helper_3dmath.h"   // class default I2C address is 0x68 // specific I2C addresses may be passed as a parameter here // AD0 low = 0x68 (default for InvenSense evaluation board) // AD0 high = 0x69 MPU9150 accelGyroMag;   #define LED_PIN 13 volatile boolean state_fifo_int = false; uint16_t fifo_count; uint8_t fifo_buffer[8]; int16_t acc_temp[3]; int16_t gyro_x; void setup(){ // join I2C bus (I2Cdev library doesn't do this automatically) Wire.begin();   // initialize serial communication // (38400 chosen because it works as well at 8MHz as it does at 16MHz, but // it's really up to you depending on your project) Serial.begin(115200); // initialize device Serial.println("Initializing I2C devices..."); accelGyroMag.initialize();  // verify connection Serial.println("Testing device connections..."); Serial.println(accelGyroMag.testConnection() ? "MPU9150 connection successful" : "MPU9150 connection failed");   // configure Arduino LED for pinMode(LED_PIN, OUTPUT); attachInterrupt(0,fifo_int,CHANGE);   } void fifo_int(){  state_fifo_int = true; } void loop(){   while(!state_fifo_int){ accelGyroMag.setIntFIFOBufferOverflowEnabled(true); // enable fifo_interrupt accelGyroMag.setFIFOEnabled(true); accelGyroMag.setAccelFIFOEnabled(true); accelGyroMag.getXGyroFIFOEnabled(); accelGyroMag.getAccelFIFOEnabled(); fifo_count = accelGyroMag.getFIFOCount(); accelGyroMag.getFIFOBytes(fifo_buffer,8); // fill in fifo bytes acc_temp[0] = (((int16_t)fifo_buffer[0]) << 8) | fifo_buffer[1]; acc_temp[1] = (((int16_t)fifo_buffer[2]) << 8) | fifo_buffer[3]; acc_temp[2] = (((int16_t)fifo_buffer[4]) << 8) | fifo_buffer[5]; gyro_x = (((int16_t)fifo_buffer[6]) << 8) | fifo_buffer[7];  Serial.print((float)acc_temp[0]/16384); Serial.print(" "); Serial.print((float)acc_temp[1]/16384); Serial.print(" "); Serial.print((float)acc_temp[2]/16384); Serial.print(" "); Serial.println(gyro_x);    }   accelGyroMag.setIntFIFOBufferOverflowEnabled(false); // disable fifo_interrupt   accelGyroMag.resetFIFO();   state_fifo_int = false; } 

The library for the MPU9150 is Jeff Rowberg.

MPU9150 (JEFF LIB) + FIFO_OVERFLOW INTERRUPT + SERIAL PRINT

I am trying to log accelerometer and gyro data using Serial.print. I have enabled the FIFO_Overflow interrupt. Whenever I log data, the serial port freezes. I am suspecting an interrupt issue while I am using Serial.print. Is there any way to get continuous data for debugging purposes? I know that the Serial library can affect interrupts and wonder whether you guys could help me a little bit ?

#include "Wire.h" #include "I2Cdev.h" #include "MPU9150.h" #include "helper_3dmath.h" // class default I2C address is 0x68 // specific I2C addresses may be passed as a parameter here // AD0 low = 0x68 (default for InvenSense evaluation board) // AD0 high = 0x69 MPU9150 accelGyroMag;  #define LED_PIN 13 volatile boolean state_fifo_int = false; uint16_t fifo_count; uint8_t fifo_buffer[8]; int16_t acc_temp[3]; int16_t gyro_x; void setup(){ // join I2C bus (I2Cdev library doesn't do this automatically) Wire.begin();  // initialize serial communication // (38400 chosen because it works as well at 8MHz as it does at 16MHz, but // it's really up to you depending on your project) Serial.begin(115200); // initialize device Serial.println("Initializing I2C devices..."); accelGyroMag.initialize(); // verify connection Serial.println("Testing device connections..."); Serial.println(accelGyroMag.testConnection() ? "MPU9150 connection successful" : "MPU9150 connection failed"); // configure Arduino LED for pinMode(LED_PIN, OUTPUT); attachInterrupt(0,fifo_int,CHANGE); } void fifo_int() { state_fifo_int = true; } void loop(){ while(!state_fifo_int) { accelGyroMag.setIntFIFOBufferOverflowEnabled(true);  // enable fifo_interrupt accelGyroMag.setFIFOEnabled(true); accelGyroMag.setAccelFIFOEnabled(true); accelGyroMag.getXGyroFIFOEnabled(); accelGyroMag.getAccelFIFOEnabled(); fifo_count = accelGyroMag.getFIFOCount(); accelGyroMag.getFIFOBytes(fifo_buffer,8); // fill in fifo bytes acc_temp[0] = (((int16_t)fifo_buffer[0]) << 8) | fifo_buffer[1]; acc_temp[1] = (((int16_t)fifo_buffer[2]) << 8) | fifo_buffer[3]; acc_temp[2] = (((int16_t)fifo_buffer[4]) << 8) | fifo_buffer[5]; gyro_x = (((int16_t)fifo_buffer[6]) << 8) | fifo_buffer[7]; Serial.print((float)acc_temp[0]/16384); Serial.print(" "); Serial.print((float)acc_temp[1]/16384); Serial.print(" "); Serial.print((float)acc_temp[2]/16384); Serial.print(" "); Serial.println(gyro_x); } accelGyroMag.setIntFIFOBufferOverflowEnabled(false);  // disable fifo_interrupt accelGyroMag.resetFIFO(); state_fifo_int = false; } 

The library for the MPU9150 is by Jeff Rowberg.

Source Link

MPU9150 (JEFF LIB) + FIFOOVERFLOW INTERRUPT + SERIAL PRINT

Overflow enthusiasts!

I am trying to logg accelerometer and gyro data using Serial.print. I have enabled FIFO_Overflow interrupt. Whenever I logg data, the serial port freezes. I am suspecting an interrupt issue while I am using Serial.print. Is there any way to get continous data for debugging purposes ? I know that the Serial library can affect interrupts and wonder if you guys could help me a little bit ?

// I2C device class (I2Cdev) demonstration Arduino sketch for MPU9150 // 1/4/2013 original by Jeff Rowberg <[email protected]> at https://github.com/jrowberg/i2cdevlib // modified by Aaron Weiss <[email protected]> // // Changelog: // 2011-10-07 - initial release // 2013-1-4 - added raw magnetometer output /* ============================================ I2Cdev device library code is placed under the MIT license Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. =============================================== */ // Arduino Wire library is required if I2Cdev I2CDEV_ARDUINO_WIRE implementation // is used in I2Cdev.h #include "Wire.h" // I2Cdev and MPU9150 must be installed as libraries, or else the .cpp/.h files // for both classes must be in the include path of your project #include "I2Cdev.h" #include "MPU9150.h" #include "helper_3dmath.h" // class default I2C address is 0x68 // specific I2C addresses may be passed as a parameter here // AD0 low = 0x68 (default for InvenSense evaluation board) // AD0 high = 0x69 MPU9150 accelGyroMag; #define LED_PIN 13 volatile boolean state_fifo_int = false; uint16_t fifo_count; uint8_t fifo_buffer[8]; int16_t acc_temp[3]; int16_t gyro_x; void setup(){ // join I2C bus (I2Cdev library doesn't do this automatically) Wire.begin(); // initialize serial communication // (38400 chosen because it works as well at 8MHz as it does at 16MHz, but // it's really up to you depending on your project) Serial.begin(115200); // initialize device Serial.println("Initializing I2C devices..."); accelGyroMag.initialize(); // verify connection Serial.println("Testing device connections..."); Serial.println(accelGyroMag.testConnection() ? "MPU9150 connection successful" : "MPU9150 connection failed"); // configure Arduino LED for pinMode(LED_PIN, OUTPUT); attachInterrupt(0,fifo_int,CHANGE); } void fifo_int(){ state_fifo_int = true; } void loop(){ while(!state_fifo_int){ accelGyroMag.setIntFIFOBufferOverflowEnabled(true); // enable fifo_interrupt accelGyroMag.setFIFOEnabled(true); accelGyroMag.setAccelFIFOEnabled(true); accelGyroMag.getXGyroFIFOEnabled(); accelGyroMag.getAccelFIFOEnabled(); fifo_count = accelGyroMag.getFIFOCount(); accelGyroMag.getFIFOBytes(fifo_buffer,8); // fill in fifo bytes acc_temp[0] = (((int16_t)fifo_buffer[0]) << 8) | fifo_buffer[1]; acc_temp[1] = (((int16_t)fifo_buffer[2]) << 8) | fifo_buffer[3]; acc_temp[2] = (((int16_t)fifo_buffer[4]) << 8) | fifo_buffer[5]; gyro_x = (((int16_t)fifo_buffer[6]) << 8) | fifo_buffer[7]; Serial.print((float)acc_temp[0]/16384); Serial.print(" "); Serial.print((float)acc_temp[1]/16384); Serial.print(" "); Serial.print((float)acc_temp[2]/16384); Serial.print(" "); Serial.println(gyro_x); } accelGyroMag.setIntFIFOBufferOverflowEnabled(false); // disable fifo_interrupt accelGyroMag.resetFIFO(); state_fifo_int = false; } 

The library for the MPU9150 is Jeff Rowberg.