Add ground track display on the altitude/climb/speed page

pull/30/head
Pawel Jalocha 2020-09-19 00:36:56 +01:00
rodzic 4cab8adf39
commit 8cb4462c2d
1 zmienionych plików z 27 dodań i 21 usunięć

Wyświetl plik

@ -729,29 +729,37 @@ void OLED_DrawID(u8g2_t *OLED, GPS_Position *GPS)
} }
void OLED_DrawAltitudeAndSpeed(u8g2_t *OLED, GPS_Position *GPS) void OLED_DrawAltitudeAndSpeed(u8g2_t *OLED, GPS_Position *GPS)
{ uint8_t Len=0; { uint8_t Len;
// Standard Pressure Altitude // Standard Pressure Altitude
if(GPS && (GPS->hasBaro || GPS->isValid())) if(GPS && (GPS->hasBaro || GPS->isValid())) // if GPS has lock or just the pressure data
{ if(GPS->hasBaro) Len+=Format_SignDec(Line+Len, (GPS->StdAltitude+5)/10, 1, 0, 1); { if(GPS->hasBaro) Len=Format_SignDec(Line, (GPS->StdAltitude+5)/10, 1, 0, 1);
else Len+=Format_SignDec(Line+Len, (GPS->Altitude+5)/10, 1, 0, 1); } else Len=Format_SignDec(Line, (GPS->Altitude+5)/10, 1, 0, 1); }
else else
Len+=Format_String(Line+Len, "----"); Len=Format_String(Line, "----");
Line[Len]=0; Line[Len]=0;
u8g2_SetFont(OLED, u8g2_font_fub20_tr); u8g2_SetFont(OLED, u8g2_font_fub20_tr);
uint8_t Altitude_width = u8g2_GetStrWidth(OLED, Line); uint8_t Altitude_width = u8g2_GetStrWidth(OLED, Line);
u8g2_DrawStr(OLED, 80-Altitude_width, 40, Line); u8g2_DrawStr(OLED, 54-Altitude_width, 40, Line);
Len=0;
Len+=Format_String(Line+Len, "m");
Line[Len]=0;
u8g2_SetFont(OLED, u8g2_font_9x15_tr); u8g2_SetFont(OLED, u8g2_font_9x15_tr);
u8g2_DrawStr(OLED, 84, 40, Line); u8g2_DrawStr(OLED, 58, 40, "m");
// Climb Rate u8g2_SetFont(OLED, u8g2_font_fub17_tr);
Len=0; if(GPS && GPS->isValid())
if(GPS && (GPS->hasBaro || GPS->isValid())) { uint16_t Heading = (GPS->Heading+5)/10; if(Heading>=360) Heading-=360;
{ int16_t vario_value = GPS->ClimbRate; // [0.1m/s] Len=Format_UnsDec(Line, Heading, 3); }
else
Len=Format_String(Line, "---");
Line[Len]=0;
uint8_t Track_width = u8g2_GetStrWidth(OLED, Line);
u8g2_DrawStr(OLED, 116-Track_width, 40, Line);
u8g2_SetFont(OLED, u8g2_font_6x12_tr);
u8g2_DrawStr(OLED, 120, 28, "o");
if(GPS && (GPS->hasBaro || GPS->isValid())) // if GPS has lock or just the pressure data
{ int16_t vario_value = GPS->ClimbRate; // [0.1m/s] climb rate
if(vario_value<0) if(vario_value<0)
{ vario_value=(-vario_value); { vario_value=(-vario_value);
const int minus_width=10; const int minus_width=10;
@ -771,10 +779,10 @@ void OLED_DrawAltitudeAndSpeed(u8g2_t *OLED, GPS_Position *GPS)
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
u8g2_DrawXBM(OLED, 0, 47, plus_width, plus_height, plus_bits); u8g2_DrawXBM(OLED, 0, 47, plus_width, plus_height, plus_bits);
} }
Len+=Format_UnsDec(Line+Len, vario_value, 2, 1); Len=Format_UnsDec(Line, vario_value, 2, 1);
} }
else else
Len+=Format_String(Line+Len, "-.-"); Len=Format_String(Line, "-.-");
Line[Len]=0; Line[Len]=0;
u8g2_SetFont(OLED, u8g2_font_fub17_tr); u8g2_SetFont(OLED, u8g2_font_fub17_tr);
uint8_t Vario_width = u8g2_GetStrWidth(OLED, Line); uint8_t Vario_width = u8g2_GetStrWidth(OLED, Line);
@ -788,13 +796,11 @@ void OLED_DrawAltitudeAndSpeed(u8g2_t *OLED, GPS_Position *GPS)
u8g2_DrawXBM(OLED, 58, 47, ms_width, ms_height, ms_bits); u8g2_DrawXBM(OLED, 58, 47, ms_width, ms_height, ms_bits);
// Speed // Speed
Len=0;
if(GPS && GPS->isValid()) if(GPS && GPS->isValid())
{ // uint16_t speed = round(GPS->Speed * 0.36f); // Speed is in 0.1m/s { uint16_t speed = (GPS->Speed*9+12)/25;
uint16_t speed = (GPS->Speed*9+12)/25; Len=Format_UnsDec(Line, speed, 1, 0); }
Len+=Format_UnsDec(Line+Len, speed, 1, 0); }
else else
Len+=Format_String(Line+Len, "--"); Len=Format_String(Line, "--");
Line[Len]=0; Line[Len]=0;
u8g2_SetFont(OLED, u8g2_font_fub17_tr); u8g2_SetFont(OLED, u8g2_font_fub17_tr);
uint8_t Speed_width = u8g2_GetStrWidth(OLED, Line); uint8_t Speed_width = u8g2_GetStrWidth(OLED, Line);