test fork

Dependencies:   SPI_TFTx2 SPI_TFTx2_ILI9341 TFT_fonts TOUCH_TFTx2 mbed

Fork of CANary_9341 by Tick Tock

Files at this revision

API Documentation at this revision

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

displayModes.cpp Show annotated file Show diff for this revision Revisions of this file
displayModes.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
utility.cpp Show annotated file Show diff for this revision Revisions of this file
utility.h Show annotated file Show diff for this revision Revisions of this file
--- 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;