Вибрационный геймпад Arduino с силовой обратной связью
Я проектирую геймпад с помощью Arduino Micro. Я использую библиотеку джойстиков Arduino.
Я разрабатываю этот геймпад для гоночных игр, поэтому мне нужно ловить такие сигналы, как hit_the_wall
, hit_another_car
.
Интересно, как игра на ПК выводит сигнал вибро/силовой обратной связи и отправляет бросок USB на геймпад.
Я уже знаю, что драйверы геймпада и игра должны поддерживать эту функцию, но я совершенно не понимаю, как мне перехватывать входные данные, чтобы запускать механизм вибрации с помощью Arduino.
Я подумал о (псевдокоде):
input = Serial.read();
if(input == hit_something_signal){
digitalWrite(engine, HIGH);
}
Теперь мой вопрос: что это за волшебный hit_something_signal
?
ОБНОВЛЕНИЕ
Я читаю документ PID и вижу на странице 24 адреса регистров для реализации силовая обратная связь.
;Определения команды Start Force Feedback
USAGE_PAGE (Physical Interface) 05 0F
;Определение отчета об эффекте
USAGE (Set Effect Report) 09 21
COLLECTION (Logical) A1 02
USAGE (Effect Block Index) 09 22
LOGICAL_MAXIMUM (127) 25 7F
REPORT_SIZE (7) 75 07
REPORT_COUNT (1) 95 01
OUTPUT (Data,Var,Abs)
.......
В файле Joystick.cpp я заметил реализацию HID:
// USAGE_PAGE (общий рабочий стол)
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x05;
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x01;
// ИСПОЛЬЗОВАНИЕ (джойстик — 0x04; геймпад — 0x05; многоосевой контроллер — 0x08)
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x09;
tempHidReportDescriptor[hidReportDescriptorSize++] = joystickType;
// СБОР (приложение)
tempHidReportDescriptor[hidReportDescriptorSize++] = 0xa1;
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x01;
// REPORT_ID (по умолчанию: 3)
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x85;
tempHidReportDescriptor[hidReportDescriptorSize++] = _hidReportId;
.......
......
Как вы думаете, возможно ли реализовать часть обратной связи по усилию? Мне не нужно ловить все силы, а запускать движок вибратора каждый раз, когда игра отправляет и вводит всевозможную силу.
Проблема в том, что я не эксперт по низкоуровневому программированию и драйверам. Есть идеи?
@Andrea Mancini, 👍1
Обсуждение1 ответ
Эта библиотека не поддерживает вибрацию.
Дескриптор отчета HID должен включать правильные элементы OUTPUT, чтобы ПК мог отправлять инструкции по вибрации на Arduino — и, конечно же, библиотека должна иметь возможность обрабатывать входящие данные — ни один из этих элементов не реализован.
Поэтому вы не сможете это сделать, если не расширите эту библиотеку. А это требует глубокого знания протоколов USB и HID.
- Библиотека джойстиков Arduino не распознается играми (Steam)
- TCCR1A и TCCR2A на Леонардо
- Экспонируйте два устройства HID Joystick с одной платой RP2040 (Waveshare Pi Pico Zero)
- Можно ли использовать Arduino UNO для эмуляции джойстика PS4?
- Как использовать защитный экран USB-хост с различными джойстиками HID
- STM32 в качестве клавиатуры
- Невозможно загрузить скетч после прошивки загрузчика на Arduino Micro
- Подключение джойстика Logitech к Arduino и прерывание цикла while
существующие игры, такие как грязь 4 или F1 2017, @Andrea Mancini