This is the final version of Mini Gateway for Automation and Security desgined for Renesas GR Peach Design Contest
Dependencies: GR-PEACH_video GraphicsFramework HTTPServer R_BSP mbed-rpc mbed-rtos Socket lwip-eth lwip-sys lwip FATFileSystem
Fork of mbed-os-example-mbed5-blinky by
TouchADS7843/Touch.cpp@12:9a20164dcc47, 2017-01-11 (annotated)
- Committer:
- vipinranka
- Date:
- Wed Jan 11 11:41:30 2017 +0000
- Revision:
- 12:9a20164dcc47
This is the final version MGAS Project for Renesas GR Peach Design Contest
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
vipinranka | 12:9a20164dcc47 | 1 | /************************************************************************************************** |
vipinranka | 12:9a20164dcc47 | 2 | ***** ***** |
vipinranka | 12:9a20164dcc47 | 3 | ***** Name: Touch.cpp ***** |
vipinranka | 12:9a20164dcc47 | 4 | ***** Ver.: 1.0 ***** |
vipinranka | 12:9a20164dcc47 | 5 | ***** Date: 04/01/2013 ***** |
vipinranka | 12:9a20164dcc47 | 6 | ***** Auth: Frank Vannieuwkerke ***** |
vipinranka | 12:9a20164dcc47 | 7 | ***** Erik Olieman ***** |
vipinranka | 12:9a20164dcc47 | 8 | ***** Func: Touch driver for use with ADS7843 ***** |
vipinranka | 12:9a20164dcc47 | 9 | ***** ***** |
vipinranka | 12:9a20164dcc47 | 10 | ***** Code based on Carlos E. Vidales tutorial : ***** |
vipinranka | 12:9a20164dcc47 | 11 | ***** How To Calibrate Touch Screens ***** |
vipinranka | 12:9a20164dcc47 | 12 | ***** www.embedded.com/design/configurable-systems/4023968/How-To-Calibrate-Touch-Screens ***** |
vipinranka | 12:9a20164dcc47 | 13 | ***** ***** |
vipinranka | 12:9a20164dcc47 | 14 | **************************************************************************************************/ |
vipinranka | 12:9a20164dcc47 | 15 | |
vipinranka | 12:9a20164dcc47 | 16 | #include "Touch.h" |
vipinranka | 12:9a20164dcc47 | 17 | #include "mbed.h" |
vipinranka | 12:9a20164dcc47 | 18 | #include "Arial12x12.h" |
vipinranka | 12:9a20164dcc47 | 19 | |
vipinranka | 12:9a20164dcc47 | 20 | #define THRESHOLD 2 |
vipinranka | 12:9a20164dcc47 | 21 | |
vipinranka | 12:9a20164dcc47 | 22 | TouchScreenADS7843::TouchScreenADS7843(PinName tp_mosi, PinName tp_miso, PinName tp_sclk, PinName tp_cs, PinName tp_irq, ILI9486 *_LCD) |
vipinranka | 12:9a20164dcc47 | 23 | : LCD(_LCD), _tp_spi(tp_mosi, tp_miso, tp_sclk), _tp_cs(tp_cs), _tp_irq(tp_irq) |
vipinranka | 12:9a20164dcc47 | 24 | { |
vipinranka | 12:9a20164dcc47 | 25 | DisplaySample[0].x=45; |
vipinranka | 12:9a20164dcc47 | 26 | DisplaySample[0].y=45; |
vipinranka | 12:9a20164dcc47 | 27 | DisplaySample[1].x=45; |
vipinranka | 12:9a20164dcc47 | 28 | DisplaySample[1].y=270; |
vipinranka | 12:9a20164dcc47 | 29 | DisplaySample[2].x=190; |
vipinranka | 12:9a20164dcc47 | 30 | DisplaySample[2].y=190; |
vipinranka | 12:9a20164dcc47 | 31 | ScreenSample[0].x=45; |
vipinranka | 12:9a20164dcc47 | 32 | ScreenSample[0].y=45; |
vipinranka | 12:9a20164dcc47 | 33 | ScreenSample[1].x=45; |
vipinranka | 12:9a20164dcc47 | 34 | ScreenSample[1].y=270; |
vipinranka | 12:9a20164dcc47 | 35 | ScreenSample[2].x=190; |
vipinranka | 12:9a20164dcc47 | 36 | ScreenSample[2].y=190; |
vipinranka | 12:9a20164dcc47 | 37 | _tp_cs=1; |
vipinranka | 12:9a20164dcc47 | 38 | _tp_spi.frequency(500000); |
vipinranka | 12:9a20164dcc47 | 39 | _tp_spi.format(8,0); // 8 bit spi mode 0 |
vipinranka | 12:9a20164dcc47 | 40 | } |
vipinranka | 12:9a20164dcc47 | 41 | |
vipinranka | 12:9a20164dcc47 | 42 | int TouchScreenADS7843::Read_XY(unsigned char XY) |
vipinranka | 12:9a20164dcc47 | 43 | { |
vipinranka | 12:9a20164dcc47 | 44 | unsigned char msb, lsb; |
vipinranka | 12:9a20164dcc47 | 45 | unsigned int Temp; |
vipinranka | 12:9a20164dcc47 | 46 | |
vipinranka | 12:9a20164dcc47 | 47 | Temp=0; |
vipinranka | 12:9a20164dcc47 | 48 | _tp_cs=0; |
vipinranka | 12:9a20164dcc47 | 49 | wait_us(SPI_RD_DELAY); |
vipinranka | 12:9a20164dcc47 | 50 | _tp_spi.write(XY); |
vipinranka | 12:9a20164dcc47 | 51 | wait_us(SPI_RD_DELAY); |
vipinranka | 12:9a20164dcc47 | 52 | msb = _tp_spi.write(0x00); // msb |
vipinranka | 12:9a20164dcc47 | 53 | wait_us(SPI_RD_DELAY); |
vipinranka | 12:9a20164dcc47 | 54 | lsb = _tp_spi.write(0x00); // lsb |
vipinranka | 12:9a20164dcc47 | 55 | _tp_cs=1; |
vipinranka | 12:9a20164dcc47 | 56 | Temp = ((msb << 8 ) | lsb); |
vipinranka | 12:9a20164dcc47 | 57 | Temp >>= 3; |
vipinranka | 12:9a20164dcc47 | 58 | Temp &= 0xfff; |
vipinranka | 12:9a20164dcc47 | 59 | Temp /= 4; // Scaling : return value range must be between 0 and 1024 |
vipinranka | 12:9a20164dcc47 | 60 | return(Temp); |
vipinranka | 12:9a20164dcc47 | 61 | } |
vipinranka | 12:9a20164dcc47 | 62 | |
vipinranka | 12:9a20164dcc47 | 63 | |
vipinranka | 12:9a20164dcc47 | 64 | void TouchScreenADS7843::TP_GetAdXY(int *x,int *y) |
vipinranka | 12:9a20164dcc47 | 65 | { |
vipinranka | 12:9a20164dcc47 | 66 | int adx,ady; |
vipinranka | 12:9a20164dcc47 | 67 | adx = Read_XY(CHX); |
vipinranka | 12:9a20164dcc47 | 68 | wait_us(1); |
vipinranka | 12:9a20164dcc47 | 69 | ady = Read_XY(CHY); |
vipinranka | 12:9a20164dcc47 | 70 | *x = adx; |
vipinranka | 12:9a20164dcc47 | 71 | *y = ady; |
vipinranka | 12:9a20164dcc47 | 72 | } |
vipinranka | 12:9a20164dcc47 | 73 | |
vipinranka | 12:9a20164dcc47 | 74 | void TouchScreenADS7843::TP_DrawPoint(unsigned int Xpos,unsigned int Ypos, unsigned int color) |
vipinranka | 12:9a20164dcc47 | 75 | { |
vipinranka | 12:9a20164dcc47 | 76 | // LCD->wr_reg(0x03, 0x1030); |
vipinranka | 12:9a20164dcc47 | 77 | LCD->WindowMax(); |
vipinranka | 12:9a20164dcc47 | 78 | //LCD->pixel(Xpos,Ypos,color); |
vipinranka | 12:9a20164dcc47 | 79 | // LCD->pixel(Xpos+1,Ypos,color); |
vipinranka | 12:9a20164dcc47 | 80 | // LCD->pixel(Xpos,Ypos+1,color); |
vipinranka | 12:9a20164dcc47 | 81 | // LCD->pixel(Xpos+1,Ypos+1,color); |
vipinranka | 12:9a20164dcc47 | 82 | LCD->cls(); |
vipinranka | 12:9a20164dcc47 | 83 | LCD->locate(Xpos,Ypos); |
vipinranka | 12:9a20164dcc47 | 84 | LCD->printf("X:%d,Y:%d",Xpos,Ypos); |
vipinranka | 12:9a20164dcc47 | 85 | } |
vipinranka | 12:9a20164dcc47 | 86 | |
vipinranka | 12:9a20164dcc47 | 87 | void TouchScreenADS7843::DrawCross(unsigned int Xpos,unsigned int Ypos) |
vipinranka | 12:9a20164dcc47 | 88 | { |
vipinranka | 12:9a20164dcc47 | 89 | LCD->line(Xpos-15,Ypos,Xpos-2,Ypos,White); |
vipinranka | 12:9a20164dcc47 | 90 | LCD->line(Xpos+2,Ypos,Xpos+15,Ypos,White); |
vipinranka | 12:9a20164dcc47 | 91 | LCD->line(Xpos,Ypos-15,Xpos,Ypos-2,White); |
vipinranka | 12:9a20164dcc47 | 92 | LCD->line(Xpos,Ypos+2,Xpos,Ypos+15,White); |
vipinranka | 12:9a20164dcc47 | 93 | |
vipinranka | 12:9a20164dcc47 | 94 | LCD->line(Xpos-15,Ypos+15,Xpos-7,Ypos+15,DarkGrey); |
vipinranka | 12:9a20164dcc47 | 95 | LCD->line(Xpos-15,Ypos+7,Xpos-15,Ypos+15,DarkGrey); |
vipinranka | 12:9a20164dcc47 | 96 | |
vipinranka | 12:9a20164dcc47 | 97 | LCD->line(Xpos-15,Ypos-15,Xpos-7,Ypos-15,DarkGrey); |
vipinranka | 12:9a20164dcc47 | 98 | LCD->line(Xpos-15,Ypos-7,Xpos-15,Ypos-15,DarkGrey); |
vipinranka | 12:9a20164dcc47 | 99 | |
vipinranka | 12:9a20164dcc47 | 100 | LCD->line(Xpos+7,Ypos+15,Xpos+15,Ypos+15,DarkGrey); |
vipinranka | 12:9a20164dcc47 | 101 | LCD->line(Xpos+15,Ypos+7,Xpos+15,Ypos+15,DarkGrey); |
vipinranka | 12:9a20164dcc47 | 102 | |
vipinranka | 12:9a20164dcc47 | 103 | LCD->line(Xpos+7,Ypos-15,Xpos+15,Ypos-15,DarkGrey); |
vipinranka | 12:9a20164dcc47 | 104 | LCD->line(Xpos+15,Ypos-15,Xpos+15,Ypos-7,DarkGrey); |
vipinranka | 12:9a20164dcc47 | 105 | } |
vipinranka | 12:9a20164dcc47 | 106 | |
vipinranka | 12:9a20164dcc47 | 107 | unsigned char TouchScreenADS7843::Read_Ads7843(Coordinate * screenPtr) |
vipinranka | 12:9a20164dcc47 | 108 | { |
vipinranka | 12:9a20164dcc47 | 109 | int m0,m1,m2,TP_X[1],TP_Y[1],temp[3]; |
vipinranka | 12:9a20164dcc47 | 110 | uint8_t count=0; |
vipinranka | 12:9a20164dcc47 | 111 | int buffer[2][9]={{0},{0}}; |
vipinranka | 12:9a20164dcc47 | 112 | if (screenPtr == NULL) screenPtr = &screen; |
vipinranka | 12:9a20164dcc47 | 113 | do |
vipinranka | 12:9a20164dcc47 | 114 | { |
vipinranka | 12:9a20164dcc47 | 115 | TP_GetAdXY(TP_X,TP_Y); |
vipinranka | 12:9a20164dcc47 | 116 | buffer[0][count]=TP_X[0]; |
vipinranka | 12:9a20164dcc47 | 117 | buffer[1][count]=TP_Y[0]; |
vipinranka | 12:9a20164dcc47 | 118 | count++; |
vipinranka | 12:9a20164dcc47 | 119 | } |
vipinranka | 12:9a20164dcc47 | 120 | while(!_tp_irq && (count < 9)); |
vipinranka | 12:9a20164dcc47 | 121 | if(count==9) |
vipinranka | 12:9a20164dcc47 | 122 | { |
vipinranka | 12:9a20164dcc47 | 123 | temp[0]=(buffer[0][0]+buffer[0][1]+buffer[0][2])/3; |
vipinranka | 12:9a20164dcc47 | 124 | temp[1]=(buffer[0][3]+buffer[0][4]+buffer[0][5])/3; |
vipinranka | 12:9a20164dcc47 | 125 | temp[2]=(buffer[0][6]+buffer[0][7]+buffer[0][8])/3; |
vipinranka | 12:9a20164dcc47 | 126 | m0=temp[0]-temp[1]; |
vipinranka | 12:9a20164dcc47 | 127 | m1=temp[1]-temp[2]; |
vipinranka | 12:9a20164dcc47 | 128 | m2=temp[2]-temp[0]; |
vipinranka | 12:9a20164dcc47 | 129 | m0=m0>0?m0:(-m0); |
vipinranka | 12:9a20164dcc47 | 130 | m1=m1>0?m1:(-m1); |
vipinranka | 12:9a20164dcc47 | 131 | m2=m2>0?m2:(-m2); |
vipinranka | 12:9a20164dcc47 | 132 | if( (m0>THRESHOLD) && (m1>THRESHOLD) && (m2>THRESHOLD) ) return 0; |
vipinranka | 12:9a20164dcc47 | 133 | if(m0<m1) |
vipinranka | 12:9a20164dcc47 | 134 | { |
vipinranka | 12:9a20164dcc47 | 135 | if(m2<m0) |
vipinranka | 12:9a20164dcc47 | 136 | screenPtr->x=(temp[0]+temp[2])/2; |
vipinranka | 12:9a20164dcc47 | 137 | else |
vipinranka | 12:9a20164dcc47 | 138 | screenPtr->x=(temp[0]+temp[1])/2; |
vipinranka | 12:9a20164dcc47 | 139 | } |
vipinranka | 12:9a20164dcc47 | 140 | else if(m2<m1) |
vipinranka | 12:9a20164dcc47 | 141 | screenPtr->x=(temp[0]+temp[2])/2; |
vipinranka | 12:9a20164dcc47 | 142 | else |
vipinranka | 12:9a20164dcc47 | 143 | screenPtr->x=(temp[1]+temp[2])/2; |
vipinranka | 12:9a20164dcc47 | 144 | |
vipinranka | 12:9a20164dcc47 | 145 | temp[0]=(buffer[1][0]+buffer[1][1]+buffer[1][2])/3; |
vipinranka | 12:9a20164dcc47 | 146 | temp[1]=(buffer[1][3]+buffer[1][4]+buffer[1][5])/3; |
vipinranka | 12:9a20164dcc47 | 147 | temp[2]=(buffer[1][6]+buffer[1][7]+buffer[1][8])/3; |
vipinranka | 12:9a20164dcc47 | 148 | m0=temp[0]-temp[1]; |
vipinranka | 12:9a20164dcc47 | 149 | m1=temp[1]-temp[2]; |
vipinranka | 12:9a20164dcc47 | 150 | m2=temp[2]-temp[0]; |
vipinranka | 12:9a20164dcc47 | 151 | m0=m0>0?m0:(-m0); |
vipinranka | 12:9a20164dcc47 | 152 | m1=m1>0?m1:(-m1); |
vipinranka | 12:9a20164dcc47 | 153 | m2=m2>0?m2:(-m2); |
vipinranka | 12:9a20164dcc47 | 154 | if( (m0>THRESHOLD) && (m1>THRESHOLD) && (m2>THRESHOLD) ) return 0; |
vipinranka | 12:9a20164dcc47 | 155 | |
vipinranka | 12:9a20164dcc47 | 156 | if(m0<m1) |
vipinranka | 12:9a20164dcc47 | 157 | { |
vipinranka | 12:9a20164dcc47 | 158 | if(m2<m0) |
vipinranka | 12:9a20164dcc47 | 159 | screenPtr->y=(temp[0]+temp[2])/2; |
vipinranka | 12:9a20164dcc47 | 160 | else |
vipinranka | 12:9a20164dcc47 | 161 | screenPtr->y=(temp[0]+temp[1])/2; |
vipinranka | 12:9a20164dcc47 | 162 | } |
vipinranka | 12:9a20164dcc47 | 163 | else if(m2<m1) |
vipinranka | 12:9a20164dcc47 | 164 | screenPtr->y=(temp[0]+temp[2])/2; |
vipinranka | 12:9a20164dcc47 | 165 | else |
vipinranka | 12:9a20164dcc47 | 166 | screenPtr->y=(temp[1]+temp[2])/2; |
vipinranka | 12:9a20164dcc47 | 167 | return 1; |
vipinranka | 12:9a20164dcc47 | 168 | } |
vipinranka | 12:9a20164dcc47 | 169 | return 0; |
vipinranka | 12:9a20164dcc47 | 170 | } |
vipinranka | 12:9a20164dcc47 | 171 | |
vipinranka | 12:9a20164dcc47 | 172 | uint8_t TouchScreenADS7843::setCalibrationMatrix( Coordinate * displayPtr, |
vipinranka | 12:9a20164dcc47 | 173 | Coordinate * screenPtr, |
vipinranka | 12:9a20164dcc47 | 174 | Matrix * matrixPtr) |
vipinranka | 12:9a20164dcc47 | 175 | { |
vipinranka | 12:9a20164dcc47 | 176 | uint8_t retTHRESHOLD = 0 ; |
vipinranka | 12:9a20164dcc47 | 177 | // K = (Xs0 - Xs2)*(Ys1 - Ys2) - (Xs1 - Xs2)*(Ys0 - Ys2) |
vipinranka | 12:9a20164dcc47 | 178 | matrixPtr->Divider = ((screenPtr[0].x - screenPtr[2].x) * (screenPtr[1].y - screenPtr[2].y)) - |
vipinranka | 12:9a20164dcc47 | 179 | ((screenPtr[1].x - screenPtr[2].x) * (screenPtr[0].y - screenPtr[2].y)) ; |
vipinranka | 12:9a20164dcc47 | 180 | if( matrixPtr->Divider == 0 ) |
vipinranka | 12:9a20164dcc47 | 181 | { |
vipinranka | 12:9a20164dcc47 | 182 | retTHRESHOLD = 1; |
vipinranka | 12:9a20164dcc47 | 183 | } |
vipinranka | 12:9a20164dcc47 | 184 | else |
vipinranka | 12:9a20164dcc47 | 185 | { |
vipinranka | 12:9a20164dcc47 | 186 | // (Xd0 - Xd2)*(Ys1 - Ys2) - (Xd1 - Xd2)*(Ys0 - Ys2) |
vipinranka | 12:9a20164dcc47 | 187 | // A = --------------------------------------------------- |
vipinranka | 12:9a20164dcc47 | 188 | // K |
vipinranka | 12:9a20164dcc47 | 189 | matrixPtr->An = ((displayPtr[0].x - displayPtr[2].x) * (screenPtr[1].y - screenPtr[2].y)) - |
vipinranka | 12:9a20164dcc47 | 190 | ((displayPtr[1].x - displayPtr[2].x) * (screenPtr[0].y - screenPtr[2].y)) ; |
vipinranka | 12:9a20164dcc47 | 191 | // (Xs0 - Xs2)*(Xd1 - Xd2) - (Xd0 - Xd2)*(Xs1 - Xs2) |
vipinranka | 12:9a20164dcc47 | 192 | // B = --------------------------------------------------- |
vipinranka | 12:9a20164dcc47 | 193 | // K |
vipinranka | 12:9a20164dcc47 | 194 | matrixPtr->Bn = ((screenPtr[0].x - screenPtr[2].x) * (displayPtr[1].x - displayPtr[2].x)) - |
vipinranka | 12:9a20164dcc47 | 195 | ((displayPtr[0].x - displayPtr[2].x) * (screenPtr[1].x - screenPtr[2].x)) ; |
vipinranka | 12:9a20164dcc47 | 196 | // Ys0*(Xs2*Xd1 - Xs1*Xd2) + Ys1*(Xs0*Xd2 - Xs2*Xd0) + Ys2*(Xs1*Xd0 - Xs0*Xd1) |
vipinranka | 12:9a20164dcc47 | 197 | // C = ---------------------------------------------------------------------------- |
vipinranka | 12:9a20164dcc47 | 198 | // K |
vipinranka | 12:9a20164dcc47 | 199 | matrixPtr->Cn = (screenPtr[2].x * displayPtr[1].x - screenPtr[1].x * displayPtr[2].x) * screenPtr[0].y + |
vipinranka | 12:9a20164dcc47 | 200 | (screenPtr[0].x * displayPtr[2].x - screenPtr[2].x * displayPtr[0].x) * screenPtr[1].y + |
vipinranka | 12:9a20164dcc47 | 201 | (screenPtr[1].x * displayPtr[0].x - screenPtr[0].x * displayPtr[1].x) * screenPtr[2].y ; |
vipinranka | 12:9a20164dcc47 | 202 | // (Yd0 - Yd2)*(Ys1 - Ys2) - (Yd1 - Yd2)*(Ys0 - Ys2) |
vipinranka | 12:9a20164dcc47 | 203 | // D = --------------------------------------------------- |
vipinranka | 12:9a20164dcc47 | 204 | // K |
vipinranka | 12:9a20164dcc47 | 205 | matrixPtr->Dn = ((displayPtr[0].y - displayPtr[2].y) * (screenPtr[1].y - screenPtr[2].y)) - |
vipinranka | 12:9a20164dcc47 | 206 | ((displayPtr[1].y - displayPtr[2].y) * (screenPtr[0].y - screenPtr[2].y)) ; |
vipinranka | 12:9a20164dcc47 | 207 | // (Xs0 - Xs2)*(Yd1 - Yd2) - (Yd0 - Yd2)*(Xs1 - Xs2) |
vipinranka | 12:9a20164dcc47 | 208 | // E = --------------------------------------------------- |
vipinranka | 12:9a20164dcc47 | 209 | // K |
vipinranka | 12:9a20164dcc47 | 210 | matrixPtr->En = ((screenPtr[0].x - screenPtr[2].x) * (displayPtr[1].y - displayPtr[2].y)) - |
vipinranka | 12:9a20164dcc47 | 211 | ((displayPtr[0].y - displayPtr[2].y) * (screenPtr[1].x - screenPtr[2].x)) ; |
vipinranka | 12:9a20164dcc47 | 212 | // Ys0*(Xs2*Yd1 - Xs1*Yd2) + Ys1*(Xs0*Yd2 - Xs2*Yd0) + Ys2*(Xs1*Yd0 - Xs0*Yd1) |
vipinranka | 12:9a20164dcc47 | 213 | // F = ---------------------------------------------------------------------------- |
vipinranka | 12:9a20164dcc47 | 214 | // K |
vipinranka | 12:9a20164dcc47 | 215 | matrixPtr->Fn = (screenPtr[2].x * displayPtr[1].y - screenPtr[1].x * displayPtr[2].y) * screenPtr[0].y + |
vipinranka | 12:9a20164dcc47 | 216 | (screenPtr[0].x * displayPtr[2].y - screenPtr[2].x * displayPtr[0].y) * screenPtr[1].y + |
vipinranka | 12:9a20164dcc47 | 217 | (screenPtr[1].x * displayPtr[0].y - screenPtr[0].x * displayPtr[1].y) * screenPtr[2].y ; |
vipinranka | 12:9a20164dcc47 | 218 | } |
vipinranka | 12:9a20164dcc47 | 219 | return( retTHRESHOLD ) ; |
vipinranka | 12:9a20164dcc47 | 220 | } |
vipinranka | 12:9a20164dcc47 | 221 | |
vipinranka | 12:9a20164dcc47 | 222 | uint8_t TouchScreenADS7843::getDisplayPoint(void) |
vipinranka | 12:9a20164dcc47 | 223 | { |
vipinranka | 12:9a20164dcc47 | 224 | uint8_t retTHRESHOLD = 0 ; |
vipinranka | 12:9a20164dcc47 | 225 | |
vipinranka | 12:9a20164dcc47 | 226 | if( matrix.Divider != 0 ) |
vipinranka | 12:9a20164dcc47 | 227 | { |
vipinranka | 12:9a20164dcc47 | 228 | // XD = AX+BY+C |
vipinranka | 12:9a20164dcc47 | 229 | display.x = ( (matrix.An * screen.x) + |
vipinranka | 12:9a20164dcc47 | 230 | (matrix.Bn * screen.y) + |
vipinranka | 12:9a20164dcc47 | 231 | matrix.Cn |
vipinranka | 12:9a20164dcc47 | 232 | ) / matrix.Divider ; |
vipinranka | 12:9a20164dcc47 | 233 | // YD = DX+EY+F |
vipinranka | 12:9a20164dcc47 | 234 | display.y = ( (matrix.Dn * screen.x) + |
vipinranka | 12:9a20164dcc47 | 235 | (matrix.En * screen.y) + |
vipinranka | 12:9a20164dcc47 | 236 | matrix.Fn |
vipinranka | 12:9a20164dcc47 | 237 | ) / matrix.Divider ; |
vipinranka | 12:9a20164dcc47 | 238 | } |
vipinranka | 12:9a20164dcc47 | 239 | else |
vipinranka | 12:9a20164dcc47 | 240 | { |
vipinranka | 12:9a20164dcc47 | 241 | retTHRESHOLD = 1; |
vipinranka | 12:9a20164dcc47 | 242 | } |
vipinranka | 12:9a20164dcc47 | 243 | return(retTHRESHOLD); |
vipinranka | 12:9a20164dcc47 | 244 | } |
vipinranka | 12:9a20164dcc47 | 245 | |
vipinranka | 12:9a20164dcc47 | 246 | void TouchScreenADS7843::TouchPanel_Calibrate(void) |
vipinranka | 12:9a20164dcc47 | 247 | { |
vipinranka | 12:9a20164dcc47 | 248 | uint8_t i; |
vipinranka | 12:9a20164dcc47 | 249 | Coordinate screen_cal; |
vipinranka | 12:9a20164dcc47 | 250 | setCalibrationMatrix( &DisplaySample[0],&ScreenSample[0],&matrix) ; |
vipinranka | 12:9a20164dcc47 | 251 | LCD->set_font((unsigned char*) Arial12x12); |
vipinranka | 12:9a20164dcc47 | 252 | for(i=0;i<3;i++) |
vipinranka | 12:9a20164dcc47 | 253 | { |
vipinranka | 12:9a20164dcc47 | 254 | LCD->cls(); |
vipinranka | 12:9a20164dcc47 | 255 | LCD->locate(10,10); |
vipinranka | 12:9a20164dcc47 | 256 | LCD->printf("Touch crosshair to calibrate"); |
vipinranka | 12:9a20164dcc47 | 257 | wait_ms(500); |
vipinranka | 12:9a20164dcc47 | 258 | DrawCross(DisplaySample[i].x,DisplaySample[i].y); |
vipinranka | 12:9a20164dcc47 | 259 | do {} while (!Read_Ads7843(&screen_cal)); |
vipinranka | 12:9a20164dcc47 | 260 | ScreenSample[i].x= screen_cal.x;ScreenSample[i].y= screen_cal.y; |
vipinranka | 12:9a20164dcc47 | 261 | } |
vipinranka | 12:9a20164dcc47 | 262 | setCalibrationMatrix( &DisplaySample[0],&ScreenSample[0],&matrix) ; |
vipinranka | 12:9a20164dcc47 | 263 | LCD->cls(); |
vipinranka | 12:9a20164dcc47 | 264 | } |
vipinranka | 12:9a20164dcc47 | 265 | |
vipinranka | 12:9a20164dcc47 | 266 | void TouchScreenADS7843::GetCalibration(Matrix * matrixPtr, Coordinate * screenPtr) |
vipinranka | 12:9a20164dcc47 | 267 | { |
vipinranka | 12:9a20164dcc47 | 268 | uint8_t i; |
vipinranka | 12:9a20164dcc47 | 269 | Matrix * mp1; |
vipinranka | 12:9a20164dcc47 | 270 | mp1 = &matrix; |
vipinranka | 12:9a20164dcc47 | 271 | *matrixPtr = *mp1; |
vipinranka | 12:9a20164dcc47 | 272 | for(i=0;i<3;i++) |
vipinranka | 12:9a20164dcc47 | 273 | { |
vipinranka | 12:9a20164dcc47 | 274 | screenPtr[i].x = ScreenSample[i].x; |
vipinranka | 12:9a20164dcc47 | 275 | screenPtr[i].y = ScreenSample[i].y; |
vipinranka | 12:9a20164dcc47 | 276 | } |
vipinranka | 12:9a20164dcc47 | 277 | } |
vipinranka | 12:9a20164dcc47 | 278 | |
vipinranka | 12:9a20164dcc47 | 279 | void TouchScreenADS7843::SetCalibration(Matrix * matrixPtr, Coordinate * screenPtr) |
vipinranka | 12:9a20164dcc47 | 280 | { |
vipinranka | 12:9a20164dcc47 | 281 | uint8_t i; |
vipinranka | 12:9a20164dcc47 | 282 | Matrix * mp1; |
vipinranka | 12:9a20164dcc47 | 283 | mp1 = &matrix; |
vipinranka | 12:9a20164dcc47 | 284 | *mp1 = *matrixPtr; |
vipinranka | 12:9a20164dcc47 | 285 | for(i=0;i<3;i++) |
vipinranka | 12:9a20164dcc47 | 286 | { |
vipinranka | 12:9a20164dcc47 | 287 | ScreenSample[i].x = screenPtr[i].x; |
vipinranka | 12:9a20164dcc47 | 288 | ScreenSample[i].y = screenPtr[i].y; |
vipinranka | 12:9a20164dcc47 | 289 | } |
vipinranka | 12:9a20164dcc47 | 290 | setCalibrationMatrix( &DisplaySample[0],&ScreenSample[0],&matrix) ; |
vipinranka | 12:9a20164dcc47 | 291 | } |