Fork with support for ILI9341 controller

Dependents:   CANary_9341 CANary

Fork of TOUCH_TFTx2 by Tick Tock

Revision:
6:a91b668b058a
Parent:
5:a9890c586a64
Child:
7:9cc43f20e365
--- a/TOUCH_TFTx2.cpp	Thu Feb 14 00:26:54 2013 +0000
+++ b/TOUCH_TFTx2.cpp	Sun Feb 17 16:44:06 2013 +0000
@@ -16,7 +16,7 @@
 #include "TOUCH_TFTx2.h"
 #include "mbed.h"
 
-#define threshold 0x1000  // threshold to detect pressed
+#define threshold 0x8000  // threshold to detect pressed
 #define accuracy 300 // noise filter
 #define numsamp 16 // number of averaging samples
 
@@ -122,6 +122,7 @@
     //locate(1,100);
     //printf("d: %4d x: %5d",dx,p.x);
     //wait(0.25);
+    wfi(); //enable touchpad input
     return(p);
 }//*/
 
@@ -131,140 +132,154 @@
     int ulx1 = 0, uly1 = 0, brx1 = 0, bry1 = 0;
     int pos_x, pos_y;
     point p;
-
-    seldisp=1;       // select right display
-    cls();
-    line(0,3,6,3,White);
-    line(3,0,3,6,White);
-
-    // get the center of the screen
-    pos_x = columns() / 2 - 3;
-    pos_x = pos_x * font[1];
-    pos_y = (rows() / 2) - 1;
-    pos_y = pos_y * font[2];
+    if(true){ //skip cal for me
+        x0_off = 5570;
+        y0_off = 34030;
+        x0_pp = 80;
+        y0_pp = 108;
+        x1_off = 33700;
+        y1_off = 5780;
+        x1_pp = 82;
+        y1_pp = 108;
+        x_mid = 32500;
+    } else {
+        seldisp=1;       // select right display
+        cls();
+        line(0,3,6,3,White);
+        line(3,0,3,6,White);
     
-    //calibrate right screen
-    locate(pos_x,pos_y);
-    printf("press cross");
-    locate(pos_x,pos_y + font[2]);
-    printf("to calibrate");
-    do {
-        wait(0.1);
-    } while (!is_touched()); //Wait for touch
-    for (i=0; i<5; i++) {
+        // get the center of the screen
+        pos_x = columns() / 2 - 3;
+        pos_x = pos_x * font[1];
+        pos_y = (rows() / 2) - 1;
+        pos_y = pos_y * font[2];
+        
+        //calibrate right screen
+        locate(pos_x,pos_y);
+        printf("press cross");
+        locate(pos_x,pos_y + font[2]);
+        printf("to calibrate");
+        do {
+            wait(0.1);
+        } while (!is_touched()); //Wait for touch
+        for (i=0; i<5; i++) {
+            do {
+                p = get_touch();
+            } while (p.x==0 && p.y==0);
+            ulx1 += p.x;
+            uly1 += p.y;
+        }
+        ulx1 /= 5;
+        uly1 /= 5;
+        locate(pos_x,pos_y);
+        printf("OK         ");
+        printf("           ");
+        do {
+            wait(0.1);
+        } while (is_touched()); //Wait for no touch
+    
+        cls();
+        line(width() -1, height() - 4,width() - 7,height() -4,White);   // paint cross
+        line(width() - 4,height() - 1,width() - 4,height() - 7,White);
+        locate(pos_x,pos_y);
+        printf("press cross");
+        locate(pos_x,pos_y + font[2]);
+        printf("to calibrate");
+        do {
+            wait(0.1);
+        } while (!is_touched()); //Wait for touch
+        for (i=0; i<5; i++) {
+            do {
+                p = get_touch();
+            } while (p.x==0 && p.y==0);        p  = get_touch();
+            brx1 += p.x;
+            bry1 += p.y;
+        }
+        brx1 /= 5;
+        bry1 /= 5;
+    
+        locate(pos_x, pos_y);
+        printf("OK         ");
+        printf("           ");
         do {
-            p = get_touch();
-        } while (p.x==0 && p.y==0);
-        ulx1 += p.x;
-        uly1 += p.y;
-    }
-    ulx1 /= 5;
-    uly1 /= 5;
-    locate(pos_x,pos_y);
-    printf("OK         ");
-    printf("           ");
-    do {
-        wait(0.1);
-    } while (is_touched()); //Wait for no touch
-
-    cls();
-    line(width() -1, height() - 4,width() - 7,height() -4,White);   // paint cross
-    line(width() - 4,height() - 1,width() - 4,height() - 7,White);
-    locate(pos_x,pos_y);
-    printf("press cross");
-    locate(pos_x,pos_y + font[2]);
-    printf("to calibrate");
-    do {
-        wait(0.1);
-    } while (!is_touched()); //Wait for touch
-    for (i=0; i<5; i++) {
+            wait(0.1);
+        } while (is_touched()); //Wait for no touch
+    
+        cls();
+        seldisp=0;       // select left display
+        cls();
+        line(0,3,6,3,White);
+        line(3,0,3,6,White);
+    
+        // now calibrate left screen
+        locate(pos_x,pos_y);
+        printf("press cross");
+        locate(pos_x,pos_y + font[2]);
+        printf("to calibrate");
+        do {
+            wait(0.1);
+        } while (!is_touched()); //Wait for touch
+        for (i=0; i<5; i++) {
+            do {
+                p = get_touch();
+            } while (p.x==0 && p.y==0);
+            ulx0 += p.x;
+            uly0 += p.y;
+        }
+        ulx0 /= 5;
+        uly0 /= 5;
+        locate(pos_x,pos_y);
+        printf("OK         ");
+        printf("           ");
         do {
-            p = get_touch();
-        } while (p.x==0 && p.y==0);        p  = get_touch();
-        brx1 += p.x;
-        bry1 += p.y;
+            wait(0.1);
+        } while (is_touched()); //Wait for no touch
+    
+        cls();
+        line(width() -1, height() - 4,width() - 7,height() -4,White);   // paint cross
+        line(width() - 4,height() - 1,width() - 4,height() - 7,White);
+        locate(pos_x,pos_y);
+        printf("press cross");
+        locate(pos_x,pos_y + font[2]);
+        printf("to calibrate");
+        do {
+            wait(0.1);
+        } while (!is_touched()); //Wait for touch
+        for (i=0; i<5; i++) {
+            do {
+                p = get_touch();
+            } while (p.x==0 && p.y==0);
+            brx0 += p.x;
+            bry0 += p.y;
+        }
+        brx0 /= 5;
+        bry0 /= 5;
+    
+        locate(pos_x, pos_y);
+        printf("OK         ");
+        printf("           ");
+        do {
+            wait(0.1);
+        } while (is_touched()); //Wait for no touch
+    
+        cls();
+    
+        x0_off = ulx0;
+        y0_off = uly0;
+        x0_pp = (brx0-ulx0) / (width() - 6);
+        y0_pp = (bry0-uly0) / (height() - 6);
+        
+        
+        x1_off = ulx1;
+        y1_off = uly1;
+        x1_pp = (brx1-ulx1) / (width() - 6);
+        y1_pp = (bry1-uly1) / (height() - 6);
+        x_mid = (brx0 + ulx1) / 2;
+        //debug
+        printf("x0_off:%d y0_off:%d x0_pp:%d y0_pp:%d\n",x0_off,y0_off,x0_pp,y0_pp);
+        printf("x1_off:%d y1_off:%d x1_pp:%d y1_pp:%d\n",x1_off,y1_off,x1_pp,y1_pp);
+        printf("x_mid:%d\n",x_mid);
     }
