|
本帖最后由 济南电子爱好者 于 2012-3-28 16:30 编辑
我是新手,给像我这样的新手提供一些有用的信息。
下面是 HMC5883L数据转化方法,我目前是在51单片机上测试的。
详细的可以结合手册说明 ,这个芯片手册还是很容易找到的。
void conversion(uint temp_data)
{
wan=temp_data/10000+0x30 ;
temp_data=temp_data%10000; //取余运算
qian=temp_data/1000+0x30 ;
temp_data=temp_data%1000; //取余运算
bai=temp_data/100+0x30 ;
temp_data=temp_data%100; //取余运算
shi=temp_data/10+0x30 ;
temp_data=temp_data%10; //取余运算
ge=temp_data+0x30;
}
void main()
{
unsigned int i;
int x,y,z;
double angle;
delay(500);
InitLcd();
Init_HMC5883();
while(1) //循环
{
Multiple_Read_HMC5883(); //连续读出数据,存储在BUF中
x=BUF[0] << 8 | BUF[1]; //Combine MSB and LSB of X Data output register
z=BUF[2] << 8 | BUF[3]; //Combine MSB and LSB of Z Data output register
y=BUF[4] << 8 | BUF[5]; //Combine MSB and LSB of Y Data output register
angle= atan2((double)y,(double)x) * (180 / 3.14159265) + 180; // angle in degrees
//atan2 返回给定的 X 及 Y 坐标值的反正切值
angle*=10;
conversion(angle); //计算数据和显示
DisplayOneChar(2,0,'A');
DisplayOneChar(3,0,':');
DisplayOneChar(4,0,qian);
DisplayOneChar(5,0,bai);
DisplayOneChar(6,0,shi);
DisplayOneChar(7,0,'.');
DisplayOneChar(8,0,ge);
for (i=0;i<10000;i++); //延时
}
}
补充内容 (2012-3-28 23:31):
谢谢一楼的提醒,我这给加上
X=x*cos(pitch)+z*sin(pich) ;Y=x*sin(roll)*shin(pitch)+y*cos(roll)// 其中 pitch 和 roll 是加速度得到角度。
补充内容 (2012-3-28 23:32):
Y=x*sin(roll)*shin(pitch)+y*cos(roll)-z*sin(roll)*cos(pitch)// 其中 pitch 和 roll 是加速度得到角度。 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|