Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
FT5206.h@1:56a53f203daa, 2015-06-18 (annotated)
- Committer:
- JackB
- Date:
- Thu Jun 18 21:24:57 2015 +0000
- Revision:
- 1:56a53f203daa
- Parent:
- 0:19406ff51058
- Child:
- 2:5ebf8736e4b2
Added pin names for interfacing with Arch Pro
Who changed what in which revision?
| User | Revision | Line number | New 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 | * uint8_t numberOfTouchPoints = FT5206.getTouchPositions(); | 
| JackB | 0:19406ff51058 | 16 | * for (int i = 0; i < FT5206.numberOfTouchPoints; i++) { | 
| JackB | 0:19406ff51058 | 17 | * printf("Coord %d: %d, %d \r\n", i+1, FT5206.touchCoordinatesX[i], FT5206.touchCoordinatesY[i]); | 
| JackB | 0:19406ff51058 | 18 | * } | 
| JackB | 0:19406ff51058 | 19 | * } | 
| JackB | 0:19406ff51058 | 20 | * } | 
| JackB | 0:19406ff51058 | 21 | * @endcode | 
| JackB | 0:19406ff51058 | 22 | * | 
| JackB | 0:19406ff51058 | 23 | */ | 
| JackB | 0:19406ff51058 | 24 | |
| JackB | 0:19406ff51058 | 25 | #ifndef FT5206_H | 
| JackB | 0:19406ff51058 | 26 | #define FT5206_H | 
| JackB | 0:19406ff51058 | 27 | |
| JackB | 0:19406ff51058 | 28 | #include "mbed.h" | 
| JackB | 0:19406ff51058 | 29 | |
| JackB | 0:19406ff51058 | 30 | #define DEBUG_OUTPUT_ENABLED false | 
| JackB | 0:19406ff51058 | 31 | |
| JackB | 0:19406ff51058 | 32 | #define FT5206_I2C_FREQUENCY 400000 | 
| JackB | 0:19406ff51058 | 33 | |
| JackB | 0:19406ff51058 | 34 | /* FT5206 definitions */ | 
| JackB | 0:19406ff51058 | 35 | #define FT5206_I2C_ADDRESS 0x38 | 
| JackB | 0:19406ff51058 | 36 | #define FT5206_NUMBER_OF_REGISTERS 31 // there are more registers, but this | 
| JackB | 0:19406ff51058 | 37 | // is enought to get all 5 touch coordinates. | 
| JackB | 0:19406ff51058 | 38 | |
| JackB | 0:19406ff51058 | 39 | #define FT5206_NUMBER_OF_TOTAL_REGISTERS 0xFE | 
| JackB | 0:19406ff51058 | 40 | |
| JackB | 0:19406ff51058 | 41 | #define FT5206_DEVICE_MODE 0x00 | 
| JackB | 0:19406ff51058 | 42 | #define FT5206_GEST_ID 0x01 | 
| JackB | 0:19406ff51058 | 43 | #define FT5206_TD_STATUS 0x02 // How many points detected (3:0). 1-5 is valid. | 
| JackB | 0:19406ff51058 | 44 | |
| JackB | 0:19406ff51058 | 45 | #define FT5206_TOUCH1_XH 0x03 // Event Flag, Touch X Position | 
| JackB | 0:19406ff51058 | 46 | #define FT5206_TOUCH1_XL 0x04 | 
| JackB | 0:19406ff51058 | 47 | #define FT5206_TOUCH1_YH 0x05 // Touch ID, Touch Y Position | 
| JackB | 0:19406ff51058 | 48 | #define FT5206_TOUCH1_YL 0x06 | 
| JackB | 0:19406ff51058 | 49 | |
| JackB | 0:19406ff51058 | 50 | #define FT5206_TOUCH2_XH 0x09 // Event Flag, Touch X Position | 
| JackB | 0:19406ff51058 | 51 | #define FT5206_TOUCH2_XL 0x0a | 
| JackB | 0:19406ff51058 | 52 | #define FT5206_TOUCH2_YH 0x0b // Touch ID, Touch Y Position | 
| JackB | 0:19406ff51058 | 53 | #define FT5206_TOUCH2_YL 0x0c | 
| JackB | 0:19406ff51058 | 54 | |
| JackB | 0:19406ff51058 | 55 | #define FT5206_TOUCH3_XH 0x0f // Event Flag, Touch X Position | 
| JackB | 0:19406ff51058 | 56 | #define FT5206_TOUCH3_XL 0x10 | 
| JackB | 0:19406ff51058 | 57 | #define FT5206_TOUCH3_YH 0x11 // Touch ID, Touch Y Position | 
| JackB | 0:19406ff51058 | 58 | #define FT5206_TOUCH3_YL 0x12 | 
| JackB | 0:19406ff51058 | 59 | |
| JackB | 0:19406ff51058 | 60 | #define FT5206_TOUCH4_XH 0x15 // Event Flag, Touch X Position | 
| JackB | 0:19406ff51058 | 61 | #define FT5206_TOUCH4_XL 0x16 | 
| JackB | 0:19406ff51058 | 62 | #define FT5206_TOUCH4_YH 0x17 // Touch ID, Touch Y Position | 
| JackB | 0:19406ff51058 | 63 | #define FT5206_TOUCH4_YL 0x18 | 
| JackB | 0:19406ff51058 | 64 | |
| JackB | 0:19406ff51058 | 65 | #define FT5206_TOUCH5_XH 0x1b // Event Flag, Touch X Position | 
| JackB | 0:19406ff51058 | 66 | #define FT5206_TOUCH5_XL 0x1c | 
| JackB | 0:19406ff51058 | 67 | #define FT5206_TOUCH5_YH 0x1d // Touch ID, Touch Y Position | 
| JackB | 0:19406ff51058 | 68 | #define FT5206_TOUCH5_YL 0x1e | 
| JackB | 0:19406ff51058 | 69 | |
| JackB | 0:19406ff51058 | 70 | #define FT5206_ID_G_THGROUP 0x80 // Valid touching detect threshold | 
| JackB | 0:19406ff51058 | 71 | #define FT5206_ID_G_THPEAK 0x81 // Valid touching peak detect threshold | 
| JackB | 0:19406ff51058 | 72 | #define FT5206_ID_G_THCAL 0x82 // The threshold when calculating the focus of touching | 
| JackB | 0:19406ff51058 | 73 | #define FT5206_ID_G_THWATER 0x83 // The threshold when there is surface water | 
| JackB | 0:19406ff51058 | 74 | #define FT5206_ID_G_THTEMP 0x84 // The threshold of temperature compensation | 
| JackB | 0:19406ff51058 | 75 | #define FT5206_ID_G_CTRL 0x86 // Power control mode | 
| JackB | 0:19406ff51058 | 76 | #define FT5206_ID_G_TIME_ENTER_MONITOR 0x87 // The timer of entering monitor status | 
| JackB | 0:19406ff51058 | 77 | #define FT5206_ID_G_PERIODACTIVE 0x88 // Period Active | 
| JackB | 0:19406ff51058 | 78 | #define FT5206_ID_G_PERIODMONITOR 0x89 // The timer of entering idle while in monitor status | 
| JackB | 0:19406ff51058 | 79 | #define FT5206_ID_G_AUTO_CLB_MODE 0xA0 // Auto calibration mode | 
| JackB | 0:19406ff51058 | 80 | |
| JackB | 0:19406ff51058 | 81 | #define FT5206_TOUCH_LIB_VERSION_H 0xA1 // Firmware Library Version H byte | 
| JackB | 0:19406ff51058 | 82 | #define FT5206_TOUCH_LIB_VERSION_L 0xA2 // Firmware Library Version L byte | 
| JackB | 0:19406ff51058 | 83 | #define FT5206_ID_G_CIPHER 0xA3 // Chip vendor ID | 
| JackB | 0:19406ff51058 | 84 | #define FT5206_G_MODE 0xA4 // The interrupt status to host | 
| JackB | 0:19406ff51058 | 85 | #define FT5206_ID_G_PMODE 0xA5 // Power Consume Mode | 
| JackB | 0:19406ff51058 | 86 | #define FT5206_FIRMID 0xA6 // Firmware ID | 
| JackB | 0:19406ff51058 | 87 | #define FT5206_ID_G_STATE 0xA7 // Running State | 
| JackB | 0:19406ff51058 | 88 | #define FT5206_ID_G_FT5201ID 0xA8 // CTPM Vendor ID | 
| JackB | 0:19406ff51058 | 89 | #define FT5206_ID_G_ERR 0xA9 // Error Code | 
| JackB | 0:19406ff51058 | 90 | #define FT5206_ID_G_CLB 0xAA // Configure TP module during calibration in Test Mode | 
| JackB | 0:19406ff51058 | 91 | #define FT5206_ID_G_B_AREA_TH 0xAE // The threshold of big area | 
| JackB | 0:19406ff51058 | 92 | #define FT5206_LOG_MSG_CNT 0xFE // The log MSG count | 
| JackB | 0:19406ff51058 | 93 | #define FT5206_LOG_CUR_CHA 0xFF // Current character of log message, will point to the next | 
| JackB | 0:19406ff51058 | 94 | // character when one character is read. | 
| JackB | 0:19406ff51058 | 95 | |
| JackB | 0:19406ff51058 | 96 | #define FT5206_GEST_ID_MOVE_UP 0x10 | 
| JackB | 0:19406ff51058 | 97 | #define FT5206_GEST_ID_MOVE_LEFT 0x14 | 
| JackB | 0:19406ff51058 | 98 | #define FT5206_GEST_ID_MOVE_DOWN 0x18 | 
| JackB | 0:19406ff51058 | 99 | #define FT5206_GEST_ID_MOVE_RIGHT 0x1c | 
| JackB | 0:19406ff51058 | 100 | #define FT5206_GEST_ID_ZOOM_IN 0x48 | 
| JackB | 0:19406ff51058 | 101 | #define FT5206_GEST_ID_ZOOM_OUT 0x49 | 
| JackB | 0:19406ff51058 | 102 | #define FT5206_GEST_ID_NO_GESTURE 0x00 | 
| JackB | 0:19406ff51058 | 103 | |
| JackB | 0:19406ff51058 | 104 | #define FT5206_EVENT_FLAG_PUT_DOWN 0x00 | 
| JackB | 0:19406ff51058 | 105 | #define FT5206_EVENT_FLAG_PUT_UP 0x01 | 
| JackB | 0:19406ff51058 | 106 | #define FT5206_EVENT_FLAG_CONTACT 0x02 | 
| JackB | 0:19406ff51058 | 107 | #define FT5206_EVENT_FLAG_RESERVED 0x03 | 
| JackB | 0:19406ff51058 | 108 | |
| JackB | 0:19406ff51058 | 109 | #define FT5206_ID_G_POLLING_MODE 0x00 | 
| JackB | 0:19406ff51058 | 110 | #define FT5206_ID_G_TRIGGER_MODE 0x01 | 
| JackB | 0:19406ff51058 | 111 | |
| JackB | 0:19406ff51058 | 112 | #define FT5206_ID_G_PMODE_ACTIVE 0x00 | 
| JackB | 0:19406ff51058 | 113 | #define FT5206_ID_G_PMODE_MONITOR 0x01 | 
| JackB | 0:19406ff51058 | 114 | #define FT5206_ID_G_PMODE_HIBERNATE 0x03 | 
| JackB | 0:19406ff51058 | 115 | |
| JackB | 0:19406ff51058 | 116 | #define FT5206_ID_G_STATE_CONFIGURE 0x00 | 
| JackB | 0:19406ff51058 | 117 | #define FT5206_ID_G_STATE_WORK 0x01 | 
| JackB | 0:19406ff51058 | 118 | #define FT5206_ID_G_STATE_CALIBRATION 0x02 | 
| JackB | 0:19406ff51058 | 119 | #define FT5206_ID_G_STATE_FACTORY 0x03 | 
| JackB | 0:19406ff51058 | 120 | #define FT5206_ID_G_STATE_AUTO_CALIBRATION 0x04 | 
| JackB | 0:19406ff51058 | 121 | |
| JackB | 0:19406ff51058 | 122 | class FT5206 | 
| JackB | 0:19406ff51058 | 123 | { | 
| JackB | 0:19406ff51058 | 124 | public: | 
| JackB | 0:19406ff51058 | 125 | FT5206(PinName sda, PinName scl, PinName interrupt); | 
| JackB | 0:19406ff51058 | 126 | |
| JackB | 0:19406ff51058 | 127 | bool init(); | 
| JackB | 0:19406ff51058 | 128 | |
| JackB | 0:19406ff51058 | 129 | uint8_t getTouchPositions(void); | 
| JackB | 0:19406ff51058 | 130 | void init(void); | 
| JackB | 0:19406ff51058 | 131 | void intPanelTouched(void); | 
| JackB | 0:19406ff51058 | 132 | bool getPanelTouched(void); | 
| JackB | 0:19406ff51058 | 133 | |
| JackB | 0:19406ff51058 | 134 | uint8_t numberOfTouchPoints; | 
| JackB | 0:19406ff51058 | 135 | uint16_t touchCoordinatesX[5]; | 
| JackB | 0:19406ff51058 | 136 | uint16_t touchCoordinatesY[5]; | 
| JackB | 0:19406ff51058 | 137 | |
| JackB | 0:19406ff51058 | 138 | private: | 
| JackB | 0:19406ff51058 | 139 | InterruptIn m_interrupt; | 
| JackB | 0:19406ff51058 | 140 | |
| JackB | 0:19406ff51058 | 141 | I2C m_i2c; | 
| JackB | 0:19406ff51058 | 142 | int m_addr; | 
| JackB | 0:19406ff51058 | 143 | char data[2]; | 
| JackB | 0:19406ff51058 | 144 | |
| JackB | 0:19406ff51058 | 145 | bool debug_output_enabled; | 
| JackB | 0:19406ff51058 | 146 | bool panelTouched; | 
| JackB | 0:19406ff51058 | 147 | void writeRegister8(char reg, char val); | 
| JackB | 0:19406ff51058 | 148 | char readRegister8(char reg); | 
| JackB | 0:19406ff51058 | 149 | |
| JackB | 0:19406ff51058 | 150 | }; | 
| JackB | 0:19406ff51058 | 151 | |
| JackB | 0:19406ff51058 | 152 | #endif |