-    brx1 /= 5;
-    bry1 /= 5;
-
-    locate(pos_x, pos_y);
-    printf("OK         ");
-    printf("           ");
-    do {
-        wait(0.1);
-    } while (is_touched()); //Wait for no touch
-
-    cls();
-    seldisp=0;       // select left display
-    cls();
-    line(0,3,6,3,White);
-    line(3,0,3,6,White);
-
-    // now calibrate left screen
-    locate(pos_x,pos_y);
-    printf("press cross");
-    locate(pos_x,pos_y + font[2]);
-    printf("to calibrate");
-    do {
-        wait(0.1);
-    } while (!is_touched()); //Wait for touch
-    for (i=0; i<5; i++) {
-        do {
-            p = get_touch();
-        } while (p.x==0 && p.y==0);
-        ulx0 += p.x;
-        uly0 += p.y;
-    }
-    ulx0 /= 5;
-    uly0 /= 5;
-    locate(pos_x,pos_y);
-    printf("OK         ");
-    printf("           ");
-    do {
-        wait(0.1);
-    } while (is_touched()); //Wait for no touch
-
-    cls();
-    line(width() -1, height() - 4,width() - 7,height() -4,White);   // paint cross
-    line(width() - 4,height() - 1,width() - 4,height() - 7,White);
-    locate(pos_x,pos_y);
-    printf("press cross");
-    locate(pos_x,pos_y + font[2]);
-    printf("to calibrate");
-    do {
-        wait(0.1);
-    } while (!is_touched()); //Wait for touch
-    for (i=0; i<5; i++) {
-        do {
-            p = get_touch();
-        } while (p.x==0 && p.y==0);
-        brx0 += p.x;
-        bry0 += p.y;
-    }
-    brx0 /= 5;
-    bry0 /= 5;
-
-    locate(pos_x, pos_y);
-    printf("OK         ");
-    printf("           ");
-    do {
-        wait(0.1);
-    } while (is_touched()); //Wait for no touch
-
-    cls();
-
-    x0_off = ulx0;
-    y0_off = uly0;
-    x0_pp = (brx0-ulx0) / (width() - 6);
-    y0_pp = (bry0-uly0) / (height() - 6);
-    
-    
-    x1_off = ulx1;
-    y1_off = uly1;
-    x1_pp = (brx1-ulx1) / (width() - 6);
-    y1_pp = (bry1-uly1) / (height() - 6);
-    x_mid = (brx0 + ulx1) / 2;
-
 }
 
 
