Здравствуйте! помогите пожалуйста определить скороподъемность!
Вот фрагмент кода.
while(1)
{
bme280_start(); // Запускаю преобразование датчика давления bmp280
delay(5000);
bme280_clc(); // Вычисляем давление в паскалях
h1 = p; //сохраняем
currentTime = TIM1->CNT+ OVF_counter * 0X2710; // Текущее время Фактическое время чтения
elapsedTime = (currentTime - previousTime) /1000; // Разделим на 1000, чтобы получить время в секундах
previousTime = currentTime; // Предыдущее время сохраняется до фактического чтения
vs=(h1-h3)/elapsedTime; // Вычисляем производную ,то есть приращение высот делим на промежуток времени
h3=h1; // Сохраняем предыдущее значение
string(180,10,"скорость подъема:",0xff,0x00ff22,1);
BINBCD(vs,210,10,2); // выводим на дисплей
delay(850000);
}
Я не понял.
А причём здесь задержка в 5 секунд?
Потом задержка в 14 минут?
Какая может быть скороподъёмность при таких задержках?
За это время я слетаю, отбомблюсь и вернусь обратно.
Нужно обрабатывать данные в реальном времени, а не вчера, когда рак на горе свистнет.
Я так понимаю.
Нужно проверить давление и запомнить.
Через строго определённое время, померять снова.
Посчитать разницу и запомнить.
Замерять давление снова. Снова посчитать разницу и исходя из этих значений посчитать скорость подъёма.
И делать это постоянно в цикле. Есть алгоритм бегущего среднего.
У Вас же замер происходит один раз. Или я чего то не вижу?
Здравствуйте! помогите пожалуйста определить скороподъемность!
Вот фрагмент кода.
while(1) { bme280_start(); // Запускаю преобразование датчика давления bmp280 delay(5000); bme280_clc(); // Вычисляем давление в паскалях h1 = p; //сохраняем currentTime = TIM1->CNT+ OVF_counter * 0X2710; // Текущее время Фактическое время чтения elapsedTime = (currentTime - previousTime) /1000; // Разделим на 1000, чтобы получить время в секундах previousTime = currentTime; // Предыдущее время сохраняется до фактического чтения vs=(h1-h3)/elapsedTime; // Вычисляем производную ,то есть приращение высот делим на промежуток времени h3=h1; // Сохраняем предыдущее значение string(180,10,"скорость подъема:",0xff,0x00ff22,1); BINBCD(vs,210,10,2); // выводим на дисплей delay(850000); }В общем высота выводится правильно, но скороподъемность ерунда какая то , может в алгоритме вычисления скорости , что то не учитываю?Спасибо!
Позаимствовал нижеприведённой код, все работает, но не совсем понятен алгоритм, может кто разъяснит?
float vario_down = -1.1; // Установка СНИЖЕНИЯ
float vario_up;
float alt[51];
float tim[51];
float beep;
float Beep_period;
float mux;
float Altitude;
float Alt0; // нулевая высота в момент включения
float correctBMP180 = 0; // коррекция бародатчика в гектапаскалях /индивидуальна для каждого датчика/
const float p0 = 101325;
long Pressure = 101325;
unsigned long bounseInput4P = 0UL;
int samples=40;
int maxsamples=50;
int countPressVal = 0;
........
while (1){
float tempo=millis();
float vario=0;
float N1=0;
float N2=0;
float N3=0;
float D1=0;
float D2=0;
bmp085.calcTruePressure(&Pressure);
Altitude = (float)44330 * (1 - pow(((float)Pressure/p0), 0.190295)); // полючение новой высоты в метрах
for(int cc=1;cc<=maxsamples;cc++){ // усреднитель
alt[(cc-1)]=alt[cc];
tim[(cc-1)]=tim[cc];
};
alt[maxsamples]=Altitude;
tim[maxsamples]=tempo;
float stime=tim[maxsamples-samples];
for(int cc=(maxsamples-samples);cc<maxsamples;cc++){
N1+=(tim[cc]-stime)*alt[cc];
N2+=(tim[cc]-stime);
N3+=(alt[cc]);
D1+=(tim[cc]-stime)*(tim[cc]-stime);
D2+=(tim[cc]-stime);
};
vario=1000*((samples*N1)-N2*N3)/(samples*D1-D2*D2); // рачёт звука
