Dual CANbus monitor and instrumentation cluster
Dependencies: SPI_TFTx2 TFT_fonts TOUCH_TFTx2 beep mbed
Fork of CANary by
Revision 54:6ce808d0995e, committed 2013-04-09
- Comitter:
- garygid
- Date:
- Tue Apr 09 06:16:26 2013 +0000
- Parent:
- 51:6187c5264a73
- Child:
- 55:591406a71fa8
- Commit message:
- GG changed v51 to use 4x4 buttons and touch areas.
Changed in this revision
--- a/common.h Sun Apr 07 17:11:28 2013 +0000 +++ b/common.h Tue Apr 09 06:16:26 2013 +0000 @@ -12,7 +12,9 @@ #define playbackScreen 11 #define dateScreen 12 #define config1Screen 13 -#define maxScreens 13 +#define indexScreen 14 +#define maxScreens 14 + #define btnGap 10 #define ttSkin 0 #define ggSkin 1 @@ -20,3 +22,8 @@ #define maxBufLen 512 #define canTimeout 5 #define userTimeout 15 + +// gg - 4x4 touch +// #define tNavRow = 2 ; // for 3x3 +extern unsigned char tNavRow ; // gg - 4x4 +
--- a/displayModes.cpp Sun Apr 07 17:11:28 2013 +0000 +++ b/displayModes.cpp Tue Apr 09 06:16:26 2013 +0000 @@ -19,11 +19,9 @@ tt.foreground(Yellow); tt.background(DarkCyan); tt.set_font((unsigned char*) Arial12x12); - sprintf(sTemp1,"<up>"); - sprintf(sTemp2,""); - showButton(0,0,sTemp1,sTemp2,3,3); - sprintf(sTemp1,"<down>"); - showButton(2,0,sTemp1,sTemp2,3,3); + + showButton(0,0," <up>","",4,4); + showButton(2,0,"<down>","",4,4); } } @@ -49,14 +47,10 @@ tt.foreground(Yellow); tt.background(DarkCyan); tt.set_font((unsigned char*) Arial12x12); - sprintf(sTemp1,"<up>"); - sprintf(sTemp2,""); - showButton(0,0,sTemp1,sTemp2,3,3); - sprintf(sTemp1," <down>"); - showButton(2,0,sTemp1,sTemp2,3,3); - sprintf(sTemp1," Reset"); - sprintf(sTemp2," Baseline"); - showButton(1,0,sTemp1,sTemp2,3,3); + + showButton(0,0," <up>","",4,4); + showButton(2,0," <down>","",4,4); + showButton(1,0," Reset","Baseline",4,4); } } @@ -359,9 +353,8 @@ 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); + + showButton(1,0,"Request","CP Data",4,4); } } @@ -485,9 +478,8 @@ 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); + + showButton(1,0,"Request","CP Data",4,4); } } @@ -592,10 +584,9 @@ 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); - } + + showButton(1,0,"Request","CP Data",4,4); + } } //--------------- @@ -607,41 +598,35 @@ tt.foreground(Yellow); tt.background(DarkCyan); tt.set_font((unsigned char*) Arial12x12); - sprintf(sTemp1," Calibrate"); - sprintf(sTemp2," Touch"); - showButton(0,0,sTemp1,sTemp2,3,3); - sprintf(sTemp1," Reset"); - sprintf(sTemp2,""); - showButton(1,0,sTemp1,sTemp2,3,3); - sprintf(sTemp1," Save"); - sprintf(sTemp2," Config"); - showButton(2,0,sTemp1,sTemp2,3,3); + + showButton(0,0,"Calibrate"," Touch",4,4); // gg - 4x4 + + showButton(1,0," Reset","",4,4); + + showButton(2,0," Save"," Config",4,4); //------- second row ----- if (logEn) { - sprintf(sTemp1," Disable"); + sprintf(sTemp1,"Disable"); } else { - sprintf(sTemp1," Enable"); + sprintf(sTemp1,"Enable"); } - sprintf(sTemp2," Logging"); - showButton(0,1,sTemp1,sTemp2,3,3); + showButton(0,1,sTemp1,"Logging",4,4); if (repeatPoll) { - sprintf(sTemp1," Disable"); + sprintf(sTemp1,"Disable"); } else { - sprintf(sTemp1," Enable"); + sprintf(sTemp1,"Enable"); } - sprintf(sTemp2," Auto CP"); - showButton(1,1,sTemp1,sTemp2,3,3); + showButton(1,1,sTemp1,"Auto CP",4,4); // add Enable/Disable Batt Log gg - yesBattLog if (yesBattLog) { - sprintf(sTemp1," Disable"); + sprintf(sTemp1,"Disable"); } else { - sprintf(sTemp1," Enable"); + sprintf(sTemp1,"Enable"); } - sprintf(sTemp2," Batt Log"); - showButton(2,1,sTemp1,sTemp2,3,3); + showButton(2,1,sTemp1,"Batt Log",4,4); } void pbScreen(bool force, bool showButtons){ @@ -653,27 +638,24 @@ tt.background(DarkCyan); tt.set_font((unsigned char*) Arial12x12); if(playbackOpen){ - sprintf(sTemp1,"Slower"); - sprintf(sTemp2," <--"); - showButton(0,0,sTemp1,sTemp2,3,3); + showButton(0,0,"Slower"," <--",4,4); + if(playbackEn){ - sprintf(sTemp1," Pause"); + sprintf(sTemp1,"Pause"); }else{ - sprintf(sTemp1," Run"); + sprintf(sTemp1," Run"); } - sprintf(sTemp2," %4.3f ",playbackInt); - showButton(1,0,sTemp1,sTemp2,3,3); - sprintf(sTemp1,"Faster"); - sprintf(sTemp2," -->"); - showButton(2,0,sTemp1,sTemp2,3,3); + sprintf(sTemp2,"%4.3f ",playbackInt); + showButton(1,0,sTemp1,sTemp2,4,4); + + showButton(2,0,"Faster"," -->",4,4); } if(playbackOpen){ sprintf(sTemp1," Stop"); }else{ - sprintf(sTemp1," Start"); + sprintf(sTemp1,"Start"); } - sprintf(sTemp2,"Playback"); - showButton(1,1,sTemp1,sTemp2,3,3); + showButton(1,1,sTemp1,"Playback",4,4); } void showDateTime(bool force, bool showButtons){ @@ -691,7 +673,6 @@ strftime(sTemp1, 32, "%a %m/%d/%Y %X \n", &t); printf("%s",sTemp1); if((sMode==1)&&showButtons){ - sprintf(sTemp2,""); switch(dtMode){ case 0: sprintf(sTemp1,"Year"); @@ -718,11 +699,10 @@ break; } tt.background(DarkCyan); - showButton(0,1,sTemp1,sTemp2,3,3); - sprintf(sTemp1," UP"); - showButton(1,1,sTemp1,sTemp2,3,3); - sprintf(sTemp1," DOWN"); - showButton(2,1,sTemp1,sTemp2,3,3); + showButton(0,1,sTemp1,"",4,4); + + showButton(1,1," UP","",4,4); + showButton(2,1," DOWN","",4,4); } } } @@ -914,91 +894,82 @@ 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"); + tt.set_font((unsigned char*) Arial12x12); + + showButton(0,tNavRow," <-Prev","",4,4); // gg - 4x4 + showButton(3,tNavRow," Next->","",4,4); // gg - move next + + showButton(2,tNavRow," Go To"," Main",4,4); // gg - index + switch (dMode[display]) { case offScreen: - sprintf(sTemp2," Off"); + sprintf(sTemp2," Off"); break; case logScreen: - sprintf(sTemp2," Log"); + sprintf(sTemp2," Log"); break; case mainScreen: - sprintf(sTemp2," Main"); + sprintf(sTemp2," Main"); break; case brakeScreen: - sprintf(sTemp2," Braking"); + sprintf(sTemp2,"Braking"); break; case dteScreen: - sprintf(sTemp2," DTE"); + sprintf(sTemp2," DTE"); break; case effScreen: - sprintf(sTemp2," Eff"); + sprintf(sTemp2," Eff"); break; case monitorScreen: - sprintf(sTemp2," Monitor"); + sprintf(sTemp2," Monitor"); break; case changedScreen: - sprintf(sTemp2,"Delta Mon"); + sprintf(sTemp2,"DeltaMon"); break; case cpScreen: - sprintf(sTemp2," Cell Pair"); + sprintf(sTemp2,"Cell Pair"); break; case config1Screen: - sprintf(sTemp2," Config"); + sprintf(sTemp2," Config"); break; case playbackScreen: - sprintf(sTemp2," Playback"); + sprintf(sTemp2,"Playback"); break; case dateScreen: - sprintf(sTemp2," Set Time"); + sprintf(sTemp2,"Set Time"); break; case cpHistScreen: // gg - hist - sprintf(sTemp2," CP Hist"); + sprintf(sTemp2,"CP Hist"); break; case cpBarScreen: // gg - cpbars - sprintf(sTemp2," CP Bars"); + sprintf(sTemp2,"CP Bars"); break; } - showButton(1,2,sTemp1,sTemp2,3,3); + showButton(1,tNavRow," Select",sTemp2,4,4); + 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); + + sprintf(sTemp2,""); + showButton(0,0," 1",sTemp2,4,4); + showButton(1,0," 2",sTemp2,4,4); + showButton(2,0," 3",sTemp2,4,4); + showButton(0,1," 4",sTemp2,4,4); + showButton(1,1," 5",sTemp2,4,4); + showButton(2,1," 6",sTemp2,4,4); + showButton(0,2," 7",sTemp2,4,4); + showButton(1,2," 8",sTemp2,4,4); + showButton(2,2," 9",sTemp2,4,4); + showButton(1,3," 0",sTemp2,4,4); + + showButton(0,3,"<--",sTemp2,4,4); + showButton(2,3,"-->",sTemp2,4,4); + showButton(3,3,"return",sTemp2,4,4); case 3: break; default: @@ -1009,16 +980,22 @@ void showButton(unsigned char column, unsigned char row, char * text1, char * text2, unsigned char columns, unsigned char rows){ unsigned short x1,x2,y1,y2; + x1=column*(320/columns)+btnGap/2; x2=(column+1)*(320/columns)-btnGap/2; y1=row*(240/rows)+btnGap/2; y2=(row+1)*(240/rows)-btnGap/2; tt.fillrect(x1,y1,x2,y2,DarkCyan); - tt.locate(x1+btnGap,y1+btnGap); + + // adapt formatting of text to the smaller 4x4 box + tt.locate(x1+btnGap/2,y1+btnGap); // gg - 4x4 printf("%s\n",text1); - tt.locate(x1+btnGap,y1+btnGap+30); + + tt.locate(x1+btnGap/2,y1+btnGap+20); printf("%s\n",text2); } + +//------------- // 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 showButtons, bool prdata=false){
--- a/main.cpp Sun Apr 07 17:11:28 2013 +0000 +++ b/main.cpp Tue Apr 09 06:16:26 2013 +0000 @@ -47,6 +47,8 @@ bool logEn = false, logOpen = false; bool yesBattLog = false ; // gg - Batt Log +unsigned char tNavRow = 3 ; // gg - 4x4 touch + FILE *cfile; FILE *file; char fileName[35] = "" ; @@ -155,7 +157,12 @@ t = *localtime(&seconds) ; strftime(sTemp, 32, "%a %m/%d/%Y %X\n", &t); logMsg(sTemp); - sprintf(sTemp,"CANary firmware rev51\n"); + + // revisions + // sprintf(sTemp,"CANary firmware rev51-gg1\n"); // gg - shows 4x4 buttons, + // but the touch areas are still 3x3 + //sprintf(sTemp,"CANary firmware rev51-gg2\n"); // gg - decodes 4x4 button touches, + sprintf(sTemp,"CANary firmware rev51-gg3\n"); // gg - cleaned 4x4 button and touches, logMsg(sTemp); // Look for new binary on thumbdrive @@ -342,6 +349,12 @@ //logMsg(sTemp); touched = false; // clear interrupt flag } + //--------------- + // gg - 4x4 touch + unsigned char tScrn = 0 ; // screen 0 + unsigned char tCol ; + unsigned char tRow ; + if (!userIdle) { if (secsNoTouch<2) {// Recently touched secsNoTouch +=2; // increment to prevent double touch @@ -352,9 +365,20 @@ case 0: // no select break; case 1: // select screen - switch (buttonX(lastTouch.x,3)*10+buttonY(lastTouch.y,3)) { - case 00: - case 30: + // is this col(0:2)*10 + row(0:2) + screen(0:1)*30 + //switch (buttonX(lastTouch.x,3)*10+buttonY(lastTouch.y,3)) { + + //-------------- + // gg - 4x4 touch + tCol = buttonX(lastTouch.x,4) ; + if( tCol >= 4 ){ tCol -= 4; tScrn = 1 ; } // touch is on screen 1 + + tRow = buttonY(lastTouch.y,4) ; + if( tRow == tNavRow ) tRow = 7 ; + + switch ( (tCol*10) + tRow ) { + //--------------------------------- + case 00: // 00 on screen 0 or 1 if (dMode[whichTouched]==monitorScreen||dMode[whichTouched]==changedScreen) { indexOffset=indexOffset>4?indexOffset-4:1; } else if (dMode[whichTouched]==config1Screen) { @@ -369,8 +393,8 @@ } } break; - case 10: - case 40: + //----------------------------------------------- + case 10: // 1,0 (col,row) on screen 0 or 1 if (dMode[whichTouched]==changedScreen) { for(j=0;j<100;j++) msgChanged[j]=0; // clear changed data lastDMode[whichTouched]=99;//force refresh @@ -391,8 +415,8 @@ } } break; - case 20: - case 50: + //-------------------------------------- + case 20: // col 2 and row 0 on either screen 0 or 1 if (dMode[whichTouched]==monitorScreen||dMode[whichTouched]==changedScreen) { indexOffset=indexOffset<77?indexOffset+4:80; } else if (dMode[whichTouched]==config1Screen) { @@ -410,8 +434,9 @@ } } break; - case 01: - case 31: // row 2 left + //---------------------------------- + //---------------------------------- + case 01: // col 0 row 1 if (dMode[whichTouched]==config1Screen) { logEn = !logEn; if (!logEn) repeatPoll=false; // disable auto polling, too @@ -420,8 +445,8 @@ lastDMode[whichTouched]=99; } break; + //------------------------------ case 11: - case 41: // row 2 center if (dMode[whichTouched]==config1Screen){ repeatPoll = !repeatPoll&&logEn; if (repeatPoll) { @@ -467,8 +492,8 @@ lastDMode[whichTouched]=99; } break; - case 21: - case 51: // row 2 right button + //--------------------------------- + case 21: // col 2 row 1 if (dMode[whichTouched]==config1Screen) { // gg - Batt Log Enable Button yesBattLog = !yesBattLog; @@ -477,20 +502,32 @@ lastDMode[whichTouched]=99; } break; - case 02: - case 32: + + //----------------------------------- + //----------------------------------- + // Prev Navigation + case 07: // col 0 row tNavRow dMode[whichTouched]=dMode[whichTouched]>0?dMode[whichTouched]-1:maxScreens; break; - case 12: - case 42: + //----------------------------------- + // Select Screen Navigation + case 17: //secsNoTouch = userTimeout; // immediately exit config mode sMode=0; lastDMode[whichTouched]=99; // Repaint break; - case 22: - case 52: + //----------------------------------- + // Index Navigation + case 27: // col 2 row tNavRow + dMode[whichTouched]= mainScreen; // indexScreen ; // gg - index + break; + //------------------------------------ + // Next Navigation + case 37: // lower right on Nav Line gg - move next dMode[whichTouched]=dMode[whichTouched]<maxScreens?dMode[whichTouched]+1:0; break; + //------------------------------------ + //------------------------------------ default: break; }