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 Apr 28 21:12:26 2015 +0000
Revision:
11:9e1fc2233b0e
Parent:
10:535d2140db2c
InterruptIn used, when touched

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 11:9e1fc2233b0e 26 Based on code by Limor Fried/Ladyada for Adafruit Industries.
JackB 11:9e1fc2233b0e 27 MIT license, all text above must be included in any redistribution.
JackB 4:b9ff3c020e7f 28
JackB 4:b9ff3c020e7f 29 On the shield, these jumpers were bridged:
JackB 4:b9ff3c020e7f 30 Int - #7 (default)
JackB 4:b9ff3c020e7f 31 SCK - 13 (default)
JackB 4:b9ff3c020e7f 32 SO - 12 (default)
JackB 4:b9ff3c020e7f 33 SI - 11
JackB 4:b9ff3c020e7f 34 SCL - SCL
JackB 4:b9ff3c020e7f 35 SDA - SDA
JackB 4:b9ff3c020e7f 36
JackB 4:b9ff3c020e7f 37 Usage:
JackB 0:d146e986a07f 38
JackB 4:b9ff3c020e7f 39 #include "mbed.h"
JackB 4:b9ff3c020e7f 40 #include "SPI_TFT_ILI9341.h"
JackB 4:b9ff3c020e7f 41 #include "FT6206.h"
JackB 4:b9ff3c020e7f 42 #include "Arial12x12.h"
JackB 4:b9ff3c020e7f 43
JackB 4:b9ff3c020e7f 44 #define PIN_XP A3
JackB 4:b9ff3c020e7f 45 #define PIN_XM A1
JackB 4:b9ff3c020e7f 46 #define PIN_YP A2
JackB 4:b9ff3c020e7f 47 #define PIN_YM A0
JackB 4:b9ff3c020e7f 48 #define PIN_SCLK D13
JackB 4:b9ff3c020e7f 49 #define PIN_MISO D12
JackB 4:b9ff3c020e7f 50 #define PIN_MOSI D11
JackB 4:b9ff3c020e7f 51 #define PIN_CS_TFT D10 // chip select pin
JackB 4:b9ff3c020e7f 52 #define PIN_DC_TFT D9 // data/command select pin.
JackB 4:b9ff3c020e7f 53 #define PIN_RESET_TFT D8
JackB 4:b9ff3c020e7f 54 //#define PIN_BL_TFT D7
JackB 4:b9ff3c020e7f 55 #define PIN_CS_SD D4
JackB 0:d146e986a07f 56
JackB 4:b9ff3c020e7f 57 #define PORTRAIT 0
JackB 4:b9ff3c020e7f 58 #define LANDSCAPE 1
JackB 4:b9ff3c020e7f 59
JackB 4:b9ff3c020e7f 60 #define PIN_SCL_FT6206 P0_28
JackB 4:b9ff3c020e7f 61 #define PIN_SDA_FT6206 P0_27
JackB 4:b9ff3c020e7f 62 #define PIN_INT_FT6206 D7
JackB 4:b9ff3c020e7f 63
JackB 4:b9ff3c020e7f 64 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 65 FT6206 FT6206(PIN_SDA_FT6206, PIN_SCL_FT6206, PIN_INT_FT6206); // sda, scl, int
JackB 0:d146e986a07f 66
JackB 4:b9ff3c020e7f 67 int main()
JackB 4:b9ff3c020e7f 68 {
JackB 10:535d2140db2c 69 //Configure the display driver
JackB 10:535d2140db2c 70 TFT.claim(stdout);
JackB 10:535d2140db2c 71 TFT.background(Black);
JackB 10:535d2140db2c 72 TFT.foreground(White);
JackB 10:535d2140db2c 73 TFT.set_orientation(LANDSCAPE);
JackB 10:535d2140db2c 74 TFT.cls();
JackB 10:535d2140db2c 75
JackB 10:535d2140db2c 76 //Print a welcome message
JackB 10:535d2140db2c 77 TFT.set_font((unsigned char*) Arial12x12);
JackB 10:535d2140db2c 78 TFT.locate(0,0);
JackB 10:535d2140db2c 79 TFT.printf("Hello mbed!\n");
JackB 10:535d2140db2c 80
JackB 4:b9ff3c020e7f 81 while(1) {
JackB 10:535d2140db2c 82 int X1, Y1, X2, Y2;
JackB 7:3896a0daed43 83 TS_Point p;
JackB 7:3896a0daed43 84 if (FT6206.getTouchPoint(p)) {
JackB 8:b6e95d327cd3 85 X1 = X2;
JackB 8:b6e95d327cd3 86 Y1 = Y2;
JackB 8:b6e95d327cd3 87 X2 = p.x;
JackB 8:b6e95d327cd3 88 Y2 = p.y;
JackB 9:fff166330146 89 TFT.locate(0,12);
JackB 9:fff166330146 90 printf("Touch %3d %3d\n", p.x, p.y);
JackB 8:b6e95d327cd3 91 if ((X1 > 0) && (Y1 > 0) && (X2 > 0) && (Y2 > 0)) {
JackB 8:b6e95d327cd3 92 TFT.line(X1, Y1, X2, Y2, RGB(255,128,255));
JackB 8:b6e95d327cd3 93 }
JackB 4:b9ff3c020e7f 94 }
JackB 4:b9ff3c020e7f 95 }
JackB 4:b9ff3c020e7f 96 }
JackB 4:b9ff3c020e7f 97 */
JackB 0:d146e986a07f 98
JackB 0:d146e986a07f 99 #ifndef FT6206_H
JackB 0:d146e986a07f 100 #define FT6206_H
JackB 0:d146e986a07f 101
JackB 0:d146e986a07f 102 #include "mbed.h"
JackB 0:d146e986a07f 103
JackB 0:d146e986a07f 104 #define FT6206_I2C_FREQUENCY 400000
JackB 0:d146e986a07f 105
JackB 0:d146e986a07f 106 #define FT6206_ADDR 0x38
JackB 0:d146e986a07f 107 #define FT6206_G_FT5201ID 0xA8
JackB 0:d146e986a07f 108 #define FT6206_REG_NUMTOUCHES 0x02
JackB 0:d146e986a07f 109
JackB 0:d146e986a07f 110 #define FT6206_NUM_X 0x33
JackB 0:d146e986a07f 111 #define FT6206_NUM_Y 0x34
JackB 0:d146e986a07f 112
JackB 0:d146e986a07f 113 #define FT6206_REG_MODE 0x00
JackB 0:d146e986a07f 114 #define FT6206_REG_CALIBRATE 0x02
JackB 0:d146e986a07f 115 #define FT6206_REG_WORKMODE 0x00
JackB 0:d146e986a07f 116 #define FT6206_REG_FACTORYMODE 0x40
JackB 0:d146e986a07f 117 #define FT6206_REG_THRESHHOLD 0x80
JackB 0:d146e986a07f 118 #define FT6206_REG_POINTRATE 0x88
JackB 0:d146e986a07f 119 #define FT6206_REG_FIRMVERS 0xA6
JackB 0:d146e986a07f 120 #define FT6206_REG_CHIPID 0xA3
JackB 0:d146e986a07f 121 #define FT6206_REG_VENDID 0xA8
JackB 0:d146e986a07f 122
JackB 0:d146e986a07f 123 // calibrated for Adafruit 2.8" ctp screen
JackB 0:d146e986a07f 124 #define FT6206_DEFAULT_THRESSHOLD 0x80
JackB 0:d146e986a07f 125
JackB 0:d146e986a07f 126 #define ILI9341_TFTWIDTH 320
JackB 0:d146e986a07f 127 #define ILI9341_TFTHEIGHT 240
JackB 0:d146e986a07f 128
JackB 0:d146e986a07f 129 class TS_Point {
JackB 0:d146e986a07f 130 public:
JackB 0:d146e986a07f 131 TS_Point(void);
JackB 0:d146e986a07f 132 TS_Point(int16_t x, int16_t y, int16_t z);
JackB 0:d146e986a07f 133
JackB 0:d146e986a07f 134 bool operator==(TS_Point);
JackB 0:d146e986a07f 135 bool operator!=(TS_Point);
JackB 0:d146e986a07f 136
JackB 0:d146e986a07f 137 int16_t x, y, z;
JackB 0:d146e986a07f 138 };
JackB 0:d146e986a07f 139
JackB 0:d146e986a07f 140 class FT6206 {
JackB 5:652684757b6b 141 public:
JackB 5:652684757b6b 142 //!Creates an instance of the class.
JackB 5:652684757b6b 143 /*!
JackB 5:652684757b6b 144 FT6206 display touchscreen at I2C using I2C port pins sda, scl, and interrupt pins.
JackB 5:652684757b6b 145 TMP102
JackB 5:652684757b6b 146 \param sda, scl, interrupt
JackB 5:652684757b6b 147 */
JackB 0:d146e986a07f 148 FT6206(PinName sda, PinName scl, PinName interrupt);
JackB 5:652684757b6b 149
JackB 5:652684757b6b 150 /*!
JackB 5:652684757b6b 151 Destroys instance.
JackB 5:652684757b6b 152 */
JackB 5:652684757b6b 153 ~FT6206();
JackB 5:652684757b6b 154
JackB 5:652684757b6b 155 bool init(uint8_t thresh = FT6206_DEFAULT_THRESSHOLD);
JackB 0:d146e986a07f 156
JackB 0:d146e986a07f 157 void writeRegister8(char reg, char val);
JackB 0:d146e986a07f 158 char readRegister8(char reg);
JackB 0:d146e986a07f 159 char dataReceived(void);
JackB 0:d146e986a07f 160
JackB 0:d146e986a07f 161 void readData(uint16_t *x, uint16_t *y);
JackB 0:d146e986a07f 162
JackB 0:d146e986a07f 163 bool touched(void);
JackB 0:d146e986a07f 164 TS_Point getPoint(void);
JackB 11:9e1fc2233b0e 165 TS_Point clearPoint(void);
JackB 11:9e1fc2233b0e 166
JackB 11:9e1fc2233b0e 167 void checkDataReceived(void);
JackB 11:9e1fc2233b0e 168
JackB 11:9e1fc2233b0e 169 bool getDataReceived(void);
JackB 11:9e1fc2233b0e 170
JackB 11:9e1fc2233b0e 171 void waitScreenTapped(void);
JackB 0:d146e986a07f 172
JackB 6:eb7a74dc809f 173 bool getTouchPoint(TS_Point &p);
JackB 6:eb7a74dc809f 174
JackB 11:9e1fc2233b0e 175 Ticker tick;
JackB 11:9e1fc2233b0e 176
JackB 0:d146e986a07f 177 private:
JackB 11:9e1fc2233b0e 178 // DigitalIn m_interrupt;
JackB 11:9e1fc2233b0e 179 InterruptIn m_interrupt;
JackB 11:9e1fc2233b0e 180
JackB 0:d146e986a07f 181 I2C m_i2c;
JackB 0:d146e986a07f 182 int m_addr;
JackB 0:d146e986a07f 183 char data[2];
JackB 0:d146e986a07f 184
JackB 0:d146e986a07f 185 uint8_t touches;
JackB 0:d146e986a07f 186 uint16_t touchX[2], touchY[2], touchID[2];
JackB 11:9e1fc2233b0e 187
JackB 11:9e1fc2233b0e 188 bool DataReceived;
JackB 11:9e1fc2233b0e 189
JackB 0:d146e986a07f 190
JackB 0:d146e986a07f 191 };
JackB 0:d146e986a07f 192
JackB 0:d146e986a07f 193 #endif
JackB 0:d146e986a07f 194