@@ -292,16 +307,27 @@
 bool TOUCH_TFTx2::is_touched(void) {
     unsigned short y1;
     // read y voltage
-    _ym.input();        //y- has to be passive
-    _yp.input();        //y+ has to be passive
-    _ym.mode(PullUp);
-    _yp.mode(PullUp);
-    _xp.output();
-    _xm.output();
-    _xp = 0;            //drive x+ low
-    _xm = 0;            //drive x- low
-    AnalogIn Ay(ya);    // we have to call the constructor to switch to analog mode
+    _xm.input();        //x- has to be passive
+    _xp.input();        //x+ has to be passive
+    _xm.mode(PullDown);
+    _xp.mode(PullDown);
+    _yp.output();
+    _ym.output();
+    _yp = 1;            //drive y+ high
+    _ym = 1;            //drive y- high
+    AnalogIn Ay(xa);    // we have to call the constructor to switch to analog mode
     wait_us(10);
     y1 = Ay.read_u16(); // get y voltage
-    return (y1<threshold);
+    return (y1>threshold);
 }
+
+void TOUCH_TFTx2::wfi(void) {
+    _xm.input();        //x- has to be passive
+    _xp.input();        //x+ has to be passive
+    _xm.mode(PullDown);
+    _xp.mode(PullDown);
+    _yp.output();
+    _ym.output();
+    _yp = 1;            //drive y+ high
+    _ym = 1;            //drive y- high
+}