哈哈哈
#include <Adafruit_SSD1306.h>
#include "MPU6050.h" //头文件
#include "I2Cdev.h"
//OLED相关
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET); //OLED引脚设置
#define N_ 5
unsigned char i=0;
int16_t ax, ay, az; //初始化变量
int16_t gx, gy, gz;
int32_t iax=0,iay=0,iaz=0;
int32_t igx=0,igy=0,igz=0;
int16_t cdata=0;
MPU6050 mpu; //创建结构体名mpu
void setup() {
Wire.begin(); //加入 I2C 总线序列
Serial.begin(9600); //开启串口,设置波特率
delay(1000);
mpu.initialize(); //库初始化
mpu_init2(); //获取偏移量修正
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //初始化OLED IIC总线
display.clearDisplay(); // 清屏
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
}
void loop() {
mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
counter_data(); //数据计算
test();
delay(300);
}
void test(void)
{
display.clearDisplay(); // 清屏
display.setCursor(30, 0);
display.print("MPU6050 Test");
display.setCursor(30, 20);
display.print("X:");
display.println(ax);
display.setCursor(30, 30);
display.print("Y:");
display.println(ay);
display.setCursor(30, 40);
display.print("Z:");
display.println(az);
display.display();
}
void mpu_init2(){
unsigned char i=0,j=0;
for(i=0;i<N_;i++){
mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
iax=iax+ax;iay=iay+ay;iaz=iaz+az;
igx=igx+gx;igy=igy+gy;igz=igz+gz;
}
iax=iax/N_;iay=iay/N_;iaz=iaz/N_;
igx=igx/N_;igy=igy/N_;igz=igz/N_;
}
void counter_data(){ //将获取到的数据进行处理和计算
ax=ax-iax;ay=ay-iay;az=az-iaz; //计算偏移值
gx=gx-igx;gy=gy-igy;gz=gz-igz;
ax=ax/180;ay=ay/180;az=az/180;
Serial.print("mov_X=");Serial.print(ax);Serial.print("°");Serial.print("\t");
Serial.print("mov_Y=");Serial.print(ay);Serial.print("°");Serial.print("\t");
Serial.print("mov_Z=");Serial.print(az);Serial.print("°");Serial.print("\n");
}