完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
是不是用这个能得到方向数据?
用void GetAxes(AxesRaw_TypeDef *pData)这个函数获取了磁力计三个方向上的数值之后怎么处理才能得到方向? 我现在用的一种处理方法并不能很好的得到方向,希望来个懂得教小弟一下 |
|
相关推荐
3个回答
|
|
上面用的函数的定义
void LIS3MDL::GetAxes(AxesRaw_TypeDef *pData) { uint8_t tempReg = 0x00; int16_t pDataRaw[3]; float sensitivity = 0; int ret; GetAxesRaw(pDataRaw); ret = dev_i2c.i2c_read(&tempReg, LIS3MDL_M_MEMS_ADDRESS, LIS3MDL_M_CTRL_REG2_M, 1); if (ret == 0) { tempReg &= LIS3MDL_M_FS_MASK; switch(tempReg) { case LIS3MDL_M_FS_4: sensitivity = 0.14; break; case LIS3MDL_M_FS_8: sensitivity = 0.29; break; case LIS3MDL_M_FS_12: sensitivity = 0.43; break; case LIS3MDL_M_FS_16: sensitivity = 0.58; break; } } pData->AXIS_X = (int32_t)(pDataRaw[0] * sensitivity); pData->AXIS_Y = (int32_t)(pDataRaw[1] * sensitivity); pData->AXIS_Z = (int32_t)(pDataRaw[2] * sensitivity); } |
|
|
|
上面调用的GetAxesRaw(pDataRaw);
定义如下 void LIS3MDL::GetAxesRaw(int16_t *pData) { uint8_t tempReg[2] = {0,0}; int ret; pData[0] = pData[1] = pData[2] = 0; ret = dev_i2c.i2c_read(&tempReg[0], LIS3MDL_M_MEMS_ADDRESS, LIS3MDL_M_OUT_X_L_M + 0x80, 2); if (ret == 0) { pData[0] = ((((int16_t)tempReg[1]) << 8)+(int16_t)tempReg[0]); ret = dev_i2c.i2c_read(&tempReg[0], LIS3MDL_M_MEMS_ADDRESS, LIS3MDL_M_OUT_Y_L_M + 0x80, 2); } if (ret == 0) { pData[1] = ((((int16_t)tempReg[1]) << 8)+(int16_t)tempReg[0]); ret = dev_i2c.i2c_read(&tempReg[0], LIS3MDL_M_MEMS_ADDRESS, LIS3MDL_M_OUT_Z_L_M + 0x80, 2); } if (ret == 0) { pData[2] = ((((int16_t)tempReg[1]) << 8)+(int16_t)tempReg[0]); } } |
|
|
|
谢谢分享,好东西大家一起来分享!
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1428 浏览 1 评论
3289 浏览 1 评论
8152 浏览 0 评论
1967 浏览 0 评论
VL53L5CX #高达 8x8 多区域测距和 63°对角线宽视场 飞行时间多区域测距传感器
17362 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 12:46 , Processed in 0.483227 second(s), Total 48, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号