STMPE610 touch sensor driver library
Dependents: TS_Eyes Tokei testUniGraphic_150217 AfficheurTFTAdafruit ... more
Revision 5:988661c63061, committed 2015-01-10
- Comitter:
- Rhyme
- Date:
- Sat Jan 10 15:13:33 2015 +0000
- Parent:
- 4:0aa8f72d3cdd
- Child:
- 6:34e7dc5991b5
- Child:
- 11:b9e339c2ceee
- Commit message:
- getPoint function added
Changed in this revision
| SPI_STMPE610.cpp | Show annotated file Show diff for this revision Revisions of this file |
| SPI_STMPE610.h | Show annotated file Show diff for this revision Revisions of this file |
--- 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) ;
+}
--- a/SPI_STMPE610.h Sat Dec 13 08:11:29 2014 +0000
+++ b/SPI_STMPE610.h Sat Jan 10 15:13:33 2015 +0000
@@ -110,7 +110,13 @@
*/
int getPoint(uint16_t *x, uint16_t *y, uint16_t *z = 0) ;
+ void calibrate(int x_at_10, int y_at_10, int x_at_230, int y_at_310) ;
+
private:
+ float hramp ;
+ float hoffset ;
+ float vramp ;
+ float voffset ;
} ;
#endif /* SPI_STMPE610_H */
\ No newline at end of file