Dual CANbus monitor and instrumentation cluster
Dependencies: SPI_TFTx2 TFT_fonts TOUCH_TFTx2 beep mbed
Fork of CANary by
Revision 42:4533b13b297d, committed 2013-03-31
- Comitter:
- TickTock
- Date:
- Sun Mar 31 20:38:15 2013 +0000
- Parent:
- 41:8d4609ea7259
- Child:
- 43:e7f6f80590e3
- Commit message:
- Changed so buttons only show on touched screen
Changed in this revision
--- a/displayModes.cpp Sun Mar 31 18:57:36 2013 +0000 +++ b/displayModes.cpp Sun Mar 31 20:38:15 2013 +0000 @@ -4,7 +4,7 @@ char sTemp1[40]; char sTemp2[16]; -void printLast (bool force){ +void printLast (bool force, bool showButtons){ CANMessage msg; tt.locate(0,6); tt.foreground(Red); @@ -15,7 +15,7 @@ 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){ + if((sMode==1)&&showButtons){ tt.foreground(Yellow); tt.background(DarkCyan); tt.set_font((unsigned char*) Arial12x12); @@ -27,7 +27,7 @@ } } -void printChanged (bool force){ +void printChanged (bool force, bool showButtons){ CANMessage msg; unsigned char i,j; tt.locate(0,6); @@ -45,7 +45,7 @@ i++; }// if changed }while(i<19&&j<99); - if(sMode==1){ + if((sMode==1)&&showButtons){ tt.foreground(Yellow); tt.background(DarkCyan); tt.set_font((unsigned char*) Arial12x12); @@ -59,7 +59,7 @@ } } -void printLog (bool force){ +void printLog (bool force, bool showButtons){ static unsigned char lastDisplayLoc = 0; if(force||displayLoc!=lastDisplayLoc){ //only update if changed tt.foreground(Amber); @@ -75,7 +75,7 @@ lastDisplayLoc=displayLoc; } -void mainDisplay (bool force){ +void mainDisplay (bool force, bool showButtons){ unsigned short gids, SOC, packV; static unsigned short lgids=0, lSOC=0, lpackV=0; static float lmpkWh=0, laccV=0;; @@ -127,7 +127,7 @@ } } -void braking (bool force, bool prdata=false){ +void braking (bool force, bool showButtons, bool prdata=false){ unsigned long targetBraking, regenBraking; static unsigned long maxTarget = 1000, maxRegen = 1000, tarDivReg = 1000; unsigned long temp; @@ -238,7 +238,7 @@ lr=r; } -void cpData(bool force){ +void cpData(bool force, bool showButtons){ short unsigned max, min, jv, i, bd; unsigned avg; if(force){ @@ -282,7 +282,7 @@ } showCP=false; } - if(sMode==1){ + if((sMode==1)&&showButtons){ tt.foreground(Yellow); tt.background(DarkCyan); tt.set_font((unsigned char*) Arial12x12); @@ -292,7 +292,7 @@ } } -void config1(bool force){ +void config1(bool force, bool showButtons){ if (force) { tt.background(Black); tt.cls(); @@ -328,7 +328,7 @@ showButton(2,1,sTemp1,sTemp2,3,3); } -void config2(bool force){ +void pbScreen(bool force, bool showButtons){ if (force) { tt.background(Black); tt.cls(); @@ -360,7 +360,7 @@ showButton(1,1,sTemp1,sTemp2,3,3); } -void showDateTime(bool force){ +void showDateTime(bool force, bool showButtons){ struct tm t; // pointer to a static tm structure time_t seconds ; tt.foreground(Yellow); @@ -373,7 +373,7 @@ tt.locate(10,10); strftime(sTemp1, 32, "%a %m/%d/%Y %X \n", &t); printf("%s",sTemp1); - if(sMode==1){ + if((sMode==1)&&showButtons){ tt.foreground(Yellow); tt.background(DarkCyan); tt.set_font((unsigned char*) Arial12x12); @@ -412,7 +412,7 @@ } } -void dteDisplay(bool force){ +void dteDisplay(bool force, bool showButtons){ static float lmpkWh=0; static float lMPH=0; tt.background(Navy); @@ -435,34 +435,34 @@ tt.set_display(display); switch (dMode[display]) { case logScreen: - printLog(changed); + printLog(changed,(display==whichTouched)); break; case mainScreen: - mainDisplay(changed); + mainDisplay(changed,(display==whichTouched)); break; case brakeScreen: - braking(changed); + braking(changed,(display==whichTouched)); break; case dteScreen: - dteDisplay(changed); + dteDisplay(changed,(display==whichTouched)); break; case monitorScreen: - printLast(changed); + printLast(changed,(display==whichTouched)); break; case changedScreen: - printChanged(changed); + printChanged(changed,(display==whichTouched)); break; case cpScreen: - cpData(changed||showCP); + cpData(changed||showCP,(display==whichTouched)); break; case config1Screen: - config1(changed); + config1(changed,(display==whichTouched)); break; case playbackScreen: - config2(changed); + pbScreen(changed,(display==whichTouched)); break; case dateScreen: - showDateTime(changed); + showDateTime(changed,(display==whichTouched)); break; default: tt.background(Black); @@ -471,90 +471,92 @@ } lastDMode[display]=dMode[display]; - switch (sMode) { - case 1: // Select screens - tt.foreground(Yellow); - tt.background(DarkCyan); - tt.set_font((unsigned char*) Arial12x12); - sprintf(sTemp1,"<-Prev"); - sprintf(sTemp2,""); - showButton(0,2,sTemp1,sTemp2,3,3); - sprintf(sTemp1," Next->"); - showButton(2,2,sTemp1,sTemp2,3,3); - sprintf(sTemp1," Select"); - switch (dMode[display]) { - case 0: - sprintf(sTemp2," Off"); - break; - case 1: - sprintf(sTemp2," Log"); - break; - case 2: - sprintf(sTemp2," Main"); - break; - case 3: - sprintf(sTemp2," Braking"); - break; - case 4: - sprintf(sTemp2," DTE"); - break; - case 5: - sprintf(sTemp2," Monitor"); - break; - case 6: - sprintf(sTemp2,"Delta Mon"); - break; - case 7: - sprintf(sTemp2,"Cell Pair"); - break; - case 8: - sprintf(sTemp2," Config"); - break; - case 9: - sprintf(sTemp2,"Playback"); - break; - case 10: - sprintf(sTemp2,"Set Time"); - break; - } - showButton(1,2,sTemp1,sTemp2,3,3); - wait_ms(100); // pause a moment to reduce flicker - break; - case 2: // numpad - sprintf(sTemp2,""); - tt.foreground(Yellow); - tt.background(DarkCyan); - tt.set_font((unsigned char*) Arial24x23); - sprintf(sTemp1," 1"); - showButton(0,0,sTemp1,sTemp2,4,4); - sprintf(sTemp1," 2"); - showButton(1,0,sTemp1,sTemp2,4,4); - sprintf(sTemp1," 3"); - showButton(2,0,sTemp1,sTemp2,4,4); - sprintf(sTemp1," 4"); - showButton(0,1,sTemp1,sTemp2,4,4); - sprintf(sTemp1," 5"); - showButton(1,1,sTemp1,sTemp2,4,4); - sprintf(sTemp1," 6"); - showButton(2,1,sTemp1,sTemp2,4,4); - sprintf(sTemp1," 7"); - showButton(0,2,sTemp1,sTemp2,4,4); - sprintf(sTemp1," 8"); - showButton(1,2,sTemp1,sTemp2,4,4); - sprintf(sTemp1," 9"); - showButton(2,2,sTemp1,sTemp2,4,4); - sprintf(sTemp1," 0"); - showButton(1,3,sTemp1,sTemp2,4,4); - sprintf(sTemp1,"<--"); - showButton(0,3,sTemp1,sTemp2,4,4); - sprintf(sTemp1,"-->"); - showButton(2,3,sTemp1,sTemp2,4,4); - sprintf(sTemp1,"return"); - showButton(3,3,sTemp1,sTemp2,4,4); - case 3: - break; - default: - break; + if(display==whichTouched){ + switch (sMode) { + case 1: // Select screens + tt.foreground(Yellow); + tt.background(DarkCyan); + tt.set_font((unsigned char*) Arial12x12); + sprintf(sTemp1,"<-Prev"); + sprintf(sTemp2,""); + showButton(0,2,sTemp1,sTemp2,3,3); + sprintf(sTemp1," Next->"); + showButton(2,2,sTemp1,sTemp2,3,3); + sprintf(sTemp1," Select"); + switch (dMode[display]) { + case 0: + sprintf(sTemp2," Off"); + break; + case 1: + sprintf(sTemp2," Log"); + break; + case 2: + sprintf(sTemp2," Main"); + break; + case 3: + sprintf(sTemp2," Braking"); + break; + case 4: + sprintf(sTemp2," DTE"); + break; + case 5: + sprintf(sTemp2," Monitor"); + break; + case 6: + sprintf(sTemp2,"Delta Mon"); + break; + case 7: + sprintf(sTemp2,"Cell Pair"); + break; + case 8: + sprintf(sTemp2," Config"); + break; + case 9: + sprintf(sTemp2,"Playback"); + break; + case 10: + sprintf(sTemp2,"Set Time"); + break; + } + showButton(1,2,sTemp1,sTemp2,3,3); + wait_ms(100); // pause a moment to reduce flicker + break; + case 2: // numpad + sprintf(sTemp2,""); + tt.foreground(Yellow); + tt.background(DarkCyan); + tt.set_font((unsigned char*) Arial24x23); + sprintf(sTemp1," 1"); + showButton(0,0,sTemp1,sTemp2,4,4); + sprintf(sTemp1," 2"); + showButton(1,0,sTemp1,sTemp2,4,4); + sprintf(sTemp1," 3"); + showButton(2,0,sTemp1,sTemp2,4,4); + sprintf(sTemp1," 4"); + showButton(0,1,sTemp1,sTemp2,4,4); + sprintf(sTemp1," 5"); + showButton(1,1,sTemp1,sTemp2,4,4); + sprintf(sTemp1," 6"); + showButton(2,1,sTemp1,sTemp2,4,4); + sprintf(sTemp1," 7"); + showButton(0,2,sTemp1,sTemp2,4,4); + sprintf(sTemp1," 8"); + showButton(1,2,sTemp1,sTemp2,4,4); + sprintf(sTemp1," 9"); + showButton(2,2,sTemp1,sTemp2,4,4); + sprintf(sTemp1," 0"); + showButton(1,3,sTemp1,sTemp2,4,4); + sprintf(sTemp1,"<--"); + showButton(0,3,sTemp1,sTemp2,4,4); + sprintf(sTemp1,"-->"); + showButton(2,3,sTemp1,sTemp2,4,4); + sprintf(sTemp1,"return"); + showButton(3,3,sTemp1,sTemp2,4,4); + case 3: + break; + default: + break; + } } } @@ -572,7 +574,7 @@ } // below is braking screen normalized to power rather than force // changed to force since power had too large a dynamic range -/*void braking (bool force, bool prdata=false){ +/*void braking (bool force, bool showButtons, bool prdata=false){ unsigned long targetBraking, regenBraking, speed; static unsigned long maxTarget = 20000, maxRegen = 20000, tarDivReg = 1000; short rpm;
--- a/displayModes.h Sun Mar 31 18:57:36 2013 +0000 +++ b/displayModes.h Sun Mar 31 20:38:15 2013 +0000 @@ -31,16 +31,17 @@ extern float kWh; extern float mpkWh; extern float MPH; +extern unsigned char whichTouched; extern "C" { - void printLast (bool force); - void printChanged (bool force); - void printLog (bool force); - void mainDisplay (bool force); - void dteDisplay (bool force); - void braking (bool force, bool prdata); - void cpData(bool force); - void showDateTime(bool force); + void printLast (bool force, bool showButtons); + void printChanged (bool force, bool showButtons); + void printLog (bool force, bool showButtons); + void mainDisplay (bool force, bool showButtons); + void dteDisplay (bool force, bool showButtons); + void braking (bool force, bool showButtons, bool prdata); + void cpData(bool force, bool showButtons); + void showDateTime(bool force, bool showButtons); 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 Sun Mar 31 18:57:36 2013 +0000 +++ b/main.cpp Sun Mar 31 20:38:15 2013 +0000 @@ -63,6 +63,7 @@ volatile bool canIdle; volatile bool userIdle; bool touched=false; //flag to read touchscreen +unsigned char whichTouched = 0; char counter = 0; unsigned char dMode[2] = {mainScreen,brakeScreen}; //display mode unsigned char sMode = 0; // setup mode @@ -295,9 +296,9 @@ if (secsNoTouch<2) {// Recently touched secsNoTouch +=2; // increment to prevent double touch if (lastTouch.x>320){ - i=1; + whichTouched=1; } else { - i=0; + whichTouched=0; } if (sMode==0) sMode = 1; //sprintf(sTemp,"button %d %d,%d %d\n",i,buttonX(lastTouch.x,3),buttonY(lastTouch.y,3),lastTouch.x); @@ -309,13 +310,13 @@ switch (buttonX(lastTouch.x,3)*10+buttonY(lastTouch.y,3)) { case 00: case 30: - if (dMode[i]==monitorScreen||dMode[i]==changedScreen) { + if (dMode[whichTouched]==monitorScreen||dMode[whichTouched]==changedScreen) { indexOffset=indexOffset>4?indexOffset-4:1; - } else if (dMode[i]==config1Screen) { + } else if (dMode[whichTouched]==config1Screen) { wait_ms(500); tt.background(Black); tt.calibrate(); - } else if (dMode[i]==playbackScreen) { // slower + } else if (dMode[whichTouched]==playbackScreen) { // slower playbackInt *=2; if(playbackEn){ playback.detach(); @@ -325,14 +326,14 @@ break; case 10: case 40: - if (dMode[i]==changedScreen) { + if (dMode[whichTouched]==changedScreen) { for(j=0;j<100;j++) msgChanged[j]=0; // clear changed data - lastDMode[i]=99;//force refresh - } else if (dMode[i]==cpScreen) { + lastDMode[whichTouched]=99;//force refresh + } else if (dMode[whichTouched]==cpScreen) { pollCP=true; - } else if (dMode[i]==config1Screen) { + } else if (dMode[whichTouched]==config1Screen) { mbed_reset(); - } else if (dMode[i]==playbackScreen) { // pause/unpause + } else if (dMode[whichTouched]==playbackScreen) { // pause/unpause playbackEn=!playbackEn; if(playbackEn){ playback.attach(&playbackISR,playbackInt); @@ -343,14 +344,14 @@ break; case 20: case 50: - if (dMode[i]==monitorScreen||dMode[i]==changedScreen) { + if (dMode[whichTouched]==monitorScreen||dMode[whichTouched]==changedScreen) { indexOffset=indexOffset<77?indexOffset+4:80; - } else if (dMode[i]==config1Screen) { + } else if (dMode[whichTouched]==config1Screen) { sprintf(sTemp,"Saving config file.\n"); logMsg(sTemp); saveConfig(); spkr.beep(2000,0.25); - } else if (dMode[i]==playbackScreen) { // faster + } else if (dMode[whichTouched]==playbackScreen) { // faster if(playbackInt>.002){ playbackInt/=2; if(playbackEn){ @@ -362,24 +363,24 @@ break; case 01: case 31: - if (dMode[i]==config1Screen) { + if (dMode[whichTouched]==config1Screen) { logEn = !logEn; if (!logEn) repeatPoll=false; // disable auto polling, too - } else if (dMode[i]==dateScreen){ + } else if (dMode[whichTouched]==dateScreen){ dtMode=(dtMode<6)?dtMode+1:0; - lastDMode[i]=99; + lastDMode[whichTouched]=99; } break; case 11: case 41: - if (dMode[i]==config1Screen){ + if (dMode[whichTouched]==config1Screen){ repeatPoll = !repeatPoll&&logEn; if (repeatPoll) { autoPoll.attach(&autoPollISR,pollInt); } else { autoPoll.detach(); } - } else if (dMode[i]==playbackScreen) { + } else if (dMode[whichTouched]==playbackScreen) { // Start/stop playback if(!playbackOpen){ if(!logOpen){ @@ -406,24 +407,24 @@ playbackOpen=false; can1.attach(&recieve1);// Restore CAN data recieve can2.attach(&recieve2); - lastDMode[i]=99; + lastDMode[whichTouched]=99; } playbackEn=false; - } else if (dMode[i]==dateScreen){ + } else if (dMode[whichTouched]==dateScreen){ upDate(dtMode,true); - lastDMode[i]=99; + lastDMode[whichTouched]=99; } break; case 21: case 51: - if (dMode[i]==dateScreen){ + if (dMode[whichTouched]==dateScreen){ upDate(dtMode,false); - lastDMode[i]=99; + lastDMode[whichTouched]=99; } break; case 02: case 32: - dMode[i]=dMode[i]>0?dMode[i]-1:maxScreens; + dMode[whichTouched]=dMode[whichTouched]>0?dMode[whichTouched]-1:maxScreens; break; case 12: case 42: @@ -431,7 +432,7 @@ break; case 22: case 52: - dMode[i]=dMode[i]<maxScreens?dMode[i]+1:0; + dMode[whichTouched]=dMode[whichTouched]<maxScreens?dMode[whichTouched]+1:0; break; default: break;