STMPE610 touch sensor driver library

Dependents:   TS_Eyes Tokei testUniGraphic_150217 AfficheurTFTAdafruit ... more

Committer:
Rhyme
Date:
Tue Apr 11 05:12:47 2017 +0000
Revision:
14:6740dfc84a8c
Parent:
9:21f92cef6dca
Support of MAX32600 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 14:6740dfc84a8c 90
Rhyme 14:6740dfc84a8c 91 /**
Rhyme 14:6740dfc84a8c 92 * specify spi frequency from this class
Rhyme 14:6740dfc84a8c 93 * @param freq frequency in Hz
Rhyme 14:6740dfc84a8c 94 */
Rhyme 14:6740dfc84a8c 95 void spi_frequency(unsigned long freq) ;
Rhyme 14:6740dfc84a8c 96
Rhyme 9:21f92cef6dca 97 /**
Rhyme 9:21f92cef6dca 98 * specify spi format from this class
Rhyme 9:21f92cef6dca 99 * @param bits number of bits per spi frame
Rhyme 9:21f92cef6dca 100 * @param mode clock polarity and phase mode
Rhyme 9:21f92cef6dca 101 * @note please refer to the spi class for more details
Rhyme 9:21f92cef6dca 102 */
Rhyme 8:e4b4cf8cf7d6 103 void spi_format(int bits, int mode) ;
Rhyme 0:68779c92cffa 104
Rhyme 1:43990f1c0a8b 105 /**
Rhyme 1:43990f1c0a8b 106 * get RAW value of x, y, z
Rhyme 1:43990f1c0a8b 107 * @param *x raw value of x
Rhyme 1:43990f1c0a8b 108 * @param *y raw value of y
Rhyme 1:43990f1c0a8b 109 * @param *z raw value of z
Rhyme 1:43990f1c0a8b 110 * @return if touched
Rhyme 1:43990f1c0a8b 111 * @note For my device usually the value seems to be between 300 ~ 3000
Rhyme 1:43990f1c0a8b 112 * @note when it fails to acquire value the value of 0 seems to be returned
Rhyme 1:43990f1c0a8b 113 */
Rhyme 0:68779c92cffa 114 int getRAWPoint(uint16_t *x, uint16_t *y, uint16_t *z) ;
Rhyme 0:68779c92cffa 115
Rhyme 3:ead62a9c3d1a 116 /**
Rhyme 3:ead62a9c3d1a 117 * get value of x, y, z
Rhyme 3:ead62a9c3d1a 118 * @param *x x value relative to TFT
Rhyme 3:ead62a9c3d1a 119 * @param *y y value relative to TFT
Rhyme 3:ead62a9c3d1a 120 * @param *z z RAW value if non-null pointer is passed
Rhyme 3:ead62a9c3d1a 121 * @note default calibration was for my particular device
Rhyme 3:ead62a9c3d1a 122 * @note for more accuracy measure your device and modify
Rhyme 3:ead62a9c3d1a 123 * @note those values in SPI_STMPE610.c
Rhyme 3:ead62a9c3d1a 124 */
Rhyme 3:ead62a9c3d1a 125 int getPoint(uint16_t *x, uint16_t *y, uint16_t *z = 0) ;
Rhyme 3:ead62a9c3d1a 126
Rhyme 5:988661c63061 127 void calibrate(int x_at_10, int y_at_10, int x_at_230, int y_at_310) ;
Rhyme 5:988661c63061 128
Rhyme 0:68779c92cffa 129 private:
Rhyme 5:988661c63061 130 float hramp ;
Rhyme 5:988661c63061 131 float hoffset ;
Rhyme 5:988661c63061 132 float vramp ;
Rhyme 5:988661c63061 133 float voffset ;
Rhyme 0:68779c92cffa 134 } ;
Rhyme 1:43990f1c0a8b 135
Rhyme 0:68779c92cffa 136 #endif /* SPI_STMPE610_H */