From fe2a5b461d3135b6bfbbb9d4f6c40f7c699b5e0b Mon Sep 17 00:00:00 2001 From: "maxim.karban@gmail.com" Date: Thu, 3 May 2012 18:35:56 +0000 Subject: [PATCH] VARIO_EXTENDED new feature Limits changed: Down speed min in range OFF,[-10.0:0] in 0.1 steps OFF means no sound at all, this variant useful if pilot/model is aerobatic Up speed min in range [-1.5:1.5] in 0.1 steps strange negative values for positive vertical speeds means next: in normal fly glider model has negative speed always, for example -1m/s if any weak thermal flows found then vertical speed can be reduced but still negative, but it is symptom of thermal flow which can be very close! now it is possible to detect if negative Up speed limit is set. --- src/frsky.cpp | 14 +++++++------- src/frsky.h | 2 +- src/model_menus.cpp | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/frsky.cpp b/src/frsky.cpp index 7184a9697..103f482a3 100644 --- a/src/frsky.cpp +++ b/src/frsky.cpp @@ -643,22 +643,22 @@ void check_frsky() static uint16_t s_varioTmr = 0; if (isFunctionActive(FUNC_VARIO)) { #if defined(AUDIO) - int16_t verticalSpeed = 0; - // TODO: get negative values in Up Speed to shift zero, i.e. get positive sound on small negative speeds - // positive values in g_model.varioSpeedUpMin must works same as now - // negative must make an offset in sounds - // also changes need in model_menus.cpp - verticalSpeed = limit((int16_t)(-VARIO_SPEED_LIMIT*100), (int16_t)frskyHubData.varioSpeed, (int16_t)(+VARIO_SPEED_LIMIT*100)); + int16_t varioSpeedUpMin = (g_model.varioSpeedUpMin - VARIO_SPEED_LIMIT_UP_CENTER)*VARIO_SPEED_LIMIT_MUL; + int16_t varioSpeedDownMin = (VARIO_SPEED_LIMIT_DOWN_OFF - g_model.varioSpeedDownMin)*(-VARIO_SPEED_LIMIT_MUL); + int16_t verticalSpeed = limit((int16_t)(-VARIO_SPEED_LIMIT*100), (int16_t)frskyHubData.varioSpeed, (int16_t)(+VARIO_SPEED_LIMIT*100)); uint8_t SoundAltBeepNextFreq = 0; uint8_t SoundAltBeepNextTime = 0; static uint8_t SoundAltBeepFreq = 0; static uint8_t SoundAltBeepTime = 0; - if ((verticalSpeed < g_model.varioSpeedUpMin*VARIO_SPEED_LIMIT_MUL) && (verticalSpeed > (VARIO_SPEED_LIMIT_DOWN_OFF - g_model.varioSpeedDownMin)*(-VARIO_SPEED_LIMIT_MUL))) { //check thresholds here in cm/s + if ((verticalSpeed < varioSpeedUpMin) && (verticalSpeed > varioSpeedDownMin)) { //check thresholds here in cm/s SoundAltBeepNextFreq = (0); SoundAltBeepNextTime = (0); } else { + if((varioSpeedUpMin < 0) & (verticalSpeed >= varioSpeedUpMin)){ + verticalSpeed = verticalSpeed - varioSpeedUpMin; + } SoundAltBeepNextFreq = (verticalSpeed * 10 + 16000) >> 8; SoundAltBeepNextTime = (1600 - verticalSpeed) / 100; if (verticalSpeed > 0) { diff --git a/src/frsky.h b/src/frsky.h index f24b57375..d353f1076 100644 --- a/src/frsky.h +++ b/src/frsky.h @@ -73,7 +73,7 @@ class FrskyData: public FrskyRSSI { #define VARIO_SPEED_LIMIT_MUL 10 //to get 0.2m steps #define VARIO_SPEED_LIMIT_DOWN_OFF (100+1) //100 steps + OFF #define VARIO_SPEED_LIMIT_UP_CENTER 15 -#define VARIO_SPEED_LIMIT_UP_MAX 31 +#define VARIO_SPEED_LIMIT_UP_MAX 30 #if defined(FRSKY_HUB) PACK(struct FrskyHubData { diff --git a/src/model_menus.cpp b/src/model_menus.cpp index dd0150e23..7e51eb0ea 100644 --- a/src/model_menus.cpp +++ b/src/model_menus.cpp @@ -2344,7 +2344,7 @@ void menuProcTelemetry(uint8_t event) lcd_putsAtt(TELEM_COL2, y, STR_OFF, ((attr && m_posHorz==0) ? blink : 0)); else lcd_outdezAtt(TELEM_COL2, y, -VARIO_SPEED_LIMIT_MUL*(VARIO_SPEED_LIMIT_DOWN_OFF - g_model.varioSpeedDownMin), ((attr && m_posHorz==0) ? blink : 0)|PREC2|LEFT); - lcd_outdezAtt(TELEM_COL2+6*FW, y, VARIO_SPEED_LIMIT_MUL*g_model.varioSpeedUpMin, ((attr && m_posHorz==1) ? blink : 0)|PREC2|LEFT); + lcd_outdezAtt(TELEM_COL2+6*FW, y, VARIO_SPEED_LIMIT_MUL*(g_model.varioSpeedUpMin - VARIO_SPEED_LIMIT_UP_CENTER), ((attr && m_posHorz==1) ? blink : 0)|PREC2|LEFT); if (attr && (s_editMode>0 || p1valdiff)) { switch (m_posHorz) {