-
Notifications
You must be signed in to change notification settings - Fork 0
Сенсорная клавиатура 16 клавиш
Клавиатура Capacitive Touch Key Pad 16 keys (https://robotdyn.com/capacitive-touch-key-pad-16-keys.html) представляет из себя 16 сенсорных кнопок 4х4. Эта компактная недорогая клавиатура может подключаться к любому емкостному модулю. Является полнофункциональной сенсорной клавиатурой, которая может быть легко встраивается в профессиональную систему управления или в приложение микроконтроллера. Сенсорные панели имеют номера от 1 до 16 и могут маркироваться с помощью фломастера. В комплекте: плата и перемычка и провода FF длиной150 мм.
Рассмотрим подключение клавиатуры к плате Arduino. Для подключения будем использовать 16-клавишный емкостный сенсорный модуль 16 Keys Capacitive touch TTP229 I2C module (https://robotdyn.com/16-keys-capacitive-touch-ttp229-i2c-module.html), который подключается к микроконтроллеру по шине I2C.
Подключение согласно схема соединений:
Для работы удобно использовать библиотеку 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 - отжата):
В качестве примера использования создадим проект визуализации на светодиодной матрице касаний клавиатуры .
Будем использовать следующие компоненты:
-
Плата Arduino UNO – 1;
-
Клавиатура Capacitive Touch Key Pad 16 keys – 1;
-
16 Keys Capacitive touch TTP229 I2C module – 1;
-
Провода FM – 9.
Схема подключения компонентов:
При программировании будем использовать библиотеку 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, и проверяем работу программы.