Dual CANbus monitor and instrumentation cluster supporting ILI9341 display controller

Dependencies:   SPI_TFTx2_ILI9341 TOUCH_TFTx2_ILI9341 TFT_fonts mbed

Fork of CANary by Tick Tock

Revision:
39:eef8beac7411
Parent:
38:155ec32c5e91
Child:
40:0e6e71a7323f
--- a/utility.cpp	Sun Mar 24 17:26:09 2013 +0000
+++ b/utility.cpp	Mon Mar 25 15:13:15 2013 +0000
@@ -351,4 +351,60 @@
     set_time(mktime(&t));
 }
 
+void logPackVoltages() { // Turbo3 - routine to dump CP values to text file
+    char sTemp[40];
+    struct tm t; // pointer to a static tm structure
+    short unsigned max, min, jv, i, bd;
+    unsigned avg;
+    unsigned short gids, SOC, packV;
+    signed short packA;
+    time_t seconds ;
+    
+    CANMessage msg;
+    
+    seconds = time(NULL); // Turbo3
+    t = *localtime(&seconds) ; // Turbo3 
+    
+    msg = lastMsg[indexLastMsg[0x5bc]]; //Get gids
+    gids = (msg.data[0]<<2)+(msg.data[1]>>6);
+    msg = lastMsg[indexLastMsg[0x55b]]; //Get SOC
+    SOC = (msg.data[0]<<2)+(msg.data[1]>>6);
+    msg = lastMsg[indexLastMsg[0x1db]]; //Get pack volts
+    packV = (msg.data[2]<<2)+(msg.data[3]>>6);
+    packA = (msg.data[0]<<3)+(msg.data[1]>>5);
+    if (packA & 0x400) packA |= 0xf800;
+    
+    max=0;
+    min=9999;
+    avg=0;
+    for(i=0; i<96; i++) {
+        bd=(battData[i*2+3]<<8)+battData[i*2+4];
+        avg+=bd;
+        if(bd>max) max=bd;
+        if(bd<min) min=bd;
+    }
+    avg /= 96;
+    if(min<3713) {
+        jv=avg-(max-avg)*1.5;
+    } else { // Only compute judgement value if min cellpair meets <= 3712mV requirement
+        jv=0;
+    }
+    
+    FILE *bfile;
+    //bfile = fopen("/local/batvolt.txt", "a");
+    bfile = fopen("/usb/batvolt.txt", "a");
+    if(bfile!=NULL) {
+        strftime(sTemp, 40, "%a %m/%d/%Y %X", &t);
+        fprintf(bfile,"%s,%d,%5.1f%%,%5.1f,%5.1f,%d,%d,%d,%d,%d",sTemp,gids,(float)SOC/10,(float)packV/2,(float)packA/2,max,min,avg,max-min,jv);
+        fprintf(bfile,"%d,%d,%d,%d,",(battData[224+ 3]<<8)+battData[224+ 4],battData[224+ 5],(battData[224+ 6]<<8)+battData[224+ 7],battData[224+ 8]);
+        fprintf(bfile,"%d,%d,%d,%d", (battData[224+ 9]<<8)+battData[224+10],battData[224+11],(battData[224+12]<<8)+battData[224+13],battData[224+14]);
+        for(i=0; i<96; i++) {
+            bd=(battData[i*2+3]<<8)+battData[i*2+4];
+            fprintf(bfile,",%d",bd);
+        }
+        fprintf(bfile,"\r\n");
+        fclose(bfile);
+    }
+    logCP=false;
+}