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);
}