Frank Vannieuwkerke / Mini-DK

Dependencies:   SPI_TFT_ILI9320

Dependents:   LPC1768_Mini-DK_EasyWeb_DM9161 LPC1768_Mini-DK LPC1768_Mini-DK

Fork of Mini-DK by Frank Vannieuwkerke

Committer:
frankvnk
Date:
Fri Jan 04 13:55:02 2013 +0000
Revision:
8:9517c10e40d2
Parent:
Mini-DK/TouchADS7843/Touch.cpp@7:ffdd4e75b366
Child:
17:66c4e84d8571
Program -> Library from LPC1768_Mini-DK

Who changed what in which revision?

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