Клавиатура Copypaste Своими Руками Или Идеальная Клавиатура В Мире, Где Каждая Строчка Кода Уже Написана

Многие люди, только начинающие изучать программирование, задаются вопросом: можно ли копипастить чужой код? Учитывая, что человек существо ленивое, а время программиста стоит денег, ответ, на мой взгляд, очевиден – да.

Но людям, которые доводят этот принцип до абсурда, которые копируют, не думая и не понимая, а также тем, кто пишет диссертацию, именно таким людям посвящена эта клавиатура и статья.

И да, на этой клавиатуре ровно две кнопки – скопировать и вставить.



Клавиатура CopyPaste своими руками или идеальная клавиатура в мире, где каждая строчка кода уже написана

Под катом будет рассказ про сборку и прошивку - еще болтовню с логическим анализатором посмотрим Итак, я решил построить эту клавиатуру.

Решил начать с компонентов - дигиспарка (небольшая платка с attiny85 и USB-шлейф, который можно вставить прямо в компьютер) для ловли нажатия клавиш и эмуляции клавиатуры.

Теперь кнопки - нормальных механических кнопок для клавиатуры у меня нет, но ждать не хочется, поэтому возьмем кнопки часов smd. Вот такие: Кнопки

Клавиатура CopyPaste своими руками или идеальная клавиатура в мире, где каждая строчка кода уже написана

С компонентами определились, теперь нарисуем переднюю панель, чтобы распечатать ее на принтере.

Размеры 45мм*21мм, размеры крышки кнопки 10мм*10мм.

Давайте напишем что-нибудь сверху и снизу.

Получилось примерно так:

Клавиатура CopyPaste своими руками или идеальная клавиатура в мире, где каждая строчка кода уже написана

Следующая проблема — это SMD-кнопки, а значит их нужно припаять к какой-то плате.

Поскольку травить плату ради такого нет смысла, процарапаем текстолит буквой Т:

Клавиатура CopyPaste своими руками или идеальная клавиатура в мире, где каждая строчка кода уже написана

Расстояние между центрами кнопок 15мм.

Припаяем их на импровизированную плату.

Припаиваем три провода.

При нажатии кнопки один из крайних проводов замыкается на центральный.



Клавиатура CopyPaste своими руками или идеальная клавиатура в мире, где каждая строчка кода уже написана

Далее берем первый попавшийся кусок ПВХ-пластика и приклеиваем на него нашу переднюю панель, а на кнопки приклеиваем их крепления.

Единственное, что я не учел, так это то, что при помощи тактовых кнопок вращается та самая часть, которая давит на мембрану.

Если вы хотите улучшить дизайн, используйте нормальный переключатели.

Конечным результатом должно быть то, что вы видели в начале статьи.

Другая перспектива.



Клавиатура CopyPaste своими руками или идеальная клавиатура в мире, где каждая строчка кода уже написана

Итак, с помощью простых приспособлений можно сделать клавиатуру с двумя кнопками, НО ЗАЧЕМ?

Клавиатура CopyPaste своими руками или идеальная клавиатура в мире, где каждая строчка кода уже написана

Подключаем три провода к дигиспарку.



Клавиатура CopyPaste своими руками или идеальная клавиатура в мире, где каждая строчка кода уже написана

Схема клавиатуры

Клавиатура CopyPaste своими руками или идеальная клавиатура в мире, где каждая строчка кода уже написана

Далее нам нужно заставить digispark притворяться клавиатурой и отправлять CTRL+C/CTRL+V при нажатии кнопки.

Итак, нам нужно поймать щелчок.

Начнем с того, что если центральный провод подключить к +5В, а боковые подключить к контактам настроенным на вход, то при нажатии кнопки да, на контакте будет 1, а когда не нажата, штифт будет улавливать помехи и невозможно будет отследить, что там нажимается, а что мешает. Решение этой проблемы на удивление простое — нужно подтянуть выводы к земле через резистор большого номинала (десятки кОм).

Открыв даташит на микроконтроллер, можно увидеть, что внутри него можно включить подтяжку, но только на VCC (+питание).

