Kapacitivt tangentbord med 16 pads

Konfigurationen för detta exempel är att bygla K2, (använd 16 tangenter)

Fungerar även med Multi-key TP3 (K3) TP4 (K4)

Klicka på bilden för att visa den större.

Detta schema stämmer nästan, trim kondingar är bytta till fasta,

I2C- inteface har ingen breakout och kan inte använas via stift.

Den gula linjen kommer från UNO programmet och är CLK och den blå är SDO svaret från tangentbordet i detta fall tryckte jag på 'ETTAN'

Tryckter på 'Sjuan' Värdet läses av efter tiden F_SCL_L och innan tiden F_SCL_H

//2-wires serial interface mode

//16 KEYS OR 8 KEYS TOUCH PAD

//För 16 tagenter mode ska TP2 (K2)

//Detta exempel fungerar även med Multi-key TP3 (K3) TP4 (K4)

//Detta program är skapat av Per-Anders Hult.

//Denna skript är publicerad för det kit och komponenter som vi

//säljer på Tradera under namnet pc_h

//Denna skript får av andra personer endast användas i privat bruk.

//

//Koppling:

//Arduino 2 till SCL

//Arduino 3 till SDO

//

//Exempel från serie monitorn:

//Tryckte ner: 12

//Slappte: 12

//Tryckte ner: 11

//Slappte: 11

//Tider i ms

#define Tout 5 //Kan vara ner till 2ms

//Tider i us

#define F_SCL_H 100

#define F_SCL_L 100

#define Tw 10

//Pinnar

//SerialCLock

#define pinSCL 2

//SerialDataOutput

#define pinSDO 3

void setup(){

Serial.begin(9600);

pinMode(pinSCL, OUTPUT);

digitalWrite(SCL, HIGH);

pinMode(pinSDO, INPUT);

}

void loop(){

ReadKeyes();

//delay(100);

}

void OnKeyDown(int num){

Serial.print("Tryckte ner: ");

Serial.println(num);

}

void OnKeyUp(int num){

Serial.print("Slappte: ");

Serial.println(num);

}

byte Status8 = 255;

byte Status16 = 255;

byte Last8 = 255;

byte Last16 = 255;

void ReadKeyes(){

Last8 = Status8;

Last16 = Status16;

//device can wait that TTP229 outputs the data valid (DV) signal by the SDO pin.

delayMicroseconds(Tw);

for (int i=0; i <= 7; i++){

digitalWrite(pinSCL, LOW);

delayMicroseconds(F_SCL_L);

bitWrite(Status8, i, digitalRead(pinSDO));

digitalWrite(pinSCL, HIGH);

delayMicroseconds(F_SCL_H);

}

for (int i=0; i <= 7; i++){

digitalWrite(pinSCL, LOW);

delayMicroseconds(F_SCL_L);

bitWrite(Status16, i, digitalRead(pinSDO));

digitalWrite(pinSCL, HIGH);

delayMicroseconds(F_SCL_H);

}

for (int i=0; i <= 7; i++){

if(bitRead(Status8, i) < bitRead(Last8, i)) {

OnKeyDown(i + 1);

}

if(bitRead(Status8, i) > bitRead(Last8, i)) {

OnKeyUp(i + 1);

}

}

for (int i=0; i <= 7; i++){

if(bitRead(Status16, i) < bitRead(Last16, i)) {

OnKeyDown(i + 9);

}

if(bitRead(Status16, i) > bitRead(Last16, i)) {

OnKeyUp(i + 9);

}

}

delay(Tout);

}