Skip to content

Сенсорная клавиатура 16 клавиш

user edited this page Mar 6, 2020 · 1 revision

Capacitive Touch Key Pad 16 keys

Клавиатура Capacitive Touch Key Pad 16 keys (https://robotdyn.com/capacitive-touch-key-pad-16-keys.html) представляет из себя 16 сенсорных кнопок 4х4. Эта компактная недорогая клавиатура может подключаться к любому емкостному модулю. Является полнофункциональной сенсорной клавиатурой, которая может быть легко встраивается в профессиональную систему управления или в приложение микроконтроллера. Сенсорные панели имеют номера от 1 до 16 и могут маркироваться с помощью фломастера. В комплекте: плата и перемычка и провода FF длиной150 мм.

img

Подключение к плате Arduino

Рассмотрим подключение клавиатуры к плате Arduino. Для подключения будем использовать 16-клавишный емкостный сенсорный модуль 16 Keys Capacitive touch TTP229 I2C module (https://robotdyn.com/16-keys-capacitive-touch-ttp229-i2c-module.html), который подключается к микроконтроллеру по шине I2C.

imgПодключение согласно схема соединений:

img

Программное обеспечение

Для работы удобно использовать библиотеку TT_TouchKeypadTTP229, которую можно скачать по ссылке

https://github.com/TinkerYpsi/TT_TouchKeypadTTP229/archive/master.zip

Библиотеку необходимо скопировать в папку libraries Arduino IDE.

Данная библиотека использует стандартную библиотеку Wire.h, которую необходимо обязательно включать в скетч

#include <Wire.h>

#include <TT_TouchKeypadTTP229.h>

Скетч определения нажатой клавиши на клавиатуре

Напишем скетч для определения нажатых клавиш на сенсорной клавиатуре и вывода в последовательный порт. При написании скетча используем библиотеку TT_TouchKeypadTTP229. Содержимое скетча:

// подключение библиотек 
#include "Wire.h"
#include <TT_TouchKeypadTTP229.h>
// создание экземпляра
TT_TouchKeypadTTP229 touchpad;

void setup() {
   Serial.begin(9600);
}

 

void loop()  {
   byte aa,bb = 0;
   // получение данных из Capacitive touch TTP229 I2C module 
   touchpad.getKeys(&aa, &bb);
   // печать полученнух значений
   printByte(aa);
   printByte(bb);
   Serial.println();
   delay(1000);
}

// функция вывода байта
void printByte (byte bytePrint) {
   // проход по полученным битам
   for (unsigned int mask = 0x80; mask; mask >>= 1) {
​      if (mask & bytePrint) {
​         Serial.print('1');
​      }
​      else {
​         Serial.print('0');
​      }
   }
}

Загружаем скетч на плату Arduino, открываем монитор последовательного порта и смотрим вывод состояния клавиатуры по кнопком 1-16 (1 – нажата, 0 - отжата):

img

img

Написание скетча визуализации касаний клавиатуры на светодиодной матрице 8x8.

В качестве примера использования создадим проект визуализации на светодиодной матрице касаний клавиатуры .

Будем использовать следующие компоненты:

  • Плата Arduino UNO – 1;

  • Клавиатура Capacitive Touch Key Pad 16 keys – 1;

  • 16 Keys Capacitive touch TTP229 I2C module – 1;

  • Матрица светодиодная 8x8 – 1;

  • Провода FM – 9.

Схема подключения

Схема подключения компонентов:

img

img

Написание скетча

При программировании будем использовать библиотеку Max72xxPanel (http://arduino-kit.ru/scetches/arduino-Max72xxPanel-master.zip). Дополнительно необходимо установить и библиотеку Adafruit-GFX-Library, необходимую для вывода графических примитивов на дисплеи.

Каждой клавише соответствует квадрат 2x2 на экране матрицы. Координаты будем сохранять в массиве.

// массив соответствия места на дисплее
// клавишам клавиатуры
struct KOORD {
 int x;
 int y;
};

KOORD koords[][4]={{{0,0},{0,1},{1,0},{1,1}},
​          {{2,0},{2,1},{3,0},{3,1}},
​          {{4,0},{4,1},{5,0},{5,1}},
​          {{6,0},{6,1},{7,0},{7,1}},
​          
​          {{0,2},{0,3},{1,2},{1,3}},          
​          {{2,2},{2,3},{3,2},{3,3}},
​          {{4,2},{4,3},{5,2},{5,3}},
​          {{6,2},{6,3},{7,2},{7,3}},
     
​          {{0,4},{0,5},{1,4},{1,5}},          
​          {{2,4},{2,5},{3,4},{3,5}},
​          {{4,4},{4,5},{5,4},{5,5}},
​          {{6,4},{6,5},{7,4},{7,5}},
​          
​          {{0,6},{0,7},{1,6},{1,7}},          
​          {{2,6},{2,7},{3,6},{3,7}},
​          {{4,6},{4,7},{5,6},{5,7}},
​          {{6,6},{6,7},{7,6},{7,7}}          
};

После считывания состояния клавиатуры из модуля 16 Keys Capacitive touch TTP229 I2C, выводим квадраты, соответствующие нажатым клавишам. Содержимое скетча:

// подключение библиотек для TP229
#include "Wire.h"
#include <TT_TouchKeypadTTP229.h>
// создание экземпляра объекта
TT_TouchKeypadTTP229 touchpad;

// подключение библиотек для матрицы
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>
// пин CS
int pinCS = 8;
// количество матриц по-горизонтали
int numberOfHorizontal = 1; 
// количество матриц по-вертикали
int numberOfVertical = 1;
// создание экземпляра объекта
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontal, numberOfVertical); 

// массив соответствия места на дисплее
// клавишам клавиатуры
struct KOORD {
 int x;
 int y;
};
KOORD koords[][4]={{{0,0},{0,1},{1,0},{1,1}},
​          {{2,0},{2,1},{3,0},{3,1}},
​          {{4,0},{4,1},{5,0},{5,1}},
​          {{6,0},{6,1},{7,0},{7,1}},
       
​          {{0,2},{0,3},{1,2},{1,3}},          
​          {{2,2},{2,3},{3,2},{3,3}},
​          {{4,2},{4,3},{5,2},{5,3}},
​          {{6,2},{6,3},{7,2},{7,3}},
​          
​          {{0,4},{0,5},{1,4},{1,5}},          
​          {{2,4},{2,5},{3,4},{3,5}},
​          {{4,4},{4,5},{5,4},{5,5}},
​          {{6,4},{6,5},{7,4},{7,5}},
​          
​          {{0,6},{0,7},{1,6},{1,7}},          
​          {{2,6},{2,7},{3,6},{3,7}},
​          {{4,6},{4,7},{5,6},{5,7}},
​          {{6,6},{6,7},{7,6},{7,7}}          
};

void setup() {
  // яркость от 0 до 15
  matrix.setIntensity(6); 
}

void loop() {
  byte aa,bb = 0;
  unsigned int aabb;
  // получение данных из Capacitive touch TTP229 I2C module 
  touchpad.getKeys(&aa, &bb);
  // печать полученнух значений
  aabb=(aa<<8)+bb;
  printByte(aabb);
  // вывод на дисплей
  printMatrixAll(aabb);
  // пауза перед следующим запросом
  delay(500);
}

// функция вывода данных клавиатуры на матрицу
void printMatrixAll (unsigned int bytePrint) {
  // проход по полученным битам
  int i=0;
  for (unsigned int mask = 0x8000; mask; mask >>= 1) {
​    if (mask & bytePrint) {
​      printMatrixOne(i,1);
​    }
​    else {
​      printMatrixOne(i,0);
​    }
​    i++;
  }
  // вывод всех пикселей на матрицу
  matrix.write(); 
} 

// функция вывода данных для одной клавиши на матрицу
void printMatrixOne (int pos, int data) {
  // 4 позиции из массива
  for (int i=0; i<4; i++) {
   // устанавливаем значение пиксела
   matrix.drawPixel(koords[pos][i].x, koords[pos][i].y, data);
  }
} 

Загружаем скетч на плату Arduino, и проверяем работу программы.

img

Clone this wiki locally