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: main.cpp
- Revision:
- 132:08748a67280a
- Parent:
- 131:0d926c080a65
- Child:
- 133:b0675d9d11dd
diff -r 0d926c080a65 -r 08748a67280a main.cpp --- 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;