Dual CANbus monitor and instrumentation cluster
Dependencies: SPI_TFTx2 TFT_fonts TOUCH_TFTx2 beep mbed
Fork of CANary by
Diff: utility.cpp
- Branch:
- Metric
- Revision:
- 107:e9be732c1ad4
- Parent:
- 106:f016912a03db
- Child:
- 108:29b5a760adc2
diff -r f016912a03db -r e9be732c1ad4 utility.cpp --- a/utility.cpp Fri Jun 28 20:26:11 2013 +0000 +++ b/utility.cpp Sat Jun 29 02:44:02 2013 +0000 @@ -55,6 +55,8 @@ signed short packA; signed long imWs_x4; unsigned short ts; + long temp_adc[6] = {1000,589,487,401,365,0 }; + signed short temp_C[6] = {-270, 130, 230, 320, 360, 760}; secsNoMsg=0; // reset deadman switch if(debugMode||(skin==ggSkin)){ @@ -264,22 +266,30 @@ battTemp_x4=battData[(BatDataBaseG4*7)+5]+battData[(BatDataBaseG4*7)+8]+battData[(BatDataBaseG4*7)+11]+battData[(BatDataBaseG4*7)+14]; // Or =25+(467-ADC)/9.33 (C) // Find hottest temperature - battTemp_x10=467-(battData[(BatDataBaseG4*7)+3]*0x100+battData[(BatDataBaseG4*7)+4]); - j=467-(battData[(BatDataBaseG4*7)+6]*0x100+battData[(BatDataBaseG4*7)+7]); - if(j>battTemp_x10){ + battTemp_x10=battData[(BatDataBaseG4*7)+3]*0x100+battData[(BatDataBaseG4*7)+4]; + j=battData[(BatDataBaseG4*7)+6]*0x100+battData[(BatDataBaseG4*7)+7]; + if(j<battTemp_x10){ + battTemp_x10=j; + } + j=battData[(BatDataBaseG4*7)+9]*0x100+battData[(BatDataBaseG4*7)+10]; + if(j<battTemp_x10){ battTemp_x10=j; } - j=467-(battData[(BatDataBaseG4*7)+9]*0x100+battData[(BatDataBaseG4*7)+10]); - if(j>battTemp_x10){ + j=battData[(BatDataBaseG4*7)+12]*0x100+battData[(BatDataBaseG4*7)+13]; + if(j<battTemp_x10){ battTemp_x10=j; } - j=467-(battData[(BatDataBaseG4*7)+12]*0x100+battData[(BatDataBaseG4*7)+13]); - if(j>battTemp_x10){ - battTemp_x10=j; - } - battTemp_x10*=100; - battTemp_x10/=93; - battTemp_x10+=250; + //interpolate for temperature + char k=0; + while(battTemp_x10<=temp_adc[++k]) { } // Find section in table + j=battTemp_x10-temp_adc[k]; + j*=(temp_C[k]-temp_C[k-1]); + j/=(temp_adc[k]-temp_adc[k-1]); + j+=temp_C[k]; + battTemp_x10=j; + //battTemp_x10*=100; + //battTemp_x10/=93; + //battTemp_x10+=250; SOH_x100=battData[(BatDataBaseG1*7)+29]*0x100+battData[(BatDataBaseG1*7)+30]; Ah_x10000=battData[(BatDataBaseG1*7)+36]*0x10000+battData[(BatDataBaseG1*7)+37]*0x100+battData[(BatDataBaseG1*7)+38]; SOC_x10000=battData[(BatDataBaseG1*7)+32]*0x10000+battData[(BatDataBaseG1*7)+33]*0x100+battData[(BatDataBaseG1*7)+34];