Modified to work with two displays
Dependents: touch2 default CANary_9341_test CANary_merge
Fork of Touch_tft by
TOUCH_TFTx2.cpp@16:bee053b17977, 2014-05-18 (annotated)
- Committer:
- TickTock
- Date:
- Sun May 18 12:45:30 2014 +0000
- Revision:
- 16:bee053b17977
- Parent:
- 15:f2165aa0daa6
Works with both controllers using precompiler directive
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dreschpe | 0:d78b00f167cb | 1 | /* mbed library for resistive touch pads |
dreschpe | 0:d78b00f167cb | 2 | * uses 4 pins - 2 IO and 2 Analog |
dreschpe | 0:d78b00f167cb | 3 | |
dreschpe | 0:d78b00f167cb | 4 | * c 2011 Peter Drescher - DC2PD |
dreschpe | 0:d78b00f167cb | 5 | * |
dreschpe | 0:d78b00f167cb | 6 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
dreschpe | 0:d78b00f167cb | 7 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
dreschpe | 0:d78b00f167cb | 8 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
dreschpe | 0:d78b00f167cb | 9 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
dreschpe | 0:d78b00f167cb | 10 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
dreschpe | 0:d78b00f167cb | 11 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
dreschpe | 0:d78b00f167cb | 12 | * THE SOFTWARE. |
dreschpe | 0:d78b00f167cb | 13 | */ |
dreschpe | 0:d78b00f167cb | 14 | |
dreschpe | 0:d78b00f167cb | 15 | |
TickTock | 3:3db7309b6146 | 16 | #include "TOUCH_TFTx2.h" |
dreschpe | 0:d78b00f167cb | 17 | #include "mbed.h" |
TickTock | 13:220e3da2dd00 | 18 | #include "Arial12x12.h" |
dreschpe | 0:d78b00f167cb | 19 | |
TickTock | 6:a91b668b058a | 20 | #define threshold 0x8000 // threshold to detect pressed |
TickTock | 7:9cc43f20e365 | 21 | #define accuracy 1000 // noise filter |
TickTock | 5:a9890c586a64 | 22 | #define numsamp 16 // number of averaging samples |
dreschpe | 0:d78b00f167cb | 23 | |
TickTock | 16:bee053b17977 | 24 | #if USE_ILI9341== 1 |
TickTock | 3:3db7309b6146 | 25 | TOUCH_TFTx2::TOUCH_TFTx2(PinName xp, PinName xm, PinName yp, PinName ym, |
TickTock | 16:bee053b17977 | 26 | PinName mosi, PinName miso, PinName sclk, PinName cs0, |
TickTock | 16:bee053b17977 | 27 | PinName cs1, PinName reset, PinName dc, |
TickTock | 16:bee053b17977 | 28 | const char* name): |
dreschpe | 0:d78b00f167cb | 29 | _xp(xp),_xm(xm),_yp(yp),_ym(ym),_ax(xp),_ay(yp), |
TickTock | 16:bee053b17977 | 30 | SPI_TFTx2_ILI9341(mosi,miso,sclk,cs0,cs1,reset,dc,name) { |
dreschpe | 0:d78b00f167cb | 31 | xa = xp; |
dreschpe | 0:d78b00f167cb | 32 | ya = yp; |
dreschpe | 0:d78b00f167cb | 33 | } |
TickTock | 16:bee053b17977 | 34 | #else |
TickTock | 16:bee053b17977 | 35 | TOUCH_TFTx2::TOUCH_TFTx2(PinName xp, PinName xm, PinName yp, PinName ym, |
TickTock | 16:bee053b17977 | 36 | PinName mosi, PinName miso, PinName sclk, PinName cs0, |
TickTock | 16:bee053b17977 | 37 | PinName cs1, PinName reset, |
TickTock | 16:bee053b17977 | 38 | const char* name): |
TickTock | 16:bee053b17977 | 39 | _xp(xp),_xm(xm),_yp(yp),_ym(ym),_ax(xp),_ay(yp), |
TickTock | 16:bee053b17977 | 40 | SPI_TFTx2(mosi,miso,sclk,cs0,cs1,reset,name) { |
TickTock | 16:bee053b17977 | 41 | xa = xp; |
TickTock | 16:bee053b17977 | 42 | ya = yp; |
TickTock | 16:bee053b17977 | 43 | } |
TickTock | 16:bee053b17977 | 44 | #endif |
dreschpe | 0:d78b00f167cb | 45 | |
TickTock | 3:3db7309b6146 | 46 | point TOUCH_TFTx2::get_touch() { |
TickTock | 7:9cc43f20e365 | 47 | unsigned short x1, x2=0, y1, y2=0, i=0, j=0, k; |
TickTock | 5:a9890c586a64 | 48 | unsigned long dy , dx, xs1=0, ys1=0, xs2=0, ys2=0; |
dreschpe | 0:d78b00f167cb | 49 | point p; |
dreschpe | 0:d78b00f167cb | 50 | |
TickTock | 5:a9890c586a64 | 51 | for (k=0; j<numsamp; k++) { |
dreschpe | 0:d78b00f167cb | 52 | // read y voltage |
TickTock | 4:a3cd26c97b76 | 53 | _ym.input(); //LAJ y- has to be passive |
TickTock | 4:a3cd26c97b76 | 54 | _yp.input(); //LAJ y+ has to be passive |
dreschpe | 0:d78b00f167cb | 55 | _xp.output(); |
dreschpe | 0:d78b00f167cb | 56 | _xm.output(); |
dreschpe | 0:d78b00f167cb | 57 | switch (orientation) { |
dreschpe | 0:d78b00f167cb | 58 | case(0): |
dreschpe | 0:d78b00f167cb | 59 | case(3): |
dreschpe | 0:d78b00f167cb | 60 | _xp = 1; |
dreschpe | 0:d78b00f167cb | 61 | _xm = 0; |
dreschpe | 0:d78b00f167cb | 62 | break; |
dreschpe | 0:d78b00f167cb | 63 | case(1): |
dreschpe | 0:d78b00f167cb | 64 | case(2): |
dreschpe | 0:d78b00f167cb | 65 | _xp = 0; |
dreschpe | 0:d78b00f167cb | 66 | _xm = 1; |
dreschpe | 0:d78b00f167cb | 67 | break; |
dreschpe | 0:d78b00f167cb | 68 | } |
dreschpe | 0:d78b00f167cb | 69 | AnalogIn Ay(ya); // we have to call the constructor to switch to analog mode |
dreschpe | 0:d78b00f167cb | 70 | wait_us(10); |
dreschpe | 0:d78b00f167cb | 71 | y1 = Ay.read_u16(); // get y voltage |
TickTock | 5:a9890c586a64 | 72 | dy = (y1 > y2)? (y1-y2) : (y2-y1); |
dreschpe | 0:d78b00f167cb | 73 | y2 = y1; |
dreschpe | 0:d78b00f167cb | 74 | |
dreschpe | 0:d78b00f167cb | 75 | // read x voltage |
TickTock | 4:a3cd26c97b76 | 76 | _xm.input(); //LAJ x- has to be passive |
TickTock | 4:a3cd26c97b76 | 77 | _xp.input(); //LAJ x+ has to be passive |
dreschpe | 0:d78b00f167cb | 78 | _yp.output(); |
dreschpe | 0:d78b00f167cb | 79 | _ym.output(); |
dreschpe | 0:d78b00f167cb | 80 | switch (orientation) { |
dreschpe | 0:d78b00f167cb | 81 | case(0): |
dreschpe | 0:d78b00f167cb | 82 | case(1): |
dreschpe | 0:d78b00f167cb | 83 | _yp = 1; |
dreschpe | 0:d78b00f167cb | 84 | _ym = 0; |
dreschpe | 0:d78b00f167cb | 85 | break; |
dreschpe | 0:d78b00f167cb | 86 | case(2): |
dreschpe | 0:d78b00f167cb | 87 | case(3): |
dreschpe | 0:d78b00f167cb | 88 | _yp = 0; |
dreschpe | 0:d78b00f167cb | 89 | _ym = 1; |
dreschpe | 0:d78b00f167cb | 90 | break; |
dreschpe | 0:d78b00f167cb | 91 | } |
dreschpe | 0:d78b00f167cb | 92 | AnalogIn Ax(xa); // we have to call the constructor to switch to analog mode |
dreschpe | 0:d78b00f167cb | 93 | wait_us(10); |
dreschpe | 0:d78b00f167cb | 94 | x1 = Ax.read_u16(); // get x voltage |
TickTock | 5:a9890c586a64 | 95 | dx = (x1 > x2)? (x1-x2) : (x2-x1); |
dreschpe | 0:d78b00f167cb | 96 | x2 = x1; |
TickTock | 5:a9890c586a64 | 97 | if(dy<accuracy && dx<accuracy) { |
TickTock | 8:fd0abf6a7f59 | 98 | if(k<numsamp/2){ |
TickTock | 5:a9890c586a64 | 99 | xs1 += x1; |
TickTock | 5:a9890c586a64 | 100 | ys1 += y1; |
TickTock | 5:a9890c586a64 | 101 | i++; |
TickTock | 5:a9890c586a64 | 102 | } else { |
TickTock | 5:a9890c586a64 | 103 | xs2 += x1; |
TickTock | 5:a9890c586a64 | 104 | ys2 += y1; |
TickTock | 5:a9890c586a64 | 105 | j++; |
TickTock | 5:a9890c586a64 | 106 | } |
TickTock | 5:a9890c586a64 | 107 | } |
TickTock | 5:a9890c586a64 | 108 | } // for:next |
TickTock | 5:a9890c586a64 | 109 | xs1 = xs1 / i; |
TickTock | 5:a9890c586a64 | 110 | ys1 = ys1 / i; |
TickTock | 5:a9890c586a64 | 111 | xs2 = xs2 / j; |
TickTock | 5:a9890c586a64 | 112 | ys2 = ys2 / j; |
TickTock | 5:a9890c586a64 | 113 | dy = (ys1 > ys2)? (ys1-ys2) : (ys2-ys1); |
TickTock | 5:a9890c586a64 | 114 | dx = (xs1 > xs2)? (xs1-xs2) : (xs2-xs1); |
TickTock | 5:a9890c586a64 | 115 | if(dy<accuracy && dx<accuracy) { |
TickTock | 5:a9890c586a64 | 116 | |
TickTock | 5:a9890c586a64 | 117 | switch (orientation) { |
TickTock | 5:a9890c586a64 | 118 | case(0): |
TickTock | 5:a9890c586a64 | 119 | case(2): |
TickTock | 5:a9890c586a64 | 120 | p.y = (xs1+xs2) / 2; // average |
TickTock | 5:a9890c586a64 | 121 | p.x = (ys1+ys2) / 2; |
TickTock | 5:a9890c586a64 | 122 | break; |
TickTock | 5:a9890c586a64 | 123 | case(1): |
TickTock | 5:a9890c586a64 | 124 | case(3): |
TickTock | 5:a9890c586a64 | 125 | p.x = (xs1+xs2) / 2; // average |
TickTock | 5:a9890c586a64 | 126 | p.y = (ys1+ys2) / 2; |
TickTock | 5:a9890c586a64 | 127 | break; |
TickTock | 5:a9890c586a64 | 128 | } |
TickTock | 5:a9890c586a64 | 129 | } else { // sample average moved too much so discard |
TickTock | 7:9cc43f20e365 | 130 | p.x = 65535; |
TickTock | 7:9cc43f20e365 | 131 | p.y = 65535; |
dreschpe | 0:d78b00f167cb | 132 | } |
TickTock | 5:a9890c586a64 | 133 | // debug |
TickTock | 14:c58c98c5020a | 134 | //locate(1,160); |
TickTock | 14:c58c98c5020a | 135 | //printf("d: %4d x: %5d",dx,p.x); |
TickTock | 14:c58c98c5020a | 136 | //locate(1,200); |
TickTock | 5:a9890c586a64 | 137 | //printf("d: %4d y: %5d",dy,p.y); |
TickTock | 5:a9890c586a64 | 138 | //wait(0.25); |
TickTock | 6:a91b668b058a | 139 | wfi(); //enable touchpad input |
dreschpe | 0:d78b00f167cb | 140 | return(p); |
TickTock | 5:a9890c586a64 | 141 | }//*/ |
dreschpe | 0:d78b00f167cb | 142 | |
TickTock | 7:9cc43f20e365 | 143 | |
TickTock | 7:9cc43f20e365 | 144 | |
TickTock | 7:9cc43f20e365 | 145 | point TOUCH_TFTx2::to_pixel(point a_point) { |
TickTock | 7:9cc43f20e365 | 146 | static point p; |
TickTock | 7:9cc43f20e365 | 147 | |
TickTock | 7:9cc43f20e365 | 148 | if (a_point.x < x_mid) { // left screen |
TickTock | 7:9cc43f20e365 | 149 | p.x = (a_point.x - x0_off) / x0_pp + 3; |
TickTock | 7:9cc43f20e365 | 150 | if (p.x > width()-1) p.x = width()-1; |
TickTock | 7:9cc43f20e365 | 151 | p.y = (a_point.y - y0_off) / y0_pp + 3; |
TickTock | 7:9cc43f20e365 | 152 | }else{ // right screen |
TickTock | 7:9cc43f20e365 | 153 | p.x = (a_point.x - x1_off) / x1_pp + 3; |
TickTock | 7:9cc43f20e365 | 154 | if (p.x > width()-1) p.x = 2*width()-1; |
TickTock | 7:9cc43f20e365 | 155 | else p.x += width(); // add width to indicate right screen |
TickTock | 7:9cc43f20e365 | 156 | p.y = (a_point.y - y1_off) / y1_pp + 3; |
TickTock | 7:9cc43f20e365 | 157 | } |
TickTock | 7:9cc43f20e365 | 158 | if (p.y > height()-1) p.y = height()-1; |
TickTock | 7:9cc43f20e365 | 159 | //locate(1,60); //debug |
TickTock | 7:9cc43f20e365 | 160 | //printf("x: %d\ty: %d",p.x,p.y); |
TickTock | 7:9cc43f20e365 | 161 | return (p); |
TickTock | 7:9cc43f20e365 | 162 | } |
TickTock | 7:9cc43f20e365 | 163 | |
TickTock | 7:9cc43f20e365 | 164 | bool TOUCH_TFTx2::is_touched(void) { |
TickTock | 7:9cc43f20e365 | 165 | unsigned short y1; |
TickTock | 7:9cc43f20e365 | 166 | // read y voltage |
TickTock | 7:9cc43f20e365 | 167 | _xm.input(); //x- has to be passive |
TickTock | 7:9cc43f20e365 | 168 | _xp.input(); //x+ has to be passive |
TickTock | 7:9cc43f20e365 | 169 | _xm.mode(PullDown); |
TickTock | 7:9cc43f20e365 | 170 | _xp.mode(PullDown); |
TickTock | 7:9cc43f20e365 | 171 | _yp.output(); |
TickTock | 7:9cc43f20e365 | 172 | _ym.output(); |
TickTock | 7:9cc43f20e365 | 173 | _yp = 1; //drive y+ high |
TickTock | 7:9cc43f20e365 | 174 | _ym = 1; //drive y- high |
TickTock | 7:9cc43f20e365 | 175 | AnalogIn Ay(xa); // we have to call the constructor to switch to analog mode |
TickTock | 7:9cc43f20e365 | 176 | wait_us(10); |
TickTock | 7:9cc43f20e365 | 177 | y1 = Ay.read_u16(); // get y voltage |
TickTock | 7:9cc43f20e365 | 178 | return (y1>threshold); |
TickTock | 7:9cc43f20e365 | 179 | } |
TickTock | 7:9cc43f20e365 | 180 | |
TickTock | 7:9cc43f20e365 | 181 | void TOUCH_TFTx2::wfi(void) { |
TickTock | 7:9cc43f20e365 | 182 | _xm.input(); //x- has to be passive |
TickTock | 7:9cc43f20e365 | 183 | _xp.input(); //x+ has to be passive |
TickTock | 7:9cc43f20e365 | 184 | _xm.mode(PullDown); |
TickTock | 7:9cc43f20e365 | 185 | _xp.mode(PullDown); |
TickTock | 7:9cc43f20e365 | 186 | _yp.output(); |
TickTock | 7:9cc43f20e365 | 187 | _ym.output(); |
TickTock | 7:9cc43f20e365 | 188 | _yp = 1; //drive y+ high |
TickTock | 7:9cc43f20e365 | 189 | _ym = 1; //drive y- high |
TickTock | 7:9cc43f20e365 | 190 | } |
TickTock | 7:9cc43f20e365 | 191 | |
TickTock | 10:fd7ae99850a9 | 192 | void TOUCH_TFTx2::setcal(int _x0off, int _y0off, int _x0pp, int _y0pp, int _x1off, int _y1off, int _x1pp, int _y1pp, int _xmid) { |
TickTock | 10:fd7ae99850a9 | 193 | x0_off = _x0off; |
TickTock | 10:fd7ae99850a9 | 194 | y0_off = _y0off; |
TickTock | 10:fd7ae99850a9 | 195 | x0_pp = _x0pp; |
TickTock | 10:fd7ae99850a9 | 196 | y0_pp = _y0pp; |
TickTock | 10:fd7ae99850a9 | 197 | x1_off = _x1off; |
TickTock | 10:fd7ae99850a9 | 198 | y1_off = _y1off; |
TickTock | 10:fd7ae99850a9 | 199 | x1_pp = _x1pp; |
TickTock | 10:fd7ae99850a9 | 200 | y1_pp = _y1pp; |
TickTock | 10:fd7ae99850a9 | 201 | x_mid = _xmid; |
TickTock | 10:fd7ae99850a9 | 202 | } |
TickTock | 10:fd7ae99850a9 | 203 | |
TickTock | 3:3db7309b6146 | 204 | void TOUCH_TFTx2::calibrate(void) { |
dreschpe | 0:d78b00f167cb | 205 | int i; |
TickTock | 5:a9890c586a64 | 206 | int ulx0 = 0, uly0 = 0, brx0 = 0, bry0 = 0; |
TickTock | 5:a9890c586a64 | 207 | int ulx1 = 0, uly1 = 0, brx1 = 0, bry1 = 0; |
dreschpe | 2:ef7972c29c0e | 208 | int pos_x, pos_y; |
dreschpe | 0:d78b00f167cb | 209 | point p; |
TickTock | 11:ce7ae1584207 | 210 | seldisp=1; // select right display |
TickTock | 13:220e3da2dd00 | 211 | set_font((unsigned char*) Arial12x12); |
TickTock | 13:220e3da2dd00 | 212 | foreground(White); |
TickTock | 13:220e3da2dd00 | 213 | background(Black); |
TickTock | 11:ce7ae1584207 | 214 | cls(); |
TickTock | 11:ce7ae1584207 | 215 | line(0,3,6,3,White); |
TickTock | 11:ce7ae1584207 | 216 | line(3,0,3,6,White); |
TickTock | 11:ce7ae1584207 | 217 | |
TickTock | 11:ce7ae1584207 | 218 | // get the center of the screen |
TickTock | 11:ce7ae1584207 | 219 | pos_x = columns() / 2 - 3; |
TickTock | 11:ce7ae1584207 | 220 | pos_x = pos_x * font[1]; |
TickTock | 11:ce7ae1584207 | 221 | pos_y = (rows() / 2) - 1; |
TickTock | 11:ce7ae1584207 | 222 | pos_y = pos_y * font[2]; |
TickTock | 6:a91b668b058a | 223 | |
TickTock | 11:ce7ae1584207 | 224 | //calibrate right screen |
TickTock | 11:ce7ae1584207 | 225 | locate(pos_x,pos_y); |
TickTock | 11:ce7ae1584207 | 226 | printf("press cross"); |
TickTock | 11:ce7ae1584207 | 227 | locate(pos_x,pos_y + font[2]); |
TickTock | 11:ce7ae1584207 | 228 | printf("to calibrate"); |
TickTock | 11:ce7ae1584207 | 229 | do { |
TickTock | 11:ce7ae1584207 | 230 | wait(0.1); |
TickTock | 11:ce7ae1584207 | 231 | } while (!is_touched()); //Wait for touch |
TickTock | 11:ce7ae1584207 | 232 | for (i=0; i<5; i++) { |
TickTock | 6:a91b668b058a | 233 | do { |
TickTock | 11:ce7ae1584207 | 234 | p = get_touch(); |
TickTock | 11:ce7ae1584207 | 235 | } while (p.x==0 && p.y==0); |
TickTock | 11:ce7ae1584207 | 236 | ulx1 += p.x; |
TickTock | 11:ce7ae1584207 | 237 | uly1 += p.y; |
TickTock | 11:ce7ae1584207 | 238 | } |
TickTock | 11:ce7ae1584207 | 239 | ulx1 /= 5; |
TickTock | 11:ce7ae1584207 | 240 | uly1 /= 5; |
TickTock | 11:ce7ae1584207 | 241 | locate(pos_x,pos_y); |
TickTock | 11:ce7ae1584207 | 242 | printf("OK "); |
TickTock | 11:ce7ae1584207 | 243 | printf(" "); |
TickTock | 11:ce7ae1584207 | 244 | do { |
TickTock | 11:ce7ae1584207 | 245 | wait(0.1); |
TickTock | 11:ce7ae1584207 | 246 | } while (is_touched()); //Wait for no touch |
TickTock | 11:ce7ae1584207 | 247 | |
TickTock | 11:ce7ae1584207 | 248 | cls(); |
TickTock | 11:ce7ae1584207 | 249 | line(width() -1, height() - 4,width() - 7,height() -4,White); // paint cross |
TickTock | 11:ce7ae1584207 | 250 | line(width() - 4,height() - 1,width() - 4,height() - 7,White); |
TickTock | 11:ce7ae1584207 | 251 | locate(pos_x,pos_y); |
TickTock | 11:ce7ae1584207 | 252 | printf("press cross"); |
TickTock | 11:ce7ae1584207 | 253 | locate(pos_x,pos_y + font[2]); |
TickTock | 11:ce7ae1584207 | 254 | printf("to calibrate"); |
TickTock | 11:ce7ae1584207 | 255 | do { |
TickTock | 11:ce7ae1584207 | 256 | wait(0.1); |
TickTock | 11:ce7ae1584207 | 257 | } while (!is_touched()); //Wait for touch |
TickTock | 11:ce7ae1584207 | 258 | for (i=0; i<5; i++) { |
TickTock | 6:a91b668b058a | 259 | do { |
TickTock | 11:ce7ae1584207 | 260 | p = get_touch(); |
TickTock | 11:ce7ae1584207 | 261 | } while (p.x==0 && p.y==0); p = get_touch(); |
TickTock | 11:ce7ae1584207 | 262 | brx1 += p.x; |
TickTock | 11:ce7ae1584207 | 263 | bry1 += p.y; |
TickTock | 11:ce7ae1584207 | 264 | } |
TickTock | 11:ce7ae1584207 | 265 | brx1 /= 5; |
TickTock | 11:ce7ae1584207 | 266 | bry1 /= 5; |
TickTock | 11:ce7ae1584207 | 267 | |
TickTock | 11:ce7ae1584207 | 268 | locate(pos_x, pos_y); |
TickTock | 11:ce7ae1584207 | 269 | printf("OK "); |
TickTock | 11:ce7ae1584207 | 270 | printf(" "); |
TickTock | 11:ce7ae1584207 | 271 | do { |
TickTock | 11:ce7ae1584207 | 272 | wait(0.1); |
TickTock | 11:ce7ae1584207 | 273 | } while (is_touched()); //Wait for no touch |
TickTock | 11:ce7ae1584207 | 274 | |
TickTock | 11:ce7ae1584207 | 275 | cls(); |
TickTock | 11:ce7ae1584207 | 276 | seldisp=0; // select left display |
TickTock | 11:ce7ae1584207 | 277 | cls(); |
TickTock | 11:ce7ae1584207 | 278 | line(0,3,6,3,White); |
TickTock | 11:ce7ae1584207 | 279 | line(3,0,3,6,White); |
TickTock | 11:ce7ae1584207 | 280 | |
TickTock | 11:ce7ae1584207 | 281 | // now calibrate left screen |
TickTock | 11:ce7ae1584207 | 282 | locate(pos_x,pos_y); |
TickTock | 11:ce7ae1584207 | 283 | printf("press cross"); |
TickTock | 11:ce7ae1584207 | 284 | locate(pos_x,pos_y + font[2]); |
TickTock | 11:ce7ae1584207 | 285 | printf("to calibrate"); |
TickTock | 11:ce7ae1584207 | 286 | do { |
TickTock | 11:ce7ae1584207 | 287 | wait(0.1); |
TickTock | 11:ce7ae1584207 | 288 | } while (!is_touched()); //Wait for touch |
TickTock | 11:ce7ae1584207 | 289 | for (i=0; i<5; i++) { |
TickTock | 6:a91b668b058a | 290 | do { |
TickTock | 11:ce7ae1584207 | 291 | p = get_touch(); |
TickTock | 11:ce7ae1584207 | 292 | } while (p.x==0 && p.y==0); |
TickTock | 11:ce7ae1584207 | 293 | ulx0 += p.x; |
TickTock | 11:ce7ae1584207 | 294 | uly0 += p.y; |
TickTock | 11:ce7ae1584207 | 295 | } |
TickTock | 11:ce7ae1584207 | 296 | ulx0 /= 5; |
TickTock | 11:ce7ae1584207 | 297 | uly0 /= 5; |
TickTock | 11:ce7ae1584207 | 298 | locate(pos_x,pos_y); |
TickTock | 11:ce7ae1584207 | 299 | printf("OK "); |
TickTock | 11:ce7ae1584207 | 300 | printf(" "); |
TickTock | 11:ce7ae1584207 | 301 | do { |
TickTock | 11:ce7ae1584207 | 302 | wait(0.1); |
TickTock | 11:ce7ae1584207 | 303 | } while (is_touched()); //Wait for no touch |
TickTock | 11:ce7ae1584207 | 304 | |
TickTock | 11:ce7ae1584207 | 305 | cls(); |
TickTock | 11:ce7ae1584207 | 306 | line(width() -1, height() - 4,width() - 7,height() -4,White); // paint cross |
TickTock | 11:ce7ae1584207 | 307 | line(width() - 4,height() - 1,width() - 4,height() - 7,White); |
TickTock | 11:ce7ae1584207 | 308 | locate(pos_x,pos_y); |
TickTock | 11:ce7ae1584207 | 309 | printf("press cross"); |
TickTock | 11:ce7ae1584207 | 310 | locate(pos_x,pos_y + font[2]); |
TickTock | 11:ce7ae1584207 | 311 | printf("to calibrate"); |
TickTock | 11:ce7ae1584207 | 312 | do { |
TickTock | 11:ce7ae1584207 | 313 | wait(0.1); |
TickTock | 11:ce7ae1584207 | 314 | } while (!is_touched()); //Wait for touch |
TickTock | 11:ce7ae1584207 | 315 | for (i=0; i<5; i++) { |
TickTock | 11:ce7ae1584207 | 316 | do { |
TickTock | 11:ce7ae1584207 | 317 | p = get_touch(); |
TickTock | 11:ce7ae1584207 | 318 | } while (p.x==0 && p.y==0); |
TickTock | 11:ce7ae1584207 | 319 | brx0 += p.x; |
TickTock | 11:ce7ae1584207 | 320 | bry0 += p.y; |
TickTock | 11:ce7ae1584207 | 321 | } |
TickTock | 11:ce7ae1584207 | 322 | brx0 /= 5; |
TickTock | 11:ce7ae1584207 | 323 | bry0 /= 5; |
TickTock | 11:ce7ae1584207 | 324 | |
TickTock | 11:ce7ae1584207 | 325 | locate(pos_x, pos_y); |
TickTock | 11:ce7ae1584207 | 326 | printf("OK "); |
TickTock | 11:ce7ae1584207 | 327 | printf(" "); |
TickTock | 11:ce7ae1584207 | 328 | do { |
TickTock | 11:ce7ae1584207 | 329 | wait(0.1); |
TickTock | 11:ce7ae1584207 | 330 | } while (is_touched()); //Wait for no touch |
TickTock | 11:ce7ae1584207 | 331 | |
TickTock | 11:ce7ae1584207 | 332 | cls(); |
TickTock | 11:ce7ae1584207 | 333 | |
TickTock | 11:ce7ae1584207 | 334 | x0_off = ulx0; |
TickTock | 11:ce7ae1584207 | 335 | y0_off = uly0; |
TickTock | 11:ce7ae1584207 | 336 | x0_pp = (brx0-ulx0) / (width() - 6); |
TickTock | 11:ce7ae1584207 | 337 | y0_pp = (bry0-uly0) / (height() - 6); |
TickTock | 6:a91b668b058a | 338 | |
TickTock | 6:a91b668b058a | 339 | |
TickTock | 11:ce7ae1584207 | 340 | x1_off = ulx1; |
TickTock | 11:ce7ae1584207 | 341 | y1_off = uly1; |
TickTock | 11:ce7ae1584207 | 342 | x1_pp = (brx1-ulx1) / (width() - 6); |
TickTock | 11:ce7ae1584207 | 343 | y1_pp = (bry1-uly1) / (height() - 6); |
TickTock | 11:ce7ae1584207 | 344 | x_mid = (brx0 + ulx1) / 2; |
TickTock | 11:ce7ae1584207 | 345 | //debug |
TickTock | 11:ce7ae1584207 | 346 | //printf("x0_off:%d y0_off:%d x0_pp:%d y0_pp:%d\n",x0_off,y0_off,x0_pp,y0_pp); |
TickTock | 11:ce7ae1584207 | 347 | //printf("x1_off:%d y1_off:%d x1_pp:%d y1_pp:%d\n",x1_off,y1_off,x1_pp,y1_pp); |
TickTock | 11:ce7ae1584207 | 348 | //printf("x_mid:%d\n",x_mid); |
dreschpe | 0:d78b00f167cb | 349 | } |