diff --git a/README.md b/README.md index 8de2af6..8148f08 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,8 @@ Screen list ### v1.7.3 2020-11-11 - Headlights reminder (if drive mode & headlights are off) +- ODB response analyzer. Please help community to decode unknown values like BMS valves, heater ON switch,... + https://docs.google.com/spreadsheets/d/1eT2R8hmsD1hC__9LtnkZ3eDjLcdib9JR-3Myc97jy8M/edit?usp=sharing ### v1.7.2 2020-11-10 - improved charging graph diff --git a/car_debug_obd2_kia.h b/car_debug_obd2_kia.h index e038c91..a40c177 100644 --- a/car_debug_obd2_kia.h +++ b/car_debug_obd2_kia.h @@ -96,15 +96,15 @@ String commandQueueDebugObd2Kia[commandQueueCountDebugObd2Kia] = { // 7A5 7AD SMK B UDS Smart Key "ATSH7A5", "22B001", // 7F2278 7F2231 - "22B002", // 0B2 0014320007120A0A1910E016800403320503090A1E32320205320F0014051E010000000002000000000001020000001000000000000000000000000000000000000000AAAAAA - "22B003", // 019 62B003000000003412900200000000E6A21221000000009F2FAAAA + "22B002", // positive + "22B003", // positive "22B004", // 7F2278 7F2231 - "22B005", // 010 62B005FA6090001C04C001E000000004AAAAAAAA - "22B006", // 7F2278 017 62B006AFE00000A40000000000A4A4A500A40000000000AAAAAAAA - "22B007", // 011 62B0071E7FB80000E600007FFF00000000AAAAAA - "22B008", // 7F2278 011 62B0080000000000000009000000000000AAAAAA - "22B009", // 7F2278 021 62B009000000000000000000000000000000000000000000000000000000000000AA - "22B00A", // 7F2278 013 62B00A0000F038000501080600000021010000AA + "22B005", // positive + "22B006", // positive + "22B007", // positive + "22B008", // positive + "22B009", // positive + "22B00A", // positive // 7B3 7BB AIRCON / ACU UDS Aircondition "ATSH7B3", diff --git a/car_kia_eniro.h b/car_kia_eniro.h index 1beaab9..51d3761 100644 --- a/car_kia_eniro.h +++ b/car_kia_eniro.h @@ -21,9 +21,9 @@ String commandQueueKiaENiro[commandQueueCountKiaENiro] = { // BMS "ATSH7E4", "220101", // power kw, ... - "220102", // cell voltages, screen 3 only - "220103", // cell voltages, screen 3 only - "220104", // cell voltages, screen 3 only + "220102", // cell voltages + "220103", // cell voltages + "220104", // cell voltages "220105", // soh, soc, .. "220106", // cooling water temp diff --git a/dist/enirodashboard.ino.bin b/dist/enirodashboard.ino.bin index 42c84b2..c2fbf13 100644 Binary files a/dist/enirodashboard.ino.bin and b/dist/enirodashboard.ino.bin differ diff --git a/enirodashboard.ino b/enirodashboard.ino index 15b49a8..6000292 100644 --- a/enirodashboard.ino +++ b/enirodashboard.ino @@ -101,8 +101,8 @@ char tmpStr3[20]; char tmpStr4[20]; // Screens, buttons -#define displayScreenCount 6 -byte displayScreen = 1; // 0 - blank screen, 1 - automatic mode, 2 - dash board (default), 3 - big speed + kwh/100, 4 - battery cells, 5 - charging graph, 6 - soc10% CED table +#define displayScreenCount 7 +byte displayScreen = 1; // 0 - blank screen, 1 - automatic mode, 2 - dash board (default), 3 - big speed + kwh/100, 4 - battery cells, 5 - charging graph, 6 - soc10% CED table, 7 - debug screen byte displayScreenAutoMode = 0; bool btnLeftPressed = true; bool btnMiddlePressed = true; @@ -180,6 +180,14 @@ MENU_ITEM menuItems[menuItemsCount] = { {10009, 9999, -1, "-"}, }; +// debug screen - move with right button +uint16_t debugCommandIndex = 0; +String debugAtshRequest = "ATSH7E4"; +String debugCommandRequest = "220101"; +String debugLastString = "620101FFF7E7FF99000000000300B10EFE120F11100F12000018C438C30B00008400003864000035850000153A00001374000647010D017F0BDA0BDA03E8"; +String debugPreviousString = "620101FFF7E7FFB3000000000300120F9B111011101011000014CC38CB3B00009100003A510000367C000015FB000013D3000690250D018E0000000003E8"; + + /** Load settings from flash memory, upgrade structure if version differs */ @@ -268,6 +276,7 @@ bool loadSettings() { if (settings.carType == CAR_DEBUG_OBD2_KIA) { activateCommandQueueForDebugObd2Kia(); } + debugCommandIndex = commandQueueLoopFrom; return true; } @@ -718,7 +727,7 @@ bool drawSceneSpeed(bool force) { tft.drawString(tmpStr3, 250, 80, GFXFF); //sprintf(tmpStr3, " %d", params.driveMode); //tft.drawString(tmpStr3, 250, 80, GFXFF); - + // Soc%, bat.kWh tft.setFreeFont(&Orbitron_Light_32); tft.setTextColor(TFT_WHITE, TFT_BLACK); @@ -943,7 +952,7 @@ bool drawSceneChargingGraph(bool force) { } /** - SOC 10% table (screen 5) + SOC 10% table (screen 5) */ bool drawSceneSoc10Table(bool force) { @@ -1031,6 +1040,42 @@ bool drawSceneSoc10Table(bool force) { return true; } +/** + DEBUG screen +*/ +bool drawSceneDebug(bool force) { + + int32_t posx, posy; + String chHex, chHex2; + uint8_t chByte; + + tft.setTextSize(1); // Size for small 5x7 font + tft.setTextColor(TFT_SILVER, TFT_TEMP); + tft.setTextDatum(TL_DATUM); + tft.drawString(debugAtshRequest, 0, 0, 2); + tft.drawString(debugCommandRequest, 128, 0, 2); + tft.setTextDatum(TR_DATUM); + + for (int i = 0; i < debugLastString.length() / 2; i++) { + chHex = debugLastString.substring(i * 2, (i * 2) + 2); + chHex2 = debugPreviousString.substring(i * 2, (i * 2) + 2); + tft.setTextColor(((chHex.equals(chHex2)) ? TFT_SILVER : TFT_GREEN), TFT_TEMP); + chByte = hexToDec(chHex.c_str(), 1, false); + posx = (((i) % 10) * 32) + 24; + posy = ((floor((i) / 10)) * 32) + 24; + sprintf(tmpStr1, "%03d", chByte); + tft.drawString(tmpStr1, posx + 4, posy, 2); + + tft.setTextColor(TFT_YELLOW, TFT_TEMP); + sprintf(tmpStr1, "%c", (char)chByte); + tft.drawString(tmpStr1, posx + 4, posy + 13, 2); + } + + debugPreviousString = debugLastString; + + return true; +} + /** Modify caption */ @@ -1258,6 +1303,10 @@ bool redrawScreen(bool force) { if (displayScreen == 6) { drawSceneSoc10Table(force); } + // 7. DEBUG SCREEN + if (displayScreen == 7) { + drawSceneDebug(force); + } // BLE not connected if (!bleConnected && bleConnect) { @@ -1326,6 +1375,16 @@ bool parseRowMerged() { Serial.print("merged:"); Serial.println(responseRowMerged); + // Catch output for debug screen + if (displayScreen == 7) { + if (debugCommandIndex == commandQueueIndex) { + debugAtshRequest = currentAtshRequest; + debugCommandRequest = commandRequest; + debugLastString = responseRowMerged; + } + } + + // Parse by car if (settings.carType == CAR_KIA_ENIRO_2020_64 || settings.carType == CAR_HYUNDAI_KONA_2020_64 || settings.carType == CAR_KIA_ENIRO_2020_39 || settings.carType == CAR_HYUNDAI_KONA_2020_39) { parseRowMergedKiaENiro(); @@ -1467,7 +1526,7 @@ class MySecurity : public BLESecurityCallbacks { /** Ble notification callback */ -static void notifyCallback (BLERemoteCharacteristic* pBLERemoteCharacteristic, uint8_t* pData, size_t length, bool isNotify) { +static void notifyCallback (BLERemoteCharacteristic * pBLERemoteCharacteristic, uint8_t* pData, size_t length, bool isNotify) { char ch; @@ -1771,6 +1830,11 @@ void loop() { menuMove(true); } else { // doAction + if (displayScreen == 7) { + debugCommandIndex = (debugCommandIndex >= commandQueueCount) ? commandQueueLoopFrom : debugCommandIndex +1; + redrawScreen(true); + } + } } }