Найти в Дзене

Отдельная маленькая клавиатура с неанглоязычными латинскими символами

Не добавите ещё раскладку, если Вам нужно только 12 символов или меньше! Независимо от текущей раскладки, вводите эти символы когда нужно! Эта самоделка может быть очень полезная для тех, кто учат или практикуют иностранные языки, или для иностранцев, которые живут в России (как я) и не хотят ломать голову с трёх раскладками и одна клавиатура, которая не соответствует все раскладки! Это маленькое периферийное устройство использует два способа связи с компьютером: Почему нужно не только PS2? Когда раскладка выбрана (на Windows как на Linux), компьютер не ожидает от клавиатуры символы типа ASCII, но коды указания расположения клавиш. И компьютер сам узнает какая буква Вам нужна, в зависимости от текущей раскладки. Значит, если Вам нужно буква, которая не существует в текущей раскладке, Вы не можете вводить её. Чтобы обойти эту проблему, можно использовать это хитрость: Чтобы компьютер обнаруживает клавиатуру и разрешает общаться с ней, клавиатура тоже должна ответить на команды, которые
Оглавление

Не добавите ещё раскладку, если Вам нужно только 12 символов или меньше! Независимо от текущей раскладки, вводите эти символы когда нужно! Эта самоделка может быть очень полезная для тех, кто учат или практикуют иностранные языки, или для иностранцев, которые живут в России (как я) и не хотят ломать голову с трёх раскладками и одна клавиатура, которая не соответствует все раскладки!

Принцип работы

Это маленькое периферийное устройство использует два способа связи с компьютером:

  • Порт PS2, который ваша главная современная клавиатура больше не использует
  • Серийный порт (СОМ) через USB

Почему нужно не только PS2?

Когда раскладка выбрана (на Windows как на Linux), компьютер не ожидает от клавиатуры символы типа ASCII, но коды указания расположения клавиш. И компьютер сам узнает какая буква Вам нужна, в зависимости от текущей раскладки. Значит, если Вам нужно буква, которая не существует в текущей раскладке, Вы не можете вводить её.

Чтобы обойти эту проблему, можно использовать это хитрость:

  • Вы нажимаете одну кнопку на этой специальной клавиатуре
  • Клавиатура отправляет код положения клавиши через порт UART/USB (а не через PS2)
  • При получения кода, простой скрипт на компьютере вызывает команду «clip» (или «xclip» для Linux) и даёт строк UTF как аргумент. Это строк UTF-8/16 зависит от кода, и соответствует букву, которую Вы вводили. Команда «clip» скопирует это в буфер обмена.
  • Через несколько десятков миллисекунд клавиатура отправляет последовательность CTRL-V через порт PS2. В этом моменте, содержание буфера обмена (=ваша иностранная буква) скопировано где находится курсор, в любом окне приложения! Всё прошло как когда Вы нормально вводите буквы!

Чтобы компьютер обнаруживает клавиатуру и разрешает общаться с ней, клавиатура тоже должна ответить на команды, которые компьютер передаёт при запуске.

Реализация

Это проект на основе Arduino. Это платформ полностью соответствует нашим потребностям:

  • Серийный порт через USB уже есть на Arduino
  • Arduino может использовать питание +5в от USB
-2

У Arduino Uno достаточно портов (GPIO), чтобы управлять порт PS2 и сканировать матрицу клавиатуры:

-3

Нужно просто найти старый плохой мышь (например даже не оптический), чтобы просто спасать кабель PS2.

  • «ARDx» значит: На плате Arduino, номер сигнала «х» (как указан на плате)
  • «ARD GND»: Заземление Arduino
  • «ARD5V»: Пин «5V» на плате Arduino
  • «Plug Front View» = Вид спереди кабельного штекера PS2

Транзисторы могут быть 2N2222, BC337 или более менее эквиваленты (NPN, Hfe>80, Icmax минимум 5mA). Диоды могут быть любые маленькие диоды, например 1N4148.

Это архив содержит не только код источник Arduino, но тоже скрипты и маленькую программу «getchar» для ПК. Скрипты будут полезны как примеры. Действительно, если вы не учите французский язык, Вам нужно будет другой набор букв! (Но конфигурация по умолчанию уже полезна, чтобы проверить что всё работает).

Для прошивки Arduino я советую эту версию IDE: Legacy Arduino IDE 1.8.19

на https://www.arduino.cc/en/software

Если у вас «китайский клон» Arduino, и прошивка не пройдёт правильно с Windows, вероятно нужно будет установить драйвер CH340/341 из https://www.srishtirobotics.com/component/content/article?id=154:arduino-uno-r3-clone-ch340-ch341-usb-driver

Скрипт (для Windows или Linux) вызывает программу «getchar» (для Windows или Linux), которая намерена принимать коды от клавиатуры через UART/USB.

  • Версия «getchar» для Linux просто отправляет код расположения клавишы на «stdout», и скрипт «переводит», до вызывания «clip». До компиляции кода источника «getchar.c», нужно проверят если "/dev/ttyACM0" совпадает для порта. (Обычно, порт Arduino имеет это название на Linux). Иначе нужно исправить.
  • Версия «getchar.exe» для Windows (уже компилирована) прямо отправляет на «stdout» строку (например UTF-16), как указано в конфигурационным файле «defcodes.txt», который можно легко редактировать. Вам нужно тоже адаптировать название порта, но просто в скрипте «keypaster.bat». Скрипт даёт название порта как аргумент для «getchar.exe».

Идеально, когда всё проверено, скрипт (keypaster.sh или keypaster.bat) должен быть вызван при запуске системы. Так будет удобнее!

Желаю вам приятного изучения языков и успехов в проекте!