STMPE610 touch sensor driver library

Dependents:   TS_Eyes Tokei testUniGraphic_150217 AfficheurTFTAdafruit ... more

Committer:
Rhyme
Date:
Sat Jan 10 15:13:33 2015 +0000
Revision:
5:988661c63061
Parent:
3:ead62a9c3d1a
Child:
8:e4b4cf8cf7d6
getPoint function added

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 2:ee910b63c077 1 /* mbed SPI_STMPE610.h to test adafruit 2.8" TFT LCD shield w Touchscreen
Rhyme 2:ee910b63c077 2 * Copyright (c) 2014 Motoo Tanaka @ Design Methodology Lab
Rhyme 0:68779c92cffa 3 *
Rhyme 2:ee910b63c077 4 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Rhyme 2:ee910b63c077 5 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Rhyme 2:ee910b63c077 6 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Rhyme 2:ee910b63c077 7 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Rhyme 2:ee910b63c077 8 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
Rhyme 2:ee910b63c077 9 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
Rhyme 2:ee910b63c077 10 * THE SOFTWARE.
Rhyme 0:68779c92cffa 11 */
Rhyme 2:ee910b63c077 12 /*
Rhyme 2:ee910b63c077 13 * Note: Since the interrupt siganl of the shield was not connected
Rhyme 2:ee910b63c077 14 * to an interrupt pin on my frdm-kl25z, I just used polling mode.
Rhyme 2:ee910b63c077 15 */
Rhyme 2:ee910b63c077 16 /*
Rhyme 2:ee910b63c077 17 * Note: To make this work with FRDM-K64F
Rhyme 2:ee910b63c077 18 * PTA0 must be disconnected from the swd clk by cutting J11.
Rhyme 2:ee910b63c077 19 * But to re-active SWD you need to put jumper header to J11
Rhyme 2:ee910b63c077 20 * so that it can be re-connected by a jumper.
Rhyme 2:ee910b63c077 21 */
Rhyme 0:68779c92cffa 22 #ifndef SPI_STMPE610_H
Rhyme 0:68779c92cffa 23 #define SPI_STMPE610_H
Rhyme 0:68779c92cffa 24
Rhyme 0:68779c92cffa 25 #include "mbed.h"
Rhyme 0:68779c92cffa 26
Rhyme 1:43990f1c0a8b 27
Rhyme 1:43990f1c0a8b 28 /** SPI_STMPE610 Touch Sensor
Rhyme 1:43990f1c0a8b 29 * Example:
Rhyme 1:43990f1c0a8b 30 * @code
Rhyme 1:43990f1c0a8b 31 * #include "mbed.h"
Rhyme 1:43990f1c0a8b 32 * #include "SPI_STMPE610.h"
Rhyme 1:43990f1c0a8b 33 *
Rhyme 1:43990f1c0a8b 34 * #define PIN_MOSI PTD2
Rhyme 1:43990f1c0a8b 35 * #define PIN_MISO PTD3
Rhyme 1:43990f1c0a8b 36 * #define PIN_SCLK PTD1
Rhyme 1:43990f1c0a8b 37 * #define PIN_CS_TSC PTA13
Rhyme 1:43990f1c0a8b 38 * #define PIN_TSC_INTR PTC9
Rhyme 0:68779c92cffa 39 *
Rhyme 1:43990f1c0a8b 40 * SPI_STMPE610 TSC(PIN_MOSI, PIN_MISO, PIN_SCLK, PIN_CS_TSC) ;
Rhyme 0:68779c92cffa 41 *
Rhyme 1:43990f1c0a8b 42 * int main()
Rhyme 1:43990f1c0a8b 43 * {
Rhyme 1:43990f1c0a8b 44 * uint16_t touched, x, y, z ;
Rhyme 1:43990f1c0a8b 45 * printf("Test SPI STMPE610\n\r") ;
Rhyme 1:43990f1c0a8b 46 * while (true) {
Rhyme 1:43990f1c0a8b 47 * touched = TSC.getRAWPoint(&x, &y, &z) ;
Rhyme 1:43990f1c0a8b 48 * if (touched) {
Rhyme 1:43990f1c0a8b 49 * printf("x = %d, y = %d, z = %d\n\r", x, y, z) ;
Rhyme 1:43990f1c0a8b 50 * }
Rhyme 1:43990f1c0a8b 51 * wait(0.1) ;
Rhyme 1:43990f1c0a8b 52 * }
Rhyme 1:43990f1c0a8b 53 * }
Rhyme 1:43990f1c0a8b 54 * @endcode
Rhyme 0:68779c92cffa 55 */
Rhyme 0:68779c92cffa 56
Rhyme 0:68779c92cffa 57 class SPI_STMPE610
Rhyme 0:68779c92cffa 58 {
Rhyme 0:68779c92cffa 59 public:
Rhyme 0:68779c92cffa 60 /**
Rhyme 0:68779c92cffa 61 * STMPE610 constructor
Rhyme 0:68779c92cffa 62 *
Rhyme 0:68779c92cffa 63 * @param mosi SPI_MOSI pin
Rhyme 0:68779c92cffa 64 * @param miso SPI_MISO pin
Rhyme 0:68779c92cffa 65 * @param sclk SPI_CLK pin
Rhyme 0:68779c92cffa 66 * @param cs SPI_CS pin
Rhyme 0:68779c92cffa 67 */
Rhyme 1:43990f1c0a8b 68
Rhyme 0:68779c92cffa 69 SPI_STMPE610(PinName mosi, PinName miso, PinName sclk, PinName cs) ;
Rhyme 0:68779c92cffa 70
Rhyme 1:43990f1c0a8b 71 /**
Rhyme 1:43990f1c0a8b 72 * Destructor
Rhyme 1:43990f1c0a8b 73 */
Rhyme 0:68779c92cffa 74 ~SPI_STMPE610() ;
Rhyme 0:68779c92cffa 75
Rhyme 0:68779c92cffa 76 /*
Rhyme 0:68779c92cffa 77 * some member functions here (yet to be written)
Rhyme 0:68779c92cffa 78 */
Rhyme 0:68779c92cffa 79
Rhyme 0:68779c92cffa 80 SPI m_spi;
Rhyme 0:68779c92cffa 81 DigitalOut m_cs ;
Rhyme 0:68779c92cffa 82 int _mode ;
Rhyme 0:68779c92cffa 83
Rhyme 0:68779c92cffa 84 void readRegs(int addr, uint8_t *data, int len) ;
Rhyme 0:68779c92cffa 85 void writeRegs(uint8_t *data, int len) ;
Rhyme 0:68779c92cffa 86 uint8_t read8(int addr) ;
Rhyme 0:68779c92cffa 87 void write8(int addr, uint8_t data) ;
Rhyme 0:68779c92cffa 88 uint16_t read16(int addr) ;
Rhyme 0:68779c92cffa 89 void write16(int addr, uint16_t data) ;
Rhyme 0:68779c92cffa 90
Rhyme 1:43990f1c0a8b 91 /**
Rhyme 1:43990f1c0a8b 92 * get RAW value of x, y, z
Rhyme 1:43990f1c0a8b 93 * @param *x raw value of x
Rhyme 1:43990f1c0a8b 94 * @param *y raw value of y
Rhyme 1:43990f1c0a8b 95 * @param *z raw value of z
Rhyme 1:43990f1c0a8b 96 * @return if touched
Rhyme 1:43990f1c0a8b 97 * @note For my device usually the value seems to be between 300 ~ 3000
Rhyme 1:43990f1c0a8b 98 * @note when it fails to acquire value the value of 0 seems to be returned
Rhyme 1:43990f1c0a8b 99 */
Rhyme 0:68779c92cffa 100 int getRAWPoint(uint16_t *x, uint16_t *y, uint16_t *z) ;
Rhyme 0:68779c92cffa 101
Rhyme 3:ead62a9c3d1a 102 /**
Rhyme 3:ead62a9c3d1a 103 * get value of x, y, z
Rhyme 3:ead62a9c3d1a 104 * @param *x x value relative to TFT
Rhyme 3:ead62a9c3d1a 105 * @param *y y value relative to TFT
Rhyme 3:ead62a9c3d1a 106 * @param *z z RAW value if non-null pointer is passed
Rhyme 3:ead62a9c3d1a 107 * @note default calibration was for my particular device
Rhyme 3:ead62a9c3d1a 108 * @note for more accuracy measure your device and modify
Rhyme 3:ead62a9c3d1a 109 * @note those values in SPI_STMPE610.c
Rhyme 3:ead62a9c3d1a 110 */
Rhyme 3:ead62a9c3d1a 111 int getPoint(uint16_t *x, uint16_t *y, uint16_t *z = 0) ;
Rhyme 3:ead62a9c3d1a 112
Rhyme 5:988661c63061 113 void calibrate(int x_at_10, int y_at_10, int x_at_230, int y_at_310) ;
Rhyme 5:988661c63061 114
Rhyme 0:68779c92cffa 115 private:
Rhyme 5:988661c63061 116 float hramp ;
Rhyme 5:988661c63061 117 float hoffset ;
Rhyme 5:988661c63061 118 float vramp ;
Rhyme 5:988661c63061 119 float voffset ;
Rhyme 0:68779c92cffa 120 } ;
Rhyme 1:43990f1c0a8b 121
Rhyme 0:68779c92cffa 122 #endif /* SPI_STMPE610_H */