val2 = (Altitude - Alt_0)/ 100; - это перевод в метры
Для индикации на стрелке, вполне пойдёт.
Для вычислений вариометра использовал чистый высоту в сантиметрах:
пока код такой:
//ПОЛУЧЕНИЕ ДАННЫХ, первичная обработка
val1 = filter_acp(analogRead(mpxv)); // чтение аналогового датчика скорости с фильтрацией
//0 536|40 544|50 55|60 567|70 583|80 596|90 610|100 632//536-10:
// Serial.print (val1-StartADC);Serial.print("\t");
dps.getAltitude(&Altitude); //получение данных о высоте с датчика BMP085
val2 = filter_bmp(Altitude);
//ОБРАБОТКА ДАННЫХ с датчиков для индикации
//скорость
//val1 = 40.59*log(val1-StartADC)-87.76;// 0-180 10гр 10км/ч
// val1 = 55.77*log(val1-StartADC)-118.6;// 0-120 15гр 10км/ч
val1 = 129.8*log(val1-StartADC)-447.3;// 50-110 30гр 10км/ч
//val1 = map(val1, StartADC, StartADC+180, 0, 180);
// вариометр скорость подьёма/спуска в spid_val2
IntVar_IN = IntVar_IN + val2;
ivar++ ;
if ( ivar == 10)
{
ivar = 0;
IntVar_IN = IntVar_IN/10;
spid_val2 = (IntVar_IN - IntVar_OUT)/165; // скорость в м/с где 183 время между обращениями к данной строке милисикунд
//Serial.print(millis());Serial.println("\t");
//Serial.print(spid_val2);Serial.println("\t");
IntVar_OUT = IntVar_IN;
IntVar_IN = 0;
// настройка индикации
if (spid_val2 > 0) //определение тендендции изменения высоты
{
on_redD = 0; // выключене светодиода противопольжного направления
on_grinD = 1;
}
else
{
on_grinD = 0;
}
if (spid_val2 <=-1) //определение тендендции изменения высоты
{
on_grinD = 0; // выключене светодиода противопольжного направления
on_redD = 1;
}
else
{
on_redD = 0;
}
}
//высота в м ,преобразование для угла поворота на 180 для 600м
val2 = val2/100;
val2 = map(val2,0,600,0,180);
//ВЫВОД ДАННЫХ
//стрелочные индикаторы
myservo1.write(180-val1); // инвертируем отклонение, что бы с лево на право
myservo2.write(180-val2); //
//порт
// Serial.print (val1);Serial.println("\t");
//светодиодная индикация
if (val1<30) //условие включения сигнализатора ОПАСНОСТЬ,скорость меньше 60км/ч
{ on_Alarm = 1;}
else
{ on_Alarm = 0;}
if ( timer01 == t_timer) //таймер мигания диодов
{
if (on_redD)
{
if (Flag_redD)
{
digitalWrite(redD,LOW);
Flag_redD = 0;
}
else
{
digitalWrite(redD,HIGH);
Flag_redD = 1;
}
}
else digitalWrite(redD,LOW);
if (on_grinD)
{
if (Flag_grinD)
{
digitalWrite(grinD,LOW);
Flag_grinD = 0;
}
else
{
digitalWrite(grinD, HIGH);
Flag_grinD = 1;
}
}
else digitalWrite(grinD,LOW);
if (on_Alarm)
{
if (Flag_Alarm)
{
digitalWrite(Alarm,LOW);
Flag_Alarm = 0;
}
else
{
digitalWrite(Alarm, HIGH);
Flag_Alarm = 1;
}
}
else digitalWrite(Alarm,LOW);
timer01 = 0;
}
timer01++;
// КНОПКА
if (digitalRead(knop) == HIGH) // кнопка нуля высоты
{
uroven0();
delay(500);
}
}