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) ;
+}