FT6206 Library for Adafruit 2.8" TFT Touch Shield for Arduino w/Capacitive Touch

Dependents:   ArchPro_TFT ATT_AWS_IoT_demo_v06 ArchPro_TFT TermProject

Committer:
JackB
Date:
Tue Mar 24 01:25:16 2015 +0000
Revision:
8:b6e95d327cd3
Parent:
7:3896a0daed43
Child:
9:fff166330146
updated

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JackB 4:b9ff3c020e7f 1 /*
JackB 4:b9ff3c020e7f 2 Copyright (c) 2015 Jack Berkhout
JackB 0:d146e986a07f 3
JackB 4:b9ff3c020e7f 4 Permission is hereby granted, free of charge, to any person obtaining a copy
JackB 4:b9ff3c020e7f 5 of this software and associated documentation files (the "Software"), to deal
JackB 4:b9ff3c020e7f 6 in the Software without restriction, including without limitation the rights
JackB 4:b9ff3c020e7f 7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
JackB 4:b9ff3c020e7f 8 copies of the Software, and to permit persons to whom the Software is
JackB 4:b9ff3c020e7f 9 furnished to do so, subject to the following conditions:
JackB 4:b9ff3c020e7f 10
JackB 4:b9ff3c020e7f 11 The above copyright notice and this permission notice shall be included in
JackB 4:b9ff3c020e7f 12 all copies or substantial portions of the Software.
JackB 4:b9ff3c020e7f 13
JackB 4:b9ff3c020e7f 14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
JackB 4:b9ff3c020e7f 15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
JackB 4:b9ff3c020e7f 16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
JackB 4:b9ff3c020e7f 17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
JackB 4:b9ff3c020e7f 18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
JackB 4:b9ff3c020e7f 19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
JackB 4:b9ff3c020e7f 20 THE SOFTWARE.
JackB 4:b9ff3c020e7f 21
JackB 4:b9ff3c020e7f 22 This is a library for the Adafruit Capacitive Touch Screens
JackB 0:d146e986a07f 23 ----> http://www.adafruit.com/products/1947
JackB 4:b9ff3c020e7f 24 This chipset uses I2C to communicate
JackB 4:b9ff3c020e7f 25
JackB 4:b9ff3c020e7f 26 Based on Arduino written by Limor Fried/Ladyada for Adafruit Industries.
JackB 4:b9ff3c020e7f 27
JackB 4:b9ff3c020e7f 28 On the shield, these jumpers were bridged:
JackB 4:b9ff3c020e7f 29 Int - #7 (default)
JackB 4:b9ff3c020e7f 30 SCK - 13 (default)
JackB 4:b9ff3c020e7f 31 SO - 12 (default)
JackB 4:b9ff3c020e7f 32 SI - 11
JackB 4:b9ff3c020e7f 33 SCL - SCL
JackB 4:b9ff3c020e7f 34 SDA - SDA
JackB 4:b9ff3c020e7f 35
JackB 4:b9ff3c020e7f 36 Usage:
JackB 0:d146e986a07f 37
JackB 4:b9ff3c020e7f 38 #include "mbed.h"
JackB 4:b9ff3c020e7f 39 #include "SPI_TFT_ILI9341.h"
JackB 4:b9ff3c020e7f 40 #include "FT6206.h"
JackB 4:b9ff3c020e7f 41 #include "Arial12x12.h"
JackB 4:b9ff3c020e7f 42
JackB 4:b9ff3c020e7f 43 #define PIN_XP A3
JackB 4:b9ff3c020e7f 44 #define PIN_XM A1
JackB 4:b9ff3c020e7f 45 #define PIN_YP A2
JackB 4:b9ff3c020e7f 46 #define PIN_YM A0
JackB 4:b9ff3c020e7f 47 #define PIN_SCLK D13
JackB 4:b9ff3c020e7f 48 #define PIN_MISO D12
JackB 4:b9ff3c020e7f 49 #define PIN_MOSI D11
JackB 4:b9ff3c020e7f 50 #define PIN_CS_TFT D10 // chip select pin
JackB 4:b9ff3c020e7f 51 #define PIN_DC_TFT D9 // data/command select pin.
JackB 4:b9ff3c020e7f 52 #define PIN_RESET_TFT D8
JackB 4:b9ff3c020e7f 53 //#define PIN_BL_TFT D7
JackB 4:b9ff3c020e7f 54 #define PIN_CS_SD D4
JackB 0:d146e986a07f 55
JackB 4:b9ff3c020e7f 56 #define PORTRAIT 0
JackB 4:b9ff3c020e7f 57 #define LANDSCAPE 1
JackB 4:b9ff3c020e7f 58
JackB 4:b9ff3c020e7f 59 #define PIN_SCL_FT6206 P0_28
JackB 4:b9ff3c020e7f 60 #define PIN_SDA_FT6206 P0_27
JackB 4:b9ff3c020e7f 61 #define PIN_INT_FT6206 D7
JackB 4:b9ff3c020e7f 62
JackB 4:b9ff3c020e7f 63 SPI_TFT_ILI9341 TFT(PIN_MOSI, PIN_MISO, PIN_SCLK, PIN_CS_TFT, PIN_RESET_TFT, PIN_DC_TFT, "TFT"); // mosi, miso, sclk, cs, reset, dc
JackB 4:b9ff3c020e7f 64 FT6206 FT6206(PIN_SDA_FT6206, PIN_SCL_FT6206, PIN_INT_FT6206); // sda, scl, int
JackB 0:d146e986a07f 65
JackB 4:b9ff3c020e7f 66 int main()
JackB 4:b9ff3c020e7f 67 {
JackB 4:b9ff3c020e7f 68 while(1) {
JackB 7:3896a0daed43 69 TS_Point p;
JackB 7:3896a0daed43 70 if (FT6206.getTouchPoint(p)) {
JackB 8:b6e95d327cd3 71 X1 = X2;
JackB 8:b6e95d327cd3 72 Y1 = Y2;
JackB 8:b6e95d327cd3 73 X2 = p.x;
JackB 8:b6e95d327cd3 74 Y2 = p.y;
JackB 8:b6e95d327cd3 75 // printf("Touch %3d %3d\n", p.x, p.y);
JackB 8:b6e95d327cd3 76 if ((X1 > 0) && (Y1 > 0) && (X2 > 0) && (Y2 > 0)) {
JackB 8:b6e95d327cd3 77 TFT.line(X1, Y1, X2, Y2, RGB(255,128,255));
JackB 8:b6e95d327cd3 78 }
JackB 4:b9ff3c020e7f 79 }
JackB 4:b9ff3c020e7f 80 }
JackB 4:b9ff3c020e7f 81 }
JackB 4:b9ff3c020e7f 82 */
JackB 0:d146e986a07f 83
JackB 0:d146e986a07f 84 #ifndef FT6206_H
JackB 0:d146e986a07f 85 #define FT6206_H
JackB 0:d146e986a07f 86
JackB 0:d146e986a07f 87 #include "mbed.h"
JackB 0:d146e986a07f 88
JackB 0:d146e986a07f 89 #define FT6206_I2C_FREQUENCY 400000
JackB 0:d146e986a07f 90
JackB 0:d146e986a07f 91 #define FT6206_ADDR 0x38
JackB 0:d146e986a07f 92 #define FT6206_G_FT5201ID 0xA8
JackB 0:d146e986a07f 93 #define FT6206_REG_NUMTOUCHES 0x02
JackB 0:d146e986a07f 94
JackB 0:d146e986a07f 95 #define FT6206_NUM_X 0x33
JackB 0:d146e986a07f 96 #define FT6206_NUM_Y 0x34
JackB 0:d146e986a07f 97
JackB 0:d146e986a07f 98 #define FT6206_REG_MODE 0x00
JackB 0:d146e986a07f 99 #define FT6206_REG_CALIBRATE 0x02
JackB 0:d146e986a07f 100 #define FT6206_REG_WORKMODE 0x00
JackB 0:d146e986a07f 101 #define FT6206_REG_FACTORYMODE 0x40
JackB 0:d146e986a07f 102 #define FT6206_REG_THRESHHOLD 0x80
JackB 0:d146e986a07f 103 #define FT6206_REG_POINTRATE 0x88
JackB 0:d146e986a07f 104 #define FT6206_REG_FIRMVERS 0xA6
JackB 0:d146e986a07f 105 #define FT6206_REG_CHIPID 0xA3
JackB 0:d146e986a07f 106 #define FT6206_REG_VENDID 0xA8
JackB 0:d146e986a07f 107
JackB 0:d146e986a07f 108 // calibrated for Adafruit 2.8" ctp screen
JackB 0:d146e986a07f 109 #define FT6206_DEFAULT_THRESSHOLD 0x80
JackB 0:d146e986a07f 110
JackB 0:d146e986a07f 111 #define ILI9341_TFTWIDTH 320
JackB 0:d146e986a07f 112 #define ILI9341_TFTHEIGHT 240
JackB 0:d146e986a07f 113
JackB 0:d146e986a07f 114 class TS_Point {
JackB 0:d146e986a07f 115 public:
JackB 0:d146e986a07f 116 TS_Point(void);
JackB 0:d146e986a07f 117 TS_Point(int16_t x, int16_t y, int16_t z);
JackB 0:d146e986a07f 118
JackB 0:d146e986a07f 119 bool operator==(TS_Point);
JackB 0:d146e986a07f 120 bool operator!=(TS_Point);
JackB 0:d146e986a07f 121
JackB 0:d146e986a07f 122 int16_t x, y, z;
JackB 0:d146e986a07f 123 };
JackB 0:d146e986a07f 124
JackB 0:d146e986a07f 125 class FT6206 {
JackB 5:652684757b6b 126 public:
JackB 5:652684757b6b 127 //!Creates an instance of the class.
JackB 5:652684757b6b 128 /*!
JackB 5:652684757b6b 129 FT6206 display touchscreen at I2C using I2C port pins sda, scl, and interrupt pins.
JackB 5:652684757b6b 130 TMP102
JackB 5:652684757b6b 131 \param sda, scl, interrupt
JackB 5:652684757b6b 132 */
JackB 0:d146e986a07f 133 FT6206(PinName sda, PinName scl, PinName interrupt);
JackB 5:652684757b6b 134
JackB 5:652684757b6b 135 /*!
JackB 5:652684757b6b 136 Destroys instance.
JackB 5:652684757b6b 137 */
JackB 5:652684757b6b 138 ~FT6206();
JackB 5:652684757b6b 139
JackB 5:652684757b6b 140 bool init(uint8_t thresh = FT6206_DEFAULT_THRESSHOLD);
JackB 0:d146e986a07f 141
JackB 0:d146e986a07f 142 void writeRegister8(char reg, char val);
JackB 0:d146e986a07f 143 char readRegister8(char reg);
JackB 0:d146e986a07f 144 char dataReceived(void);
JackB 0:d146e986a07f 145
JackB 0:d146e986a07f 146 void readData(uint16_t *x, uint16_t *y);
JackB 0:d146e986a07f 147
JackB 0:d146e986a07f 148 bool touched(void);
JackB 0:d146e986a07f 149 TS_Point getPoint(void);
JackB 0:d146e986a07f 150
JackB 6:eb7a74dc809f 151 bool getTouchPoint(TS_Point &p);
JackB 6:eb7a74dc809f 152
JackB 0:d146e986a07f 153 private:
JackB 0:d146e986a07f 154 DigitalIn m_interrupt;
JackB 0:d146e986a07f 155 I2C m_i2c;
JackB 0:d146e986a07f 156 int m_addr;
JackB 0:d146e986a07f 157 char data[2];
JackB 0:d146e986a07f 158
JackB 0:d146e986a07f 159 uint8_t touches;
JackB 0:d146e986a07f 160 uint16_t touchX[2], touchY[2], touchID[2];
JackB 0:d146e986a07f 161
JackB 0:d146e986a07f 162 };
JackB 0:d146e986a07f 163
JackB 0:d146e986a07f 164 #endif
JackB 0:d146e986a07f 165