|
数据类型:
- typedef enum
- {
- QMA6100P_SENSITITY_2G = 244,
- QMA6100P_SENSITITY_4G = 488,
- QMA6100P_SENSITITY_8G = 977,
- QMA6100P_SENSITITY_16G = 1950,
- QMA6100P_SENSITITY_32G = 3910
- }qma6100p_sensitity;
- typedef struct {
- int16_t temp;
-
- int16_t acc_x;
- int16_t acc_y;
- int16_t acc_z;
- }QMA6100PRawData_t;
复制代码
采集数据:
- void QMA6100PReadRawData(QMA6100PRawData_t *rawdata)
- {
- int16_t temp=0;
- temp=(int16_t)(QMA6100P_Read(QMA6100P_REG_XOUTL)+(QMA6100P_Read(QMA6100P_REG_XOUTH)<<8));
- rawdata->acc_x=temp>>2;
-
- temp=(int16_t)(QMA6100P_Read(QMA6100P_REG_YOUTL)+(QMA6100P_Read(QMA6100P_REG_YOUTH)<<8));
- rawdata->acc_y=temp>>2;
-
- temp=(int16_t)(QMA6100P_Read(QMA6100P_REG_ZOUTL)+(QMA6100P_Read(QMA6100P_REG_ZOUTH)<<8));
- rawdata->acc_z=temp>>2;
- }
复制代码
多个float 运算:
- volatile QMA6100PRawData_t rawdata;
- float x,y,z;
-
- QMA6100PReadRawData(&rawdata);
- //x=(float)(rawdata.acc_x*QMA6100P_SENSITITY_8G)/1000.0;
- //y=(float)(rawdata.acc_y*QMA6100P_SENSITITY_8G)/1000.0;
- //z=(float)(rawdata.acc_z*QMA6100P_SENSITITY_8G)/1000.0;
-
- x=(float)(rawdata.acc_x)*0.977f;
- y=(float)(rawdata.acc_y)*0.977f;
- z=(float)(rawdata.acc_z)*0.977f;
-
复制代码
把数据打印出来看 rawdata.acc_x、rawdata.acc_y、rawdata.acc_z采集回来数据都是对的。
注释掉的代码求出来的x、y、z结果都不对。
没注释的x、y、z运算结果是对的。
请教下注释掉的代码如何修改才能得到正确的x、y、z?
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|