用的是DMP里面的函数获取磁场强度。
代码如下:
[mw_shl_code=c,true]
u8 MPU_Get_Magnet(short *hx,short *hy,short *hz)
{
short mag[3];
unsigned long timestamp;
mpu_set_bypass(1);
mpu_get_compass_reg(mag,×tamp);
*hx=mag[0];
*hy=mag[1];
*hz=mag[2];
mpu_set_bypass(0);
return 0;
}
[/mw_shl_code]
[mw_shl_code=c,true]
u8 MPU_Get_Magnet_Angle(float *Angle)
{
u8 res;
float AHx,AHy;
short ahx,ahy,ahz;
float pitch,roll,yaw;
res=MPU_Get_Magnet(&ahx,&ahy,&ahz);
if(res) return 1;
res=mpu_dmp_get_data(&pitch,&roll,&yaw);
if(res==0)
{
AHx=ahx*cos(roll)-ahy*sin(roll)*sin(pitch)-ahz*sin(roll)*cos(pitch);
AHy=ahy*cos(pitch)+ahz*sin(roll);
*Angle=atan2(AHx,AHy)*57.3+180;
}
return res;
}[/mw_shl_code]
稍微动一下数据变化好大哦。虽然我没有做平滑处理感觉也不会变化这么大吧。
模块还没转一圈,大概不到半圈,数据有时又回到刚开始的角度。
求大神指教。。。 |