Atmel AT42QT1070 Seven-channel QTouch® Touch Sensor IC
QT1070.h@1:324c2c093ab8, 2018-06-28 (annotated)
- Committer:
- mederic
- Date:
- Thu Jun 28 08:08:14 2018 +0000
- Revision:
- 1:324c2c093ab8
- Parent:
- 0:cdb98fa5056a
replace "x%=X_MAX;" by "if(x>X_MAX)x=X_MAX;"
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mederic | 0:cdb98fa5056a | 1 | #ifndef QT1070_H |
mederic | 0:cdb98fa5056a | 2 | #define QT1070_H |
mederic | 0:cdb98fa5056a | 3 | |
mederic | 0:cdb98fa5056a | 4 | #include "mbed.h" |
mederic | 0:cdb98fa5056a | 5 | |
mederic | 0:cdb98fa5056a | 6 | /** AT42QT1070 class |
mederic | 0:cdb98fa5056a | 7 | * Seven-channel QTouch® Touch Sensor Driver |
mederic | 0:cdb98fa5056a | 8 | * |
mederic | 0:cdb98fa5056a | 9 | * Example: |
mederic | 0:cdb98fa5056a | 10 | * @code |
mederic | 0:cdb98fa5056a | 11 | * #include "mbed.h" |
mederic | 0:cdb98fa5056a | 12 | * #include "QT1070.h" |
mederic | 0:cdb98fa5056a | 13 | * |
mederic | 0:cdb98fa5056a | 14 | * DigitalOut led(LED1); |
mederic | 0:cdb98fa5056a | 15 | * I2C i2c(PB_7,PB_6); |
mederic | 0:cdb98fa5056a | 16 | * QT1070 touch(&i2c, PA_11); |
mederic | 0:cdb98fa5056a | 17 | * |
mederic | 0:cdb98fa5056a | 18 | * int main() { |
mederic | 0:cdb98fa5056a | 19 | * touch.guard(0); |
mederic | 0:cdb98fa5056a | 20 | * touch.aksAve(5,0,0); // Disable key5 AVE=0 |
mederic | 0:cdb98fa5056a | 21 | * touch.aksAve(6,0,0); // Disable key6 AVE=0 |
mederic | 0:cdb98fa5056a | 22 | * |
mederic | 0:cdb98fa5056a | 23 | * while(1) { |
mederic | 0:cdb98fa5056a | 24 | * if(touch.change()){ |
mederic | 0:cdb98fa5056a | 25 | * led=!led; |
mederic | 0:cdb98fa5056a | 26 | * printf("Key %d!!!!\r\n", touch.key()); |
mederic | 0:cdb98fa5056a | 27 | * } |
mederic | 0:cdb98fa5056a | 28 | * } |
mederic | 0:cdb98fa5056a | 29 | * } |
mederic | 0:cdb98fa5056a | 30 | * @endcode |
mederic | 0:cdb98fa5056a | 31 | */ |
mederic | 0:cdb98fa5056a | 32 | |
mederic | 0:cdb98fa5056a | 33 | class QT1070{ |
mederic | 0:cdb98fa5056a | 34 | public: |
mederic | 0:cdb98fa5056a | 35 | enum state{ |
mederic | 0:cdb98fa5056a | 36 | I2C_ADDR = 0x36, //I2C adress |
mederic | 0:cdb98fa5056a | 37 | KEY_NUM = 0x07, //Number of channel |
mederic | 1:324c2c093ab8 | 38 | AVEMAX = 31, //Averaging maximum |
mederic | 0:cdb98fa5056a | 39 | AKSMAX = 3 //Group maximum |
mederic | 0:cdb98fa5056a | 40 | }; |
mederic | 0:cdb98fa5056a | 41 | |
mederic | 0:cdb98fa5056a | 42 | //Register map |
mederic | 0:cdb98fa5056a | 43 | enum reg{ |
mederic | 0:cdb98fa5056a | 44 | REG_CHIPID = 0, |
mederic | 0:cdb98fa5056a | 45 | REG_FIRMW = 1, |
mederic | 0:cdb98fa5056a | 46 | REG_STATUS = 2, |
mederic | 0:cdb98fa5056a | 47 | REG_KEYSTAT = 3, |
mederic | 0:cdb98fa5056a | 48 | REG_KEYSIG0 = 4, |
mederic | 0:cdb98fa5056a | 49 | REG_REFDAT0 = 18, |
mederic | 0:cdb98fa5056a | 50 | REG_NTHR0 = 32, |
mederic | 0:cdb98fa5056a | 51 | REG_AVEAKS0 = 39, |
mederic | 0:cdb98fa5056a | 52 | REG_DI0 = 46, |
mederic | 0:cdb98fa5056a | 53 | REG_FOMOGRD = 53, |
mederic | 0:cdb98fa5056a | 54 | REG_LOWPWR = 54, |
mederic | 0:cdb98fa5056a | 55 | REG_MAXOND = 55, |
mederic | 0:cdb98fa5056a | 56 | REG_CALIB = 56, |
mederic | 0:cdb98fa5056a | 57 | REG_RESET = 57 |
mederic | 0:cdb98fa5056a | 58 | }; |
mederic | 0:cdb98fa5056a | 59 | |
mederic | 0:cdb98fa5056a | 60 | /** Create PCA9633 instance + config method |
mederic | 0:cdb98fa5056a | 61 | * @param *i2c initialized I2C bus to use |
mederic | 0:cdb98fa5056a | 62 | * @param change PinName if connected |
mederic | 0:cdb98fa5056a | 63 | */ |
mederic | 0:cdb98fa5056a | 64 | QT1070(I2C *i2c, PinName change=NC); |
mederic | 0:cdb98fa5056a | 65 | |
mederic | 0:cdb98fa5056a | 66 | /** Get key reg. |
mederic | 0:cdb98fa5056a | 67 | * @rerun 0 if not, 2^key if hit |
mederic | 0:cdb98fa5056a | 68 | */ |
mederic | 0:cdb98fa5056a | 69 | char key(void); |
mederic | 0:cdb98fa5056a | 70 | |
mederic | 0:cdb98fa5056a | 71 | /** Check a change in status |
mederic | 0:cdb98fa5056a | 72 | * @return true in change occurs |
mederic | 0:cdb98fa5056a | 73 | */ |
mederic | 0:cdb98fa5056a | 74 | bool change(void); |
mederic | 0:cdb98fa5056a | 75 | |
mederic | 0:cdb98fa5056a | 76 | /** Get signal. |
mederic | 0:cdb98fa5056a | 77 | * @param key <0,6> key number |
mederic | 0:cdb98fa5056a | 78 | */ |
mederic | 0:cdb98fa5056a | 79 | unsigned short signal(char key); |
mederic | 0:cdb98fa5056a | 80 | |
mederic | 0:cdb98fa5056a | 81 | /** Get reference. |
mederic | 0:cdb98fa5056a | 82 | * @param key <0,6> key number |
mederic | 0:cdb98fa5056a | 83 | */ |
mederic | 0:cdb98fa5056a | 84 | unsigned short ref(char key); |
mederic | 0:cdb98fa5056a | 85 | |
mederic | 0:cdb98fa5056a | 86 | /** Set/Get negative threshold. |
mederic | 0:cdb98fa5056a | 87 | * @param key <0,6> key number |
mederic | 0:cdb98fa5056a | 88 | * @param val <1,255> (Getter if 0) |
mederic | 0:cdb98fa5056a | 89 | */ |
mederic | 0:cdb98fa5056a | 90 | char nthresh(char key, char val=0); |
mederic | 0:cdb98fa5056a | 91 | |
mederic | 0:cdb98fa5056a | 92 | /** Set/Get adjacent supresssor group and averaging. |
mederic | 0:cdb98fa5056a | 93 | * @param key <0,6> key number |
mederic | 0:cdb98fa5056a | 94 | * @param group <0,3> adjacent key suppressor group of the key |
mederic | 0:cdb98fa5056a | 95 | * @param ave <1,31> averaged signal value |
mederic | 0:cdb98fa5056a | 96 | */ |
mederic | 0:cdb98fa5056a | 97 | char aksAve(char key, char group=1, char ave=8); |
mederic | 0:cdb98fa5056a | 98 | |
mederic | 0:cdb98fa5056a | 99 | /** set DI. |
mederic | 0:cdb98fa5056a | 100 | * @param key <0,6> key number |
mederic | 0:cdb98fa5056a | 101 | * @param val <2,255> how measurement before confirm key hit |
mederic | 0:cdb98fa5056a | 102 | */ |
mederic | 0:cdb98fa5056a | 103 | void detectInt(char key, char val); |
mederic | 0:cdb98fa5056a | 104 | |
mederic | 0:cdb98fa5056a | 105 | /** Set fastout and Maxcal. |
mederic | 0:cdb98fa5056a | 106 | * @param fo set the digital integrator of 4 for all channel |
mederic | 0:cdb98fa5056a | 107 | * @param maxcal if set only the key timeout was recalibrated |
mederic | 0:cdb98fa5056a | 108 | */ |
mederic | 0:cdb98fa5056a | 109 | void foMaxCal(bool fo, bool maxcal=false); |
mederic | 0:cdb98fa5056a | 110 | |
mederic | 0:cdb98fa5056a | 111 | /** Set a key to be guard channel (priority filtering). |
mederic | 0:cdb98fa5056a | 112 | * @param key <0,6> key number |
mederic | 0:cdb98fa5056a | 113 | */ |
mederic | 0:cdb98fa5056a | 114 | void guard(char key); |
mederic | 0:cdb98fa5056a | 115 | |
mederic | 0:cdb98fa5056a | 116 | /** Set interval between key measurment to reduce pwr. |
mederic | 0:cdb98fa5056a | 117 | * @param ms <8,2040>[ms] in step of 8ms |
mederic | 0:cdb98fa5056a | 118 | */ |
mederic | 0:cdb98fa5056a | 119 | void lowpwr(unsigned short ms); |
mederic | 0:cdb98fa5056a | 120 | |
mederic | 0:cdb98fa5056a | 121 | /** Set how long any key can be touch before it recalibrates itself. |
mederic | 0:cdb98fa5056a | 122 | * @param ms <0,40800>[ms] in step of 160ms |
mederic | 0:cdb98fa5056a | 123 | */ |
mederic | 0:cdb98fa5056a | 124 | void maxOnDuration(unsigned short ms); |
mederic | 0:cdb98fa5056a | 125 | |
mederic | 0:cdb98fa5056a | 126 | /** Trig a calibration cycle |
mederic | 0:cdb98fa5056a | 127 | */ |
mederic | 0:cdb98fa5056a | 128 | void calibrate(void); |
mederic | 0:cdb98fa5056a | 129 | |
mederic | 0:cdb98fa5056a | 130 | /** Trig a RESET |
mederic | 0:cdb98fa5056a | 131 | */ |
mederic | 0:cdb98fa5056a | 132 | void reset(void); |
mederic | 0:cdb98fa5056a | 133 | |
mederic | 0:cdb98fa5056a | 134 | protected: |
mederic | 0:cdb98fa5056a | 135 | void write(char reg, char data); |
mederic | 0:cdb98fa5056a | 136 | void writeW(char reg, unsigned short data); |
mederic | 0:cdb98fa5056a | 137 | char read(char reg); |
mederic | 0:cdb98fa5056a | 138 | unsigned short readW(char reg); |
mederic | 0:cdb98fa5056a | 139 | |
mederic | 0:cdb98fa5056a | 140 | private: |
mederic | 0:cdb98fa5056a | 141 | I2C *_i2c; |
mederic | 0:cdb98fa5056a | 142 | DigitalIn _change; |
mederic | 0:cdb98fa5056a | 143 | }; |
mederic | 0:cdb98fa5056a | 144 | |
mederic | 0:cdb98fa5056a | 145 | #endif |