Краны 254/395 как HID Joystick и Keyboard на Arduino LeonardoСОДЕРЖАНИЕ ВВЕДЕНИЕ
|
![]() |
Рис.1 |
В результате работы над прошивкой HID Keyboard было выявлено, что ZDSimulator, дополнительно с действиями по позиционированию
ручек кранов, может произвести действия, которые не должны происходить (разные для разных типов локомотивов):
На ЭП1М: ======== 1. Переключаются страницы МСУД (клавиши '1' и '4') 2. Выключается "Вентилятор 3" (клавиша '7') На ЧС4Т: ======== 1. Переключается подсветка кабины на зелёную (клавиша '|' )То есть, дополнительно совершается действие так, если бы была нажата клавиша-одиночка без префикса Menu.
Таблица 1 | |||||||||||||||||||||||||||||||||||||||||||||
|
С учётом описанных эффектов, HID Keyboard должен вырабатывать позиционные коды в большинстве положений кранов и инкрементные там,
где проявляются дополнительные эффекты. Необходимо также учитывать предыдущее положение ручек,
чтобы оценить направление перемещения и выработать правильный инкрементный код.
HID Joystick, поддерживающий описанную специфику, должен вырабатывать двойной набор событий.
Один вырабатывается при перемещении ручек вперёд, а другой при перемещении назад.
В MCabMapper этим событиям можно назначить и инкрементные команды, и команды непосредственного позиционирования.
Скетчи и набор файлов для программирования в архиве
leonardo_valves_kbd_joy.zip
+- leonardo_valves_joy папка скетча для джойстика +- leonardo_valves_kbd папка скетча для клавиатуры -- leonardo_valves_programming_set_joy_and_kbd файлы для автономного программирования \ prog_joy.bat запуск программирования леонарды как джойстика prog_kbd.bat запуск программирования леонарды как клавиатуры leonardo_valves_joy.ino.hex прошивкa леонарды как джойстика leonardo_valves_kbd.ino.hex прошивкa леонарды как клавиатуры avrdude.exe программатор avrdude.conf файл, необходимый для работы программатора libusb0.dll файл, необходимый для работы программатора bootfinder.exe исполняемый файл для определения порта бутлоадера listComPorts.exe формирователь списка портов с именем порта, VID и PID, вызывается из bootfinder.exe
Пример конструкции имеется здесь, а электрический монтаж делается согласно таблице 2, для HID Joystick и для HID Keyboard одинаково.
Таблица 2 | |||||||||||||||||||||||||||||||||||||||||||||||||||
|
Для успешной компиляции скетча для HID Joystick
необходима библиотека ArduinoJoystickLibrary by Matthew Heironimus:
https://github.com/MHeironimus/ArduinoJoystickLibrary.
При написании скетча для HID Keyboard
потребовался грязный хак в библиотечном коде в файле (Arduino 1.8.3 и более поздние):
installation_folder\Arduino\libraries\Keyboard\src\Keyboard.cpp
До внесения изменений:
////////////////////////////// // Before ////////////////////////////// #define SHIFT 0x80 const uint8_t _asciimap[128] = { 0x00, // NUL 0x00, // SOH 0x00, // STX 0x00, // ETX 0x00, // EOT 0x00, // ENQ 0x00, // ACK 0x00, // BELпосле:
////////////////////////////// // After ////////////////////////////// #define SHIFT 0x80 const uint8_t _asciimap[128] = { 0x00, // NUL 0x65, // (VK_APPS) 0x01 0x2D, // - (VK_OEM_MINUS) 0x02 0x2E, // + (VK_OEM_PLUS) 0x03 0x31, // | (VK_OEM_5) 0x04 0x2A, // BS (VK_BACK) 0x05 0x00, // ACK 0x00, // BELНапример, значение ячейки подстановочной таблицы с индексом 1:
0x65, // (VK_APPS) 0x010x65 - код, который USB библиотека отправляет в систему, чтобы заставить Windows выработать клавиатурное событие с кодом VK_APPS (клавиша Menu).
Под автономным программированием понимается программирование без использования Arduino IDE, минуя
процесс компиляции. Однако, установки
Arduino IDE
не избежать из-за папки с драйверами на плату Leonardo (Pro Micro).
Программирование очень простое, несмотря на то, что определение порта бутлоадера в леонарде является трюком.
Для определения порта запускается программа bootfinder.exe, которая перестраивает видимый в диспетчере порт леонарды на
бодовую скорость 1200, это активирует бутлоадер.
Порт Arduino Leonardo системе исчезает и повляется порт бутлоадера Arduino Leonardo bootloader.
Чтобы узнать значение этого порта запускается программа listComPorts.exe для получения списка портов.
Список анализируется и по VID=2341/PID=0036 бутлоадера определяется имя порта, которое используется
программатором avrdude.exe при программировании.
Процесс автоматизирован (кроме указания порта Arduino Leonardo) и на практике нужно проделать следующее:
1) достать из архива leonardo_valves_kbd_joy.zip
папку leonardo_valves_programming_set_joy_and_kbd и разместить в удобном месте;
2) подключить плату;
3) открыть диспетчер устройств;
4) определить имя порта Arduino Leonardo;
![]() |
Рис.2 |
5) открыть файл prog_joy.bat
(если программируем как джойстик или prog_kbd.bat,
если как клавиатуру) и отредактировать первую строчку с именем порта Arduino Leonardo (рис.3);
![]() |
Рис.3 |
6) запустить на выполнение файл prog_joy.bat (prog_kbd.bat).