Проблема с поплавками

надеюсь, это окажется простым вопросом, у меня просто пукнет мозг. Я никогда раньше не использовал поплавки, поэтому я думаю, что делаю что-то не так.

Проект: я читаю значения акселерометра и [грубо] оцениваю пройденное расстояние. Я знаю, что это не слишком точно, но мне нужно только измерить пару футов того, что находится на рельсах, поэтому мне нужна только одна ось.

Акселерометр настроен на запись с частотой 100 Гц, посылая прерывание каждые 10 сэмплов, поэтому я читаю 10 сэмплов каждые 100 мс и усредняю ​​их. Это не проблема, выкладываете мне твердые показания. Там, где я проигрываю, вычисляется пройденное расстояние (в дюймах). Любая помощь будет очень ценной. Вот фрагменты кода, о котором идет речь …

Переменные:

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

У акселерометра 256,41 «счета» на Г, или каждый младший бит составляет 3,9 мг.

Расчет расстояния (высота):

//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 и отобразить его. Я не могу просто напечатать поплавок, недостаточно места на ОК для этого.

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

Это выплевывает число, которое выглядит так, как будто оно поднимается и падает на порядки быстрее, чем ожидалось. Я думаю, что это может быть просто число с десятичной дробью?

Мне также нужно сравнить высоту, не уверен, что сравнивать поплавок кошерно или нет.

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

или же

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

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector