Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // I2C device class (I2Cdev) demonstration Arduino sketch for MPU6050 class
- // 10/7/2011 by Jeff Rowberg <jeff@rowberg.net>
- // Updates should (hopefully) always be available at https://github.com/jrowberg/i2cdevlib
- //
- // I2Cdev and MPU6050 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 "MPU6050.h"
- // Arduino Wire library is required if I2Cdev I2CDEV_ARDUINO_WIRE implementation
- // is used in I2Cdev.h
- #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
- #include "Wire.h"
- #endif
- // 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
- MPU6050 accelgyro;
- //MPU6050 accelgyro(0x69); // <-- use for AD0 high
- int16_t ax, ay, az;
- int16_t gx, gy, gz;
- // uncomment "OUTPUT_READABLE_ACCELGYRO" if you want to see a tab-separated
- // list of the accel X/Y/Z and then gyro X/Y/Z values in decimal. Easy to read,
- // not so easy to parse, and slow(er) over UART.
- #define OUTPUT_READABLE_ACCELGYRO
- // uncomment "OUTPUT_BINARY_ACCELGYRO" to send all 6 axes of data as 16-bit
- // binary, one right after the other. This is very fast (as fast as possible
- // without compression or data loss), and easy to parse, but impossible to read
- // for a human.
- //#define OUTPUT_BINARY_ACCELGYRO
- #define LED_PIN 13
- bool blinkState = false;
- void setup() {
- // join I2C bus (I2Cdev library doesn't do this automatically)
- #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
- Wire.begin();
- #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE
- Fastwire::setup(400, true);
- #endif
- // 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...");
- accelgyro.initialize();
- accelgyro.setFullScaleAccelRange(3);
- // verify connection
- Serial.println("Testing device connections...");
- Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
- // use the code below to change accel/gyro offset values
- Serial.println("Updating internal sensor offsets...");
- // -76 -2359 1688 0 0 0
- Serial.print(accelgyro.getXAccelOffset()); Serial.print("\t"); // -76
- Serial.print(accelgyro.getYAccelOffset()); Serial.print("\t"); // -2359
- Serial.print(accelgyro.getZAccelOffset()); Serial.print("\t"); // 1688
- Serial.print(accelgyro.getXGyroOffset()); Serial.print("\t"); // 0
- Serial.print(accelgyro.getYGyroOffset()); Serial.print("\t"); // 0
- Serial.print(accelgyro.getZGyroOffset()); Serial.print("\t"); // 0
- Serial.print("\n");
- accelgyro.setXGyroOffset(110);
- accelgyro.setYGyroOffset(3);
- accelgyro.setZGyroOffset(-1);
- accelgyro.setZAccelOffset(1566);
- accelgyro.setXAccelOffset(-1011);
- accelgyro.setYAccelOffset(-4102);
- Serial.print(accelgyro.getXAccelOffset()); Serial.print("\t"); // -76
- Serial.print(accelgyro.getYAccelOffset()); Serial.print("\t"); // -2359
- Serial.print(accelgyro.getZAccelOffset()); Serial.print("\t"); // 1688
- Serial.print(accelgyro.getXGyroOffset()); Serial.print("\t"); // 0
- Serial.print(accelgyro.getYGyroOffset()); Serial.print("\t"); // 0
- Serial.print(accelgyro.getZGyroOffset()); Serial.print("\t"); // 0
- Serial.print("\n");
- // configure Arduino LED pin for output
- pinMode(LED_PIN, OUTPUT);
- }
- void loop() {
- // read raw accel/gyro measurements from device
- accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
- // these methods (and a few others) are also available
- //accelgyro.getAcceleration(&ax, &ay, &az);
- //accelgyro.getRotation(&gx, &gy, &gz);
- #ifdef OUTPUT_READABLE_ACCELGYRO
- // display tab-separated accel/gyro x/y/z values
- Serial.print("a/g:\t");
- Serial.print(ax); Serial.print("\t");
- Serial.print(ay); Serial.print("\t");
- Serial.print(az); Serial.print("\t");
- Serial.print(gx); Serial.print("\t");
- Serial.print(gy); Serial.print("\t");
- Serial.println(gz);
- #endif
- #ifdef OUTPUT_BINARY_ACCELGYRO
- Serial.write((uint8_t)(ax >> 8)); Serial.write((uint8_t)(ax & 0xFF));
- Serial.write((uint8_t)(ay >> 8)); Serial.write((uint8_t)(ay & 0xFF));
- Serial.write((uint8_t)(az >> 8)); Serial.write((uint8_t)(az & 0xFF));
- Serial.write((uint8_t)(gx >> 8)); Serial.write((uint8_t)(gx & 0xFF));
- Serial.write((uint8_t)(gy >> 8)); Serial.write((uint8_t)(gy & 0xFF));
- Serial.write((uint8_t)(gz >> 8)); Serial.write((uint8_t)(gz & 0xFF));
- #endif
- // blink LED to indicate activity
- blinkState = !blinkState;
- digitalWrite(LED_PIN, blinkState);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement