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