1、工程创建
创建和添加I2C、MPU6050的.CPP、.h文件。
(1)功能和测试
(2)主程序代码
#include "MsTimer2.h"
#include "KalmanFilter.h"
#include "I2Cdev.h"
#include "MPU6050.h"
//#include "MPU6050_6Axis_MotionApps20.h"
MPU6050 mpu; //实例化一个 MPU6050 对象,对象名称为 mpu
int16_t x_Angle,y_Angle,z_Angle;
//前3位分别是x,y,z的加速度,而后3位是x,y,z的角速度
int16_t ax, ay, az;
int16_t gx, gy, gz;
#define LED_PIN 13
bool blinkState = false;
void setup()
{
Serial.begin(115200); //开启串口,设置波特率为 115200
Wire.begin(); //加入 I2C 总线序列
delay(1500);
Serial.println("Initializing I2C devices...");
mpu.initialize(); //初始化MPU6050
delay(2);
Serial.println("Testing device connections...");
Serial.println(mpu.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
//5ms定时中断设置 使用timer2
//注意:使用timer2会对pin3 pin11的PWM输出有影响,因为PWM使用的是定时器控制占空比,
//所以在使用timer的时候要注意查看对应timer的pin口。
MsTimer2::set(100, Mpu6050_Read); //100ms任务周期
MsTimer2::start();
}
void loop()
{
//前3位分别是x,y,z的加速度,而后3位是x,y,z的角速度
mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
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);Serial.print("\t");
Serial.print("\r\n");
delay(2000);
/*
x_Angle=mpu.getRotationX();
y_Angle=mpu.getRotationY();
z_Angle=mpu.getRotationZ();
Serial.print(x_Angle); Serial.print("\t");
Serial.print(y_Angle); Serial.print("\t");
Serial.print(z_Angle); Serial.print("\t");
Serial.print("\r\n");Serial.print("\r\n");
*/
delay(1000);
}
void Mpu6050_Read()
{
//Serial.println("MsTimer2 Send");
}
2、工程下载链接
https://download.csdn.net/download/panjinliang066333/89801359