STMPE610 touch sensor driver library
Dependents: TS_Eyes Tokei testUniGraphic_150217 AfficheurTFTAdafruit ... more
Diff: SPI_STMPE610.cpp
- Revision:
- 5:988661c63061
- Parent:
- 4:0aa8f72d3cdd
- Child:
- 6:34e7dc5991b5
- Child:
- 11:b9e339c2ceee
diff -r 0aa8f72d3cdd -r 988661c63061 SPI_STMPE610.cpp --- a/SPI_STMPE610.cpp Sat Dec 13 08:11:29 2014 +0000 +++ b/SPI_STMPE610.cpp Sat Jan 10 15:13:33 2015 +0000 @@ -122,6 +122,16 @@ #define REG_TSC_I_DRIVE 0x58 #define REG_TSC_SHIELD 0x59 +// following value are measured +// and calculated for my system +// may be insufficient for other device(s) +// in such case please use "calibrate()" func +// to tailor the value for your device +#define DEF_HRAMP 0.066667 +#define DEF_HOFFSET -13.333344 +#define DEF_VRAMP 0.094311 +#define DEF_VOFFSET -30.933990 + SPI_STMPE610::SPI_STMPE610(PinName mosi, PinName miso, PinName sclk, PinName cs) : m_spi(mosi, miso, sclk), m_cs(cs) { // activate the peripheral @@ -138,6 +148,10 @@ | REG_TSC_CFG_SETTLE_1MS ) ; write8(REG_TSC_CTRL, REG_TSC_CTRL_XYZ | REG_TSC_CTRL_EN) ; + hramp = DEF_HRAMP ; + hoffset = DEF_HOFFSET ; + vramp = DEF_VRAMP ; + voffset = DEF_VOFFSET ; m_cs = 1 ; } @@ -222,26 +236,30 @@ return( touched ) ; } -// following values were measured -// by using test_SPI_STMPE610 -#define TOUCH_MIN_X 360 -#define TOUCH_MIN_Y 270 -#define TOUCH_MAX_X 3800 -#define TOUCH_MAX_Y 3700 - -#define TFT_WIDTH 240 -#define TFT_HEIGHT 320 - int SPI_STMPE610::getPoint(uint16_t *x, uint16_t *y, uint16_t *z) { uint8_t touched = 0 ; uint16_t tx, ty, tz ; touched = getRAWPoint(&tx, &ty, &tz) ; - *x = TFT_WIDTH * tx / (TOUCH_MAX_X - TOUCH_MIN_X) ; - *y = TFT_HEIGHT * ty / (TOUCH_MAX_Y - TOUCH_MIN_Y) ; + *x = (uint16_t)(hramp * tx + hoffset + 0.5) ; + *y = (uint16_t)(vramp * ty + voffset + 0.5) ; if (z != 0) { *z = tz ; } return( touched ) ; } + +/* + * logical_x = hramp * touch_x + hoffset + * logical_y = vramp * touch_y + voffset + */ +void SPI_STMPE610::calibrate(int x_at_10, int y_at_10, int x_at_230, int y_at_310) +{ + hramp = (float)(230 - 10) / (float)(x_at_230 - x_at_10) ; + hoffset = (float)(230) - hramp * x_at_230 ; + vramp = (float)(310 - 10) / (float)(y_at_310 - y_at_10) ; + voffset = (float)(310) - vramp * y_at_310 ; + printf("hramp = %f , hoffset = %f\n\r", hramp, hoffset) ; + printf("vramp = %f , voffset = %f\n\r", vramp, voffset) ; +}