FAE training 2019 demo code

Committer:
EamonnWalsh
Date:
Tue Dec 10 19:34:53 2019 +0000
Revision:
0:9830d14e7908
Initial commit

Who changed what in which revision?

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