TUTORIAL TECLADO CAPACITIVO DE 16 TECLAS TTP229

 Paso # 1: Descripción

Este teclado de 16 botones está basado en el sensor capacitivo TTP229. Éste es usado como una buena alternativa para los teclados mecánicos existentes, proporcionando más durabilidad en condiciones de trabajo pesado. El teclado se puede configurar como 8 botones o 16.

Las salidas del 1-8 están mapeadas directamente al conector del teclado. Cuando se requiera conectarse los 16 botones se realizará leyendo por medio de una interface serial de 2 vías. Esto se explicará a continuación. Una vez conectado el hardware y descargando el código al Arduino, se puede pulsar los botones y observar los resultados en el Serial Monitor del software Arduino.

Paso 2: Hardware Conexión 8 botones

Esta configuración aplica si se requiere utilizar los botones del 1-8. Esta configuración es sencilla. Solamente se conectan los 10 pines del header del Teclado hacia el Arduino como se muestra a continuación.



 

Paso 3: Software (Código 8 Botones)

boolean yaImprimi = false;
void setup() {
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
pinMode(6, INPUT);
pinMode(7, INPUT);
pinMode(8, INPUT);
pinMode(9, INPUT);

Serial.begin(9600);
}

void loop(){

for(int i = 2; i <= 9; i++){
if(digitalRead(i)){ //detectar si ya se presionó una tecla
if(!yaImprimi){
Serial.print("Se presiono el boton: ");
Serial.println(i - 1);
}
}
}

yaImprimi = false;
for(int j = 2; j <= 9; j++){
if(digitalRead(j)){
yaImprimi = true;
}
}
delay(100);
}

Paso 4: Hardware Conexión 16 botones

Esta configuración aplica si se requiere utilizar los botones del 1-16. Primeramente tiene que saber que para esta configuración se realizará por medio de una interface serial de 2 vías a través de SCL y SDO.

Esto es lo que sucede: El Arduino le pregunta al Teclado si se presionó un botón a través de su reloj interno con el pin SCL (1).  El Teclado lo recibe (2). Si se da cuenta que hubo un cambio en el valor capacitivo de algún botón inmediatamente el Teclado manda una señal al Arduino a través del pin SDO (3). El Arduino recibe el # del botón presionado (4). Esto se puede ver en la gráfica siguiente.

 

 

A continuación la conexión entre el Arduino y el Teclado. Cablear como se muestra a continuación y además hacer un enlace en el Teclado mostrado en naranja para configurarlo como 16 botones. Para hacer esto es necesario soldar un cable pequeño para unir estas 2 terminales.

 

 

Paso 5: Software (Código de 16 Botones)

/* Define the digital pins used for the clock and data */
#define SCL_PIN 8
#define SDO_PIN 9

/* Used to store the key state */
byte Key;

void setup()
{
/* Initialize the serial interface */
Serial.begin(9600);
/* Configure the clock and data pins */
pinMode(SCL_PIN, OUTPUT);
pinMode(SDO_PIN, INPUT);
}

/* Main program */
void loop()
{
/* Read the current state of the keypad */
Key = Read_Keypad();
/* If a key has been pressed output it to the serial port */
if (Key)
Serial.println(Key);
/* Wait a little before reading again
so not to flood the serial port*/
delay(200);
}
/* Read the state of the keypad */
byte Read_Keypad(void)
{
byte Count;
byte Key_State = 0;
/* Pulse the clock pin 16 times (one for each key of the keypad)
and read the state of the data pin on each pulse */
for(Count = 1; Count <= 16; Count++)
{
digitalWrite(SCL_PIN, LOW);

/* If the data pin is low (active low mode) then store the
current key number */
if (!digitalRead(SDO_PIN))
Key_State = Count;
digitalWrite(SCL_PIN, HIGH);
}
return Key_State;
}

4 thoughts to “TUTORIAL TECLADO CAPACITIVO DE 16 TECLAS TTP229”

  1. se puede utilizar este modula para comandar unos reles ej(modulo+arduino al presionar un canal energiza un rele al presionar el mismo canal se desenerguisa el mismo rele ) se puede hacer eso ?

    1. Claro que sí se puede. Tendrías que guardar el estado de cada relay y hacer una función que simplemente los cambie dependiendo del botón presionado.

      saludos

  2. Hola, soy novato en el arduino, mi duda es:
    byte Read_Keypad(void)
    return Key_State;
    en el código anterior,return Key_State se le asigna a byte y byte se le asigna a key despues de ser llamada por Key = Read_Keypad(); ?

    1. Hola!

      Read_Keypad(void) es una función. Cuando esta función termina
      regresa una variable del tipo “byte” (un byte puede contener cualquier número desde 0 hasta 255).

      En la línea Key = Read_Keypad(); lo que sucede es que se asigna a la variable “Key” (que también es una variable tipo byte) el valor que regresa la función. En este caso es un número del 1 al 16 que indica qué tecla se presionó.

      Te recomiendamos leer la documentación oficial de Arduino en https://www.arduino.cc/en/Reference/FunctionDeclaration el detalle es que está en inglés, pero Google Translate puede ayudar 😛

      Si tienes más dudas nos lo puedes hacer saber. Saludos!

Comments are closed.