Works

Dependencies:   BMP180 BNO055_fusion Fonts GPSISR HTU21D SDFileSystem UniGraphic mbed uGUI

Fork of Bicycl_Computer_NUCLEO-F411RE by Darren Ulrich

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers SeeedStudioTFTv2.cpp Source File

SeeedStudioTFTv2.cpp

00001 /* mbed library for resistive touch pads
00002  * uses 4 pins - 2 IO and 2 Analog
00003 
00004  * c 2011 Peter Drescher - DC2PD
00005  *
00006  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
00007  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00008  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
00009  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
00010  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
00011  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
00012  * THE SOFTWARE.
00013  */
00014 
00015 
00016 #include "mbed.h"
00017 #include "SeeedStudioTFTv2.h"
00018 
00019 //Serial pc(USBTX,USBRX,19200);
00020 
00021 TouchScreen::TouchScreen(PinName xp, PinName xm, PinName yp, PinName ym)
00022 {
00023     //font = NULL;
00024     // touch screen pins
00025     _xp = xp;
00026     _yp = yp;
00027     _xm = xm;
00028     _ym = ym;
00029     // default touch calibration
00030     // orientation     //      0      1      2      3
00031     x_off = 108000;  //  17252  16605 108755 108000
00032     y_off =  22000;  //  22330 105819  97167  22000
00033     pp_tx =   -291;  //    378    289   -390   -291
00034     pp_ty =    356;  //    261   -355   -239    356
00035 }
00036 
00037 int TouchScreen::readTouch(PinName p, PinName m, PinName a, PinName i)
00038 {
00039     DigitalOut _p(p);
00040     _p = 1;
00041     DigitalOut _m(m);
00042     _m = 0;
00043     AnalogIn   _a(a);
00044     AnalogIn   _i(i); // this pin has to be high Z (DigitalIn may also work)
00045     wait_us(10);
00046     return _a.read_u16();
00047 }
00048 
00049 void TouchScreen :: getTouch(point& p)
00050 {
00051     volatile int y2 = readTouch(_xp,_xm,_yp,_ym);
00052     volatile int x2 = readTouch(_yp,_ym,_xp,_xm);
00053     volatile int y1 = readTouch(_xp,_xm,_yp,_ym);
00054     volatile int x1 = readTouch(_yp,_ym,_xp,_xm);
00055     int xd = x1 - x2;
00056     int yd = y1 - y2;
00057     xd = (xd > 0) ? xd : -xd;
00058     yd = (yd > 0) ? xd : -xd;
00059     p.y = x1 + x2;
00060     p.x = y1 + y2;
00061          
00062     int z1          =  _xm;
00063     int z2          =  _yp;
00064     float rtouch    =  0;
00065 
00066     rtouch  = z2;
00067     rtouch /= z1;
00068     rtouch -= 1;
00069     rtouch *= (4094-p.x)/2;
00070     rtouch *= RXPLATE;
00071     rtouch /= 2048;
00072         p.x = map(p.x, TS_MINX, TS_MAXX, 0, 240);
00073         p.y = map(p.y, TS_MINY, TS_MAXY, 0, 320);
00074         p.z = abs(rtouch);
00075  }
00076 
00077  long TouchScreen :: map(long x, long in_min, long in_max, long out_min, long out_max)
00078 {
00079   return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
00080 }