OpenEdv-开源电子网

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

MPU6050初始化返回值问题

[复制链接]

25

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2014-11-25
在线时间
0 小时
发表于 2015-5-12 03:08:33 | 显示全部楼层 |阅读模式
5金钱
//得到dmp处理后的数据(注意,本函数需要比较多堆栈,局部变量有点多)
//pitch:俯仰角 精度:0.1°   范围:-90.0° <---> +90.0°
//roll:横滚角  精度:0.1°   范围:-180.0°<---> +180.0°
//yaw:航向角   精度:0.1°   范围:-180.0°<---> +180.0°
//返回值:0,正常
//    其他,失败
u8 mpu_dmp_get_data(float *pitch,float *roll,float *yaw)
{
float q0=1.0f,q1=0.0f,q2=0.0f,q3=0.0f;
unsigned long sensor_timestamp;
short gyro[3], accel[3], sensors;
unsigned char more;
long quat[4]; 
if(dmp_read_fifo(gyro, accel, quat, &sensor_timestamp, &sensors,&more))return 1;  
/* Gyro and accel data are written to the FIFO by the DMP in chip frame and hardware units.
* This behavior is convenient because it keeps the gyro and accel outputs of dmp_read_fifo and mpu_read_fifo consistent.
**/
/*if (sensors & INV_XYZ_GYRO )
send_packet(PACKET_TYPE_GYRO, gyro);
if (sensors & INV_XYZ_ACCEL)
send_packet(PACKET_TYPE_ACCEL, accel); */
/* Unlike gyro and accel, quaternions are written to the FIFO in the body frame, q30.
* The orientation is set by the scalar passed to dmp_set_orientation during initialization. 
**/
if(sensors&INV_WXYZ_QUAT) 
{
q0 = quat[0] / q30; //q30格式转换为浮点数
q1 = quat[1] / q30;
q2 = quat[2] / q30;
q3 = quat[3] / q30; 
//计算得到俯仰角/横滚角/航向角
*pitch = asin(-2 * q1 * q3 + 2 * q0* q2)* 57.3; // pitch
*roll  = atan2(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2* q2 + 1)* 57.3; // roll
*yaw   = atan2(2*(q1*q2 + q0*q3),q0*q0+q1*q1-q2*q2-q3*q3) * 57.3; //yaw
}else return 2;
return 0;
}

此处返回值为1  这是怎么回事?

最佳答案

查看完整内容[请看2#楼]

回复【2楼】那远远的云端: --------------------------------- 这是  return的用法,举个例子:Functioncs(n)                              {                   &nb ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
105
金钱
105
注册时间
2013-10-19
在线时间
1 小时
发表于 2015-5-12 03:08:34 | 显示全部楼层
回复【2楼】那远远的云端:
---------------------------------
这是  return的用法,举个例子:Functioncs(n) 
                            {
                                if(n==1)
                              {
                                   retrun1;
                               }
                                if(n==2)
                              {
                                   return2;
                                }
                                 else{}
                                  }
类似于你的程序,这里一旦有符合的条件,return  就会返回这个函数的值,然后跳出这个函数,不再往下执行。
回复

使用道具 举报

25

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2014-11-25
在线时间
0 小时
 楼主| 发表于 2015-5-12 03:43:49 | 显示全部楼层
初始化可以成功 屏蔽掉 这个判断可以读取温度值 但是不可以读取XYZ三个角度值
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-22 14:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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