OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4306|回复: 1

三轴加速度实验函数求解??????

[复制链接]

10

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2013-8-19
在线时间
0 小时
发表于 2013-9-26 12:54:11 | 显示全部楼层 |阅读模式
//读取3个轴的数据
//x,y,z:读取到的数据
void ADXL345_RD_XYZ(short *x,short *y,short *z)
{
u8 buf[6];
u8 i;
IIC_Start();    
IIC_Send_Byte(ADXL_WRITE); //发送写器件指令  
IIC_Wait_Ack();   
    IIC_Send_Byte(0x32);   //发送寄存器地址(数据缓存的起始地址为0X32)
IIC_Wait_Ack();     
 
  IIC_Start();     //重新启动
IIC_Send_Byte(ADXL_READ); //发送读器件指令
IIC_Wait_Ack();
for(i=0;i<6;i++)
{
if(i==5)buf=IIC_Read_Byte(0);//读取一个字节,不继续再读,发送NACK  
else buf=IIC_Read_Byte(1); //读取一个字节,继续读,发送ACK 
  }           
    IIC_Stop(); //产生一个停止条件
*x=(short)(((u16)buf[1]<<8)+buf[0]);     
*y=(short)(((u16)buf[3]<<8)+buf[2]);     //这段代码要怎么理解啊?????
*z=(short)(((u16)buf[5]<<8)+buf[4]);   
}


//得到角度
//x,y,z:x,y,z方向的重力加速度分量(不需要单位,直接数值即可)
//dir:要获得的角度.0,与Z轴的角度;1,与X轴的角度;2,与Y轴的角度.
//返回值:角度值.单位0.1°.
short ADXL345_Get_Angle(float x,float y,float z,u8 dir)
{
float temp;
  float res=0;
switch(dir)
{
case 0://与自然Z轴的角度
  temp=sqrt((x*x+y*y))/z;
  res=atan(temp);
  break;
case 1://与自然X轴的角度
  temp=x/sqrt((y*y+z*z));
  res=atan(temp);
  break;
  case 2://与自然Y轴的角度
  temp=y/sqrt((x*x+z*z));
  res=atan(temp);
  break;
  }
return res*1800/3.14;//这里怎么是乘以1800,如果说是弧度转角度也应该是乘以180啊??这里的res不是已经是角度了吗,为什么还要转换啊????
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

51

主题

1455

帖子

3

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2613
金钱
2613
注册时间
2011-1-25
在线时间
176 小时
发表于 2013-9-26 13:14:06 | 显示全部楼层
1、两个8位寄存器合成一个short类型变量。
2、自己理解去。
一直努力就很好。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-13 05:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表