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