浮动问题

时间:2014-06-08 23:33:36

标签: c++ floating-point accelerometer microcontroller

希望事实证明这是一个简单的问题,我只是一个大脑放屁。我之前从未使用浮子,所以我认为我只是做错了。

项目:我正在读取加速度计值和[粗略]估计行进距离。我知道它不太准确,但我只需要测量一些在轨道上的东西,所以我只需要一个轴。

加速度计设置为以100Hz记录,每10个样本发送一个中断,因此我每100ms读取10个样本,并对它们求平均值。这没问题,让我听到坚如磐石的读数。我失去的地方是计算行进的距离(英寸)。任何帮助都会非常适合它。这是有问题的代码片段......

变量:

int AccelX;
int PrevAccelX;
char HeightChar;

float Height;
float PrevHeight;
float Velocity;
float PrevVelocity;

定义:

#define ACCEL_CONVERT       1.50574 //386.088in/s^2 / 256.41 LSB
#define ACCEL_SAMPLE_TIME   0.1   //10 samples @ 100Hz

加速度计每G有256.41“计数”,或每个LSB为3.9mg。

计算距离(高度):

//Convert to Acceleration
AccelX *= ACCEL_CONVERT;    //convert to in/s^2

//First Integration
Velocity = PrevVelocity + (PrevAccelX + 
        ((AccelX - PrevAccelX)/2.0))*ACCEL_SAMPLE_TIME;

//second integration
Height = PrevHeight + (PrevVelocity +
       ((Velocity - PrevVelocity)/2.0))*ACCEL_SAMPLE_TIME;

//save current values as previous, for next measurement
PrevVelocity = Velocity;
PrevHeight = Height;
PrevAccelX = AccelX;

这里我尝试将浮点数舍入为int并显示它。我不能简单地打印浮动,没有足够的空间留在uC上。

HeightChar = (Height + 0.5f);
printf ("Height: %d in    \r", HeightChar);

这会吐出一个看起来比预期更快下降的数字。我想它可能只是带有小数的浮点数?

我还需要比较高度,不确定它是不是比较漂浮的犹太人。

if (Height > X){
    //do something
}

if (HeightChar > X){
    //do something
}

0 个答案:

没有答案