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