Dual CANbus monitor and instrumentation cluster
Dependencies: SPI_TFTx2 TFT_fonts TOUCH_TFTx2 beep mbed
Fork of CANary by
Revision 25:ddf0ec209f03, committed 2013-03-15
- Comitter:
- TickTock
- Date:
- Fri Mar 15 04:28:34 2013 +0000
- Parent:
- 24:6cf76ed8c432
- Child:
- 26:462ccb580472
- Commit message:
- Added date/time entry, fixed braking display, added reset
Changed in this revision
--- a/SPI_TFTx2.lib Thu Mar 14 05:02:15 2013 +0000 +++ b/SPI_TFTx2.lib Fri Mar 15 04:28:34 2013 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/TickTock/code/SPI_TFTx2/#6693193c1fd6 +http://mbed.org/users/TickTock/code/SPI_TFTx2/#c39d5b3745af
--- a/common.h Thu Mar 14 05:02:15 2013 +0000 +++ b/common.h Fri Mar 15 04:28:34 2013 +0000 @@ -1,4 +1,3 @@ -#define maxScreens 8 #define offScreen 0 #define logScreen 1 #define dteScreen 2 @@ -7,9 +6,11 @@ #define monitorScreen 5 #define changedScreen 6 #define cpScreen 7 -#define configScreen 8 -#define upLine "\033[1A" +#define config1Screen 8 +#define config2Screen 9 +#define maxScreens 9 +#define btnGap 10 + #define maxBufLen 768 #define canTimeout 5 #define userTimeout 10 -#define btnGap 10 \ No newline at end of file
--- a/displayModes.cpp Thu Mar 14 05:02:15 2013 +0000 +++ b/displayModes.cpp Fri Mar 15 04:28:34 2013 +0000 @@ -1,7 +1,7 @@ //displayModes.cpp #include "displayModes.h" -char sTemp1[16]; +char sTemp1[40]; char sTemp2[16]; void printLast (bool force){ @@ -15,6 +15,19 @@ 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){ + tt.foreground(Yellow); + tt.background(DarkCyan); + tt.set_font((unsigned char*) Arial12x12); + sprintf(sTemp1,"<up>"); + sprintf(sTemp2,""); + showButton(0,0,sTemp1,sTemp2,3,3); + tt.foreground(Yellow); + tt.background(DarkCyan); + tt.set_font((unsigned char*) Arial12x12); + sprintf(sTemp1,"<down>"); + showButton(2,0,sTemp1,sTemp2,3,3); + } } void printChanged (bool force){ @@ -68,7 +81,7 @@ tt.background(Navy); if(force) tt.cls(); if(force||gids!=lgids){ - tt.foreground(Amber); + tt.foreground(Yellow); tt.set_font((unsigned char*) Arial28x28); tt.locate(10,10); printf("%4d gids\n",gids); @@ -82,14 +95,14 @@ lgids=gids; } if(force||SOC!=lSOC){ - tt.foreground(Amber); + tt.foreground(Yellow); tt.set_font((unsigned char*) Arial28x28); tt.locate(200,10); printf("%4.1f%s\n",(float)SOC/10,"%"); lSOC=SOC; } if(force||packV!=lpackV){ - tt.foreground(Amber); + tt.foreground(Yellow); tt.set_font((unsigned char*) Arial28x28); tt.locate(200,200); printf("%4.1fV\n",(float)packV/2); @@ -97,9 +110,9 @@ } } -void braking (bool force, bool prdata){ +void braking (bool force, bool prdata=false){ unsigned long targetBraking, regenBraking, speed; - static unsigned long maxTarget = 0, maxRegen = 0, tarDivReg = 0; + static unsigned long maxTarget = 0, maxRegen = 0, tarDivReg = 1000000; short rpm; unsigned long temp; static unsigned char lastPressure[4] = {200,200,200,200}; @@ -159,36 +172,39 @@ temp *= 200; temp /= maxTarget; t = (char) temp; - if (t>238) t=238; + if (t>220) t=220; temp = regenBraking; temp *= tarDivReg; temp *= 200; temp /= maxTarget; r = (char) temp; - if (r>238) r=238; + if (r>220) r=220; if(lr!=r&&prdata){ - tt.foreground(Amber); + tt.foreground(Red); tt.set_font((unsigned char*) Arial28x28); - tt.locate(100,50); + tt.locate(100,40); printf("%d %d \n",regenBraking,maxRegen); - tt.locate(100,90); - printf("%3.1f (%3.1f%s) \n",(float)tarDivReg/1000,(float)regenBraking*tarDivReg/targetBraking/1000,"%"); + tt.locate(100,70); + printf("%3.1f (%3.1f%s) \n",(float)tarDivReg/10,(float)regenBraking*tarDivReg/targetBraking/10,"%"); } if(lt!=t&&prdata){ - tt.foreground(Amber); + tt.foreground(Red); tt.set_font((unsigned char*) Arial28x28); tt.locate(100,10); printf("%d %d \n",targetBraking,maxTarget); } if((lr!=r||lt!=t)&&!prdata){ - if(r<lr) - tt.fillrect(200,239-lr,300,239-r,Red); - else - tt.fillrect(200,239-r,300,239-lr,Green); - if(t<lt) - tt.fillrect(200,239-lt,300,239-t,Navy); - else - tt.fillrect(200,239-t,300,238-r,Red); + if(t<lt){ + tt.fillrect(200,238-lt,300,237-t,Navy); + if(t<lr) lr=t; + } else { + tt.fillrect(200,238-t,300,238-lt,Red); + } + if(r<lr){ + tt.fillrect(200,238-lr,300,237-r,Red); + } else { + tt.fillrect(200,238-r,300,238-lr,Green); + } } lt=t; lr=r; @@ -239,6 +255,14 @@ } showCP=false; } + if(sMode==1){ + tt.foreground(Yellow); + tt.background(DarkCyan); + tt.set_font((unsigned char*) Arial12x12); + sprintf(sTemp1,"Request"); + sprintf(sTemp2,"CP data"); + showButton(1,0,sTemp1,sTemp2,3,3); + } } void config1(bool force){ @@ -267,6 +291,58 @@ showButton(0,1,sTemp1,sTemp2,3,3); } +void showDateTime(bool force){ + struct tm t; // pointer to a static tm structure + time_t seconds ; + tt.foreground(Yellow); + tt.background(Navy); + if (force) { + tt.cls(); + seconds = time(NULL); + t = *localtime(&seconds) ; + + tt.locate(10,10); + strftime(sTemp1, 32, "%a %m/%d/%Y %X \n", &t); + printf("%s",sTemp1); + if(sMode==1){ + tt.foreground(Yellow); + tt.background(DarkCyan); + tt.set_font((unsigned char*) Arial12x12); + sprintf(sTemp1,""); + switch(dtMode){ + case 0: + sprintf(sTemp2,"Year"); + break; + case 1: + sprintf(sTemp2,"Month"); + break; + case 2: + sprintf(sTemp2,"Day"); + break; + case 3: + sprintf(sTemp2,"Hour"); + break; + case 4: + sprintf(sTemp2,"Minute"); + break; + case 5: + sprintf(sTemp2,"Second"); + break; + case 6: + sprintf(sTemp2,"Select"); + break; + default: + break; + } + showButton(0,1,sTemp1,sTemp2,3,3); + sprintf(sTemp2," UP"); + showButton(1,1,sTemp1,sTemp2,3,3); + sprintf(sTemp2," DOWN"); + showButton(2,1,sTemp1,sTemp2,3,3); + } + } +} + void updateDisplay(char display){ bool changed; changed = dMode[display]!=lastDMode[display]; @@ -282,41 +358,23 @@ braking(changed,true); break; case powerScreen: - braking(changed,false); + braking(changed); break; case monitorScreen: printLast(changed); - if(sMode==1){ - tt.foreground(Yellow); - tt.background(DarkCyan); - tt.set_font((unsigned char*) Arial12x12); - sprintf(sTemp1,"<up>"); - sprintf(sTemp2,""); - showButton(0,0,sTemp1,sTemp2,3,3); - tt.foreground(Yellow); - tt.background(DarkCyan); - tt.set_font((unsigned char*) Arial12x12); - sprintf(sTemp1,"<down>"); - showButton(2,0,sTemp1,sTemp2,3,3); - } break; case changedScreen: printChanged(changed); break; case cpScreen: cpData(changed||showCP); - if(sMode==1){ - tt.foreground(Yellow); - tt.background(DarkCyan); - tt.set_font((unsigned char*) Arial12x12); - sprintf(sTemp1,"Request"); - sprintf(sTemp2,"CP data"); - showButton(1,0,sTemp1,sTemp2,3,3); - } break; - case configScreen: + case config1Screen: config1(changed); break; + case config2Screen: + showDateTime(changed); + break; default: tt.background(Black); tt.cls();
--- a/displayModes.h Thu Mar 14 05:02:15 2013 +0000 +++ b/displayModes.h Fri Mar 15 04:28:34 2013 +0000 @@ -22,6 +22,7 @@ extern unsigned char lastDMode[2]; extern unsigned char sMode; extern TOUCH_TFTx2 tt; +extern unsigned char dtMode; extern "C" { void printLast (bool force); @@ -30,6 +31,7 @@ void printDTE (bool force); void braking (bool force, bool prdata); void cpData(bool force); + void showDateTime(bool force); void updateDisplay(char display); void showButton(unsigned char column, unsigned char row, char * text1, char * text2, unsigned char columns, unsigned char rows); } \ No newline at end of file
--- a/main.cpp Thu Mar 14 05:02:15 2013 +0000 +++ b/main.cpp Fri Mar 15 04:28:34 2013 +0000 @@ -63,9 +63,10 @@ volatile bool userIdle; bool touched=0; //flag to read touchscreen char counter = 0; -unsigned char dMode[2] = {1,8}; //display mode +unsigned char dMode[2] = {dteScreen,brakeScreen}; //display mode unsigned char sMode = 0; // setup mode unsigned char lastDMode[2] = {0,0}; //last screen mode +unsigned char dtMode = 6; char displayLog[20][40]; unsigned char displayLoc = 0; unsigned char indexOffset = 1; @@ -107,7 +108,7 @@ secsNoTouch = 0; // is it a date before 2012 ? - if ((t.tm_year + 1900) < 2012 ) { + /*if ((t.tm_year + 1900) < 2012 ) { // before 2012, so the RTC probably lost power // So, set a near-recent date in 2012 // enter people-values here @@ -129,7 +130,7 @@ // printf("Set RTC to:\n" ); // strftime(sTemp, 32, "%a %m/%d/%Y %X", localtime(&seconds)); // printf("%s\n", sTemp); // DAY MM/DD/YYYY HH:MM:SS - } + }*/ t = *localtime(&seconds) ; strftime(sTemp, 32, "%a %m/%d/%Y %X\n", &t); logMsg(sTemp); @@ -218,15 +219,15 @@ } // if > 1/16 full, canbus has stopped, or PB1 pressed } // if logOpen if (canIdle&&userIdle) { // canbus idle --> sleep to save power - if (logOpen){ + if (logOpen){ fclose(file); } // if (logOpen)*/ seconds = time(NULL); t = *localtime(&seconds) ; strftime(sTemp, 40, "Sleeping: %a %m/%d/%Y %X\n", &t); logMsg(sTemp); - //updateDisplay(0); //Added for turbo3 who has a display override and wants to see the sleep message before going to sleep - //updateDisplay(1); + updateDisplay(0); //Added for turbo3 who has a display override and wants to see the sleep message before going to sleep + updateDisplay(1); //LPC_RTC->CIIR=0x00; // block RTC interrupts led1=0; led2=0; @@ -241,6 +242,7 @@ Sleep(); //DeepPowerDown(); } + secsNoTouch=0; canIdle=secsNoMsg>canTimeout; userIdle=secsNoTouch>userTimeout; dled=0.8; // turn on display LED @@ -289,7 +291,7 @@ case 30: if (dMode[i]==monitorScreen||dMode[i]==changedScreen) { indexOffset=indexOffset>4?indexOffset-4:1; - } else if (dMode[i]==configScreen) { + } else if (dMode[i]==config1Screen) { wait_ms(500); tt.calibrate(); } @@ -301,7 +303,7 @@ lastDMode[i]=99;//force refresh } else if (dMode[i]==cpScreen) { pollCP=true; - } else if (dMode[i]==configScreen) { + } else if (dMode[i]==config1Screen) { mbed_reset(); } break; @@ -309,23 +311,34 @@ case 50: if (dMode[i]==monitorScreen||dMode[i]==changedScreen) { indexOffset=indexOffset<77?indexOffset+4:80; - } else if (dMode[i]==configScreen) { + } else if (dMode[i]==config1Screen) { sprintf(sTemp,"Saving config file.\n"); logMsg(sTemp); - //zxcsaveConfig(); + saveConfig(); } break; case 01: case 31: - if (dMode[i]==configScreen) { + if (dMode[i]==config1Screen) { logEn = !logEn; + } else if (dMode[i]==config2Screen){ + dtMode=(dtMode<6)?dtMode+1:0; + lastDMode[i]=99; } break; case 11: case 41: + if (dMode[i]==config2Screen){ + upDate(dtMode,true); + lastDMode[i]=99; + } break; case 21: case 51: + if (dMode[i]==config2Screen){ + upDate(dtMode,false); + lastDMode[i]=99; + } break; case 02: case 32: @@ -334,14 +347,15 @@ case 12: case 42: secsNoTouch = userTimeout; // immediately exit config mode - if (dMode[i]==configScreen) mbed_reset(); + if (dMode[i]==config1Screen) mbed_reset(); break; case 22: case 52: dMode[i]=dMode[i]<maxScreens?dMode[i]+1:0; break; default: - } + break; + } break; case 2: // numpad break; @@ -368,6 +382,11 @@ showCP=true; } display=display<1?display+1:0; // toggle display + //spkr.beep(1000,0.2); + //wait(0.25); updateDisplay(display); + //updateDisplay(1); + //spkr.beep(2000,0.2); + //wait(0.25); } //while (true) } \ No newline at end of file
--- a/utility.cpp Thu Mar 14 05:02:15 2013 +0000 +++ b/utility.cpp Fri Mar 15 04:28:34 2013 +0000 @@ -231,3 +231,59 @@ fclose(cfile); } } + +void upDate(unsigned char field, bool upDownBar){ + struct tm t; // pointer to a static tm structure + time_t seconds ; + seconds = time(NULL); + t = *localtime(&seconds) ; + switch(field){ + case 0: // year + if (upDownBar) { + t.tm_year = t.tm_year+1; + } else { + t.tm_year = t.tm_year-1; + } + break; + case 1: // month + if (upDownBar) { + t.tm_mon = (t.tm_mon<12)?t.tm_mon+1:1; + } else { + t.tm_mon = (t.tm_mon>2)?t.tm_mon-1:12; + } + break; + case 2: // day + if (upDownBar) { + t.tm_mday = (t.tm_mday<31)?t.tm_mday+1:1; + } else { + t.tm_mday = (t.tm_mday>2)?t.tm_mday-1:31; + } + break; + case 3: // hour + if (upDownBar) { + t.tm_hour = (t.tm_hour<23)?t.tm_hour+1:0; + } else { + t.tm_hour = (t.tm_hour>1)?t.tm_hour-1:23; + } + break; + case 4: // minute + if (upDownBar) { + t.tm_min = (t.tm_min<59)?t.tm_min+1:0; + } else { + t.tm_min = (t.tm_min>1)?t.tm_min-1:59; + } + break; + case 5: // second + if (upDownBar) { + t.tm_sec = (t.tm_sec<59)?t.tm_sec+1:0; + } else { + t.tm_sec = (t.tm_sec>1)?t.tm_sec-1:59; + } + break; + default: + break; + } + set_time(mktime(&t)); +} + +
--- a/utility.h Thu Mar 14 05:02:15 2013 +0000 +++ b/utility.h Fri Mar 15 04:28:34 2013 +0000 @@ -44,7 +44,9 @@ unsigned char buttonX(unsigned short X, unsigned char columns); unsigned char buttonY(unsigned short Y,unsigned char rows); void saveConfig(); - void readConfig();} + void readConfig(); + void upDate(unsigned char field, bool updownbar); +} //LEAF OBD //1: