domingo, 10 de janeiro de 2016

Tutorial Teclado Touch TTP229 Arduino

Olá amigos, imagino que já tenham revirado a internet inteira a procura da programação do Teclado Touch TTP229 e até agora nada, pelo menos não em português, para adiantar, eu posso ajudá-los, nada que duas soldas e 49 linhas de linhagem C não resolva. Ou mesmo você que está usando aquele velho teclado matricial membrana que ocupa quase metade das portas do seu Arduino e está em dúvida se deve dar um passo adiante para o teclado Touch, já que ele utiliza apenas 2 portas do seu Arduino e não no mínimo 7, fora que ele é um saco, pois na maioria das vezes é necessário que se aperte a tecla mais de uma vez para fazer a leitura. Se tem uma coisas que vocês não devem temer é as novas tecnologias. Chega de enrolação e vamos ao que interessa.
Para utilizar essa programação é necessário que você faça duas soldas no seu teclado, na figura abaixo está destacado em vermelho os dois pontos.

Agora que a solda está pronta, é só fazerem as seguintes ligações:

-VCC > 5Volts
-GND > GND
-SCL > D2 (Porta digital 2 do Arduino)
-SDO > D3 (Porta digital 3 do Arduino)

Lembrando que NÃO estamos utilizando o protocolo de comunicação I2C.                                                                  

Obs: O teclado deve ficar sobre uma superfície com baixíssima umidade, qualquer coisa que esteja úmida e toque por baixo da placa, ela reconhece.






Logo abaixo o código, copiem e colem, lembrando que você visualizará as tecladas pressionadas pelo Monitor Serial do seu software Arduino.

#include <util/atomic.h>

#define CLR(x,y) (x&=(~(1<<y)))
#define SET(x,y) (x|=(1<<y))

#define clock_Pin 2
#define sdo_Pin 3

// Touchpad value
volatile uint16_t touchVal;  // var for ISR access
uint16_t touchValc;          // copy var for main loop

void setup() {
  Serial.begin(9600);
  pinMode(clock_Pin, OUTPUT);
  pinMode(sdo_Pin, INPUT);
  // set up INT1 on digital pin 3
  EICRA = (1 << ISC11) | (1 << ISC10);  // external INT1 on rising edge
  EIMSK = (1 << INT1);  // External Interrupt Request 1 Enable
}

void loop() {
  ATOMIC_BLOCK(ATOMIC_FORCEON) {
    touchValc = touchVal;
  }
  if (touchValc) {
    Serial.print(touchValc, DEC);
    for (byte b=0; b<=15; b++) {
      if ((touchValc >> b) & 1) {
        Serial.print('\t'); Serial.print("bit "); Serial.print(b);
        Serial.print('\t'); Serial.print("pad "); Serial.print(b+1);
      }
    }
    Serial.println();
  }
}

ISR(INT1_vect) {
  touchVal = 0;
  delayMicroseconds(100);
  for (byte i=0; i<=15; i++) {
    SET(PORTD, clock_Pin);
    delayMicroseconds(50);
    touchVal |= (digitalRead(sdo_Pin) << i);
    CLR(PORTD, clock_Pin);
    delayMicroseconds(50);
  }
}

Quem fez esta programação foi o Steve Stover, então os créditos são todos dele, quem quiser a postagem original é só clicar aqui.

Acredito que provavelmente vocês compraram este teclado para utilizar junto com um Display 16x2 ou 16x4, a notícia é que para isso acontecer, o código deve ser alterado, se for um cara leigo no assunto, já vou adiantado, terá um minucioso trabalho pela frente, ainda mais se for utilizar o teclado para digitar senhas. A notícia é que já tenho este código pronto, é só clicar aqui.

Muito obrigado e divirtam-se! 

Um comentário: