123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- #include "CST816D.h"
- CST816D::CST816D(int8_t sda_pin, int8_t scl_pin, int8_t rst_pin, int8_t int_pin)
- {
- _sda = sda_pin;
- _scl = scl_pin;
- _rst = rst_pin;
- _int = int_pin;
- }
- void CST816D::begin(void)
- {
- // Initialize I2C
- if (_sda != -1 && _scl != -1)
- {
- Wire.begin(_sda, _scl);
- }
- else
- {
- Wire.begin();
- }
- // Int Pin Configuration
- if (_int != -1)
- {
- pinMode(_int, OUTPUT);
- digitalWrite(_int, HIGH); //高电平
- delay(1);
- digitalWrite(_int, LOW); //低电平
- delay(1);
- }
- // Reset Pin Configuration
- if (_rst != -1)
- {
- pinMode(_rst, OUTPUT);
- digitalWrite(_rst, LOW);
- delay(10);
- digitalWrite(_rst, HIGH);
- delay(300);
- }
- // Initialize Touch
- i2c_write(0xFE, 0XFF); //禁止自动进入低功耗模式。
- }
- bool CST816D::getTouch(uint16_t *x, uint16_t *y, uint8_t *gesture)
- {
- bool FingerIndex = false;
- FingerIndex = (bool)i2c_read(0x02);
- *gesture = i2c_read(0x01);
- if (!(*gesture == SlideUp || *gesture == SlideDown))
- {
- *gesture = None;
- }
- uint8_t data[4];
- i2c_read_continuous(0x03,data,4);
- *x = ((data[0] & 0x0f) << 8) | data[1];
- *y = ((data[2] & 0x0f) << 8) | data[3];
- // *x=240-*x;
- return FingerIndex;
- }
- uint8_t CST816D::i2c_read(uint8_t addr)
- {
- uint8_t rdData;
- uint8_t rdDataCount;
- do
- {
- Wire.beginTransmission(I2C_ADDR_CST816D);
- Wire.write(addr);
- Wire.endTransmission(false); // Restart
- rdDataCount = Wire.requestFrom(I2C_ADDR_CST816D, 1);
- } while (rdDataCount == 0);
- while (Wire.available())
- {
- rdData = Wire.read();
- }
- return rdData;
- }
- uint8_t CST816D::i2c_read_continuous(uint8_t addr, uint8_t *data, uint32_t length)
- {
- Wire.beginTransmission(I2C_ADDR_CST816D);
- Wire.write(addr);
- if ( Wire.endTransmission(true))return -1;
- Wire.requestFrom(I2C_ADDR_CST816D, length);
- for (int i = 0; i < length; i++) {
- *data++ = Wire.read();
- }
- return 0;
- }
- void CST816D::i2c_write(uint8_t addr, uint8_t data)
- {
- Wire.beginTransmission(I2C_ADDR_CST816D);
- Wire.write(addr);
- Wire.write(data);
- Wire.endTransmission();
- }
- uint8_t CST816D::i2c_write_continuous(uint8_t addr, const uint8_t *data, uint32_t length)
- {
- Wire.beginTransmission(I2C_ADDR_CST816D);
- Wire.write(addr);
- for (int i = 0; i < length; i++) {
- Wire.write(*data++);
- }
- if ( Wire.endTransmission(true))return -1;
- return 0;
- }
|