Tel: 137-2421-1742 E-mail: paul@rdbuy.cn
ICP備案證書號:粵ICP備12082730號-1
共執行 65 個查詢,用時 0.015622 秒,在線 299 人,Gzip 已啟用,占用內存 2.411 MB
Powered by ECShop v4.0.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;
}
}