Attempts to merge SPI_TFT2 & SPI_TFT_ILI9341
Dependencies: SPI_TFTx2 TFT_fonts TOUCH_TFTx2 mbed
Fork of CANary by
Revision 132:08748a67280a, committed 2013-07-24
- Comitter:
- TickTock
- Date:
- Wed Jul 24 12:29:22 2013 +0000
- Parent:
- 131:0d926c080a65
- Child:
- 133:b0675d9d11dd
- Commit message:
- Added max and min DTE to main display. Put mbed to sleep during charging if not logging.
Changed in this revision
--- a/displayModes.cpp Wed Jul 24 11:20:08 2013 +0000 +++ b/displayModes.cpp Wed Jul 24 12:29:22 2013 +0000 @@ -35,15 +35,25 @@ printf("%3d sep %3d max\n",pointerSep,maxPS); } tt.locate(10,40); - printf("%4.1f kWh \n",(float)(gids-5)*0.075); + float useable_kWh = (float)(gids-5)*0.075; + printf("%4.1f kWh \n",useable_kWh); + // Display DTE tt.set_font((unsigned char*) SCProSB31x55); tt.foreground(Green); tt.locate(60,80); - printf("%4.1f %s \n",convertDistance(mpkWh[dtePeriod]*((float)(gids-5)*.075)),distanceUnit()); //LM - add metric conversion + printf("%4.1f %s \n",convertDistance(mpkWh[dtePeriod]*useable_kWh),distanceUnit()); //LM - add metric conversion lgids=gids; lmpkWh=mpkWh[dtePeriod]; - tt.foreground(Yellow); - tt.set_font((unsigned char*) Arial28x28); + if(minTripEff<10){ + // Display max & min DTE + tt.set_font((unsigned char*) Arial12x12_prop); + tt.locate(5,120); + printf("%3.1f \n",convertDistance(minTripEff*useable_kWh)); + tt.locate(280,120); + printf("%4.1f \n",convertDistance(maxTripEff*useable_kWh)); + tt.foreground(Yellow); + tt.set_font((unsigned char*) Arial28x28); + } } if(force||SOC_x10!=lSOC){ tt.locate(200,10); @@ -292,7 +302,7 @@ } if(force||SOH_x100!=lSOH){ tt.locate(10,70); - printf(" %4.1f,%4.1f %s \n",(float)SOH_x2/2,(float)SOH_x100/100,"% SOH"); + printf(" %4.1f%s,%4.1f%s \n",(float)SOH_x2/2,"%",(float)SOH_x100/100,"% SOH"); lSOH=SOH_x100; } if(force||Ah_x10000!=lAh){
--- a/displayModes.h Wed Jul 24 11:20:08 2013 +0000 +++ b/displayModes.h Wed Jul 24 12:29:22 2013 +0000 @@ -58,6 +58,7 @@ extern float unloadedV_x2,Resr,curRmax,curRmin,redRmax,redRmin,incRmax,incRmin; extern signed short Imax, Imin; extern bool showHealth; +extern float maxTripEff, minTripEff; extern "C" { void printLast (bool force, bool showButtons);
--- a/main.cpp Wed Jul 24 11:20:08 2013 +0000 +++ b/main.cpp Wed Jul 24 12:29:22 2013 +0000 @@ -20,7 +20,7 @@ #include "displayModes.h" #include "TOUCH_TFTx2.h" -char revStr[7] = "131"; // gg - revision string, max 6 characters +char revStr[7] = "132"; // gg - revision string, max 6 characters FATFS USBdrive; LocalFileSystem local("local"); @@ -74,9 +74,9 @@ volatile int writePointer = 0; int readPointer=0; volatile unsigned short secsNoCarCanMsg = 0; +volatile unsigned short secsNoEvCanMsg = 0; volatile unsigned short secsNoTouch = 0; -volatile bool carCanIdle; -volatile bool userIdle; +volatile bool carCanIdle,evCanIdle,userIdle; bool touched=false; //flag to read touchscreen unsigned char whichTouched = 0; char counter = 0; @@ -117,6 +117,8 @@ unsigned char dtePeriod = 14; //ten minute averaging interval float kWh_trip[3]={0}; float miles_trip[3]={0}; +float maxTripEff = 0; +float minTripEff = 99; float mph[39]={0}; float kW[39]={0}; float mpkWh[39]={0}; @@ -143,8 +145,6 @@ bool moving=false; int main() { - //can1SleepMode.mode(OpenDrain); - //can2SleepMode.mode(OpenDrain); char sTemp[40]; unsigned long secs; unsigned char i,j,display=0,lwt=0; @@ -184,6 +184,7 @@ printMsg(sTemp); // revision secsNoCarCanMsg = 0; + secsNoEvCanMsg = 0; //read efficiency history data hfile = fopen("/local/ehist.cny", "r"); @@ -285,7 +286,7 @@ led4=false; } } // if logOpen - if (carCanIdle&&userIdle&&!playbackEn) { // canbus idle --> sleep to save power + if (carCanIdle && (evCanIdle || !logOpen) && userIdle && !playbackEn) { // canbus idle --> sleep to save power if (repeatPoll) { // stop autopolling if enabled autoPoll.detach(); } @@ -305,7 +306,7 @@ led4=0; dled=0; // turn off display secs = time(NULL); // seconds past 12:00:00 AM 1 Jan 1900 - while (secsNoCarCanMsg>canTimeout && !touched) { + while (secsNoCarCanMsg>canTimeout && (secsNoEvCanMsg>canTimeout || !logOpen) && !touched) { //DeepPowerDown(); tt.wfi(); //enable touch interrupt //__wfi(); // freeze CPU and wait for interrupt (from canbus or touch) @@ -315,6 +316,7 @@ lastDMode[1]=99; secsNoTouch=2; carCanIdle=secsNoCarCanMsg>canTimeout; + evCanIdle=secsNoEvCanMsg>canTimeout; dled=0.8; // turn on display LED seconds = time(NULL); t = *localtime(&seconds) ; @@ -684,6 +686,14 @@ if(laccOn&&!accOn){ // Car turned off saveDmode=dMode[0]; dMode[0]=healthScreen; + // Keep track of max and min trip efficiency + float tmpeff = miles_trip[0]/kWh_trip[0]; + if (maxTripEff<tmpeff) { + maxTripEff=tmpeff; + } + if (minTripEff>tmpeff) { + minTripEff=tmpeff; + } if (repeatPoll) { // Log on shutdown if autopoll enabled tripLog(); // Write trip log on powerdown } @@ -811,6 +821,10 @@ } if(!usbEn&&!waitasec){ usbEn=detectUSB(); // Keep looking if none found + if(usbEn){ // Force update to clear USB init garbage + lastDMode[0]=99; + lastDMode[1]=99; + } } waitasec=false; // work around to avoid hang when USB tries to init immediately tock=true;
--- a/utility.cpp Wed Jul 24 11:20:08 2013 +0000 +++ b/utility.cpp Wed Jul 24 12:29:22 2013 +0000 @@ -6,6 +6,7 @@ void RTC_IRQHandler() { timer.reset(); // zero ms at the-seconds-tic carCanIdle=(++secsNoCarCanMsg>canTimeout)?true:false; + evCanIdle=(++secsNoEvCanMsg>canTimeout)?true:false; userIdle=(++secsNoTouch>userTimeout)?true:false; LPC_RTC->ILR |= (1<<0); // clear interrupt to prepare for next tick=true; @@ -55,7 +56,6 @@ signed long imWs_x4; unsigned short ts; - secsNoCarCanMsg=0; // reset deadman switch if(debugMode||(skin==ggSkin)){ // code to insert actual number of dropped frames for overrun debug - skiped in normal mode to keep logcan short if(logOpen){ @@ -458,6 +458,7 @@ CANMessage msg1; can1.read(msg1); + secsNoEvCanMsg=0; // reset deadman switch if( ZeroSecTick ) { ZeroSecTick = false; logTS(); } // gg - 0-second EV bus if(msg1.id>0) { logCan(1, msg1); // EVcan Message Received @@ -469,8 +470,8 @@ CANMessage msg2; can2.read(msg2); - if( ZeroSecTick ) { ZeroSecTick = false; logTS(); } // gg - 0-second EV bus - + secsNoCarCanMsg=0; // reset deadman switch + if( ZeroSecTick ) { ZeroSecTick = false; logTS(); } // gg - 0-second EV bus if(msg2.id>0) { logCan(2, msg2); // CARcan Message Received led2 = !led2;
--- a/utility.h Wed Jul 24 11:20:08 2013 +0000 +++ b/utility.h Wed Jul 24 12:29:22 2013 +0000 @@ -10,8 +10,10 @@ extern Timer timer; extern Ticker msgReq; extern volatile unsigned short secsNoCarCanMsg; +extern volatile unsigned short secsNoEvCanMsg; extern volatile unsigned short secsNoTouch; extern volatile bool carCanIdle; +extern volatile bool evCanIdle; extern volatile bool userIdle; extern char displayLog[20][40]; extern unsigned char displayLoc;