Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SPI_TFTx2 SPI_TFTx2_ILI9341 TFT_fonts TOUCH_TFTx2 mbed
Fork of CANary_9341 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;
