Команды контроллера Xbox 360 на Uno-совместимую плату через USB-модуль
Я пытаюсь получать команды на стороннюю совместимую с Arduino-Uno плату от контроллера Xbox 360 через USB-модуль M5Stack но я не вижу ожидаемого поведения (см. заголовок Ожидаемое поведение).
Для ясности: я говорю о чтении команд с контроллера Xbox с помощью Arduino, а не не об эмуляции контроллера Xbox с помощью Arduino.
Оборудование
Bluno Nano. (Плата, совместимая с Arduino-Uno, в форм-факторе, подобном Nano, с загрузкой программ и последовательной связью через соответствующий USB-ключ Bluetooth. Однако вместо этого я использую проводное USB-соединение с моим ПК.) Плата распознается как Uno. с помощью Arduino IDE. Эта же плата работала, как и ожидалось, для других проектов.
USB-модуль M5Stack (с чипом MAX3421E), который в первую очередь предназначен для совместимости с модулем микроконтроллера M5Stack. В любом случае USB-модуль взаимодействует с помощью SPI.
беспроводной контроллер Xbox 360, но я подключил его к USB-модулю с помощью USB-кабеля, который подключается к контроллеру с помощью проприетарного разъема. Должен быть в рабочем состоянии.
Я не использую беспроводной приемник Xbox 360 для подключения к контроллеру Xbox и не хочу подключаться к это без проводов.
Проводка
Я подключил GND (#1/3/5), +5V (#28, VBUS), SCLK (#11, GPIO18), MISO (#9, GPIO19) и MOSI (#7, GPIO23) ) USB-модуля к соответствующим контактам Bluno Nano: GND, +5V, SCK (D13), MISO (D12) и MOSI (D11).
Я попытался подключить контакт EN USB-модуля (#6) к +5 В, чтобы убедиться, что он включен.
Я попытался потянуть штифт SS вверх/вниз. Я не пробовал подключать его к контактам D10 или D8, которые я видел как контакты SS на схемах распиновки Arduino Nano.
Я не пробовал подключать контакт INT (#2, GPIO35) к чему-либо.
Я считаю, что это единственные полезные контакты на USB-модуле.
Схема модуля USB
Полезная распиновка находится в правом нижнем углу.
Попытки
Отключение и повторное подключение USB-кабеля Bluno Nano к компьютеру.
Нажатие кнопки сброса Bluno Nano.
Отключение и повторное подключение USB-кабеля контроллера Xbox к USB-модулю или наоборот (т. е. начиная с его отключения).
Нажатие или удерживание центральной кнопки "X" кнопка или другие кнопки на контроллере, предположительно, чтобы включить его или, возможно, войти в какой-то режим настройки подключения.
Использование проводной USB-мыши вместо контроллера Xbox.
Пробуем различные комбинации вышеперечисленного в разном порядке.
Я убедился, что на USB-модуль подается питание (даже несмотря на то, что у него нет светодиодного индикатора питания), используя его дополнительные контакты 5V и GND для успешного управления цифровым входным контактом Bluno Nano с высоким или низким уровнем.
Я убедился, что на контроллер Xbox подается питание, так как центральная точка "X" кнопка загорается при нажатии.
Программное обеспечение
Windows 11
IDE 2.0 для Arduino
USB_Host_Shield_2.0 версии 1.6.2 (последней), установленной через диспетчер библиотек. Обратите внимание, что эта библиотека, по-видимому, в первую очередь предназначена для конкретного USB-хост-шилда, но я вижу, что она используется с другими USB-хост-шилдами, в том числе в документации моего USB-модуля. В нем есть библиотека для Xbox 360, которая работает с USB-контроллером или беспроводным контроллером, с примеры скетчей для каждого.
Любой скетч из примера загружается успешно без ошибок (хотя программатор иногда зависает и не отвечает, после чего я отключаюсь, позволяю ему выдать ошибку, снова подключаюсь и повторяю загрузку).
В последовательном мониторе Arduino IDE я установил скорость передачи данных 115 200, чтобы она соответствовала скорости, указанной в любом скетче из примера.
Ожидаемое поведение
Для печати в последовательном мониторе (<...>
я обозначаю свои комментарии):
XBOX USB Library Started <instead of "OSC did not start" followed by unresponsiveness to controller button presses, etc.>
<Xbox controller commands upon controls/buttons being pressed, e.g., "LeftHatX: ...">
Попытки
В документации USB Host Shield 2.0 говорится об использовании с контроллером Xbox 360: "Для использования через USB используйте библиотеку XBOXUSB, а для беспроводного использования используйте библиотеку XBOXRECV. Обратите внимание, что беспроводной контроллер НЕ МОЖЕТ использоваться через USB!». Мне неясно, требует ли мое проводное USB-подключение к моему беспроводному контроллеру библиотеку XBOXUSB или XBOXRECV, поэтому я пробовал обе библиотеки (попробовал оба сопровождающих примера скетча) безрезультатно.
Я пытался удалить следующие фрагменты кода по одному и в некоторых комбинациях, но безрезультатно. Программа загружается успешно в любом случае.
#include <SPI.h>
#if !defined(__MIPSEL__) while (!Serial); // Дождитесь подключения последовательного порта — используется на платах Leonardo, Teensy и других со встроенным последовательным соединением USB CDC #endif
XBOXUSB Xbox(&Usb); <...along with the code in `loop()` that requires it to be defined.>
if (Usb.Init() == -1) { Serial.print(F("\r\nOSC did not start")); while (1); //halt } Serial.print(F("\r\nXBOX USB Library Started"));
Здесь произошел сбой программы, поскольку
Usb.Init() == -1
.Я пытался изменить
if (Usb.Init() == -1) { Serial.print(F("\r\nOSC did not start")); while (1); // остановка } Serial.print(F("\r\nXBOX USB Library Started"));
в
while (Usb.Init() == -1); Serial.print(F("\r\nXBOX USB Library Started"));
при попытке установить соединение (пока я нажимал кнопку "X" и другие кнопки контроллера) безрезультатно.
Я также попытался изменить тот же фрагмент на
Usb.Init()
в попытке проигнорировать возвращаемое значение
-1
(которое, как я полагаю, представляет собой ошибку) и продолжить работу, но безрезультатно.Использование старой версии библиотеки USB Host Shield 2.0.
Установка следующего в
settings.h
библиотеки без видимых изменений в выводе./* Установите для этого параметра значение 1, чтобы активировать отладку serial*/ #define ENABLE_UHS_DEBUGGING 1
Установка следующих параметров в
XBOXUSB.cpp
иXBOXRECV.cpp
без видимых изменений в выводе.#define EXTRADEBUG // Раскомментируйте, чтобы получить еще больше отладочных данных #define PRINTREPORT // Раскомментируйте, чтобы распечатать отчет, отправленный контроллером Xbox 360
Чтобы попробовать использовать проводную USB-мышь вместо контроллера Xbox, я использовал USB_Host_Shield_2.0/examples/HID/USBHIDBootMouse/USBHIDBootMouse.ino
, а также попытался внести некоторые из вышеперечисленных модификаций, чтобы не в любом случае помогло, что навело меня на мысль, что проблема не связана с контроллером Xbox или библиотекой для него.
Я также попробовал пример скетча из Документация по USB-модулю M5Stack после удаления частей, которые относятся к модулю микроконтроллера M5Stack и не нужны для целей тестирования. Это ничем не отличалось.
Я совершенно не знаю, что еще можно попробовать с точки зрения аппаратного и программного обеспечения. Я пробовал искать много вопросов. Я подозреваю, что упускаю что-то простое и очевидное или что мои настройки не работают по какой-либо причине.
Спасибо
Обновить
После устранения проблемы Usb.Init()
путем подключения контакта SS USB-модуля соединение с контроллером Xbox по-прежнему не устанавливалось и команды не принимались.
@Lazy Titanic, 👍3
Обсуждение1 ответ
Я обнаружил, что при подключении USB-кабеля к ПК вместо USB-модуля контроллер отображается как "Беспроводной контроллер Xbox 360 через Play & Зарядный комплектquot; в разделе «Периферийные устройства Xbox 360»; в диспетчере устройств.
Оказывается, "Play & Зарядный комплектquot; относится к съемной перезаряжаемой батарее контроллера и кабелю USB.
Согласно этому, " Комплект для игры и зарядки несет только энергию. Он не содержит данных, необходимых для подключения контроллера к ПК».
- Первая настройка - отказ в доступе к usb-порту - ubuntu 14.04
- Почему я получаю avrdude: stk500v2_ReceiveMessage(): timeout error when uploading to Arduino Mega?
- Может ли Arduino взаимодействовать с USB-устройствами без USB-хост-экрана?
- Если USB дает 5 В, как Arduino может подавать 5 В на контакт 5 В? (И еще вопрос)
- Максимальная последовательная скорость CH340
- Можно ли использовать внешний источник питания и USB одновременно на Arduino?
- Эмуляция стандартного периферийного USB-устройства Mifare с помощью RFID-RC522
- Можно ли загрузить скетч Arduino через последовательный порт (RX) вместо USB?
ОБНОВЛЕНИЕ: я успешно прошел
Usb.Init()
, подключив контакт SS к D10 (либо с XBOXUSB, либо с XBOXRECV), но основной код вloop()
, который теперь достигнут, также не работает, потому чтоXbox .Xbox360Connected == 0
. Это так, даже если я отмечаю «Xbox.Xbox360Connected» после задержки или после нажатия кнопок на контроллере Xbox., @Lazy TitanicОБНОВЛЕНИЕ: у меня работает то же самое, но с проводной USB-мышью и
USB_Host_Shield_2.0/examples/HID/USBHIDBootMouse/USBHIDBootMouse.ino
., @Lazy Titanic* Я попытался потянуть SS-вывод вверх / вниз * - я собирался предположить, что SS-вывод обычно управляется программным обеспечением, и что его утверждение обычно сигнализирует о начале «транзакции» - однако протокол определяет это., @Nick Gammon
Вы уверены, что контроллер *также* отправляет данные через USB, а не только по беспроводной сети?, @Nick Gammon
@NickGammon Думаю, ты прав насчет контакта SS. Что касается того, предназначен ли USB для данных, а не только для питания, я не могу быть уверен на 100%, но я подозреваю, что это для данных, потому что фирменный разъем USB-кабеля с контроллером Xbox 360 имеет своего рода «манжету» вокруг него. кажется, что это очень намеренно блокирует нажатие кнопки «Подключить» на задней панели контроллера; USB-кабель по своей конструкции препятствует беспроводному соединению. Как мне это проверить — попробовать поиграть с контроллером в клетке Фарадея? :D, @Lazy Titanic
Что ж, если бы у вас был USB-анализатор (который стоит недешево), вы могли бы увидеть, изменяются ли отправляемые данные при нажатии кнопок., @Nick Gammon
@NickGammon Спасибо! Я мог бы подумать о том, чтобы попробовать другой контроллер и/или кабель, купить беспроводной приемник Xbox 360 или использовать джойстик вместо контроллера., @Lazy Titanic