Dual CANbus monitor and instrumentation cluster

Dependencies:   SPI_TFTx2 TFT_fonts TOUCH_TFTx2 beep mbed

Fork of CANary by Tick Tock

Files at this revision

API Documentation at this revision

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

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
--- 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;