From 419e04efbdd1498a3f726c3a2d49d429fcb0cf92 Mon Sep 17 00:00:00 2001
From: Stanley Huang <stanleyhuangyc@gmail.com>
Date: Sat, 20 Apr 2013 12:42:15 +0800
Subject: fix data interval bug and adapt to LCD1602

---
 obdlogger/obdlogger.ino | 52 ++++++++++++++++++++++++++++++-------------------
 1 file changed, 32 insertions(+), 20 deletions(-)

(limited to 'obdlogger')

diff --git a/obdlogger/obdlogger.ino b/obdlogger/obdlogger.ino
index 6956242..1f6bd2b 100644
--- a/obdlogger/obdlogger.ino
+++ b/obdlogger/obdlogger.ino
@@ -14,8 +14,8 @@
 #include "MPU6050.h"
 
 //#define SD_CS_PIN 4 // ethernet shield with SD
-#define SD_CS_PIN 7 // microduino
-//#define SD_CS_PIN 10 // SD breakout
+//#define SD_CS_PIN 7 // microduino
+#define SD_CS_PIN 10 // SD breakout
 
 #define GPS_BAUDRATE 4800 /* bps */
 
@@ -25,7 +25,7 @@
 #define PID_GPS_ALTITUDE 0xF03
 #define PID_GPS_SPEED 0xF04
 
-#define DATASET_INTERVAL 1000 /* ms */
+#define DATASET_INTERVAL 250 /* ms */
 
 // GPS logging can only be enabled when there is additional serial UART
 #if defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega644P__)
@@ -112,7 +112,7 @@ bool ShowCardInfo()
         lcd.print(buf);
         return true;
   } else {
-      lcd.setCursor(0, 1);
+        lcd.setCursor(0, 1);
         lcd.print("No SD Card      ");
         return false;
   }
@@ -131,6 +131,7 @@ static void CheckSD()
             continue;
         }
 
+        delay(1000);
         SD.begin(SD_CS_PIN);
 
         // determine file name
@@ -146,6 +147,7 @@ static void CheckSD()
         lcd.print("SD error  ");
     }
 
+    lcd.clearLine(2);
     lcd.setCursor(0, 2);
     lcd.print(filename);
 
@@ -161,11 +163,12 @@ static void CheckSD()
 
 void InitScreen()
 {
+    byte n = lcd.getLines() <= 2 ? 6 : 9;
     lcd.clear();
     lcd.backlight(true);
-    lcd.setCursor(9, 0);
+    lcd.setCursor(n, 0);
     lcd.print("kph");
-    lcd.setCursor(9, 1);
+    lcd.setCursor(n, 1);
     lcd.print("rpm");
 }
 
@@ -174,7 +177,10 @@ void setup()
     lcd.begin();
     lcd.clear();
     lcd.backlight(true);
-    lcd.print("Initializing");
+    lcd.print("OBD/GPS Logger");
+    lcd.setCursor(0, 1);
+    lcd.print("Initializing...");
+    delay(2000);
 
     // start serial communication at the adapter defined baudrate
     OBDUART.begin(OBD_SERIAL_BAUDRATE);
@@ -184,16 +190,20 @@ void setup()
     CheckSD();
 
     // initiate OBD-II connection until success
+    lcd.clearLine(3);
     lcd.setCursor(0, 3);
     lcd.print("OBD:No");
 
 #ifdef ENABLE_GPS
     Serial1.begin(GPS_BAUDRATE);
-    delay(100);
-    if (Serial1.available()) {
-        lcd.setCursor(9, 3);
-        lcd.print("GPS:No");
-    }
+    unsigned long t = millis();
+    do {
+        if (Serial1.available()) {
+            lcd.setCursor(9, 3);
+            lcd.print("GPS:No");
+            break;
+        }
+    } while (millis() - t <= 1000);
 #endif
 
     while (!obd.Init());
@@ -235,13 +245,15 @@ void ProcessGPSData(char c)
         gps.get_position(&lat, &lon, &fix_age);
         len = sprintf(databuf, "%d,F02,%ld %ld\n", (int)(curTime - lastTime), lat, lon);
         sdfile.write((uint8_t*)databuf, len);
-        // display LAT/LON
-        sprintf(databuf, "%3d.%ld", (int)(lat / 100000), lat % 100000);
-        lcd.setCursor(0, 2);
-        lcd.print(databuf);
-        sprintf(databuf, "%3d.%ld", (int)(lon / 100000), lon % 100000);
-        lcd.setCursor(0, 3);
-        lcd.print(databuf);
+        // display LAT/LON if screen is big enough
+        if (lcd.getLines() > 3) {
+            sprintf(databuf, "%3d.%ld", (int)(lat / 100000), lat % 100000);
+            lcd.setCursor(0, 2);
+            lcd.print(databuf);
+            sprintf(databuf, "%3d.%ld", (int)(lon / 100000), lon % 100000);
+            lcd.setCursor(0, 3);
+            lcd.print(databuf);
+        }
     }
     len = sprintf(databuf, "%d,F03,%ld %ld\n", (int)(curTime - lastTime), gps.speed() * 1852 / 100);
     sdfile.write((uint8_t*)databuf, len);
@@ -310,7 +322,7 @@ void RetrieveData(byte pid)
 void loop()
 {
     static char count = 0;
-    static unsigned long t = millis();
+    unsigned long t = millis();
 
     switch (count++) {
     case 0:
-- 
cgit v1.2.3