Dual CANbus monitor and instrumentation cluster
Dependencies: SPI_TFTx2 TFT_fonts TOUCH_TFTx2 beep mbed
Fork of CANary by
Diff: displayModes.cpp
- Branch:
- Metric
- Revision:
- 124:0d622967b764
- Parent:
- 123:a8c0042df617
- Child:
- 125:f58b7ab2abee
diff -r a8c0042df617 -r 0d622967b764 displayModes.cpp --- a/displayModes.cpp Fri Jul 19 12:48:10 2013 +0000 +++ b/displayModes.cpp Sat Jul 20 03:37:28 2013 +0000 @@ -5,8 +5,8 @@ char sTemp2[16]; void mainDisplay (bool force, bool showButtons){ - unsigned short gids, SOC_x10, packV_x2; - static unsigned short lgids=0, lSOC=0, lSOH=0, lpackV_x2=0, maxPS=0; + unsigned short gids, SOC_x10, packV_x2, tireP; + static unsigned short lgids=0, lSOC=0, lSOH=0, lpackV_x2=0, ltireP=0, maxPS=0; static float lmaxTemp=0; static float lkW=0, laccV=0, lmpkWh=0; static unsigned long lAh=0; @@ -18,7 +18,8 @@ SOC_x10 = (msg.data[0]<<2)+(msg.data[1]>>6); msg = lastMsg[indexLastMsg[0x1db]]; //Get pack volts packV_x2 = (msg.data[2]<<2)+(msg.data[3]>>6); - + msg = lastMsg[indexLastMsg[0x385]]; //Get tire pressure + tireP = msg.data[2]+msg.data[3]+msg.data[4]+msg.data[5]; tt.background(Navy); tt.foreground(Yellow); @@ -37,30 +38,51 @@ printf("%4.1f kWh \n",(float)(gids-5)*0.075); tt.set_font((unsigned char*) SCProSB31x55); tt.foreground(Green); - tt.locate(60,106); + tt.locate(60,96); printf("%4.1f %s \n",convertDistance(mpkWh[dtePeriod]*((float)(gids-5)*.075)),distanceUnit()); //LM - add metric conversion lgids=gids; lmpkWh=mpkWh[dtePeriod]; tt.foreground(Yellow); tt.set_font((unsigned char*) Arial28x28); } + if(force||tireP!=ltireP){ + tt.foreground(LightGrey); + if(msg.data[6]&0x80){ + tt.locate(40,150); + printf("%3.1f\n",(float)msg.data[2]/4); + } + if(msg.data[6]&0x40){ + tt.locate(114,150); + printf("%3.1f\n",(float)msg.data[3]/4); + } + if(msg.data[6]&0x20){ + tt.locate(40,178); + printf("%3.1f\n",(float)msg.data[4]/4); + } + if(msg.data[6]&0x10){ + tt.locate(114,178); + printf("%3.1f\n",(float)msg.data[5]/4); + } + tt.foreground(Yellow); + ltireP=tireP; + } if(force||SOC_x10!=lSOC){ tt.locate(200,10); printf("%4.1f%s\n",(float)SOC_x10/10,"% "); lSOC=SOC_x10; } if(force||packV_x2!=lpackV_x2){ - tt.locate(200,200); + tt.locate(200,206); printf("%4.1fV \n",(float)packV_x2/2); lpackV_x2=packV_x2; } if(force||maxTemp!=lmaxTemp){ - tt.locate(200,170); + tt.locate(200,176); printf("%4.1f%s\n",convertTemperature(maxTemp),temperatureUnit()); lmaxTemp=maxTemp; } if(force||accV!=laccV){ - tt.locate(20,200); + tt.locate(20,206); printf("%3.1fV \n",accV); laccV=accV; } @@ -87,7 +109,7 @@ lAh=Ah_x10000; } if(force||SOH_x100!=lSOH){ - tt.locate(200,70); + tt.locate(206,70); printf("%4.1f%s\n",(float)SOH_x100/100,"% "); lSOH=SOH_x100; } @@ -234,7 +256,7 @@ void healthDisplay (bool force, bool showButtons){ unsigned short gids, SOC_x10; static unsigned short lgids=0, lSOC=0, lSOH=0; - static float lTire=0, lresr=0, lunlV=0; + static float lmaxTemp=0, lresr=0, lunlV=0; static unsigned long lAh=0; CANMessage msg; @@ -287,22 +309,21 @@ printf(" %4.2f Ah cap \n",(float)Ah_x10000/10000); lAh=Ah_x10000; } + if(force||maxTemp!=lmaxTemp){ + tt.locate(10,130); + printf(" %4.1f %s (max) \n",convertTemperature(maxTemp),temperatureUnit()); + lmaxTemp=maxTemp; + } if(force||unloadedV_x2!=lunlV){ - tt.locate(10,130); + tt.locate(10,160); printf(" %4.1f V \n",unloadedV_x2/2); lunlV=unloadedV_x2; } if(force||Resr!=lresr){ - tt.locate(10,160); + tt.locate(10,190); printf(" %3.0f mOhms \n",Resr*1000); lresr=Resr; } - if(force||(queryData[DataBaseG7*7+8]!=lTire)){ - tt.locate(10,190); - printf("%3.1f %3.1f %3.1f %3.1f\n",(float)queryData[DataBaseG7*7+5]/4,(float)queryData[DataBaseG7*7+6]/4,(float)queryData[DataBaseG7*7+7]/4,(float)queryData[DataBaseG7*7+8]/4); - lTire=queryData[DataBaseG7*7+8]; - } - } void braking (bool force, bool showButtons, bool prdata=false){ @@ -461,7 +482,7 @@ min=9999; avg=0; for(i=0; i<96; i++){ - bd=(queryData[DataBaseG2*7+i*2+3]<<8)+queryData[DataBaseG2*7+i*2+4]; + bd=(battData[BatDataBaseG2*7+i*2+3]<<8)+battData[BatDataBaseG2*7+i*2+4]; avg+=bd; if(bd>max) max=bd; if(bd<min) min=bd; @@ -482,8 +503,8 @@ case 1: tt.locate(0,6); printf(" MAX MIN AVG CVLI T1 T2 T3 T4\n %04d %04d %04d %04d %2.0f%s %2.0f%s %2.0f%s %2.0f%s\n\n", - max,min,avg,jv, convertTemperature(queryData[DataBaseG4*7+5]),sTemperatureUnit,convertTemperature(queryData[DataBaseG4*7+8]),sTemperatureUnit, - convertTemperature(queryData[DataBaseG4*7+11]),sTemperatureUnit,convertTemperature(queryData[DataBaseG4*7+14]),sTemperatureUnit); + max,min,avg,jv, convertTemperature(battData[BatDataBaseG4*7+5]),sTemperatureUnit,convertTemperature(battData[BatDataBaseG4*7+8]),sTemperatureUnit, + convertTemperature(battData[BatDataBaseG4*7+11]),sTemperatureUnit,convertTemperature(battData[BatDataBaseG4*7+14]),sTemperatureUnit); tt.rect(8+0*41,16,40+0*41,28,Green); tt.rect(8+1*41,16,40+1*41,28,Yellow); //tt.rect(8+2*41,16,40+2*41,28,White); @@ -494,12 +515,12 @@ for(i=(step-2)*4; i<(step-1)*4; i++){ printf("%02d-%02d : %04d %04d %04d %04d %04d %04d\n", i*6+1,i*6+6, - (queryData[DataBaseG2*7+i*12+3]<<8)+queryData[DataBaseG2*7+i*12+4],(queryData[DataBaseG2*7+i*12+5]<<8)+queryData[DataBaseG2*7+i*12+6], - (queryData[DataBaseG2*7+i*12+7]<<8)+queryData[DataBaseG2*7+i*12+8],(queryData[DataBaseG2*7+i*12+9]<<8)+queryData[DataBaseG2*7+i*12+10], - (queryData[DataBaseG2*7+i*12+11]<<8)+queryData[DataBaseG2*7+i*12+12],(queryData[DataBaseG2*7+i*12+13]<<8)+queryData[DataBaseG2*7+i*12+14]); + (battData[BatDataBaseG2*7+i*12+3]<<8)+battData[BatDataBaseG2*7+i*12+4],(battData[BatDataBaseG2*7+i*12+5]<<8)+battData[BatDataBaseG2*7+i*12+6], + (battData[BatDataBaseG2*7+i*12+7]<<8)+battData[BatDataBaseG2*7+i*12+8],(battData[BatDataBaseG2*7+i*12+9]<<8)+battData[BatDataBaseG2*7+i*12+10], + (battData[BatDataBaseG2*7+i*12+11]<<8)+battData[BatDataBaseG2*7+i*12+12],(battData[BatDataBaseG2*7+i*12+13]<<8)+battData[BatDataBaseG2*7+i*12+14]); } for(i=(step-2)*24; i<(step-1)*24; i++){ - bd=(queryData[DataBaseG2*7+i*2+3]<<8)+queryData[DataBaseG2*7+i*2+4]; + bd=(battData[BatDataBaseG2*7+i*2+3]<<8)+battData[BatDataBaseG2*7+i*2+4]; if(bd>0){ if(bd==max) tt.rect(58+(i%6)*41,34+(int)(i/6)*12,90+(i%6)*41,46+(int)(i/6)*12,Green); //if(bd==avg) tt.rect(58+(i%6)*41,34+(int)(i/6)*12,90+(i%6)*41,46+(int)(i/6)*12,White); @@ -584,7 +605,7 @@ // calc each cell-pair voltage, find max and min for(i=0; i<96; i++){ - bd=(queryData[DataBaseG2*7+i*2+3]<<8)+queryData[DataBaseG2*7+i*2+4]; + bd=(battData[BatDataBaseG2*7+i*2+3]<<8)+battData[BatDataBaseG2*7+i*2+4]; nBar[i] = bd; // init to bar height avg+=bd; if(bd>max) max=bd; @@ -638,14 +659,14 @@ } // values, for now - // DataBaseG4 * 7 = 280 + // BatDataBaseG4 * 7 = 280 tt.locate( 0, yWinMax+40 ); char* sTemperatureUnit = temperatureUnit(); printf(" MAX MIN AVG CVLI T1 T2 T3 T4\n %04d %04d %04d %04d %2.0f%s %2.0f%s %2.0f%s %2.0f%s\n\n", - max,min,avg,jv, convertTemperature(queryData[DataBaseG4*7+5]),sTemperatureUnit,convertTemperature(queryData[DataBaseG4*7+8]),sTemperatureUnit, - convertTemperature(queryData[DataBaseG4*7+11]),sTemperatureUnit,convertTemperature(queryData[DataBaseG4*7+14]),sTemperatureUnit); + max,min,avg,jv, convertTemperature(battData[BatDataBaseG4*7+5]),sTemperatureUnit,convertTemperature(battData[BatDataBaseG4*7+8]),sTemperatureUnit, + convertTemperature(battData[BatDataBaseG4*7+11]),sTemperatureUnit,convertTemperature(battData[BatDataBaseG4*7+14]),sTemperatureUnit); //printf(" MAX MIN AVG CVLI T1 T2 T3 T4\n %04d %04d %04d %04d %02dC %02dC %02dC %02dC\n\n", - // max,min,avg,jv, queryData[DataBaseG4*7+5],queryData[DataBaseG4*7+8], queryData[DataBaseG4*7+11],queryData[DataBaseG4*7+14]); + // max,min,avg,jv, battData[BatDataBaseG4*7+5],battData[BatDataBaseG4*7+8], battData[BatDataBaseG4*7+11],battData[BatDataBaseG4*7+14]); // label the X axis (approximate) tt.locate( 2, yWinMax+5); printf("%04d", min ); @@ -711,7 +732,7 @@ min=9999; avg=0; for(i=0; i<96; i++){ - bd=(queryData[DataBaseG2*7+i*2+3]<<8)+queryData[DataBaseG2*7+i*2+4]; + bd=(battData[BatDataBaseG2*7+i*2+3]<<8)+battData[BatDataBaseG2*7+i*2+4]; avg+=bd; if(bd>max) max=bd; if(bd<min) min=bd; @@ -749,7 +770,7 @@ // do the bin counting for(int i=0; i<96; i++){ - bd=(queryData[DataBaseG2*7+i*2+3]<<8)+queryData[DataBaseG2*7+i*2+4] - min ; + bd=(battData[BatDataBaseG2*7+i*2+3]<<8)+battData[BatDataBaseG2*7+i*2+4] - min ; if( bd > iBinValMax ) bd = iBinValMax ; nBin[bd] ++ ; } @@ -768,14 +789,14 @@ } // the values, for now - // DataBaseG4 * 7 = 280 + // BatDataBaseG4 * 7 = 280 tt.locate( 0, yWinMax+40 ); char* sTemperatureUnit = temperatureUnit(); printf(" MAX MIN AVG CVLI T1 T2 T3 T4\n %04d %04d %04d %04d %2.0f%s %2.0f%s %2.0f%s %2.0f%s\n\n", - max,min,avg,jv, convertTemperature(queryData[DataBaseG4*7+5]),sTemperatureUnit,convertTemperature(queryData[DataBaseG4*7+8]),sTemperatureUnit, - convertTemperature(queryData[DataBaseG4*7+11]),sTemperatureUnit,convertTemperature(queryData[DataBaseG4*7+14]),sTemperatureUnit); + max,min,avg,jv, convertTemperature(battData[BatDataBaseG4*7+5]),sTemperatureUnit,convertTemperature(battData[BatDataBaseG4*7+8]),sTemperatureUnit, + convertTemperature(battData[BatDataBaseG4*7+11]),sTemperatureUnit,convertTemperature(battData[BatDataBaseG4*7+14]),sTemperatureUnit); //printf(" MAX MIN AVG CVLI T1 T2 T3 T4\n %04d %04d %04d %04d %02dC %02dC %02dC %02dC\n\n", - // max,min,avg,jv, queryData[DataBaseG2*7+DataBaseG4*7+5],queryData[DataBaseG2*7+DataBaseG4*7+8], queryData[DataBaseG2*7+DataBaseG4*7+11],queryData[DataBaseG2*7+DataBaseG4*7+14]); + // max,min,avg,jv, battData[BatDataBaseG2*7+BatDataBaseG4*7+5],battData[BatDataBaseG2*7+BatDataBaseG4*7+8], battData[BatDataBaseG2*7+BatDataBaseG4*7+11],battData[BatDataBaseG2*7+BatDataBaseG4*7+14]); //--------------- // show the bars