LPC1768 Mini-DK board with 2.8" SPI TFT and SPI touch
Dependencies: Mini-DK mbed SDFileSystem
WARNING: filetoflash (SD to CPU flash)
The SPI_TFT library called from Mini-DK.lib contains an option to copy an image from the SD card to the CPU flash memory. This allows you to use an image as background without speed loss when writing other text and graphics.
By default, this option is enabled.
It can be disabled by uncommenting the #define mentioned below in Mini_DK.h:
#define NO_FLASH_BUFFER
Since the flash memory has limited write endurance, DO NOT use this feature when you intend to read multiple images from the SD card (eg: when used as a photo frame).
Mini-DK/TouchADS7843/Touch.cpp@5:781a72d380a1, 2013-01-03 (annotated)
- Committer:
- Sissors
- Date:
- Thu Jan 03 20:04:38 2013 +0000
- Revision:
- 5:781a72d380a1
- Parent:
- 3:fb4d62b5ffb3
- Child:
- 7:ffdd4e75b366
Removed warnings, added SD card definitions/macros
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
frankvnk | 2:d0acbd263ec7 | 1 | // Code based on Carlos E. Vidales tutorial : How To Calibrate Touch Screens |
frankvnk | 2:d0acbd263ec7 | 2 | // http://www.embedded.com/design/configurable-systems/4023968/How-To-Calibrate-Touch-Screens |
frankvnk | 2:d0acbd263ec7 | 3 | |
frankvnk | 2:d0acbd263ec7 | 4 | #include "Touch.h" |
frankvnk | 2:d0acbd263ec7 | 5 | #include "mbed.h" |
frankvnk | 2:d0acbd263ec7 | 6 | #include "Arial12x12.h" |
frankvnk | 2:d0acbd263ec7 | 7 | |
frankvnk | 2:d0acbd263ec7 | 8 | /*Coordinate ScreenSample[3] = { |
frankvnk | 2:d0acbd263ec7 | 9 | { 45, 45 }, |
frankvnk | 2:d0acbd263ec7 | 10 | { 45, 270}, |
frankvnk | 2:d0acbd263ec7 | 11 | { 190,190} |
frankvnk | 2:d0acbd263ec7 | 12 | } ;*/ |
frankvnk | 2:d0acbd263ec7 | 13 | /*Coordinate DisplaySample[3] = { |
frankvnk | 2:d0acbd263ec7 | 14 | { 45, 45 }, |
frankvnk | 2:d0acbd263ec7 | 15 | { 45, 270}, |
frankvnk | 2:d0acbd263ec7 | 16 | { 190,190} |
frankvnk | 2:d0acbd263ec7 | 17 | } ;*/ |
frankvnk | 2:d0acbd263ec7 | 18 | |
frankvnk | 2:d0acbd263ec7 | 19 | #define THRESHOLD 2 |
frankvnk | 2:d0acbd263ec7 | 20 | |
frankvnk | 3:fb4d62b5ffb3 | 21 | TouchScreenADS7843::TouchScreenADS7843(PinName tp_mosi, PinName tp_miso, PinName tp_sclk, PinName tp_cs, PinName tp_irq, SPI_TFT *_LCD) |
Sissors | 5:781a72d380a1 | 22 | : LCD(_LCD), _tp_spi(tp_mosi, tp_miso, tp_sclk), _tp_cs(tp_cs), _tp_irq(tp_irq) |
frankvnk | 2:d0acbd263ec7 | 23 | { |
frankvnk | 2:d0acbd263ec7 | 24 | DisplaySample[0].x=45; |
frankvnk | 2:d0acbd263ec7 | 25 | DisplaySample[0].y=45; |
frankvnk | 2:d0acbd263ec7 | 26 | DisplaySample[1].x=45; |
frankvnk | 2:d0acbd263ec7 | 27 | DisplaySample[1].y=270; |
frankvnk | 2:d0acbd263ec7 | 28 | DisplaySample[2].x=190; |
frankvnk | 2:d0acbd263ec7 | 29 | DisplaySample[2].y=190; |
frankvnk | 2:d0acbd263ec7 | 30 | ScreenSample[0].x=45; |
frankvnk | 2:d0acbd263ec7 | 31 | ScreenSample[0].y=45; |
frankvnk | 2:d0acbd263ec7 | 32 | ScreenSample[1].x=45; |
frankvnk | 2:d0acbd263ec7 | 33 | ScreenSample[1].y=270; |
frankvnk | 2:d0acbd263ec7 | 34 | ScreenSample[2].x=190; |
frankvnk | 2:d0acbd263ec7 | 35 | ScreenSample[2].y=190; |
frankvnk | 2:d0acbd263ec7 | 36 | _tp_cs=1; |
frankvnk | 2:d0acbd263ec7 | 37 | _tp_spi.frequency(500000); |
frankvnk | 2:d0acbd263ec7 | 38 | _tp_spi.format(8,0); // 8 bit spi mode 0 |
frankvnk | 2:d0acbd263ec7 | 39 | } |
frankvnk | 2:d0acbd263ec7 | 40 | |
frankvnk | 2:d0acbd263ec7 | 41 | int TouchScreenADS7843::Read_XY(unsigned char XY) |
frankvnk | 2:d0acbd263ec7 | 42 | { |
frankvnk | 2:d0acbd263ec7 | 43 | unsigned char msb, lsb; |
frankvnk | 2:d0acbd263ec7 | 44 | unsigned int Temp; |
frankvnk | 2:d0acbd263ec7 | 45 | |
frankvnk | 2:d0acbd263ec7 | 46 | Temp=0; |
frankvnk | 2:d0acbd263ec7 | 47 | _tp_cs=0; |
frankvnk | 2:d0acbd263ec7 | 48 | wait_us(SPI_RD_DELAY); |
frankvnk | 2:d0acbd263ec7 | 49 | _tp_spi.write(XY); |
frankvnk | 2:d0acbd263ec7 | 50 | wait_us(SPI_RD_DELAY); |
frankvnk | 2:d0acbd263ec7 | 51 | msb = _tp_spi.write(0x00); // msb |
frankvnk | 2:d0acbd263ec7 | 52 | wait_us(SPI_RD_DELAY); |
frankvnk | 2:d0acbd263ec7 | 53 | lsb = _tp_spi.write(0x00); // lsb |
frankvnk | 2:d0acbd263ec7 | 54 | _tp_cs=1; |
frankvnk | 2:d0acbd263ec7 | 55 | Temp = ((msb << 8 ) | lsb); |
frankvnk | 2:d0acbd263ec7 | 56 | Temp >>= 3; |
frankvnk | 2:d0acbd263ec7 | 57 | Temp &= 0xfff; |
frankvnk | 2:d0acbd263ec7 | 58 | Temp /= 4; // Scaling : return value range must be between 0 and 1024 |
frankvnk | 2:d0acbd263ec7 | 59 | // Temp = (((msb & 0x7f) <<8) | lsb) >> 3; // 12 bit |
frankvnk | 2:d0acbd263ec7 | 60 | return(Temp); |
frankvnk | 2:d0acbd263ec7 | 61 | } |
frankvnk | 2:d0acbd263ec7 | 62 | |
frankvnk | 2:d0acbd263ec7 | 63 | |
frankvnk | 2:d0acbd263ec7 | 64 | void TouchScreenADS7843::TP_GetAdXY(int *x,int *y) |
frankvnk | 2:d0acbd263ec7 | 65 | { |
frankvnk | 2:d0acbd263ec7 | 66 | int adx,ady; |
frankvnk | 2:d0acbd263ec7 | 67 | adx = Read_XY(CHX); |
frankvnk | 2:d0acbd263ec7 | 68 | wait_us(1); |
frankvnk | 2:d0acbd263ec7 | 69 | ady = Read_XY(CHY); |
frankvnk | 2:d0acbd263ec7 | 70 | *x = adx; |
frankvnk | 2:d0acbd263ec7 | 71 | *y = ady; |
frankvnk | 2:d0acbd263ec7 | 72 | } |
frankvnk | 2:d0acbd263ec7 | 73 | |
frankvnk | 2:d0acbd263ec7 | 74 | void TouchScreenADS7843::TP_DrawPoint(unsigned int Xpos,unsigned int Ypos, unsigned int color) |
frankvnk | 2:d0acbd263ec7 | 75 | { |
frankvnk | 3:fb4d62b5ffb3 | 76 | LCD->wr_reg(0x03, 0x1030); |
frankvnk | 2:d0acbd263ec7 | 77 | LCD->WindowMax(); |
frankvnk | 2:d0acbd263ec7 | 78 | LCD->pixel(Xpos,Ypos,color); |
frankvnk | 2:d0acbd263ec7 | 79 | LCD->pixel(Xpos+1,Ypos,color); |
frankvnk | 2:d0acbd263ec7 | 80 | LCD->pixel(Xpos,Ypos+1,color); |
frankvnk | 3:fb4d62b5ffb3 | 81 | LCD->pixel(Xpos+1,Ypos+1,color); |
frankvnk | 2:d0acbd263ec7 | 82 | } |
frankvnk | 2:d0acbd263ec7 | 83 | |
frankvnk | 2:d0acbd263ec7 | 84 | void TouchScreenADS7843::DrawCross(unsigned int Xpos,unsigned int Ypos) |
frankvnk | 2:d0acbd263ec7 | 85 | { |
frankvnk | 3:fb4d62b5ffb3 | 86 | LCD->line(Xpos-15,Ypos,Xpos-2,Ypos,White); |
frankvnk | 2:d0acbd263ec7 | 87 | LCD->line(Xpos+2,Ypos,Xpos+15,Ypos,White); |
frankvnk | 2:d0acbd263ec7 | 88 | LCD->line(Xpos,Ypos-15,Xpos,Ypos-2,White); |
frankvnk | 2:d0acbd263ec7 | 89 | LCD->line(Xpos,Ypos+2,Xpos,Ypos+15,White); |
frankvnk | 2:d0acbd263ec7 | 90 | |
frankvnk | 2:d0acbd263ec7 | 91 | LCD->line(Xpos-15,Ypos+15,Xpos-7,Ypos+15,DarkGrey); |
frankvnk | 2:d0acbd263ec7 | 92 | LCD->line(Xpos-15,Ypos+7,Xpos-15,Ypos+15,DarkGrey); |
frankvnk | 2:d0acbd263ec7 | 93 | |
frankvnk | 2:d0acbd263ec7 | 94 | LCD->line(Xpos-15,Ypos-15,Xpos-7,Ypos-15,DarkGrey); |
frankvnk | 2:d0acbd263ec7 | 95 | LCD->line(Xpos-15,Ypos-7,Xpos-15,Ypos-15,DarkGrey); |
frankvnk | 2:d0acbd263ec7 | 96 | |
frankvnk | 2:d0acbd263ec7 | 97 | LCD->line(Xpos+7,Ypos+15,Xpos+15,Ypos+15,DarkGrey); |
frankvnk | 2:d0acbd263ec7 | 98 | LCD->line(Xpos+15,Ypos+7,Xpos+15,Ypos+15,DarkGrey); |
frankvnk | 2:d0acbd263ec7 | 99 | |
frankvnk | 2:d0acbd263ec7 | 100 | LCD->line(Xpos+7,Ypos-15,Xpos+15,Ypos-15,DarkGrey); |
frankvnk | 3:fb4d62b5ffb3 | 101 | LCD->line(Xpos+15,Ypos-15,Xpos+15,Ypos-7,DarkGrey); |
frankvnk | 2:d0acbd263ec7 | 102 | } |
frankvnk | 2:d0acbd263ec7 | 103 | |
frankvnk | 2:d0acbd263ec7 | 104 | unsigned char TouchScreenADS7843::Read_Ads7846(Coordinate * screenPtr) |
frankvnk | 2:d0acbd263ec7 | 105 | { |
frankvnk | 2:d0acbd263ec7 | 106 | int m0,m1,m2,TP_X[1],TP_Y[1],temp[3]; |
frankvnk | 2:d0acbd263ec7 | 107 | uint8_t count=0; |
frankvnk | 2:d0acbd263ec7 | 108 | int buffer[2][9]={{0},{0}}; |
frankvnk | 3:fb4d62b5ffb3 | 109 | if (screenPtr == NULL) screenPtr = &screen; |
frankvnk | 2:d0acbd263ec7 | 110 | do |
frankvnk | 2:d0acbd263ec7 | 111 | { |
frankvnk | 2:d0acbd263ec7 | 112 | TP_GetAdXY(TP_X,TP_Y); |
frankvnk | 2:d0acbd263ec7 | 113 | buffer[0][count]=TP_X[0]; |
frankvnk | 2:d0acbd263ec7 | 114 | buffer[1][count]=TP_Y[0]; |
frankvnk | 2:d0acbd263ec7 | 115 | count++; |
frankvnk | 2:d0acbd263ec7 | 116 | } |
frankvnk | 2:d0acbd263ec7 | 117 | while(!_tp_irq && (count < 9)); |
frankvnk | 2:d0acbd263ec7 | 118 | if(count==9) |
frankvnk | 2:d0acbd263ec7 | 119 | { |
frankvnk | 2:d0acbd263ec7 | 120 | temp[0]=(buffer[0][0]+buffer[0][1]+buffer[0][2])/3; |
frankvnk | 2:d0acbd263ec7 | 121 | temp[1]=(buffer[0][3]+buffer[0][4]+buffer[0][5])/3; |
frankvnk | 2:d0acbd263ec7 | 122 | temp[2]=(buffer[0][6]+buffer[0][7]+buffer[0][8])/3; |
frankvnk | 2:d0acbd263ec7 | 123 | m0=temp[0]-temp[1]; |
frankvnk | 2:d0acbd263ec7 | 124 | m1=temp[1]-temp[2]; |
frankvnk | 2:d0acbd263ec7 | 125 | m2=temp[2]-temp[0]; |
frankvnk | 2:d0acbd263ec7 | 126 | m0=m0>0?m0:(-m0); |
frankvnk | 2:d0acbd263ec7 | 127 | m1=m1>0?m1:(-m1); |
frankvnk | 2:d0acbd263ec7 | 128 | m2=m2>0?m2:(-m2); |
frankvnk | 2:d0acbd263ec7 | 129 | if( (m0>THRESHOLD) && (m1>THRESHOLD) && (m2>THRESHOLD) ) return 0; |
frankvnk | 2:d0acbd263ec7 | 130 | if(m0<m1) |
frankvnk | 2:d0acbd263ec7 | 131 | { |
frankvnk | 2:d0acbd263ec7 | 132 | if(m2<m0) |
frankvnk | 2:d0acbd263ec7 | 133 | screenPtr->x=(temp[0]+temp[2])/2; |
frankvnk | 2:d0acbd263ec7 | 134 | else |
frankvnk | 2:d0acbd263ec7 | 135 | screenPtr->x=(temp[0]+temp[1])/2; |
frankvnk | 2:d0acbd263ec7 | 136 | } |
frankvnk | 2:d0acbd263ec7 | 137 | else if(m2<m1) |
frankvnk | 2:d0acbd263ec7 | 138 | screenPtr->x=(temp[0]+temp[2])/2; |
frankvnk | 2:d0acbd263ec7 | 139 | else |
frankvnk | 2:d0acbd263ec7 | 140 | screenPtr->x=(temp[1]+temp[2])/2; |
frankvnk | 2:d0acbd263ec7 | 141 | |
frankvnk | 2:d0acbd263ec7 | 142 | temp[0]=(buffer[1][0]+buffer[1][1]+buffer[1][2])/3; |
frankvnk | 2:d0acbd263ec7 | 143 | temp[1]=(buffer[1][3]+buffer[1][4]+buffer[1][5])/3; |
frankvnk | 2:d0acbd263ec7 | 144 | temp[2]=(buffer[1][6]+buffer[1][7]+buffer[1][8])/3; |
frankvnk | 2:d0acbd263ec7 | 145 | m0=temp[0]-temp[1]; |
frankvnk | 2:d0acbd263ec7 | 146 | m1=temp[1]-temp[2]; |
frankvnk | 2:d0acbd263ec7 | 147 | m2=temp[2]-temp[0]; |
frankvnk | 2:d0acbd263ec7 | 148 | m0=m0>0?m0:(-m0); |
frankvnk | 2:d0acbd263ec7 | 149 | m1=m1>0?m1:(-m1); |
frankvnk | 2:d0acbd263ec7 | 150 | m2=m2>0?m2:(-m2); |
frankvnk | 2:d0acbd263ec7 | 151 | if( (m0>THRESHOLD) && (m1>THRESHOLD) && (m2>THRESHOLD) ) return 0; |
frankvnk | 2:d0acbd263ec7 | 152 | |
frankvnk | 2:d0acbd263ec7 | 153 | if(m0<m1) |
frankvnk | 2:d0acbd263ec7 | 154 | { |
frankvnk | 2:d0acbd263ec7 | 155 | if(m2<m0) |
frankvnk | 2:d0acbd263ec7 | 156 | screenPtr->y=(temp[0]+temp[2])/2; |
frankvnk | 2:d0acbd263ec7 | 157 | else |
frankvnk | 2:d0acbd263ec7 | 158 | screenPtr->y=(temp[0]+temp[1])/2; |
frankvnk | 2:d0acbd263ec7 | 159 | } |
frankvnk | 2:d0acbd263ec7 | 160 | else if(m2<m1) |
frankvnk | 2:d0acbd263ec7 | 161 | screenPtr->y=(temp[0]+temp[2])/2; |
frankvnk | 2:d0acbd263ec7 | 162 | else |
frankvnk | 2:d0acbd263ec7 | 163 | screenPtr->y=(temp[1]+temp[2])/2; |
frankvnk | 2:d0acbd263ec7 | 164 | return 1; |
frankvnk | 2:d0acbd263ec7 | 165 | } |
frankvnk | 2:d0acbd263ec7 | 166 | return 0; |
frankvnk | 2:d0acbd263ec7 | 167 | } |
frankvnk | 2:d0acbd263ec7 | 168 | |
frankvnk | 2:d0acbd263ec7 | 169 | uint8_t TouchScreenADS7843::setCalibrationMatrix( Coordinate * displayPtr, |
frankvnk | 2:d0acbd263ec7 | 170 | Coordinate * screenPtr, |
frankvnk | 2:d0acbd263ec7 | 171 | Matrix * matrixPtr) |
frankvnk | 2:d0acbd263ec7 | 172 | { |
frankvnk | 2:d0acbd263ec7 | 173 | uint8_t retTHRESHOLD = 0 ; |
frankvnk | 2:d0acbd263ec7 | 174 | // K = (Xs0 - Xs2)*(Ys1 - Ys2) - (Xs1 - Xs2)*(Ys0 - Ys2) |
frankvnk | 2:d0acbd263ec7 | 175 | matrixPtr->Divider = ((screenPtr[0].x - screenPtr[2].x) * (screenPtr[1].y - screenPtr[2].y)) - |
frankvnk | 2:d0acbd263ec7 | 176 | ((screenPtr[1].x - screenPtr[2].x) * (screenPtr[0].y - screenPtr[2].y)) ; |
frankvnk | 2:d0acbd263ec7 | 177 | if( matrixPtr->Divider == 0 ) |
frankvnk | 2:d0acbd263ec7 | 178 | { |
frankvnk | 2:d0acbd263ec7 | 179 | retTHRESHOLD = 1; |
frankvnk | 2:d0acbd263ec7 | 180 | } |
frankvnk | 2:d0acbd263ec7 | 181 | else |
frankvnk | 2:d0acbd263ec7 | 182 | { |
frankvnk | 2:d0acbd263ec7 | 183 | // (Xd0 - Xd2)*(Ys1 - Ys2) - (Xd1 - Xd2)*(Ys0 - Ys2) |
frankvnk | 2:d0acbd263ec7 | 184 | // A = --------------------------------------------------- |
frankvnk | 2:d0acbd263ec7 | 185 | // K |
frankvnk | 2:d0acbd263ec7 | 186 | matrixPtr->An = ((displayPtr[0].x - displayPtr[2].x) * (screenPtr[1].y - screenPtr[2].y)) - |
frankvnk | 2:d0acbd263ec7 | 187 | ((displayPtr[1].x - displayPtr[2].x) * (screenPtr[0].y - screenPtr[2].y)) ; |
frankvnk | 2:d0acbd263ec7 | 188 | // (Xs0 - Xs2)*(Xd1 - Xd2) - (Xd0 - Xd2)*(Xs1 - Xs2) |
frankvnk | 2:d0acbd263ec7 | 189 | // B = --------------------------------------------------- |
frankvnk | 2:d0acbd263ec7 | 190 | // K |
frankvnk | 2:d0acbd263ec7 | 191 | matrixPtr->Bn = ((screenPtr[0].x - screenPtr[2].x) * (displayPtr[1].x - displayPtr[2].x)) - |
frankvnk | 2:d0acbd263ec7 | 192 | ((displayPtr[0].x - displayPtr[2].x) * (screenPtr[1].x - screenPtr[2].x)) ; |
frankvnk | 2:d0acbd263ec7 | 193 | // Ys0*(Xs2*Xd1 - Xs1*Xd2) + Ys1*(Xs0*Xd2 - Xs2*Xd0) + Ys2*(Xs1*Xd0 - Xs0*Xd1) |
frankvnk | 2:d0acbd263ec7 | 194 | // C = ---------------------------------------------------------------------------- |
frankvnk | 2:d0acbd263ec7 | 195 | // K |
frankvnk | 2:d0acbd263ec7 | 196 | matrixPtr->Cn = (screenPtr[2].x * displayPtr[1].x - screenPtr[1].x * displayPtr[2].x) * screenPtr[0].y + |
frankvnk | 2:d0acbd263ec7 | 197 | (screenPtr[0].x * displayPtr[2].x - screenPtr[2].x * displayPtr[0].x) * screenPtr[1].y + |
frankvnk | 2:d0acbd263ec7 | 198 | (screenPtr[1].x * displayPtr[0].x - screenPtr[0].x * displayPtr[1].x) * screenPtr[2].y ; |
frankvnk | 2:d0acbd263ec7 | 199 | // (Yd0 - Yd2)*(Ys1 - Ys2) - (Yd1 - Yd2)*(Ys0 - Ys2) |
frankvnk | 2:d0acbd263ec7 | 200 | // D = --------------------------------------------------- |
frankvnk | 2:d0acbd263ec7 | 201 | // K |
frankvnk | 2:d0acbd263ec7 | 202 | matrixPtr->Dn = ((displayPtr[0].y - displayPtr[2].y) * (screenPtr[1].y - screenPtr[2].y)) - |
frankvnk | 2:d0acbd263ec7 | 203 | ((displayPtr[1].y - displayPtr[2].y) * (screenPtr[0].y - screenPtr[2].y)) ; |
frankvnk | 2:d0acbd263ec7 | 204 | // (Xs0 - Xs2)*(Yd1 - Yd2) - (Yd0 - Yd2)*(Xs1 - Xs2) |
frankvnk | 2:d0acbd263ec7 | 205 | // E = --------------------------------------------------- |
frankvnk | 2:d0acbd263ec7 | 206 | // K |
frankvnk | 2:d0acbd263ec7 | 207 | matrixPtr->En = ((screenPtr[0].x - screenPtr[2].x) * (displayPtr[1].y - displayPtr[2].y)) - |
frankvnk | 2:d0acbd263ec7 | 208 | ((displayPtr[0].y - displayPtr[2].y) * (screenPtr[1].x - screenPtr[2].x)) ; |
frankvnk | 2:d0acbd263ec7 | 209 | // Ys0*(Xs2*Yd1 - Xs1*Yd2) + Ys1*(Xs0*Yd2 - Xs2*Yd0) + Ys2*(Xs1*Yd0 - Xs0*Yd1) |
frankvnk | 2:d0acbd263ec7 | 210 | // F = ---------------------------------------------------------------------------- |
frankvnk | 2:d0acbd263ec7 | 211 | // K |
frankvnk | 2:d0acbd263ec7 | 212 | matrixPtr->Fn = (screenPtr[2].x * displayPtr[1].y - screenPtr[1].x * displayPtr[2].y) * screenPtr[0].y + |
frankvnk | 2:d0acbd263ec7 | 213 | (screenPtr[0].x * displayPtr[2].y - screenPtr[2].x * displayPtr[0].y) * screenPtr[1].y + |
frankvnk | 2:d0acbd263ec7 | 214 | (screenPtr[1].x * displayPtr[0].y - screenPtr[0].x * displayPtr[1].y) * screenPtr[2].y ; |
frankvnk | 2:d0acbd263ec7 | 215 | } |
frankvnk | 2:d0acbd263ec7 | 216 | return( retTHRESHOLD ) ; |
frankvnk | 2:d0acbd263ec7 | 217 | } |
frankvnk | 2:d0acbd263ec7 | 218 | |
frankvnk | 2:d0acbd263ec7 | 219 | uint8_t TouchScreenADS7843::getDisplayPoint(void) |
frankvnk | 2:d0acbd263ec7 | 220 | { |
frankvnk | 2:d0acbd263ec7 | 221 | uint8_t retTHRESHOLD = 0 ; |
frankvnk | 2:d0acbd263ec7 | 222 | |
frankvnk | 2:d0acbd263ec7 | 223 | if( matrix.Divider != 0 ) |
frankvnk | 2:d0acbd263ec7 | 224 | { |
frankvnk | 2:d0acbd263ec7 | 225 | // XD = AX+BY+C |
frankvnk | 2:d0acbd263ec7 | 226 | display.x = ( (matrix.An * screen.x) + |
frankvnk | 2:d0acbd263ec7 | 227 | (matrix.Bn * screen.y) + |
frankvnk | 2:d0acbd263ec7 | 228 | matrix.Cn |
frankvnk | 2:d0acbd263ec7 | 229 | ) / matrix.Divider ; |
frankvnk | 2:d0acbd263ec7 | 230 | // YD = DX+EY+F |
frankvnk | 2:d0acbd263ec7 | 231 | display.y = ( (matrix.Dn * screen.x) + |
frankvnk | 2:d0acbd263ec7 | 232 | (matrix.En * screen.y) + |
frankvnk | 2:d0acbd263ec7 | 233 | matrix.Fn |
frankvnk | 2:d0acbd263ec7 | 234 | ) / matrix.Divider ; |
frankvnk | 2:d0acbd263ec7 | 235 | } |
frankvnk | 2:d0acbd263ec7 | 236 | else |
frankvnk | 2:d0acbd263ec7 | 237 | { |
frankvnk | 2:d0acbd263ec7 | 238 | retTHRESHOLD = 1; |
frankvnk | 2:d0acbd263ec7 | 239 | } |
frankvnk | 2:d0acbd263ec7 | 240 | return(retTHRESHOLD); |
frankvnk | 2:d0acbd263ec7 | 241 | } |
frankvnk | 2:d0acbd263ec7 | 242 | |
frankvnk | 2:d0acbd263ec7 | 243 | void TouchScreenADS7843::TouchPanel_Calibrate(void) |
frankvnk | 2:d0acbd263ec7 | 244 | { |
frankvnk | 2:d0acbd263ec7 | 245 | uint8_t i; |
frankvnk | 2:d0acbd263ec7 | 246 | Coordinate screen_cal; |
frankvnk | 2:d0acbd263ec7 | 247 | setCalibrationMatrix( &DisplaySample[0],&ScreenSample[0],&matrix) ; |
frankvnk | 3:fb4d62b5ffb3 | 248 | LCD->set_font((unsigned char*) Arial12x12); |
frankvnk | 2:d0acbd263ec7 | 249 | for(i=0;i<3;i++) |
frankvnk | 2:d0acbd263ec7 | 250 | { |
frankvnk | 3:fb4d62b5ffb3 | 251 | LCD->cls(); |
frankvnk | 3:fb4d62b5ffb3 | 252 | LCD->locate(10,10); |
frankvnk | 3:fb4d62b5ffb3 | 253 | LCD->printf("Touch crosshair to calibrate"); |
frankvnk | 2:d0acbd263ec7 | 254 | wait_ms(500); |
frankvnk | 2:d0acbd263ec7 | 255 | DrawCross(DisplaySample[i].x,DisplaySample[i].y); |
frankvnk | 2:d0acbd263ec7 | 256 | do {} while (!Read_Ads7846(&screen_cal)); |
frankvnk | 2:d0acbd263ec7 | 257 | ScreenSample[i].x= screen_cal.x;ScreenSample[i].y= screen_cal.y; |
frankvnk | 2:d0acbd263ec7 | 258 | } |
frankvnk | 2:d0acbd263ec7 | 259 | setCalibrationMatrix( &DisplaySample[0],&ScreenSample[0],&matrix) ; |
frankvnk | 3:fb4d62b5ffb3 | 260 | LCD->cls(); |
frankvnk | 2:d0acbd263ec7 | 261 | } |
frankvnk | 2:d0acbd263ec7 | 262 |