Всем привет! Вот что у меня получилось:
1. Взял RF модуль от Xbox 360 Slim. Распиновка ниже.
RF модуль
2. Питание от USB на 12 пин через линейный стабилизатор на 3.3В (AMS1117-3.3)
Стабилизатор
3. Подключил к ПК, появилось Неизвестное устройство. Установил драйвер, встроенный в windows 10/11 по инструкции из шапки.
4. Теперь надо синхронизировать джойстик с модулем. Выбрал вариант с Arduino, так как есть под рукой несколько разных моделей. Так как логический уровень должен быть 3.3В, то взял Arduino Due. Можно взять другую и заморочиться с согласованием.
5. Припаиваем Data, Clock и Sync (2, 3, 13 пин или к ноге кнопки). Если что, то можно взять любую кнопку и с ее помощью давать понять Ардуино, что мы хотим синхронизировать джой. От модуля нам надо только Data и Clock.
6. Пишем программу для Ардуино. Изучив варианты из шапки, выбросил сон, добавил фильтр от дребезга. Может и лишнее, но делает ровно то, что нужно.
Код Ардуино
#define sync_pin 2 //sync button
#define data_pin 3 //data line
#define clock_pin 4 //clock line
int led_cmd[10] = {0,0,1,0,0,0,0,1,0,0}; //Activates/initialises the LEDs, leaving the center LED lit.
int anim_cmd[10] = {0,0,1,0,0,0,0,1,0,1}; //Makes the startup animation on the ring of light.
int sync_cmd[10] = {0,0,0,0,0,0,0,1,0,0}; //Initiates the sync process.
int previousState = HIGH;
unsigned int previousPress;
volatile int buttonFlag;
int buttonDebounce = 20;
void sendData(int cmd_do[]) {
pinMode(data_pin, OUTPUT);
digitalWrite(data_pin, LOW); //start sending data.
int prev = 1;
for(int i = 0; i < 10; i++){
while (prev == digitalRead(clock_pin)){} //detects change in clock
prev = digitalRead(clock_pin);
// should be after downward edge of clock, so send bit of data now
digitalWrite(data_pin, cmd_do[i]);
while (prev == digitalRead(clock_pin)){} //detects upward edge of clock
prev = digitalRead(clock_pin);
}
digitalWrite(data_pin, HIGH);
pinMode(data_pin, INPUT);
}
7. В итоге при подключении модуля с Ардуино весело зажигаются диоды, как первоначально задумано в коде. После нажатия на кнопку джой прекрасно синхронизируется и это также сопровождается огоньками. Вот только не показывает какой джой подключен. Далее убираем Ардуино и спокойно пользуемся связкой модуль + синхронизированный джойстик. Если модуль воткнуть в другой USB разъем, то нужно драйвер ставить заново, или править драйвер, чтобы автоматом подхватывал vid pid модуля.
Всем удачи!