Здравствуйте! помогите пожалуйста определить скороподъемность!
Вот фрагмент кода.
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); // рачёт звука