Dual CANbus monitor and instrumentation cluster

Dependencies:   SPI_TFTx2 TFT_fonts TOUCH_TFTx2 beep mbed

Fork of CANary by Tick Tock

Revision:
22:a43df3905863
Parent:
21:22bdce9efcb5
Child:
23:cd03f9c3395e
--- a/main.cpp	Fri Mar 08 04:43:24 2013 +0000
+++ b/main.cpp	Mon Mar 11 06:23:00 2013 +0000
@@ -2,7 +2,7 @@
 
 //To Do:
 // * USB device detect
-// * user programmable message decode
+// * end user programmable message decode
 // * brake trainer
 // * write and read the Mode Data
 // * Date entry config screen (keypad)
@@ -35,7 +35,7 @@
 DigitalOut led3(LED3);
 DigitalOut led4(LED4);
 
-PwmOut dled(p24);
+PwmOut dled(p23);
 
 InterruptIn touchpad(p17);
 CAN can1(p9, p10);      // CAN1 (EV) uses pins 9 and 10 (rx, tx) and pin 8 (rs)
@@ -76,7 +76,7 @@
     char sTemp[40];
     unsigned long secs;
     char i,j,ff,display=0;
-    point lastTouch;    
+    point lastTouch;
 
     can1.monitor(true); // set to snoop mode
     can2.monitor(true); // set to snoop mode
@@ -265,7 +265,7 @@
             led4=0;
             dled=0; // turn off display
             secs = time(NULL); // seconds past 12:00:00 AM 1 Jan 1900
-            while (secsNoMsg>canTimeout && secsNoTouch>userTimeout) {
+            while (secsNoMsg>canTimeout && !touched) {
                 //DeepPowerDown();
                 tt.wfi(); //enable touch interrupt
                 //__wfi(); // freeze CPU and wait for interrupt (from canbus or touch)
@@ -292,45 +292,71 @@
         if(touched){ // call touchscreen procedure if touch interrupt detected
             lastTouch = tt.get_touch();       
             lastTouch = tt.to_pixel(lastTouch);          // convert to pixel pos
+            if((lastTouch.x!=639)&&(lastTouch.x!=319)&&(lastTouch.y!=239)){
+                secsNoTouch=0; //debounce
+            }
+            //sprintf(sTemp,"%d,%d ",lastTouch.x,lastTouch.y);
+            //logMsg(sTemp);
             touched = false; // clear interrupt flag
         }
-
         if (!userIdle) {
             if (secsNoTouch<2) {// Recently touched
                 secsNoTouch +=2; // increment to prevent double touch
                 if (lastTouch.x>320){
                     i=1;
-                    lastTouch.x-=320;
+                    //lastTouch.x-=320;
                 } else {
                     i=0;
                 }
-                if (lastTouch.y>btn33y1 && lastTouch.y<btn33y2) {
-                    if(sMode==1){
-                        if (lastTouch.x>btn31x1 && lastTouch.x<btn31x2) {
-                            dMode[i]=dMode[i]>0?dMode[i]-1:maxScreens;
-                        } else if (lastTouch.x>btn32x1 && lastTouch.x<btn32x2) {
-                            secsNoTouch = userTimeout; // immediately exit config mode
-                        } else if (lastTouch.x>btn33x1 && lastTouch.x<btn33x2) {
-                            dMode[i]=dMode[i]<maxScreens?dMode[i]+1:0;
+                //sprintf(sTemp,"button %d %d,%d %d\n",i,buttonX(lastTouch.x,3),buttonY(lastTouch.y,3),lastTouch.x);
+                //logMsg(sTemp);
+                if (buttonY(lastTouch.y,3)==2) { //bottom row
+                    if (sMode==1) {
+                        switch (buttonX(lastTouch.x,3)) {
+                            case 0:
+                            case 3:
+                                dMode[i]=dMode[i]>0?dMode[i]-1:maxScreens;
+                                break;
+                            case 1:
+                            case 4:
+                                secsNoTouch = userTimeout; // immediately exit config mode
+                                break;
+                            case 2:
+                            case 5:
+                                dMode[i]=dMode[i]<maxScreens?dMode[i]+1:0;
+                                break;
+                            default:
+                                break;
                         }
                     } else sMode=1;
-                } else if (lastTouch.y>btn31y1 && lastTouch.y<btn31y2){
-                    if (dMode[i]==monitorScreen||dMode[i]==changedScreen) {
-                        if (lastTouch.x>btn31x1 && lastTouch.x<btn31x2) {
-                            indexOffset=indexOffset>4?indexOffset-4:1;
-                        } else if (lastTouch.x>btn32x1 && lastTouch.x<btn32x2) {
-                            for(j=0;j<100;j++) msgChanged[j]=0; // clear changed data
-                            lastDMode[i]=99;//force refresh
-                        } else if (lastTouch.x>btn33x1 && lastTouch.x<btn33x2) {
-                            indexOffset=indexOffset<77?indexOffset+4:80;
-                        }
-                    } else if (dMode[i]==cpScreen) {
-                        if (lastTouch.x>btn32x1 && lastTouch.x<btn32x2){
-                            pollCP=true;
-                        }
+                } else if (buttonY(lastTouch.y,3)==0) { // top row
+                    switch (buttonX(lastTouch.x,3)) {
+                        case 0:
+                        case 3:
+                            if (dMode[i]==monitorScreen||dMode[i]==changedScreen) {
+                                indexOffset=indexOffset>4?indexOffset-4:1;
+                            }
+                            break;
+                        case 1:
+                        case 4:
+                            if (dMode[i]==changedScreen) {
+                                for(j=0;j<100;j++) msgChanged[j]=0; // clear changed data
+                                lastDMode[i]=99;//force refresh
+                            } else if (dMode[i]==cpScreen) {
+                                pollCP=true;
+                            }
+                            break;
+                        case 2:
+                        case 5:
+                            if (dMode[i]==monitorScreen||dMode[i]==changedScreen) {
+                                indexOffset=indexOffset<77?indexOffset+4:80;
+                            }
+                            break;
+                        default:
+                            break;
                     }
-                } //top of screen
-            }
+                } //top row
+            } //recently touched
         } else { // userIdle
             if(sMode==1){
                 sMode=0;