Клавиатура на сенсорных кнопках

Добрый день! Помогите реализовать эту идею! Есть сенсорные кнопки ttp223 с али. Ардуино я так понимаю нужно mega т.к там больше выходов и минимум 2 платы т.к кнопок на клавиатуре не менее 104. На картинке я правильно понял как присоединять провода? Только vco не знаю куда подключать… Клава должна быть не тупо банальные числа 0-9, а полноценная стандартная клавиатура с возможностью переключения языков. Причем на некоторых кнопках например “э” есть ещё и 2 символа (на англ раскладке). Код выдал gtp4, уверен с ошибками

#include <Keyboard.h>

// Подключение сенсорных кнопок к пинам Arduino Mega
const int NUM_BUTTONS = 104;
const int BUTTON_PINS[NUM_BUTTONS] = {
// Здесь необходимо указать соответствующие пины для каждой сенсорной кнопки
// Например, 2, 3, 4, ... и т.д.
};

// Переключение между английским и русским языком
bool isEnglishLayout = true;

void setup() {
// Инициализация сенсорных кнопок как входов
for (int i = 0; i < NUM_BUTTONS; i++) {
pinMode(BUTTON_PINS[i], INPUT);
digitalWrite(BUTTON_PINS[i], HIGH); // Включение подтягивающего резистора
}

// Инициализация клавиатуры
Keyboard.begin();
}

void loop() {
// Получение состояния сенсорных кнопок
for (int i = 0; i < NUM_BUTTONS; i++) {
int buttonState = digitalRead(BUTTON_PINS[i]);

// Обработка нажатия кнопки
if (buttonState == LOW) {
// Определение соответствующего символа клавиши
char key = getKeyPress(i);

// Отправка символа на компьютер
Keyboard.press(key);
delay(50); // Задержка для корректного эмулирования нажатия клавиши
Keyboard.release(key);
}
}

delay(10); // Задержка между итерациями опроса кнопок
}
// Определение символа клавиши в зависимости от раскладки и индекса кнопки
char getKeyPress(int buttonIndex) {
const char* englishLayout = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()_-+=[{]}\\|;:'\",<.>/?`~ ";
const char* russianLayout = "фиывапролджэячсмитьбю.йцукенгшщзхъёФЫВАПРОЛДЖЭЯЧСМИТЬБЮХЙЦУКЕНГШЩЗЪЁЙ1234567890-=!\"№;%:?*()_+[]{}\\|/,.<> ";

// Раскладка на основе значения переменной isEnglishLayout
const char* layout = isEnglishLayout ? englishLayout : russianLayout;

// Ограничение индекса кнопки в пределах доступных символов
buttonIndex = constrain(buttonIndex, 0, strlen(layout) - 1);

// Получение символа клавиши
return layout[buttonIndex];
}

// Функция для переключения раскладки клавиатуры
void toggleLanguageLayout() {
isEnglishLayout = !isEnglishLayout;
}

Да, ладно! А если ещё пару кнопок добавить, то уже три меги надо, так, что ли? Может мультиплексор какой-нибудь присобачить, благо их вагон и тележка? Чего издаваться-то? Вам же ещё придётся какую-то связь между Вашими Мегами делать, потянете? Или опять будет

А теперь добавим ножек - Получился осьминожек (С)
Клавиатуры-то всё равно не получится нормальной, а инсталляция знатная будет.

1 лайк

Это как понять??? Клавиатура каких вообще размеров? Полметра на метр?
Не надо мешать в одну кучу “железо” и различные переключения языков и прочего. И вопросы нужно задавать конкретней, иначе это в коммерческий раздел.
104 кнопки это матрица 10х11, итого 21 вывод.
Хотя программно удобней 8х16, 24 вывода.

Ребят, не нужно критиковать. Я просто попросил помощи в реализации этой возможно и тупой идеи. Нужен 24 вывод, отлично уже легче, значит хватит одной платы ардуино. Я думал для каждой кнопки 1 вывод. Только тогда сейчас немного не понял как подключить 8х16 на эти 24. Размер 1 кнопки 15х11, т.е будет 120х176 это не полметра на метр

Почему МК без поддержки USB ?
Почему не TTP226 ?

8 +16 = 24

Почему? Вы сюда пришли, чтобы Вас похвалили? Ну, хорошо, молодец! Продолжайте также!

Так лучше?

Ещё раз перечитал Ваш пост. Никакой просьбы (равно как и вопроса) обнаружить не удалось, если не считать вопросом:

ответить на который невозможно, т.к. один из проводов на картинке просто болтается в воздухе. Вернее, можно ответить так: нет, неправильно - он не должен в воздухе болтаться.

Никаких других вопросов и просьб в Вашем посте не содержится.

1 лайк

Поту что это просто векторное изображение, что бы наглядно показать

What?

ttp223 поддерживает всего одну кнопку
ttp226 поддерживает до 9 кнопок и имеет последовательный режим - на 8 кнопок ОДИН выход данных

Мне жаль что вы ничего не увидели. Я не знаю зачем вы пишете мне. Точнее зачем вы вообще пишете. Просто проигнорю тебя

то есть МК на самом деле не Ардуино Мега? тогда какой?

Mega2560 r3

это ты так всех советчиков проигноришь - кто будет помогать?
Запомни - возится с тобой никто не будет. Если не даешь правильного описания проекта и не отвечаешь четко на вопросы - идешь делать свою поделку сам.

Тут ответило 6 человек, 4 действительно чемио-то помогают. Но 1 человек тут - тупо троль

тогда вопрос остается - почему взят МК без поддержки УСБ? - похоже вы даже не догоняете, о чем речь.

Еслть контроллеры, которые умеют прикидыватся УСБ устройствами ввода. Например клавиатурой. Твой проект надо делать на таком контроллере, а то в дополнение к кнопкам тебе придется писать кучу кода, чтоб передать нажатия на ПК. Судя по вопросам, это будет не так просто.
Так что лучше сразу выбирайте правильную ардуину.

нет, он просто любит четкие ответы на вопросы.

1 лайк

Он написал, что не увидел моей просьбы, когда она написана в первой же строке, я офигел. Ну да ладно, может он действитель не видет.

Эта мега2560 есть и с УСБ, кст спасибо что напомнили. Выше сказали что надо использовать матрицу 8х16 (я думал что 1 кнопка - 1 вывод) которую не понятно как подключать

С глубиной ваших познаний лучше сразу купить готовую !!!

2 лайка

Нет, речь идет не о наличии УСБ порта на плате, а о поддержке УСБ протокола, встроенной в ядро. У контроллера мега2560 такой поддержки нет - независимо от того, есть ли на плате разъем