На самом деле это не проблема — нужно просто соединить центральный вывод с GND (землей) и инвертировать рабочую логику.

Вы можете представить это так:

Клавиатура CopyPaste своими руками или идеальная клавиатура в мире, где каждая строчка кода уже написана

Но есть еще одна проблема.

Мы живем в несовершенном мире, где кнопки имеют механический контакт. И он не идеален.

А контроллер у нас быстрый — и получается, что в момент переключения кнопка не сразу закрывается, а на несколько миллисекунд скачет ее сопротивление — это называется дребезг.

Из-за болтовни контроллер может решить, что кнопка была нажата не один раз, а, например, 10 раз.

Вот иллюстрация этого явления из Интернета:

Клавиатура CopyPaste своими руками или идеальная клавиатура в мире, где каждая строчка кода уже написана

Но это так же неинтересно! Возможно, у нас нет никакого дребезжания.

Чтобы выяснить это, я раскрыл логический анализатор.

Теперь посмотрим.

Собираем тестовую установку - подтяжка 10 ком, 16 миллионов измерений в секунду Монтаж

Клавиатура CopyPaste своими руками или идеальная клавиатура в мире, где каждая строчка кода уже написана

Видим, что нажатие длилось 0,1176 мс.



Клавиатура CopyPaste своими руками или идеальная клавиатура в мире, где каждая строчка кода уже написана

Приближаемся к моменту отпускания кнопки (выделено красным)

Клавиатура CopyPaste своими руками или идеальная клавиатура в мире, где каждая строчка кода уже написана

Сбоку есть некоторые измерения «отскока», общее время дребезга составило около 0,1435 мс.

Да, я знаю, этого мало, но стоит учесть, что кнопки у меня только из скотча, контакты еще не успели окислиться или изменить форму.

И со временем ситуация будет только ухудшаться.

Как бороться с дребезжанием? Есть три основных способа:

  1. Триггер Шмидта + RC-цепь – позволяет получить идеальный сигнал
  2. RC цепь - позволяет сделать слайд выбросов (плавно нарастающий сигнал)
Но у нас целый микроконтроллер — и поэтому нам доступны 3 варианта: задержки Один из способов борьбы с болтовней в лоб — проверить, нажата ли кнопка по истечении времени, заведомо большего, чем болтовня.

Если реализовать с использованием задержек, код будет блокироваться, но как это сделать правильно можно увидеть в сотнях статей о борьбе с дребезгом и ардуино.

Итак, мы понимаем, что кнопка нажата – что дальше? Сообщите компьютеру, что вы нажали CTRL+C/V. Это делается с помощью стандартной библиотеки digispark. Окончательный код получился таким:

   

#include "DigiKeyboard.h" // library for emulate keyboard #define COPY 2 // copy button pin #define PASTE 0// paste button pin #define GND 1// center must be connected to ground void setup() { pinMode(COPY, INPUT); // set pin to input digitalWrite(COPY, HIGH);// turn on pullup pinMode(PASTE, INPUT); digitalWrite(PASTE, HIGH); pinMode(GND, OUTPUT); // set pin to output digitalWrite(GND, LOW);// and set on pin GND } void loop() { // if something COPY or PASTE clicked if (!digitalRead(COPY) || !digitalRead(PASTE)) { delay(30); // wait(debounce) if (!digitalRead(COPY)) { // if copy still pressed send CTRL+C DigiKeyboard.sendKeyStroke(KEY_C , MOD_CONTROL_LEFT); delay(30); } else if (!digitalRead(PASTE)) {// if paste still pressed send CTRL+V DigiKeyboard.sendKeyStroke(KEY_V , MOD_CONTROL_LEFT); delay(200); } } }

Это проект, который я выполнил за 3 часа.

Не бойтесь копировать чужой код! Копирование и вставка из переполнения стека

Клавиатура CopyPaste своими руками или идеальная клавиатура в мире, где каждая строчка кода уже написана

Теги: #Сделай сам или Сделай сам #Электроника для начинающих #разработка электроники #arduino #разработка Arduino #клавиатура #ввод текста #copypaste #contactounce #digispark #bounce

Вместе с данным постом часто просматривают: