Dual CANbus monitor and instrumentation cluster supporting ILI9341 display controller
Dependencies: SPI_TFTx2_ILI9341 TOUCH_TFTx2_ILI9341 TFT_fonts mbed
Fork of CANary by
Diff: main.cpp
- Revision:
- 22:a43df3905863
- Parent:
- 21:22bdce9efcb5
- Child:
- 23:cd03f9c3395e
diff -r 22bdce9efcb5 -r a43df3905863 main.cpp --- 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;