Dual CANbus monitor and instrumentation cluster supporting ILI9341 display controller
Dependencies: SPI_TFTx2_ILI9341 TOUCH_TFTx2_ILI9341 TFT_fonts mbed
Fork of CANary by
Revision 122:138a40892a4c, committed 2013-07-17
- Comitter:
- TickTock
- Date:
- Wed Jul 17 13:48:51 2013 +0000
- Branch:
- Metric
- Parent:
- 121:553faf139a20
- Child:
- 123:a8c0042df617
- Commit message:
- Updated display formatting. Temporarily dumping all 7bb messages to ascii log for exploration.
Changed in this revision
--- a/common.h Thu Jul 11 05:29:18 2013 +0000 +++ b/common.h Wed Jul 17 13:48:51 2013 +0000 @@ -33,6 +33,6 @@ #define BatDataBaseG5 0x2B // 11 frames #define BatDataBaseG6 0x36 // 4 frames #define BatDataBaseG7 0x3A -#define BatDataBufMax 0x1B2 // 7 x 3E bytes +#define BatDataBufMax 0x196 // 7 x 3A bytes #define VP230Sleep 1 // Set to 0 if using VP231 (sleep disables RX) \ No newline at end of file
--- a/displayModes.cpp Thu Jul 11 05:29:18 2013 +0000 +++ b/displayModes.cpp Wed Jul 17 13:48:51 2013 +0000 @@ -5,7 +5,7 @@ char sTemp2[16]; void mainDisplay (bool force, bool showButtons){ - unsigned short gids, SOC, packV_x2; + unsigned short gids, SOC_x10, packV_x2; static unsigned short lgids=0, lSOC=0, lSOH=0, lpackV_x2=0, maxPS=0; static float lmaxTemp=0; static float lkW=0, laccV=0, lmpkWh=0; @@ -15,7 +15,7 @@ msg = lastMsg[indexLastMsg[0x5bc]]; //Get gids gids = (msg.data[0]<<2)+(msg.data[1]>>6); msg = lastMsg[indexLastMsg[0x55b]]; //Get SOC - SOC = (msg.data[0]<<2)+(msg.data[1]>>6); + 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); @@ -44,10 +44,10 @@ tt.foreground(Yellow); tt.set_font((unsigned char*) Arial28x28); } - if(force||SOC!=lSOC){ + if(force||SOC_x10!=lSOC){ tt.locate(200,10); - printf("%4.1f%s\n",(float)SOC/10,"% "); - lSOC=SOC; + printf("%4.1f%s\n",(float)SOC_x10/10,"% "); + lSOC=SOC_x10; } if(force||packV_x2!=lpackV_x2){ tt.locate(200,200); @@ -65,19 +65,30 @@ laccV=accV; } if(force||kW[0]!=lkW){ - tt.locate(180,40); - printf("%3.2fkW \n",kW[0]); + if(kW[0]<-10){ //Right justify + tt.locate(171,40); + printf("%4.2fkW\n",kW[0]); + } else if (kW[0]<0){ + tt.locate(171,40); + printf(" %4.2fkW\n",kW[0]); + } else if (kW[0]<10){ + tt.locate(165,40); + printf(" %4.2fkW\n",kW[0]); + } else { + tt.locate(165,40); + printf(" %4.2fkW\n",kW[0]); + } lkW=kW[0]; } - tt.foreground(DarkGrey); + tt.foreground(LightGrey); if(force||Ah_x10000!=lAh){ tt.locate(10,70); printf("% 4.2fAh \n",(float)Ah_x10000/10000); lAh=Ah_x10000; } if(force||SOH_x100!=lSOH){ - tt.locate(180,70); - printf(" %3.1f%s\n",(float)SOH_x100/100,"% "); + tt.locate(200,70); + printf("%4.1f%s\n",(float)SOH_x100/100,"% "); lSOH=SOH_x100; } }else {//if(skin==ggSkin){ @@ -100,10 +111,10 @@ tt.set_font((unsigned char*) Arial28x28); } - if(force||SOC!=lSOC){ + if(force||SOC_x10!=lSOC){ tt.locate(200,10); - printf("%4.1f%s\n",(float)SOC/10,"% "); - lSOC=SOC; + printf("%4.1f%s\n",(float)SOC_x10/10,"% "); + lSOC=SOC_x10; } if(force||packV_x2!=lpackV_x2){ tt.locate(200,200); @@ -139,7 +150,7 @@ msg = lastMsg[i+indexOffset]; printf("%03x : %02x %02x %02x %02x %02x %02x %02x %02x \n",msg.id,msg.data[0],msg.data[1],msg.data[2],msg.data[3],msg.data[4],msg.data[5],msg.data[6],msg.data[7]); } - if((sMode==1)&&showButtons){ + if(showButtons){ tt.foreground(Yellow); tt.background(DarkCyan); tt.set_font((unsigned char*) Arial12x12); @@ -167,11 +178,10 @@ i++; }// if changed }while(i<19&&j<99); - if((sMode==1)&&showButtons){ + if(showButtons){ tt.foreground(Yellow); tt.background(DarkCyan); tt.set_font((unsigned char*) Arial12x12); - showButton(0,0," <up>","",4,4); showButton(2,0," <down>","",4,4); showButton(1,0," Reset","Baseline",4,4); @@ -210,6 +220,8 @@ tt.locate(6,20+i*60); printf("%3.2f : %3.1f : %2.1f\n",kWh_trip[i],convertDistance(miles_trip[i]),convertDistance(miles_trip[i])/kWh_trip[i]); } + } + if(showButtons){ tt.set_font((unsigned char*) Arial12x12); tt.background(DarkCyan); tt.foreground(Yellow); @@ -220,7 +232,7 @@ } void healthDisplay (bool force, bool showButtons){ - unsigned short gids, SOC; + unsigned short gids, SOC_x10; static unsigned short lgids=0, lSOC=0, lSOH=0; static float lmaxTemp=0, lresr=0, lunlV=0; static unsigned long lAh=0; @@ -229,7 +241,7 @@ msg = lastMsg[indexLastMsg[0x5bc]]; //Get gids gids = (msg.data[0]<<2)+(msg.data[1]>>6); msg = lastMsg[indexLastMsg[0x55b]]; //Get SOC - SOC = (msg.data[0]<<2)+(msg.data[1]>>6); + SOC_x10 = (msg.data[0]<<2)+(msg.data[1]>>6); tt.background(Blue); tt.foreground(Yellow); @@ -260,10 +272,10 @@ printf("%4d gids \n",gids); lgids=gids; } - if(force||SOC!=lSOC){ + if(force||SOC_x10!=lSOC){ tt.locate(10,40); - printf(" %4.1f%s \n",(float)SOC/10,"% SOC"); - lSOC=SOC; + printf(" %4.1f%s \n",(float)SOC_x10/10,"% SOC"); + lSOC=SOC_x10; } if(force||SOH_x100!=lSOH){ tt.locate(10,70); @@ -500,7 +512,7 @@ showCP=false; } } - if((sMode==1)&&showButtons){ + if(showButtons){ tt.foreground(Yellow); tt.background(DarkCyan); tt.set_font((unsigned char*) Arial12x12); @@ -530,7 +542,7 @@ showButton(0,0," GoTo"," Main",4,4); showButton(1,0," GoTo"," Brake",4,4); showButton(2,0," GoTo"," EFF",4,4); - showButton(3,0," GoTo"," DTE",4,4); + showButton(3,0," GoTo","Health",4,4); // middle row showButton(0,1," GoTo","CP Data",4,4); showButton(1,1," GoTo","CP Hist",4,4); @@ -905,7 +917,7 @@ tt.set_font((unsigned char*) Arial12x12); strftime(sTemp1, 32, "%a %m/%d/%Y %X \n", &t); printf("%s",sTemp1); - if((sMode==1)&&showButtons){ + if(showButtons){ switch(dtMode){ case 0: sprintf(sTemp1,"Year"); @@ -1140,57 +1152,58 @@ } void updateDisplay(char display){ - bool changed; + bool changed,showButtons; changed = dMode[display]!=lastDMode[display]; + showButtons = (display==whichTouched)&&(sMode==1); tt.set_display(display); switch (dMode[display]) { case logScreen: - printLog(changed,(display==whichTouched)); + printLog(changed,showButtons); break; case mainScreen: - mainDisplay(changed,(display==whichTouched)); + mainDisplay(changed,showButtons); break; case brakeScreen: - braking(changed,(display==whichTouched)); + braking(changed,showButtons); break; case dteScreen: - dteDisplay(changed,(display==whichTouched),true); + dteDisplay(changed,showButtons,true); break; case effScreen: - dteDisplay(changed,(display==whichTouched),false); + dteDisplay(changed,showButtons,false); break; case monitorScreen: - printLast(changed,(display==whichTouched)); + printLast(changed,showButtons); break; case changedScreen: - printChanged(changed,(display==whichTouched)); + printChanged(changed,showButtons); break; case cpScreen: - cpData(changed||showCP,(display==whichTouched)); + cpData(changed||showCP,showButtons); break; case configScreen: - config(changed,(display==whichTouched)); + config(changed,showButtons); break; case playbackScreen: - pbScreen(changed,(display==whichTouched)); + pbScreen(changed,showButtons); break; case dateScreen: - showDateTime(changed,(display==whichTouched)); + showDateTime(changed,showButtons); break; case cpHistScreen: // gg - hist - cpHistogram(changed||showCP,(display==whichTouched)); + cpHistogram(changed||showCP,showButtons); break; case cpBarScreen: // gg - cpbars - cpBarPlot(changed||showCP,(display==whichTouched)); + cpBarPlot(changed||showCP,showButtons); break; case indexScreen: - showIndex(changed,(display==whichTouched)); + showIndex(changed,showButtons); break; case tripScreen: - tripDisplay(changed,(display==whichTouched)); + tripDisplay(changed,showButtons); break; case healthScreen: - healthDisplay(changed,(display==whichTouched)); + healthDisplay(changed,showButtons); break; default: if (changed){
--- a/main.cpp Thu Jul 11 05:29:18 2013 +0000 +++ b/main.cpp Wed Jul 17 13:48:51 2013 +0000 @@ -1,13 +1,11 @@ // main.cpp // //To Do: -// * USB device detect // * Audible friction brake feedback // * User-configurable watchpoint // * Add 50% charge option // * Tire Pressure Sensor display // * Fix bug in playback while connected to canbus (hangs) -// ** Force regen display to zero when in neutral // * Add coasting regen to regen/braking display // * Change semilog efficiency graph to linear with 10 minute values // * Add additional 79b bank readouts @@ -47,10 +45,8 @@ InterruptIn touchpad(p17); CAN can1(p9, p10); // CAN1 (EV) uses pins 9 and 10 (rx, tx) and pin 8 (rs) DigitalOut can1SleepMode(p8); // Use pin 8 to control the sleep mode of can2 -//DigitalInOut can1SleepMode(p8); // Use pin 8 to control the sleep mode of can2 CAN can2(p30, p29); // CAN2 (CAR) uses pins 30 and 29 (rx, tx) and pin 28 (rs) DigitalOut can2SleepMode(p28); // Use pin 28 to control the sleep mode of can1 -//DigitalInOut can2SleepMode(p28); // Use pin 28 to control the sleep mode of can1 AnalogIn mon12V(p15); TOUCH_TFTx2 tt(p16, p17, p19, p20, p11, p12, p13, p6, p7, p5, "TFT"); // x+,x-,y+,y-,mosi, miso, sclk, cs0, cs1, reset PwmOut dled(p23); @@ -480,7 +476,7 @@ // and re-paint the other screen too, to see new skin there lastDMode[whichTouched ^ 1]=99; // repaint other screen (^ = XOR) } else if (dMode[whichTouched] == indexScreen) { // gg - index - dMode[whichTouched] = dteScreen ; // GoTo DTE Screen + dMode[whichTouched] = healthScreen ; // Goto health screen sMode=0; } else { lastDMode[whichTouched]=99;//repaint to clear highlight
--- a/utility.cpp Thu Jul 11 05:29:18 2013 +0000 +++ b/utility.cpp Wed Jul 17 13:48:51 2013 +0000 @@ -741,14 +741,19 @@ f_lseek(&bfile,0xffffffff); // go to end of file to append strftime(sTemp, 40, "%a %m/%d/%Y %X", &t); f_printf(&bfile,"%s,",sTemp); - sprintf(sTemp,"%d,%5.1f%%,%5.1f%%, %4.2f, %5.1f,%4.1f,%d,%d,%d,%d,%d",gids,(float)SOC/10, (float)SOH_x100/100,(float)Ah_x10000/10000,(float)packV_x2/2,(float)packA_x2/2,max,min,avg,max-min,jv); + sprintf(sTemp,"%3.1f,%d,%5.1f%%,%5.1f%%, %4.2f, %5.1f,%4.1f,%d,%d,%d,%d,%d",accV,gids,(float)SOC/10, (float)SOH_x100/100,(float)Ah_x10000/10000,(float)packV_x2/2,(float)packA_x2/2,max,min,avg,max-min,jv); f_printf(&bfile,"%s,",sTemp); - f_printf(&bfile,"%d,%d,%d,%d,",(battData[(BatDataBaseG4*7)+ 3]<<8)+battData[(BatDataBaseG4*7)+ 4],battData[(BatDataBaseG4*7)+ 5],(battData[(BatDataBaseG4*7)+ 6]<<8)+battData[(BatDataBaseG4*7)+ 7],battData[(BatDataBaseG4*7)+ 8]); + /*f_printf(&bfile,"%d,%d,%d,%d,",(battData[(BatDataBaseG4*7)+ 3]<<8)+battData[(BatDataBaseG4*7)+ 4],battData[(BatDataBaseG4*7)+ 5],(battData[(BatDataBaseG4*7)+ 6]<<8)+battData[(BatDataBaseG4*7)+ 7],battData[(BatDataBaseG4*7)+ 8]); f_printf(&bfile,"%d,%d,%d,%d", (battData[(BatDataBaseG4*7)+ 9]<<8)+battData[(BatDataBaseG4*7)+10],battData[(BatDataBaseG4*7)+11],(battData[(BatDataBaseG4*7)+12]<<8)+battData[(BatDataBaseG4*7)+13],battData[(BatDataBaseG4*7)+14]); for(i=0; i<96; i++) { bd=(battData[BatDataBaseG2*7+i*2+3]<<8)+battData[BatDataBaseG2*7+i*2+4]; f_printf(&bfile,",%d",bd); + }*/ + // temporariliy dump everything + for(i=0; i<BatDataBufMax; i++) { + f_printf(&bfile,",%02x",battData[i]); } + f_printf(&bfile,"\r\n"); f_close(&bfile); }
--- a/utility.h Thu Jul 11 05:29:18 2013 +0000 +++ b/utility.h Wed Jul 17 13:48:51 2013 +0000 @@ -65,6 +65,7 @@ extern char revStr[7]; // gg - version extern bool debugMode; extern bool shunt[96]; +extern float accV; extern "C" { void mbed_reset();