Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SPI_TFTx2_ILI9341 TFT_fonts TOUCH_TFTx2_ILI9341 mbed
Fork of CANary_corrupt by
Revision 156:4e5d30535cf9, committed 2013-10-24
- Comitter:
- TickTock
- Date:
- Thu Oct 24 19:51:31 2013 +0000
- Parent:
- 155:f31006516956
- Child:
- 157:1a100a5ed06f
- Commit message:
- // Changed efficency screen braking monitor to use actual motor amps instead of target regen signal; // Changed braking screen to use actual regen signal instead of target regen signal;
Changed in this revision
--- a/displayModes.cpp Sat Oct 19 15:38:44 2013 +0000
+++ b/displayModes.cpp Thu Oct 24 19:51:31 2013 +0000
@@ -22,10 +22,6 @@
packV_x2 = (msg.data[2]<<2)+(msg.data[3]>>6);
msg = lastMsg[indexLastMsg[0x54c]]; //Get ambient
aTemp = msg.data[6]-56;
- //msg = lastMsg[indexLastMsg[0x79a]]; //Get ambient and cabin temperature
- //aTemp = msg.data[5]-41; // Need to add convertsion to C if metric
- //c1Temp = msg.data[4]-41;
- //c2Temp = msg.data[6]-41;
msg = lastMsg[indexLastMsg[0x385]]; //Get tire pressure
tireP = msg.data[2]+msg.data[3]+msg.data[4]+msg.data[5];
@@ -500,14 +496,11 @@
}
}
- msg = lastMsg[indexLastMsg[0x1d5]]; //Get Regen
+ msg = lastMsg[indexLastMsg[0x1cb]];
+ targetBraking = (msg.data[2]<<3)+(msg.data[3]>>5); //Get target total braking force
+ //regenBraking = (msg.data[0]<<3)+(msg.data[1]>>5); //Get target regen portion
+ msg = lastMsg[indexLastMsg[0x1d5]]; //Get regen portion - seems to be actual regen versus target regen
regenBraking = (msg.data[0]<<3)+(msg.data[1]>>5);
- msg = lastMsg[indexLastMsg[0x1cb]]; //Get Target
- targetBraking = (msg.data[2]<<3)+(msg.data[3]>>5);
- msg = lastMsg[indexLastMsg[0x421]]; //Get Drive Mode
- if (msg.data[0]==0x18) { // In Neutral
- regenBraking = 0; // No regen when in Neutral
- }
if (targetBraking<2045){
if ((targetBraking>50)&&(regenBraking>50)){
@@ -867,9 +860,7 @@
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, convertC(battData[BatDataBaseG4*7+5]),sTemperatureUnit,convertC(battData[BatDataBaseG4*7+8]),sTemperatureUnit,
convertC(battData[BatDataBaseG4*7+11]),sTemperatureUnit,convertC(battData[BatDataBaseG4*7+14]),sTemperatureUnit);
- //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[BatDataBaseG2*7+BatDataBaseG4*7+5],battData[BatDataBaseG2*7+BatDataBaseG4*7+8], battData[BatDataBaseG2*7+BatDataBaseG4*7+11],battData[BatDataBaseG2*7+BatDataBaseG4*7+14]);
-
+
//---------------
// show the bars
int nBarWidth = 3 ;
@@ -994,7 +985,6 @@
}
void showDateTime(bool force, bool showButtons){
- //unsigned char year, month, day, hour, minute, second;
CANMessage msg;
struct tm t; // pointer to a static tm structure
time_t seconds ;
@@ -1002,18 +992,6 @@
tt.background(Black);
if (force||tock) {
tt.cls();
-
- // Read time from car
- /*msg = lastMsg[indexLastMsg[0x5fa]];
- month = msg.data[5]>>4;
- day = msg.data[2]>>3;
- msg = lastMsg[indexLastMsg[0x5fb]];
- year = msg.data[1];
- msg = lastMsg[indexLastMsg[0x5fc]];
- hour = msg.data[0]>>3;
- minute = (msg.data[1]<<4&0x30)+(msg.data[2]>>4);
- second = msg.data[1]>>2;*/
-
tt.locate(10,10);
tt.set_font((unsigned char*) Arial12x12);
if(accOn){
@@ -1039,7 +1017,6 @@
}
strftime(sTemp1, 32, "%a %m/%d/%Y %X \n", &t);
- //printf("Leaf: %02d:%02d:%02d %02d/%02d/%03d\n",hour,minute,second,month,day,year);
printf("Leaf: %s",sTemp1);
}
seconds = time(NULL);
@@ -1092,7 +1069,8 @@
static unsigned char leff[39]={0};
CANMessage msg;
unsigned long targetBraking, regenBraking, temp;
- static unsigned long maxTarget = 1000, maxRegen = 1000, tardivreg_x1000 = 1000;
+ //static unsigned long maxTarget = 1000, maxRegen = 1000, tardivreg_x1000 = 1000;
+ static unsigned long maxTarget = 1000, tardivreg_x1000 = 1400;
static unsigned char lr=0, lt=0;
msg = lastMsg[indexLastMsg[0x5bc]]; //Get gids
@@ -1247,23 +1225,26 @@
leff[i-1]=y;
}
- msg = lastMsg[indexLastMsg[0x1cb]]; //Get Target and Regen
- regenBraking = (msg.data[0]<<3)+(msg.data[1]>>5);
+ msg = lastMsg[indexLastMsg[0x1cb]]; //Get Target total braking
targetBraking = (msg.data[2]<<3)+(msg.data[3]>>5);
- msg = lastMsg[indexLastMsg[0x421]]; //Get Drive Mode
- if (msg.data[0]==0x18) { // In Neutral
- regenBraking = 0; // No regen when in Neutral
+
+ msg = lastMsg[indexLastMsg[0x1d4]]; //Get Motor Amps - simlar to 1d5/1.4 but includes coast regen
+ temp = (msg.data[2]<<4)+(msg.data[3]>>4);
+ if(temp>0x7ff){ // invert and chop positive current
+ regenBraking=0x1000-temp;
+ }else{
+ regenBraking=0;
}
if (targetBraking<2045){
- if ((targetBraking>50)&&(regenBraking>50)){
- temp = targetBraking;
- temp *= 1000;
- temp /= regenBraking;
- if (temp<tardivreg_x1000) tardivreg_x1000=temp;
- }
+ //if ((targetBraking>50)&&(regenBraking>50)){
+ // temp = targetBraking;
+ // temp *= 1000;
+ // temp /= regenBraking;
+ // if (temp<tardivreg_x1000) tardivreg_x1000=temp;
+ //}
if (targetBraking>maxTarget) maxTarget=targetBraking;
- if (regenBraking>maxRegen) maxRegen=regenBraking;
+ //if (regenBraking>maxRegen) maxRegen=regenBraking;
temp = targetBraking;
temp *=200;
--- a/displayModes.h Sat Oct 19 15:38:44 2013 +0000
+++ b/displayModes.h Thu Oct 24 19:51:31 2013 +0000
@@ -67,6 +67,7 @@
extern bool autoSync;
extern unsigned short modelYear;
extern bool enableSound;
+extern bool idir;
extern "C" {
void printLast (bool force, bool showButtons);
--- a/main.cpp Sat Oct 19 15:38:44 2013 +0000
+++ b/main.cpp Thu Oct 24 19:51:31 2013 +0000
@@ -2,7 +2,6 @@
//
//To Do:
// * Add 50% charge option
-// * Add coasting regen to regen/braking display; fix regen display to show actual instead of target regen (EX: on 100% charge)
// * Add linear efficiency graph with 10 minute values
// * Subtract accessory power from efficiency history (add back in when displaying)
// * Add in-device config editor
@@ -12,12 +11,9 @@
// * Add heater activation warning message
// * Add trip max/min efficiency reset
-// rev155
-// Added workoaround to hardware limitation where changing pwm frequency for sound sometimes also deactivated the screen backlight
-// Added ambient temperature to trip log
-// Save Resr in history file so it doesn't reset to 75mOhms on CANary reset
-// Changed regen to 1d5 message (appears to be closer to actual regen versus 1cb being target regen)
-// Fixed Resr formatting in trip log so it show 3 decimal places
+// rev156
+// Changed efficency screen braking monitor to use actual motor amps instead of target regen signal
+// Changed braking screen to use actual regen signal instead of target regen signal
#include "mbed.h"
#include "CAN.h"
@@ -27,7 +23,7 @@
#include "utility.h"
#include "displayModes.h"
#include "TOUCH_TFTx2.h"
-char revStr[7] = "155"; // gg - revision string, max 6 characters
+char revStr[7] = "156"; // gg - revision string, max 6 characters
FATFS USBdrive;
LocalFileSystem local("local");
@@ -731,7 +727,11 @@
if(tick){ // Executes once a second
tick=false;
- curEff = miles_trip[0]/kWh_trip[0];
+ if (miles_trip[0]>0.25) {
+ curEff = miles_trip[0]/kWh_trip[0];
+ } else {
+ curEff = 0;
+ }
headlights = (lastMsg[indexLastMsg[0x358]].data[1]&0x80)?true:false; // headlight/turn signal indicator
if(accOn&&indexLastMsg[0x355]>0){
miles_kmbar = (lastMsg[indexLastMsg[0x355]].data[4]&0x20)?true:false; // indicates selected distance units
--- a/utility.cpp Sat Oct 19 15:38:44 2013 +0000
+++ b/utility.cpp Thu Oct 24 19:51:31 2013 +0000
@@ -140,7 +140,7 @@
// We previously lost messages that did not get into the buffer
sprintf(sTemp,"-- Lost %d Messages.\n", nLost);
printMsg(sTemp); // write buffer overrun
- //beep(500,0.25);
+ beep(500,0.25);
nLost = 0 ;
}
@@ -171,7 +171,7 @@
if (writePointer==readPointer) {
// Just caught up to read pointer
printMsg("Write buffer overrun.\n"); // write buffer overrun
- beep(500,0.25);
+ //beep(500,0.25);
}
}
}
