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: displayModes.cpp
- Branch:
- Metric
- Revision:
- 99:c05abf8e1cdc
- Parent:
- 98:9f8bab96edff
- Parent:
- 97:a25940fd7b5b
- Child:
- 102:fd19f777a0b4
--- a/displayModes.cpp Mon Jun 10 12:00:48 2013 +0000 +++ b/displayModes.cpp Sat Jun 15 18:47:38 2013 +0000 @@ -55,19 +55,20 @@ } void printLog (bool force, bool showButtons){ - static unsigned char lastDisplayLoc = 0; - if(force||displayLoc!=lastDisplayLoc){ //only update if changed + static unsigned char lastldl = 0; + unsigned char ldl=displayLoc; + if(force||ldl!=lastldl){ //only update if changed tt.foreground(Amber); tt.background(Black); tt.cls(); tt.locate(0,6); tt.set_font((unsigned char*) Arial12x12); for(int i=0; i<19; i++){ - printf("%s",displayLog[displayLoc]); - displayLoc=displayLoc>17?0:displayLoc+1; + printf("%s",displayLog[ldl]); + ldl=ldl>17?0:ldl+1; } } - lastDisplayLoc=displayLoc; + lastldl=ldl; } void mainDisplay (bool force, bool showButtons){ @@ -321,6 +322,7 @@ void cpData(bool force, bool showButtons){ short unsigned max, min, jv, i, bd; unsigned avg; + static char step=0; // counter to allow incremental update if(force){ tt.foreground(White); tt.background(Navy); @@ -340,35 +342,49 @@ } else { // Only compute judgement value if min cellpair meets <= 3712mV requirement jv=0; } - tt.cls(); - tt.locate(0,6); - // BatDataBaseG4 * 7 = 224 - 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", + + switch(step){ + case 0: + tt.cls(); + showCP=true; + break; + case 1: + tt.locate(0,6); + // BatDataBaseG4 * 7 = 224 + 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(battData[224+5]),sTemperatureUnit,convertTemperature(battData[224+8]),sTemperatureUnit, convertTemperature(battData[224+11]),sTemperatureUnit,convertTemperature(battData[224+14]),sTemperatureUnit); - tt.locate(0,36); - for(i=0; i<16; i++){ - printf("%02d-%02d : %04d %04d %04d %04d %04d %04d\n", - i*6+1,i*6+6, - (battData[i*12+3]<<8)+battData[i*12+4],(battData[i*12+5]<<8)+battData[i*12+6], - (battData[i*12+7]<<8)+battData[i*12+8],(battData[i*12+9]<<8)+battData[i*12+10], - (battData[i*12+11]<<8)+battData[i*12+12],(battData[i*12+13]<<8)+battData[i*12+14]); + //printf(" MAX MIN AVG CVLI T1 T2 T3 T4\n %04d %04d %04d %04d %02dC %02dC %02dC %02dC\n\n", + // max,min,avg,jv, battData[224+5],battData[224+8],battData[224+11],battData[224+14]); + 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); + tt.rect(8+3*41,16,40+3*41,28,Red); + break; + default: + tt.locate(0,36+(step-2)*48); + 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, + (battData[i*12+3]<<8)+battData[i*12+4],(battData[i*12+5]<<8)+battData[i*12+6], + (battData[i*12+7]<<8)+battData[i*12+8],(battData[i*12+9]<<8)+battData[i*12+10], + (battData[i*12+11]<<8)+battData[i*12+12],(battData[i*12+13]<<8)+battData[i*12+14]); + } + for(i=(step-2)*24; i<(step-1)*24; i++){ + bd=(battData[i*2+3]<<8)+battData[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); + if(bd==min) tt.rect(58+(i%6)*41,34+(int)(i/6)*12,90+(i%6)*41,46+(int)(i/6)*12,Yellow); + if(bd<jv) tt.rect(58+(i%6)*41,34+(int)(i/6)*12,90+(i%6)*41,46+(int)(i/6)*12,Red); + } + } } - 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); - tt.rect(8+3*41,16,40+3*41,28,Red); - for(i=0; i<96; i++){ - bd=(battData[i*2+3]<<8)+battData[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); - if(bd==min) tt.rect(58+(i%6)*41,34+(int)(i/6)*12,90+(i%6)*41,46+(int)(i/6)*12,Yellow); - if(bd<jv) tt.rect(58+(i%6)*41,34+(int)(i/6)*12,90+(i%6)*41,46+(int)(i/6)*12,Red); - } + step=step<5?step+1:0; + if(step==0){ + showCP=false; } - showCP=false; } if((sMode==1)&&showButtons){ tt.foreground(Yellow); @@ -816,9 +832,8 @@ tt.background(Navy); tt.foreground(Yellow); if(force){ + tt.set_font((unsigned char*) Arial12x12); tt.cls(); - toVal=33; - x=50+0*6; tt.locate(x-10,226); printf("sec\n"); @@ -843,26 +858,31 @@ //tt.locate(x-10,226); //printf("year\n"); //tt.line(x,10,x,220,DarkGrey); + toVal=33; } else { - toVal=18;// no need to constantly update the long tc values + toVal=24;// no need to constantly update the long tc values } if(force||lgids!=gids){ // update Y axis when kWh changes - tt.set_font((unsigned char*) Arial12x12); - for(i=0;i<10;i++){ - y=200-i*20; - tt.locate(10,y-8); - if (showMiles){ + //tt.set_font((unsigned char*) Arial12x12); + tt.set_font((unsigned char*) Arial24x23); + //for(i=0;i<10;i++){ + //y=200-i*20; + for(i=3;i<8;i++){ + y=200-(i-3)*40; + tt.locate(0,y-8); + if (showMiles){ printf("%3.0f\n",convertDistance(i*((float)(gids-5)*.075))); // LM - Added metric support + //printf("%2.0f \n",i*((float)(gids-5)*.075)); }else{ printf("%d.0\n",i); } - tt.line(40,y,toVal*6+56,y,DarkGrey); + tt.line(48,y,toVal*6+56,y,DarkGrey); } lgids=gids; } if(updateDTE||force){ - for(i=0;i<10;i++){ - y=200-i*20; + for(i=3;i<8;i++){ + y=200-(i-3)*40; tt.line(40,y,158,y,DarkGrey); } @@ -894,17 +914,16 @@ tt.locate(151,8); printf(" %2.1f\n",miles); } + tt.foreground(Cyan); + tt.set_font((unsigned char*) Arial24x23); + tt.locate(198,70); + printf("%3.1f \n",mpkWh[dtePeriod]); } else { - tt.locate(180,10); + tt.locate(200,10); printf("%3.1f \n",mpkWh[dtePeriod]); } lx=50; - ly=mpkWh[0]*20; - if(ly<200) { - ly=200-ly; - }else{ - ly=0; - } + ly=mpkWh[0]*40; if(dtePeriod==0){ radius=6; color=Yellow; @@ -912,17 +931,20 @@ radius=2; color=Green; } + if(ly<100){ + ly=220; + color=Red; + }else if(ly<320) { + ly=320-ly; + }else{ + ly=0; + } tt.fillcircle(lx,leff[0],radius,Navy); tt.fillcircle(lx,ly,radius,color); for(i=1;i<toVal;i++){ x=50+i*6; - y=mpkWh[i]*20; - if(y<200) { - y=200-y; - }else{ - y=0; - } + y=mpkWh[i]*40; if(i==dtePeriod){ radius=6; color=Yellow; @@ -930,6 +952,14 @@ radius=2; color=Green; } + if(y<100){ + y=220; + color=Red; + }else if(y<320) { + y=320-y; + }else{ + y=0; + } tt.fillcircle(x,leff[i],radius,Navy); tt.line(x-6,leff[i-1],x,leff[i],Navy); leff[i-1]=ly;