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:
180:5fdeeb86f3a3
Parent:
179:e4094e55f079
Child:
181:396fdcceefd2
--- a/main.cpp	Sun Mar 23 22:04:44 2014 +0000
+++ b/main.cpp	Mon Mar 24 01:18:05 2014 +0000
@@ -11,7 +11,8 @@
 // * Be more efficient with write buffer (use msgLen instead of always storing 8 bytes)
 
 
-// rev179
+// rev180
+// added wh lookup table with correction from whpg real use
 
 #include "mbed.h"
 #include "CAN.h"
@@ -22,7 +23,7 @@
 #include "displayModes.h"
 #include "TOUCH_TFTx2.h"
 
-char revStr[7] = "179";
+char revStr[7] = "180";
 unsigned long maxTarget = 1000;
 FATFS USBdrive;
 LocalFileSystem local("local");
@@ -183,7 +184,8 @@
 bool ignoreDayData = true;
 unsigned short cgids,lgids=0;
 unsigned short whpg[300]={0};
-unsigned short wh[300]={0};
+float wh[300];
+float maxWhpg,minWh,whOff;
 
 int main() {
     char sTemp[40];
@@ -263,10 +265,9 @@
         if(!feof(hfile)){
             fscanf(hfile,"%f %f\r\n",&maxTripCCkWh,&minTripCCkWh);
         }
-        if(!feof(hfile)){
-            for(i=0;i<300;i++){
-                fscanf(hfile,"%d\r\n",&wh[i]);
-            }
+        for(i=0;i<300;i++){
+            if(feof(hfile)) break;
+            fscanf(hfile,"%f\r\n",&wh[i]);
         }
         fclose(hfile);
         printMsg("History Loaded.\n"); // History loaded
@@ -549,6 +550,9 @@
                                         fprintf(hfile,"%f %f\r\n",maxTripMiles,minTripMiles); // Save max and min
                                         fprintf(hfile,"%f %f\r\n",maxTripkWh,minTripkWh); // Save max and min
                                         fprintf(hfile,"%f %f\r\n",maxTripCCkWh,minTripCCkWh); // Save max and min
+                                        for(i=0;i<300;i++){
+                                            fprintf(hfile,"%f\r\n",wh[i]);
+                                        }
                                         fclose(hfile);
                                     }
                                     beep(2000,0.25);
@@ -868,6 +872,9 @@
                     fprintf(hfile,"%f %f\r\n",maxTripMiles,minTripMiles); // Save max and min
                     fprintf(hfile,"%f %f\r\n",maxTripkWh,minTripkWh); // Save max and min
                     fprintf(hfile,"%f %f\r\n",maxTripCCkWh,minTripCCkWh); // Save max and min
+                    for(i=0;i<300;i++){
+                        fprintf(hfile,"%f\r\n",wh[i]);
+                    }
                     fclose(hfile);
                 }
             }
@@ -902,7 +909,27 @@
                     CCkWh_trip[3]=0;
                     ignoreDayData=false;
                     lt=t; // Remember when counters were cleared
-                    for(i=0;i<300;i++){ // Clear whpg array
+                    maxWhpg=0;
+                    minWh=0;
+                    whOff=0;
+                    // Adjust wh lookup with whpg data weighted 20% and clear array
+                    for(i=1;i<300;i++){
+                        if(whpg[i]>maxWhpg){
+                            maxWhpg=whpg[i];
+                            minWh=wh[i];
+                        }
+                        if(minWh>0){
+                            if((whpg[i]==0)&&(whpg[i-1]>0)){ //Remember the offset at the end of the measured range
+                                whOff = minWh+maxWhpg-wh[i];
+                            }
+                            wh[i] *= 4;
+                            if(whOff>0){ // Apply offset to all level above measured range
+                                wh[i] += wh[i]+whOff;
+                            }else{ // Apply adjustment to measured range
+                                wh[i] += minWh+maxWhpg-whpg[i];
+                            }
+                            wh[i] /=5;
+                        }
                         whpg[i]=0;
                     }
                 }