Беспроводной геймпад к ардуино (USB)

Здравствуйте.
Есть вот такой проект подключения геймпада к ардуино.
А геймпад с USB приёмником можно будет подключить к ардуине? Получится считывать команды от геймпада?

Или купить вот такой с блютуз

честно говоря, не использовал ни разу геймпад.
Даже не знаю что и посоветовать.

:frowning:

Я заказала от PS2 на ОЗОН

Джойстик пришел, но ардуина его не видит(

No controller found, check wiring, see readme.txt to enable debug. visit troubleshooting tips
Unknown Controller type

Спойлер
#include <PS2X_lib.h>                                             // Подключаем библиотеку
PS2X ps2x;                                                        // Создаём класс "ps2x"

int  error    = 0;                                                // переменная для определения кода ошибки
byte type     = 0;                                                // переменная для определения типа устройства
byte vibrate  = 0;                                                // переменная для значения работы вибромотора

void setup() {
  Serial.begin(57600);                                            // Инициируем работу последовательного порта на скорости 57600 бод
  //--------------------------------------------------------------//
  error = ps2x.config_gamepad(4, 7, 6, 8, true, true);            // Инициируем работу геймпада, проверяя указанные выводы для подключения (clock, command, attention, data, Pressures, Rumble)
  if (error == 0) {                                               // Если код ошибки = 0, то выводим в монитор порта сообщение, что всё нормально,
    Serial.print("Found Controller,");                            // 
    Serial.print("configured successful.");                       // 
    Serial.print("Try out all the buttons, ");                     // 
    Serial.print("X will vibrate the controller, ");              // нажатие клавиши Х включает работу вибромотора
    Serial.print("faster as you press harder; ");                 // 
    Serial.print("holding L1 or R1 will print out");              // клавиши L1 и R1 включают отображение работы джойстиков ("Стиков")
    Serial.print("the analog stick values. ");                    // 
    Serial.println("updates and to report bugs.");                // 
  } else if (error == 1) {                                        // Если код ошибки = 1, то выводим в монитор порта сообщение, что контроллер не найден. Проверьте подключение или включите режим DEBUG
    Serial.print("No controller found, ");                        // 
    Serial.print("check wiring, see readme.txt ");                // 
    Serial.print("to enable debug. visit ");                      // 
    Serial.println("troubleshooting tips");                       // 
  } else if (error == 2) {                                        // Если код ошибки = 2, то выводим в монитор порта сообщение, что геймпад найден, но не отвечает на команды.
    Serial.print("Controller found but not ");                    // 
    Serial.print("accepting commands. ");                         // 
    Serial.print("see readme.txt to enable debug. ");             // 
    Serial.println("troubleshooting tips");                       // 
  } else if (error == 3) {                                        // Если код ошибки = 3, то выводим в монитор порта сообщение, что геймпад найден, но не вошёл в режим работы аналогового устройства
    Serial.print("Controller refusing to enter ");                // 
    Serial.println("Pressures mode, may not support it. ");       // 
  }
  //--------------------------------------------------------------//
  type = ps2x.readType();                                         // Считываем тип устройства
  switch (type) {                                                 // 
    case 0:                                                       // Если тип = 0, то
      Serial.println("Unknown Controller type");                  // "Неизвестный тип устройства"
      break;                                                      // 
    case 1:                                                       // Если тип = 1, то
      Serial.println("DualShock Controller Found");               // "Найден геймпад DualShock"
      break;                                                      // 
    case 2:                                                       // Если тип = 2, то
      Serial.println("GuitarHero Controller Found");              // "Найден геймпад GuitarHero"
      break;                                                      // 
  }
  //--------------------------------------------------------------//
}

void loop() {
  //--------------------------------------------------------------//
  if (error == 1)                                                 // Если ошибка = 1, то прервать выполнение скетча
    return;
  //--------------------------------------------------------------//
  ps2x.read_gamepad(false, vibrate);                              // инициализируем геймпад (motor_1, motor2), где motor_1 - вибромотор на проводном геймпаде, motor_2 - вибромотор на беспроводном геймпаде
  //--------------------------------------------------------------//
  if (ps2x.Button(PSB_START))                                     // Пока кнопка "Start" НАЖИМАЕТСЯ, то
    Serial.println("Start is being held");                        // выводим сообщение в монитор порта
  if (ps2x.Button(PSB_SELECT))                                    // Пока кнопка "Select" НАЖИМАЕТСЯ, то
    Serial.println("Select is being held");                       // выводим сообщение в монитор порта
  //--------------------------------------------------------------//
  if (ps2x.Button(PSB_PAD_UP)) {                                  // Пока кнопка "СТРЕЛКА ВВЕРХ" НАЖИМАЕТСЯ, то
    Serial.print("Up held this hard: ");                          // выводим сообщение в монитор порта
    Serial.println(ps2x.Analog(PSAB_PAD_UP), DEC);                // выводим сообщение в монитор порта c аналоговым значением
  }
  if (ps2x.Button(PSB_PAD_RIGHT)) {                               // Пока кнопка "СТРЕЛКА ВПРАВО" НАЖИМАЕТСЯ, то
    Serial.print("Right held this hard: ");                       // выводим сообщение в монитор порта
    Serial.println(ps2x.Analog(PSAB_PAD_RIGHT), DEC);             // выводим сообщение в монитор порта c аналоговым значением
  }
  if (ps2x.Button(PSB_PAD_LEFT)) {                                // Пока кнопка "СТРЕЛКА ВЛЕВО" НАЖИМАЕТСЯ, то
    Serial.print("LEFT held this hard: ");                        // выводим сообщение в монитор порта
    Serial.println(ps2x.Analog(PSAB_PAD_LEFT), DEC);              // выводим сообщение в монитор порта c аналоговым значением
  }
  if (ps2x.Button(PSB_PAD_DOWN)) {                                // Пока кнопка "СТРЕЛКА ВНИЗ" НАЖИМАЕТСЯ, то
    Serial.print("DOWN held this hard: ");                        // выводим сообщение в монитор порта
    Serial.println(ps2x.Analog(PSAB_PAD_DOWN), DEC);              // выводим сообщение в монитор порта c аналоговым значением
  }
  //--------------------------------------------------------------//
  vibrate = ps2x.Analog(PSAB_BLUE);                               // Считываем аналоговое значение кнопки "Х" и устанавливаем его в переменную для работы вибромотора
  //--------------------------------------------------------------//
  if (ps2x.NewButtonState()) {                                    // Если кнопка ИЗМЕНИЛА СОСТОЯНИЕ, то вывести один раз:
    if (ps2x.Button(PSB_L3))                                      // Если нажата кнопка "ЛЕВЫЙ ДЖОЙСТИК"
      Serial.println("L3 pressed");                               // выводим сообщение в монитор порта
    if (ps2x.Button(PSB_R3))                                      // Если нажата кнопка "ПРАВЫЙ ДЖОЙСТИК"
      Serial.println("R3 pressed");                               // выводим сообщение в монитор порта
    if (ps2x.Button(PSB_L2))                                      // Если нажата кнопка "ЛЕВЫЙ ШИФТ L2"
      Serial.println("L2 pressed");                               // выводим сообщение в монитор порта
    if (ps2x.Button(PSB_R2))                                      // Если нажата кнопка "ПРАВЫЙ ШИФТ R2"
      Serial.println("R2 pressed");                               // выводим сообщение в монитор порта
    if (ps2x.Button(PSB_GREEN))                                   // Если нажата кнопка "ТРЕУГОЛЬНИК"
      Serial.println("Triangle pressed");                         // выводим сообщение в монитор порта
  }
  //--------------------------------------------------------------//
  if (ps2x.ButtonPressed(PSB_RED))                                // Если кнопка "КРУГ" была НАЖАТА, то
    Serial.println("Circle just pressed");                        // выводим сообщение в монитор порта
  if (ps2x.ButtonReleased(PSB_PINK))                              // Если кнопка "КВАДРАТ" была ОТПУЩЕНА, то
    Serial.println("Square just released");                       // выводим сообщение в монитор порта
  if (ps2x.NewButtonState(PSB_BLUE))                              // Если кнопка "Х" была НАЖАТА ИЛИ ОТПУЩЕНА, то
    Serial.println("X just changed");                             // выводим сообщение в монитор порта
  //--------------------------------------------------------------//
  if (ps2x.Button(PSB_L1) || ps2x.Button(PSB_R1))                 // Если кнопка "ШИФТ L1" ИЛИ "ШИФТ R1" нажата, то
  {
    Serial.print("Stick Values:");                                // выводим аналоговые значения джойстиков:
    Serial.print(ps2x.Analog(PSS_LY), DEC);                       // Левый джойстик, ось Оу
    Serial.print(",");                                            // 
    Serial.print(ps2x.Analog(PSS_LX), DEC);                       // Левый джойстик, ось Ох
    Serial.print(",");                                            // 
    Serial.print(ps2x.Analog(PSS_RY), DEC);                       // Правый джойстик, ось Оу
    Serial.print(",");                                            // 
    Serial.println(ps2x.Analog(PSS_RX), DEC);                     // Правый джойстик, ось Ох
  }
  //--------------------------------------------------------------//
  delay(50);                                                      // Задержка 50мс
}

error = ps2x.config_gamepad(4, 7, 6, 8, true, true);

Да, так подключено.

image

На приёмнике горит лампочка RX даже когда джойстик выключен. Если отключить clock и перезагрузить питанием, RX светится когда джойстик включаю.

Убрала проверку на ошибки и выбор типа контроллера и все ОК. Рано панику навела)

Библиотека не поддерживает подключение на горячую, по этому если радиомодуль не переходит в режим поиска вам нужно: Отключить питание от радиомодуля, затем подключить питание снова снова. При необходимости перезагрузить ардуино кнопкой ресет.

И это нужно учитывать.