Dual CANbus monitor and instrumentation cluster supporting ILI9341 display controller
Dependencies: SPI_TFTx2_ILI9341 TOUCH_TFTx2_ILI9341 TFT_fonts mbed
Fork of CANary by
Diff: main.cpp
- 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; } }