test fork

Dependencies:   SPI_TFTx2 SPI_TFTx2_ILI9341 TFT_fonts TOUCH_TFTx2 mbed

Fork of CANary_9341 by Tick Tock

Revision:
161:71ac85d11f03
Parent:
160:905fe45ed54b
Child:
162:c6545fc0164a
--- a/main.cpp	Wed Nov 20 13:13:54 2013 +0000
+++ b/main.cpp	Thu Nov 21 14:17:35 2013 +0000
@@ -3,16 +3,13 @@
 //To Do:
 // * Add 50% charge option
 // * Add linear efficiency graph with 10 minute values
-// * Subtract accessory power from efficiency history (add back in when displaying)
 // * Add in-device config editor
 // * Change pack volt color when CVLI fails
 // * Add tire pressure cal (40psi for me = FR 38, RR 38.2, FL 37.8, RL 38 - maybe 2psi error on my tire gauge?)
 
-// rev160
-// * Tweaked heater monitor to only issue once per power on/off
-// * Added filtering to timeSync routing (some times set time to bogus value)
-// * Removed debug wait commands from config save and firmware update
-// * Added 3-tone sound messages
+// rev161
+// * Subtract climate control power from stored efficiency data and add current CC power back in for display
+// * Added X axis labels on CP histogram and scaled bar width
 
 #include "mbed.h"
 #include "CAN.h"
@@ -22,7 +19,7 @@
 #include "utility.h"
 #include "displayModes.h"
 #include "TOUCH_TFTx2.h"
-char revStr[7] = "160"; // gg - revision string, max 6 characters
+char revStr[7] = "161"; // gg - revision string, max 6 characters
 
 FATFS USBdrive;
 LocalFileSystem local("local");
@@ -116,6 +113,7 @@
 unsigned short numSsamples = 0;
 float accV = 0;
 float accV2 = 0;
+float CCkW = 0;
 bool playbackEn = false;
 bool playbackOpen = false;
 //float playbackInt = 0.05; //read messages every 50 ms
@@ -469,6 +467,7 @@
                                 } else if (dMode[whichTouched]==config2Screen) { // reset DTE Max/Min
                                     maxTripEff = 0;
                                     minTripEff = 5;
+                                    beep(2000,0.25);
                                 } else if (dMode[whichTouched]==playbackScreen) { // pause/unpause
                                     playbackEn=!playbackEn;
                                     if(playbackEn){
@@ -741,6 +740,7 @@
 
         if(tick){ // Executes once a second
             tick=false;
+            CCkW = (lastMsg[indexLastMsg[0x510]].data[3]&0x7f)*0.125;
             if (miles_trip[0]>0.25) {
                 curEff = miles_trip[0]/kWh_trip[0];
             } else {
@@ -857,17 +857,35 @@
 
             if(numWsamples>0){ // Avoid div0
                 mpkWh[0]=mph[0];
-                kW[0]=((float) mWs_x4)/numWsamples/4e3;     
+                kW[0]=((float) mWs_x4)/numWsamples/4e3;
                 mpkWh[0]/=kW[0];
                 if (mpkWh[0]<0) {
                     mpkWh[0]=99;// negative means inf.
                 }
-            } else {
+                kW[0]-=CCkW; // subtract climate control power from recorded value
+           } else {
                 kW[0]=0;
                 mpkWh[0]=0;
             }
             numWsamples=0;
 
+            if((accOn||playbackEn)&&!charging){ // Calculate averages
+                for(i=1;i<39;i++){
+                    average=mph[i]/timeConstant[i];
+                    mph[i]-=average;
+                    mph[i]+=mph[0];
+                    mpkWh[i]=average;
+                    average=kW[i]/timeConstant[i];
+                    kW[i]-=average;
+                    kW[i]+=kW[0];
+                    average+=CCkW; //add climate control power back in for display
+                    mpkWh[i]/=average;
+                    if (mpkWh[i]<0) {
+                        mpkWh[i]=99;// negative means inf.
+                    }
+               }
+            }
+
             if (!charging){
                 miles_trip[0]+=mph[0]/3600; // per trip
                 miles_trip[1]+=mph[0]/3600; // per charge
@@ -875,7 +893,7 @@
                 kWh_trip[0]+=kW[0]/3600;
                 kWh_trip[1]+=kW[0]/3600;
                 kWh_trip[2]+=kW[0]/3600;
-            } else {
+            } else { // charging so reset per charge trip meter
                 miles_trip[1]=0;
                 kWh_trip[1]=0;
             }
@@ -904,22 +922,6 @@
             Imax=-1000;
             Imin=1000;
 
-            if((accOn||playbackEn)&&!charging){
-                for(i=1;i<39;i++){
-                    average=mph[i]/timeConstant[i];
-                    mph[i]-=average;
-                    mph[i]+=mph[0];
-                    mpkWh[i]=average;
-                    average=kW[i]/timeConstant[i];
-                    kW[i]-=average;
-                    kW[i]+=kW[0];
-                    mpkWh[i]/=average;
-                    if (mpkWh[i]<0) {
-                        mpkWh[i]=99;// negative means inf.
-                    }
-                    //mpkWh[i]=floor(mpkWh[i]*10+0.5)/10; // Round to nearest 10th
-               }
-            }
             if(logCP&&usbEn){
                 if(logOnce){
                     tripLog();