diff --git a/docs/Display.md b/docs/Display.md index 229c1c8a32..bc2a8c22b5 100755 --- a/docs/Display.md +++ b/docs/Display.md @@ -3,14 +3,19 @@ INAV supports displays to provide information to you about your aircraft and iNav state. When the aircraft is armed, an "Armed" message is displayed. When it is disarmed, a summary page is displayed. Page cycling has been removed and no other information is currently available - - + +![Stick Positions](assets/images/inav_display_armed.jpg) + +![Stick Positions](assets/images/inav_display_status.jpg) There is currently no way to change the information on the display ## Supported Hardware +I2c IIC Serial Oled LCD LED Module 12864 (http://a.co/5hxXEvZ used in status image above) -At this time no other displays are supported other than the SSD1306 / UG-2864HSWEG01. +SSD1306 + +UG-2864HSWEG01 ## Configuration diff --git a/docs/assets/images/StickPositions.png b/docs/assets/images/StickPositions.png index 3fa9aa9eb3..a3feac95ed 100644 Binary files a/docs/assets/images/StickPositions.png and b/docs/assets/images/StickPositions.png differ diff --git a/docs/assets/images/StickPositions.svg b/docs/assets/images/StickPositions.svg index c8e0d5ff29..724282d151 100644 --- a/docs/assets/images/StickPositions.svg +++ b/docs/assets/images/StickPositions.svg @@ -1,805 +1,805 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - Arm - - - - - Disarm - - - - - Profile 1 - - - - - Profile 2 - - - - - Profile 3 - - - - - Calibrate Gyro - - - - - Calibrate Acc - - - - - Calibrate Compass - - - - - In-flight Calibration Controls - - - - - Trim Acc Left - - - - - Trim Acc Right - - - - - Trim Acc Forwards - - - - - Trim Acc Backwards - - - - - Save waypoint mission - - - - - Load waypoint mission - - - - - Save Setting - Mode 2 Stick Functions - - + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + Arm + + + + + Disarm + + + + + Profile 1 + + + + + Profile 2 + + + + + Profile 3 + + + + + Calibrate Gyro + + + + + Calibrate Acc + + + + + Calibrate Compass + + + + + In-flight Calibration Controls + + + + + Trim Acc Left + + + + + Trim Acc Right + + + + + Trim Acc Forwards + + + + + Trim Acc Backwards + + + + + Save waypoint mission + + + + + Load waypoint mission + + + + + Save Setting + Mode 2 Stick Functions + + diff --git a/docs/assets/images/inav_display_armed.jpg b/docs/assets/images/inav_display_armed.jpg new file mode 100644 index 0000000000..a941a38975 Binary files /dev/null and b/docs/assets/images/inav_display_armed.jpg differ diff --git a/docs/assets/images/inav_display_status.jpg b/docs/assets/images/inav_display_status.jpg new file mode 100644 index 0000000000..24f89774ca Binary files /dev/null and b/docs/assets/images/inav_display_status.jpg differ diff --git a/src/main/io/dashboard.c b/src/main/io/dashboard.c index bb83a9dd08..c9cde8a625 100644 --- a/src/main/io/dashboard.c +++ b/src/main/io/dashboard.c @@ -61,6 +61,7 @@ #include "sensors/sensors.h" #include "sensors/compass.h" #include "sensors/acceleration.h" +#include "sensors/boardalignment.h" #include "sensors/gyro.h" #include "sensors/barometer.h" @@ -87,33 +88,75 @@ static char lineBuffer[SCREEN_CHARACTER_COLUMN_COUNT + 1]; #define IS_SCREEN_CHARACTER_COLUMN_COUNT_ODD (SCREEN_CHARACTER_COLUMN_COUNT & 1) #if defined(DASHBOARD_ARMED_BITMAP) -static uint8_t armedBitmapRLE [] = { 128, 32, - '\x00','\x00','\x87','\xc0','\xe0','\xf8','\xfc','\xfc', // 0x0008 - '\x02','\x7e','\x3e','\x1f','\x0f','\x0f','\x06','\xcf', // 0x0010 - '\xff','\xff','\x04','\x7f','\x1f','\x8e','\xe0','\xf0', // 0x0018 - '\xfc','\xfe','\x7f','\x3f','\x0f','\x0f','\x06','\x8f', // 0x0020 - '\xcf','\xff','\xff','\x04','\x7f','\x1f','\x8e','\xe0', // 0x0028 - '\xf0','\xfc','\xfe','\x7f','\x3f','\x0f','\x0f','\x06', // 0x0030 - '\xcf','\xef','\xff','\xff','\x03','\x7f','\x1f','\x0f', // 0x0038 - '\x0f','\x06','\xcf','\xff','\xff','\x04','\x7f','\x1f', // 0x0040 - '\x8e','\xe0','\xf0','\xfc','\xfe','\xff','\xbf','\x8f', // 0x0048 - '\x8f','\x05','\x0f','\x0f','\x08','\x07','\x07','\x02', // 0x0050 - '\x83','\xe3','\xf1','\xfd','\xfe','\x7f','\x3f','\x0f', // 0x0058 - '\x0f','\x07','\xcf','\xff','\xff','\x04','\x7f','\x1f', // 0x0060 - '\x0e','\x00','\x00','\x03','\x80','\xc0','\xf0','\xf8', // 0x0068 - '\xfe','\x7f','\x3f','\x1f','\x0f','\x0f','\x06','\x8f', // 0x0070 - '\xef','\xff','\xff','\x03','\x7f','\x3f','\x8f','\xc7', // 0x0078 - '\xf3','\xf8','\xfe','\xff','\x3f','\x1f','\x0f','\x0f', // 0x0080 - '\x06','\x8f','\xcf','\xff','\xff','\x04','\x3f','\x9f', // 0x0088 - '\xc3','\xf1','\xf8','\xfc','\xff','\x3f','\x1f','\x07', // 0x0090 - '\x03','\x00','\x00','\x03','\x80','\xc0','\xf0','\xf8', // 0x0098 - '\xfe','\xff','\x3f','\x1f','\x07','\x03','\x00','\x00', // 0x00a0 - '\x03','\x80','\xc0','\xf0','\xf8','\xfe','\xff','\x3f', // 0x00a8 - '\x9f','\xc7','\xf3','\xf8','\xfc','\xff','\xff','\x03', // 0x00b0 - '\xf7','\xf3','\xf3','\x04','\xf1','\xf1','\x03','\xf0', // 0x00b8 - '\xf0','\x09','\xf8','\xfe','\xff','\xff','\x03','\xf7', // 0x00c0 - '\xf3','\xf0','\xf0','\x06','\xf8','\x7c','\x7e','\x3f', // 0x00c8 - '\x3f','\x02','\x1f','\x07','\x03','\x00','\x00','\x86', // 0x00d0 +static uint8_t armedBitmapRLE [] = { 128, 64, + '\x00','\x00','\x04','\x80','\x80','\x03','\xc0','\xc0', // 0x0008 + '\x02','\x80','\x80','\x03','\x00','\x00','\x0b','\x80', // 0x0010 + '\x80','\x02','\xc0','\xc0','\x02','\x80','\x80','\x03', // 0x0018 + '\x00','\x00','\x63','\xfc','\xfe','\xdf','\x03','\x01', // 0x0020 + '\x71','\x79','\xf9','\xf1','\xc1','\x83','\x8f','\xfe', // 0x0028 + '\xfc','\x00','\x00','\x04','\xf8','\xfe','\xff','\x07', // 0x0030 + '\x83','\xf1','\xf1','\x02','\x79','\x71','\x21','\x03', // 0x0038 + '\x87','\xfe','\xfc','\x70','\x00','\x00','\x07','\xff', // 0x0040 + '\xff','\x03','\x00','\x00','\x05','\xff','\xff','\x03', // 0x0048 + '\x3f','\x7c','\xf8','\xf0','\xc0','\x80','\x00','\x00', // 0x0050 + '\x0b','\xfe','\xff','\xff','\x03','\x00','\x00','\x0c', // 0x0058 + '\xc0','\xf0','\xfe','\x7f','\x0f','\x7f','\xfe','\xf8', // 0x0060 + '\xc0','\x00','\x00','\x06','\x07','\x1f','\xff','\xfc', // 0x0068 + '\xf0','\x80','\x00','\x00','\x0e','\xe0','\xf8','\xfe', // 0x0070 + '\x3f','\x0f','\x01','\x00','\x00','\x03','\x01','\x03', // 0x0078 + '\x07','\x0e','\x0e','\x02','\x0c','\x0c','\x03','\x0d', // 0x0080 + '\x0b','\x03','\xff','\xfe','\xfe','\x02','\x86','\x07', // 0x0088 + '\x07','\x02','\x87','\xce','\xfe','\xff','\x23','\x03', // 0x0090 + '\x0d','\x0c','\x0c','\x04','\x0e','\x07','\x03','\x01', // 0x0098 + '\x00','\x00','\x08','\xff','\xff','\x03','\x00','\x00', // 0x00a0 + '\x05','\xff','\xff','\x03','\xfe','\x00','\x00','\x02', // 0x00a8 + '\x03','\x07','\x1f','\x3e','\x7c','\xf8','\xe0','\xc0', // 0x00b0 + '\x00','\x00','\x06','\xff','\xff','\x04','\x00','\x00', // 0x00b8 + '\x09','\xe0','\xf8','\xff','\x3f','\x07','\x01','\x00', // 0x00c0 + '\x00','\x03','\x01','\x07','\x3f','\xff','\xf8','\xe0', // 0x00c8 + '\x80','\x00','\x00','\x05','\x03','\x1f','\x7f','\xfe', // 0x00d0 + '\xf0','\xc0','\x00','\x00','\x08','\xe0','\xfc','\xff', // 0x00d8 + '\x3f','\x07','\x01','\x00','\x00','\x06','\xe0','\xf8', // 0x00e0 + '\x7c','\x1c','\x0e','\xc6','\xc6','\x03','\xe6','\x74', // 0x00e8 + '\x38','\x78','\xe3','\xe7','\x1f','\x3f','\x3f','\x02', // 0x00f0 + '\x1f','\xef','\xe7','\xf9','\x38','\x78','\xf6','\xe6', // 0x00f8 + '\xc6','\xc6','\x02','\x8e','\x0c','\x3c','\xf8','\xf0', // 0x0100 + '\xc0','\x00','\x00','\x07','\xff','\xff','\x03','\x00', // 0x0108 + '\x00','\x05','\xff','\xff','\x04','\x00','\x00','\x07', // 0x0110 + '\x01','\x03','\x07','\x1f','\x3e','\xfc','\xf0','\xe0', // 0x0118 + '\x80','\x0f','\xff','\xff','\x03','\x00','\x00','\x05', // 0x0120 + '\x80','\xe0','\xfc','\xff','\x3f','\x0f','\x0c','\x0c', // 0x0128 + '\x0b','\x0f','\x1f','\xff','\xfc','\xf0','\x80','\x00', // 0x0130 + '\x00','\x05','\x03','\x0f','\x7f','\xfe','\xf8','\xc0', // 0x0138 + '\x00','\x80','\xf0','\xfc','\xff','\x3f','\x07','\x00', // 0x0140 + '\x00','\x0a','\x07','\x1f','\x1e','\x38','\x30','\x71', // 0x0148 + '\x63','\x63','\x02','\x71','\x30','\x38','\x1e','\x0f', // 0x0150 + '\x07','\x00','\x00','\x04','\x03','\x0f','\x1f','\x38', // 0x0158 + '\x30','\x71','\x63','\x63','\x02','\x73','\x31','\x38', // 0x0160 + '\x3c','\x1f','\x0f','\x03','\x00','\x00','\x07','\x1f', // 0x0168 + '\x3f','\x3f','\x02','\x00','\x00','\x05','\x1f','\x3f', // 0x0170 + '\x3f','\x02','\x0f','\x00','\x00','\x0d','\x01','\x03', // 0x0178 + '\x0f','\x1f','\x3f','\x3f','\x02','\x1f','\x00','\x00', // 0x0180 + '\x03','\x10','\x3c','\x3f','\x1f','\x03','\x00','\x00', // 0x0188 + '\x11','\x03','\x1f','\x3f','\x3e','\x18','\x00','\x00', // 0x0190 + '\x06','\x01','\x0f','\x1f','\x3f','\x3f','\x02','\x1f', // 0x0198 + '\x03','\x00','\x00','\xaf','\xc0','\xf0','\xf8','\x38', // 0x01a0 + '\xf8','\xf8','\x02','\xe0','\x00','\x00','\x04','\xf8', // 0x01a8 + '\xf8','\x03','\x18','\x18','\x03','\xf8','\xf8','\x02', // 0x01b0 + '\xf0','\x00','\x00','\x02','\xf8','\xf8','\x03','\x38', // 0x01b8 + '\xf8','\xe0','\x00','\xe0','\xf8','\x38','\xf8','\xf8', // 0x01c0 + '\x03','\x00','\x00','\x02','\xf8','\xf8','\x03','\x98', // 0x01c8 + '\x98','\x05','\x18','\x00','\x00','\x02','\xf8','\xf8', // 0x01d0 + '\x03','\x18','\x18','\x04','\x38','\xf8','\xf0','\xe0', // 0x01d8 + '\x00','\x00','\x42','\x20','\x38','\x3e','\x3f','\x0f', // 0x01e0 + '\x07','\x06','\x06','\x02','\x0f','\x3f','\x3f','\x02', // 0x01e8 + '\x3c','\x20','\x00','\x3f','\x3f','\x03','\x00','\x03', // 0x01f0 + '\x1f','\x3f','\x39','\x20','\x00','\x00','\x02','\x3f', // 0x01f8 + '\x3f','\x03','\x00','\x0f','\x3f','\x3c','\x0f','\x01', // 0x0200 + '\x00','\x3f','\x3f','\x03','\x00','\x00','\x02','\x3f', // 0x0208 + '\x3f','\x03','\x31','\x31','\x05','\x30','\x00','\x00', // 0x0210 + '\x02','\x3f','\x3f','\x03','\x30','\x30','\x04','\x3c', // 0x0218 + '\x1f','\x0f','\x07','\x00','\x00','\x22', }; #endif @@ -332,8 +375,6 @@ static void showStatusPage(void) drawHorizonalPercentageBar(10, capacityPercentage); } - rowIndex++; - #ifdef GPS if (feature(FEATURE_GPS)) { tfp_sprintf(lineBuffer, "Sats: %d", gpsSol.numSat); @@ -378,6 +419,13 @@ static void showStatusPage(void) } #endif + rowIndex++; + char rollTrim[7], pitchTrim[7]; + formatTrimDegrees(rollTrim, boardAlignment()->rollDeciDegrees); + formatTrimDegrees(pitchTrim, boardAlignment()->pitchDeciDegrees); + tfp_sprintf(lineBuffer, "Acc: %sR, %sP", rollTrim, pitchTrim ); + i2c_OLED_set_line(rowIndex++); + i2c_OLED_send_string(lineBuffer); } void dashboardUpdate(timeUs_t currentTimeUs) @@ -503,3 +551,15 @@ void dashboardSetNextPageChangeAt(timeUs_t futureMicros) nextPageAt = futureMicros; } #endif + +void formatTrimDegrees ( char *formattedTrim, int16_t trimValue ) { + char trim[6]; + sprintf(trim, "%d", trimValue); + int x = strlen(trim)-1; + strncpy(formattedTrim,trim,x); + formattedTrim[x] = '\0'; + if (trimValue !=0) { + strcat(formattedTrim,"."); + } + strcat(formattedTrim,trim+x); +} diff --git a/src/main/io/dashboard.h b/src/main/io/dashboard.h index e956f0ebd0..91c3418395 100644 --- a/src/main/io/dashboard.h +++ b/src/main/io/dashboard.h @@ -26,3 +26,5 @@ void dashboardUpdate(timeUs_t currentTimeUs); void dashboardSetPage(pageId_e newPageId); void dashboardSetNextPageChangeAt(timeUs_t futureMicros); + +void formatTrimDegrees ( char formattedTrim[7], int16_t trimValue );