From 72a7fefb6622b20689a287a683dac51048d78a95 Mon Sep 17 00:00:00 2001
From: Stanley Huang <stanleyhuangyc@gmail.com>
Date: Fri, 8 May 2015 23:17:38 +1000
Subject: Add VIN display

---
 megalogger/megalogger.ino | 41 +++++++++++++++++++++++++++--------------
 1 file changed, 27 insertions(+), 14 deletions(-)

diff --git a/megalogger/megalogger.ino b/megalogger/megalogger.ino
index 98d16a7..8ef548f 100644
--- a/megalogger/megalogger.ino
+++ b/megalogger/megalogger.ino
@@ -596,20 +596,18 @@ void showECUCap()
         PID_EGR_ERROR, PID_COMMANDED_EVAPORATIVE_PURGE, PID_FUEL_LEVEL, PID_CONTROL_MODULE_VOLTAGE, PID_ABSOLUTE_ENGINE_LOAD, PID_AMBIENT_TEMP, PID_COMMANDED_THROTTLE_ACTUATOR, PID_ETHANOL_FUEL,
         PID_FUEL_RAIL_PRESSURE, PID_HYBRID_BATTERY_PERCENTAGE, PID_ENGINE_OIL_TEMP, PID_FUEL_INJECTION_TIMING, PID_ENGINE_FUEL_RATE, PID_ENGINE_TORQUE_DEMANDED, PID_ENGINE_TORQUE_PERCENTAGE};
 
+    lcd.setColor(RGB16_WHITE);
     lcd.setFontSize(FONT_SIZE_MEDIUM);
     for (byte i = 0; i < sizeof(pidlist) / sizeof(pidlist[0]); i += 2) {
-        lcd.setCursor(184, i + 4);
         for (byte j = 0; j < 2; j++) {
             byte pid = pgm_read_byte(pidlist + i + j);
-            lcd.printSpace(2);
+            lcd.setCursor(216 + j * 56 , i + 4);
             lcd.print((int)pid | 0x100, HEX);
             bool valid = obd.isValidPID(pid);
             if (valid) {
                 lcd.setColor(RGB16_GREEN);
                 lcd.draw(tick, 16, 16);
                 lcd.setColor(RGB16_WHITE);
-            } else {
-                lcd.printSpace(2);
             }
         }
     }
@@ -669,30 +667,39 @@ void showStates()
     lcd.setColor(RGB16_WHITE);
 }
 
-void testOBD()
+void testOut()
 {
-    static const char PROGMEM cmds[][6] = {"ATZ\r", "ATE0\r", "ATL1\r", "ATRV\r", "0100\r", "010C\r", "010D\r"};
+    static const char PROGMEM cmds[][6] = {"ATZ\r", "ATL1\r", "ATRV\r", "0100\r", "010C\r", "0902\r"};
     char buf[OBD_RECV_BUF_SIZE];
     lcd.setFontSize(FONT_SIZE_SMALL);
-    lcd.setCursor(0, 12);
+    lcd.setCursor(0, 11);
 
     for (byte i = 0; i < sizeof(cmds) / sizeof(cmds[0]); i++) {
         char cmd[6];
         memcpy_P(cmd, cmds[i], sizeof(cmd));
+        lcd.setColor(RGB16_WHITE);
         lcd.print("Sending ");
         lcd.println(cmd);
+        lcd.setColor(RGB16_CYAN);
         if (obd.sendCommand(cmd, buf)) {
             char *p = strstr(buf, cmd);
             if (p)
                 p += strlen(cmd);
             else
                 p = buf;
-            lcd.println(p);
+            while (*p == '\r') p++;
+            while (*p) {
+                lcd.write(*p);
+                if (*p == '\r' && *(p + 1) != '\r')
+                    lcd.write('\n');
+                p++;
+            }
         } else {
             lcd.println("Timeout");
         }
         delay(1000);
     }
+    lcd.println();
 }
 
 void setup()
@@ -722,7 +729,7 @@ void setup()
             lcd.print("File ID:");
             lcd.println(index);
         } else {
-            lcd.print("No Log File");
+            lcd.print("No File");
         }
     }
 #endif
@@ -748,24 +755,30 @@ void setup()
     obd.begin();
 
     // this will send a bunch of commands and display response
-    testOBD();
+    testOut();
 
     // initialize the OBD until success
     while (!obd.init(OBD_PROTOCOL));
 
     state |= STATE_OBD_READY;
 
-    lcd.setColor(RGB16_YELLOW);
+    lcd.setColor(RGB16_GREEN);
     lcd.setFontSize(FONT_SIZE_MEDIUM);
-    lcd.print("OBD READY!");
-    lcd.setColor(RGB16_WHITE);
+    lcd.println("OBD READY!");
+    lcd.setColor(RGB16_YELLOW);
+
+    char buf[OBD_RECV_BUF_SIZE];
+    if (obd.getVIN(buf)) {
+        lcd.print("VIN:");
+        lcd.print(buf);
+    }
 
     //lcd.setFont(FONT_SIZE_MEDIUM);
     //lcd.setCursor(0, 14);
     //lcd.print("VIN: XXXXXXXX");
 
     showECUCap();
-    delay(2000);
+    delay(3000);
 
     fadeOutScreen();
     initScreen();
-- 
cgit v1.2.3