© 2005-2024 传感器商城 研发商城 版权所有,并保留所有权利。
ICP备案证书号:粤ICP备12082730号-1
传感器导航
全部分类
此方法是通过勾股定理计算的,请参考以下程序:
// 加速的X轴用来算俯仰角;Y轴算横滚角
u16 Gx;
u16 Gy;
u16 Gz;
float Gxangle;
float Gyangle;
GVALUE ADXL345_GetValue(void)
{
来自:http://zhidao.baidu.com/question/447710682.html
Gx = (u16)ADXL345ReadData(0xA6,XL345_DATAX1);
Gx <<= 8;
Gx += (u16)ADXL345ReadData(0xA6,XL345_DATAX0);
Gy = (u16)ADXL345ReadData(0xA6,XL345_DATAY1);
Gy <<= 8;
Gy += (u16)ADXL345ReadData(0xA6,XL345_DATAY0);
Gz = (u16)ADXL345ReadData(0xA6,XL345_DATAZ1);
Gz <<= 8;
Gz += (u16)ADXL345ReadData(0xA6,XL345_DATAZ0);
if(Gx > 0x01FF)
{
Gx = -Gx;
Gx |= 0x8000; //得到补码 去掉14 13 12位保留最后一个符号位
}
if(Gy > 0x01FF)
{
Gy = -Gy;
Gy |= 0x8000; //得到补码 去掉14 13 12位保留最后一个符号位
}
if(Gz > 0x01FF)
{
Gz = -Gz;
Gz |= 0x8000; //得到补码 去掉14 13 12位保留最后一个符号位
}
if(!(Gz & 0x8000)) //正 Gz最高位置为0
{
if(Gx & 0x8000) //负 Gx最高位置为1
{
Gx &= 0x7FFF ; //*0111 1111 1111 1111 最高的符号位变0
if(Gz == 0)
Gxangle = 90;
else
Gxangle = atan((double)Gx / (double)Gz) * 57.296;//arctan(x/z)*180/pi
Gx |= 0x8000; //恢复最高位
}
if(!(Gx & 0x8000)) //正 Gx最高位置为0
{
if(Gz == 0)
Gxangle = -90;
else
Gxangle = -atan((double) Gx / (double)Gz) * 57.296;//arctan(x/z)*180/pi
}
if(Gy & 0x8000)
{
Gy &= 0x7FFF ;
if(Gz == 0)
Gyangle = -90;
else
Gyangle = -atan((double)Gy / (double)Gz) * 57.296;//arctan(y/z)*180/pi
Gy |= 0x8000;
}
if(!(Gy & 0x8000))
{
if(Gz == 0)
Gyangle = 90;
else
Gyangle = atan((double)Gy / (double)Gz) * 57.296;//arctan(y/z)*180/pi
}
}
else //负 Gz最高位置为1
{
Gz &= 0x7FFF ; //0111 1111 1111 1111
if(Gx & 0x8000)
{
Gx &= 0x7FFF ;
Gxangle = 180 - atan((double)Gx / (double)Gz) * 57.296;
Gx |= 0x8000;
}
if(!(Gx & 0x8000))
{
Gxangle = -(180 - atan((double) Gx / (double)Gz) * 57.296);
}
if(Gy & 0x8000)
{
Gy &= 0x7FFF ;
Gyangle = 180 - atan((double)Gy / (double)Gz) * 57.296;
Gy |= 0x8000;
}
if(!(Gy & 0x8000))
{
Gyangle = -(180 - atan((double)Gy / (double)Gz) * 57.296);
}
Gz |= 0x8000;
}
}
用户评论(共0条评论)
挑选商品 > 确认购买 > 网上支付/货到付款 > 验货满意 > 点评商品