FT5206 capacitive Touch Panel driver for 7 inch BuyDisplay LCD, with 5-point touch.

Committer:
JackB
Date:
Fri Jun 19 08:39:50 2015 +0000
Revision:
2:5ebf8736e4b2
Parent:
1:56a53f203daa
Minor update, get touch coordinates during interrupt

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JackB 0:19406ff51058 1 /** This is a library to handling capacitive multitouch sensors using FT5206.
JackB 1:56a53f203daa 2 * FT5206 Capatitive Touch Panel driver for 7 inch BuyDisplay LCD, with 5-point touch
JackB 0:19406ff51058 3 * http://www.buydisplay.com/default/7-inch-lcd-module-capacitive-touch-screen-panel-i2c-spi-serial
JackB 0:19406ff51058 4 *
JackB 0:19406ff51058 5 * Example:
JackB 0:19406ff51058 6 * @code
JackB 0:19406ff51058 7 * // Use of the capacitive touch panel
JackB 1:56a53f203daa 8 * #define PIN_SCL_FT5206 D15
JackB 1:56a53f203daa 9 * #define PIN_SDA_FT5206 D14
JackB 1:56a53f203daa 10 * #define PIN_INT_FT5206 D7
JackB 0:19406ff51058 11 * FT5206 FT5206(PIN_SDA_FT5206, PIN_SCL_FT5206, PIN_INT_FT5206); // sda, scl, int
JackB 0:19406ff51058 12 * FT5206.init();
JackB 0:19406ff51058 13 * while(1) {
JackB 0:19406ff51058 14 * if(FT5206.getPanelTouched()) {
JackB 0:19406ff51058 15 * for (int i = 0; i < FT5206.numberOfTouchPoints; i++) {
JackB 0:19406ff51058 16 * printf("Coord %d: %d, %d \r\n", i+1, FT5206.touchCoordinatesX[i], FT5206.touchCoordinatesY[i]);
JackB 0:19406ff51058 17 * }
JackB 0:19406ff51058 18 * }
JackB 0:19406ff51058 19 * }
JackB 0:19406ff51058 20 * @endcode
JackB 0:19406ff51058 21 *
JackB 0:19406ff51058 22 */
JackB 0:19406ff51058 23
JackB 0:19406ff51058 24 #ifndef FT5206_H
JackB 0:19406ff51058 25 #define FT5206_H
JackB 0:19406ff51058 26
JackB 0:19406ff51058 27 #include "mbed.h"
JackB 0:19406ff51058 28
JackB 0:19406ff51058 29 #define DEBUG_OUTPUT_ENABLED false
JackB 0:19406ff51058 30
JackB 0:19406ff51058 31 #define FT5206_I2C_FREQUENCY 400000
JackB 0:19406ff51058 32
JackB 0:19406ff51058 33 /* FT5206 definitions */
JackB 0:19406ff51058 34 #define FT5206_I2C_ADDRESS 0x38
JackB 0:19406ff51058 35 #define FT5206_NUMBER_OF_REGISTERS 31 // there are more registers, but this
JackB 0:19406ff51058 36 // is enought to get all 5 touch coordinates.
JackB 0:19406ff51058 37
JackB 0:19406ff51058 38 #define FT5206_NUMBER_OF_TOTAL_REGISTERS 0xFE
JackB 0:19406ff51058 39
JackB 0:19406ff51058 40 #define FT5206_DEVICE_MODE 0x00
JackB 0:19406ff51058 41 #define FT5206_GEST_ID 0x01
JackB 0:19406ff51058 42 #define FT5206_TD_STATUS 0x02 // How many points detected (3:0). 1-5 is valid.
JackB 0:19406ff51058 43
JackB 0:19406ff51058 44 #define FT5206_TOUCH1_XH 0x03 // Event Flag, Touch X Position
JackB 0:19406ff51058 45 #define FT5206_TOUCH1_XL 0x04
JackB 0:19406ff51058 46 #define FT5206_TOUCH1_YH 0x05 // Touch ID, Touch Y Position
JackB 0:19406ff51058 47 #define FT5206_TOUCH1_YL 0x06
JackB 0:19406ff51058 48
JackB 0:19406ff51058 49 #define FT5206_TOUCH2_XH 0x09 // Event Flag, Touch X Position
JackB 0:19406ff51058 50 #define FT5206_TOUCH2_XL 0x0a
JackB 0:19406ff51058 51 #define FT5206_TOUCH2_YH 0x0b // Touch ID, Touch Y Position
JackB 0:19406ff51058 52 #define FT5206_TOUCH2_YL 0x0c
JackB 0:19406ff51058 53
JackB 0:19406ff51058 54 #define FT5206_TOUCH3_XH 0x0f // Event Flag, Touch X Position
JackB 0:19406ff51058 55 #define FT5206_TOUCH3_XL 0x10
JackB 0:19406ff51058 56 #define FT5206_TOUCH3_YH 0x11 // Touch ID, Touch Y Position
JackB 0:19406ff51058 57 #define FT5206_TOUCH3_YL 0x12
JackB 0:19406ff51058 58
JackB 0:19406ff51058 59 #define FT5206_TOUCH4_XH 0x15 // Event Flag, Touch X Position
JackB 0:19406ff51058 60 #define FT5206_TOUCH4_XL 0x16
JackB 0:19406ff51058 61 #define FT5206_TOUCH4_YH 0x17 // Touch ID, Touch Y Position
JackB 0:19406ff51058 62 #define FT5206_TOUCH4_YL 0x18
JackB 0:19406ff51058 63
JackB 0:19406ff51058 64 #define FT5206_TOUCH5_XH 0x1b // Event Flag, Touch X Position
JackB 0:19406ff51058 65 #define FT5206_TOUCH5_XL 0x1c
JackB 0:19406ff51058 66 #define FT5206_TOUCH5_YH 0x1d // Touch ID, Touch Y Position
JackB 0:19406ff51058 67 #define FT5206_TOUCH5_YL 0x1e
JackB 0:19406ff51058 68
JackB 0:19406ff51058 69 #define FT5206_ID_G_THGROUP 0x80 // Valid touching detect threshold
JackB 0:19406ff51058 70 #define FT5206_ID_G_THPEAK 0x81 // Valid touching peak detect threshold
JackB 0:19406ff51058 71 #define FT5206_ID_G_THCAL 0x82 // The threshold when calculating the focus of touching
JackB 0:19406ff51058 72 #define FT5206_ID_G_THWATER 0x83 // The threshold when there is surface water
JackB 0:19406ff51058 73 #define FT5206_ID_G_THTEMP 0x84 // The threshold of temperature compensation
JackB 0:19406ff51058 74 #define FT5206_ID_G_CTRL 0x86 // Power control mode
JackB 0:19406ff51058 75 #define FT5206_ID_G_TIME_ENTER_MONITOR 0x87 // The timer of entering monitor status
JackB 0:19406ff51058 76 #define FT5206_ID_G_PERIODACTIVE 0x88 // Period Active
JackB 0:19406ff51058 77 #define FT5206_ID_G_PERIODMONITOR 0x89 // The timer of entering idle while in monitor status
JackB 0:19406ff51058 78 #define FT5206_ID_G_AUTO_CLB_MODE 0xA0 // Auto calibration mode
JackB 0:19406ff51058 79
JackB 0:19406ff51058 80 #define FT5206_TOUCH_LIB_VERSION_H 0xA1 // Firmware Library Version H byte
JackB 0:19406ff51058 81 #define FT5206_TOUCH_LIB_VERSION_L 0xA2 // Firmware Library Version L byte
JackB 0:19406ff51058 82 #define FT5206_ID_G_CIPHER 0xA3 // Chip vendor ID
JackB 0:19406ff51058 83 #define FT5206_G_MODE 0xA4 // The interrupt status to host
JackB 0:19406ff51058 84 #define FT5206_ID_G_PMODE 0xA5 // Power Consume Mode
JackB 0:19406ff51058 85 #define FT5206_FIRMID 0xA6 // Firmware ID
JackB 0:19406ff51058 86 #define FT5206_ID_G_STATE 0xA7 // Running State
JackB 0:19406ff51058 87 #define FT5206_ID_G_FT5201ID 0xA8 // CTPM Vendor ID
JackB 0:19406ff51058 88 #define FT5206_ID_G_ERR 0xA9 // Error Code
JackB 0:19406ff51058 89 #define FT5206_ID_G_CLB 0xAA // Configure TP module during calibration in Test Mode
JackB 0:19406ff51058 90 #define FT5206_ID_G_B_AREA_TH 0xAE // The threshold of big area
JackB 0:19406ff51058 91 #define FT5206_LOG_MSG_CNT 0xFE // The log MSG count
JackB 0:19406ff51058 92 #define FT5206_LOG_CUR_CHA 0xFF // Current character of log message, will point to the next
JackB 0:19406ff51058 93 // character when one character is read.
JackB 0:19406ff51058 94
JackB 0:19406ff51058 95 #define FT5206_GEST_ID_MOVE_UP 0x10
JackB 0:19406ff51058 96 #define FT5206_GEST_ID_MOVE_LEFT 0x14
JackB 0:19406ff51058 97 #define FT5206_GEST_ID_MOVE_DOWN 0x18
JackB 0:19406ff51058 98 #define FT5206_GEST_ID_MOVE_RIGHT 0x1c
JackB 0:19406ff51058 99 #define FT5206_GEST_ID_ZOOM_IN 0x48
JackB 0:19406ff51058 100 #define FT5206_GEST_ID_ZOOM_OUT 0x49
JackB 0:19406ff51058 101 #define FT5206_GEST_ID_NO_GESTURE 0x00
JackB 0:19406ff51058 102
JackB 0:19406ff51058 103 #define FT5206_EVENT_FLAG_PUT_DOWN 0x00
JackB 0:19406ff51058 104 #define FT5206_EVENT_FLAG_PUT_UP 0x01
JackB 0:19406ff51058 105 #define FT5206_EVENT_FLAG_CONTACT 0x02
JackB 0:19406ff51058 106 #define FT5206_EVENT_FLAG_RESERVED 0x03
JackB 0:19406ff51058 107
JackB 0:19406ff51058 108 #define FT5206_ID_G_POLLING_MODE 0x00
JackB 0:19406ff51058 109 #define FT5206_ID_G_TRIGGER_MODE 0x01
JackB 0:19406ff51058 110
JackB 0:19406ff51058 111 #define FT5206_ID_G_PMODE_ACTIVE 0x00
JackB 0:19406ff51058 112 #define FT5206_ID_G_PMODE_MONITOR 0x01
JackB 0:19406ff51058 113 #define FT5206_ID_G_PMODE_HIBERNATE 0x03
JackB 0:19406ff51058 114
JackB 0:19406ff51058 115 #define FT5206_ID_G_STATE_CONFIGURE 0x00
JackB 0:19406ff51058 116 #define FT5206_ID_G_STATE_WORK 0x01
JackB 0:19406ff51058 117 #define FT5206_ID_G_STATE_CALIBRATION 0x02
JackB 0:19406ff51058 118 #define FT5206_ID_G_STATE_FACTORY 0x03
JackB 0:19406ff51058 119 #define FT5206_ID_G_STATE_AUTO_CALIBRATION 0x04
JackB 0:19406ff51058 120
JackB 0:19406ff51058 121 class FT5206
JackB 0:19406ff51058 122 {
JackB 0:19406ff51058 123 public:
JackB 0:19406ff51058 124 FT5206(PinName sda, PinName scl, PinName interrupt);
JackB 0:19406ff51058 125
JackB 2:5ebf8736e4b2 126 void init(void);
JackB 0:19406ff51058 127 uint8_t getTouchPositions(void);
JackB 0:19406ff51058 128 void intPanelTouched(void);
JackB 0:19406ff51058 129 bool getPanelTouched(void);
JackB 0:19406ff51058 130
JackB 0:19406ff51058 131 uint8_t numberOfTouchPoints;
JackB 0:19406ff51058 132 uint16_t touchCoordinatesX[5];
JackB 0:19406ff51058 133 uint16_t touchCoordinatesY[5];
JackB 0:19406ff51058 134
JackB 0:19406ff51058 135 private:
JackB 0:19406ff51058 136 InterruptIn m_interrupt;
JackB 0:19406ff51058 137
JackB 0:19406ff51058 138 I2C m_i2c;
JackB 0:19406ff51058 139 int m_addr;
JackB 0:19406ff51058 140 char data[2];
JackB 0:19406ff51058 141
JackB 0:19406ff51058 142 bool debug_output_enabled;
JackB 0:19406ff51058 143 bool panelTouched;
JackB 0:19406ff51058 144 void writeRegister8(char reg, char val);
JackB 0:19406ff51058 145 char readRegister8(char reg);
JackB 0:19406ff51058 146
JackB 0:19406ff51058 147 };
JackB 0:19406ff51058 148
JackB 0:19406ff51058 149 #endif