Многие люди, только начинающие изучать программирование, задаются вопросом: можно ли копипастить чужой код? Учитывая, что человек существо ленивое, а время программиста стоит денег, ответ, на мой взгляд, очевиден – да.
Но людям, которые доводят этот принцип до абсурда, которые копируют, не думая и не понимая, а также тем, кто пишет диссертацию, именно таким людям посвящена эта клавиатура и статья.
И да, на этой клавиатуре ровно две кнопки – скопировать и вставить.
Под катом будет рассказ про сборку и прошивку - еще болтовню с логическим анализатором посмотрим
Итак, я решил построить эту клавиатуру.
Решил начать с компонентов - дигиспарка (небольшая платка с attiny85 и USB-шлейф, который можно вставить прямо в компьютер) для ловли нажатия клавиш и эмуляции клавиатуры.
Теперь кнопки - нормальных механических кнопок для клавиатуры у меня нет, но ждать не хочется, поэтому возьмем кнопки часов smd. Вот такие: Кнопки
С компонентами определились, теперь нарисуем переднюю панель, чтобы распечатать ее на принтере.
Размеры 45мм*21мм, размеры крышки кнопки 10мм*10мм.
Давайте напишем что-нибудь сверху и снизу.
Получилось примерно так:
Следующая проблема — это SMD-кнопки, а значит их нужно припаять к какой-то плате.
Поскольку травить плату ради такого нет смысла, процарапаем текстолит буквой Т:
Расстояние между центрами кнопок 15мм.
Припаяем их на импровизированную плату.
Припаиваем три провода.
При нажатии кнопки один из крайних проводов замыкается на центральный.
Далее берем первый попавшийся кусок ПВХ-пластика и приклеиваем на него нашу переднюю панель, а на кнопки приклеиваем их крепления.
Единственное, что я не учел, так это то, что при помощи тактовых кнопок вращается та самая часть, которая давит на мембрану.
Если вы хотите улучшить дизайн, используйте нормальный переключатели.
Конечным результатом должно быть то, что вы видели в начале статьи.
Другая перспектива.
Итак, с помощью простых приспособлений можно сделать клавиатуру с двумя кнопками, НО ЗАЧЕМ?
Подключаем три провода к дигиспарку.
Схема клавиатуры
Далее нам нужно заставить digispark притворяться клавиатурой и отправлять CTRL+C/CTRL+V при нажатии кнопки.
Итак, нам нужно поймать щелчок.
Начнем с того, что если центральный провод подключить к +5В, а боковые подключить к контактам настроенным на вход, то при нажатии кнопки да, на контакте будет 1, а когда не нажата, штифт будет улавливать помехи и невозможно будет отследить, что там нажимается, а что мешает. Решение этой проблемы на удивление простое — нужно подтянуть выводы к земле через резистор большого номинала (десятки кОм).
Открыв даташит на микроконтроллер, можно увидеть, что внутри него можно включить подтяжку, но только на VCC (+питание).
На самом деле это не проблема — нужно просто соединить центральный вывод с GND (землей) и инвертировать рабочую логику.
Вы можете представить это так:
Но есть еще одна проблема.
Мы живем в несовершенном мире, где кнопки имеют механический контакт. И он не идеален.
А контроллер у нас быстрый — и получается, что в момент переключения кнопка не сразу закрывается, а на несколько миллисекунд скачет ее сопротивление — это называется дребезг.
Из-за болтовни контроллер может решить, что кнопка была нажата не один раз, а, например, 10 раз.
Вот иллюстрация этого явления из Интернета:
Но это так же неинтересно! Возможно, у нас нет никакого дребезжания.
Чтобы выяснить это, я раскрыл логический анализатор.
Теперь посмотрим.
Собираем тестовую установку - подтяжка 10 ком, 16 миллионов измерений в секунду Монтаж
Видим, что нажатие длилось 0,1176 мс.
Приближаемся к моменту отпускания кнопки (выделено красным)
Сбоку есть некоторые измерения «отскока», общее время дребезга составило около 0,1435 мс.
Да, я знаю, этого мало, но стоит учесть, что кнопки у меня только из скотча, контакты еще не успели окислиться или изменить форму.
И со временем ситуация будет только ухудшаться.
Как бороться с дребезжанием? Есть три основных способа:
- Триггер Шмидта + RC-цепь – позволяет получить идеальный сигнал
- RC цепь - позволяет сделать слайд выбросов (плавно нарастающий сигнал)
Если реализовать с использованием задержек, код будет блокироваться, но как это сделать правильно можно увидеть в сотнях статей о борьбе с дребезгом и ардуино.
Итак, мы понимаем, что кнопка нажата – что дальше? Сообщите компьютеру, что вы нажали CTRL+C/V. Это делается с помощью стандартной библиотеки digispark. Окончательный код получился таким:
Это проект, который я выполнил за 3 часа.#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); } } }
Не бойтесь копировать чужой код! Копирование и вставка из переполнения стека
Теги: #Сделай сам или Сделай сам #Электроника для начинающих #разработка электроники #arduino #разработка Arduino #клавиатура #ввод текста #copypaste #contactounce #digispark #bounce
-
Как Написать Хорошую Электронную Книгу
19 Oct, 24 -
Электрическое Освещение
19 Oct, 24 -
Беременность, Роды Мамы И Здоровье Ее Глаз
19 Oct, 24 -
Яндекс.новости Показывает Карты
19 Oct, 24