Mega ADK подключается к контроллеру PS3 - ошибка OSC did not start error

У меня есть проект, над которым я работаю, в котором используется контроллер PS3 для подключения к Arduino Mega 2560 ADK (встроенный USB). Я пытался проверить соединение контроллера/arduino и не могу обойти ошибку «OSC не запускается» через последовательный монитор.

Я создал новую тему, потому что все темы, которые я читал, были основаны на Mega 2560 плюс защитный экран USB, а не на ADK. Теоретически разницы быть не должно, но лучше перестраховаться, чем сожалеть.

Вот мое оборудование: Arduino Mega 2560 ADK - Контроллер TrendNet TWB-106UB — USB-адаптер Навигационный контроллер PS3 Move (только 1)

Библиотеки: USB_Host_Shield USB_Host_Shield_Library_2.0

Скетч: https://gitlab.com/darren-blum/SHADOW

Однако в целях тестирования я попробовал прямые примеры скетчей из библиотек USB Host. Я пробовал примеры PS3USB и PS3BT. Какой бы скетч я ни пробовал, я не могу пройти мимо "OSC не запускается".

Код, который вызывает эту ошибку:

if (Usb.Init() == -1) {
    Serial.print(F("\r\nOSC did not start"));
    while (1); //halt
  }

Я не уверен, что мне не хватает. Вот один из примеров скетчей целиком:

#include <PS3BT.h>
#include <usbhub.h>

// Удовлетворить IDE, которая также должна видеть статус включения в ino.
#ifdef dobogusinclude
#include <spi4teensy3.h>
#endif
#include <SPI.h>

USB Usb;
//USB-концентратор Hub1(&Usb); // Некоторые ключи имеют внутри концентратор

BTD Btd(&Usb); // Вы должны создать экземпляр Bluetooth Dongle следующим образом
/* You can create the instance of the class in two ways */
PS3BT PS3(&Btd); // Это просто создаст экземпляр
//PS3BT PS3(&Btd, 0x00, 0x15, 0x83, 0x3D, 0x0A, 0x57); // Здесь также будет храниться адрес bluetooth — его можно получить из ключа при запуске скетча

bool printTemperature, printAngle;

void setup() {
  Serial.begin(115200);
#if !defined(__MIPSEL__)
  while (!Serial); // Дождитесь подключения последовательного порта — используется на платах Leonardo, Teensy и других со встроенным последовательным соединением USB CDC
#endif
  if (Usb.Init() == -1) {
    Serial.print(F("\r\nOSC did not start"));
    while (1); // остановка
  }
  Serial.print(F("\r\nPS3 Bluetooth Library Started"));
}
void loop() {
  Usb.Task();

  if (PS3.PS3Connected || PS3.PS3NavigationConnected) {
    if (PS3.getAnalogHat(LeftHatX) > 137 || PS3.getAnalogHat(LeftHatX) < 117 || PS3.getAnalogHat(LeftHatY) > 137 || PS3.getAnalogHat(LeftHatY) < 117 || PS3.getAnalogHat(RightHatX) > 137 || PS3.getAnalogHat(RightHatX) < 117 || PS3.getAnalogHat(RightHatY) > 137 || PS3.getAnalogHat(RightHatY) < 117) {
      Serial.print(F("\r\nLeftHatX: "));
      Serial.print(PS3.getAnalogHat(LeftHatX));
      Serial.print(F("\tLeftHatY: "));
      Serial.print(PS3.getAnalogHat(LeftHatY));
      if (PS3.PS3Connected) { // Контроллер навигации имеет только один джойстик
        Serial.print(F("\tRightHatX: "));
        Serial.print(PS3.getAnalogHat(RightHatX));
        Serial.print(F("\tRightHatY: "));
        Serial.print(PS3.getAnalogHat(RightHatY));
      }
    }

    // Значения аналоговых кнопок можно считать практически со всех кнопок
    if (PS3.getAnalogButton(L2) || PS3.getAnalogButton(R2)) {
      Serial.print(F("\r\nL2: "));
      Serial.print(PS3.getAnalogButton(L2));
      if (PS3.PS3Connected) {
        Serial.print(F("\tR2: "));
        Serial.print(PS3.getAnalogButton(R2));
      }
    }

    if (PS3.getButtonClick(PS)) {
      Serial.print(F("\r\nPS"));
      PS3.disconnect();
    }
    else {
      if (PS3.getButtonClick(TRIANGLE)) {
        Serial.print(F("\r\nTraingle"));
        PS3.setRumbleOn(RumbleLow);
      }
      if (PS3.getButtonClick(CIRCLE)) {
        Serial.print(F("\r\nCircle"));
        PS3.setRumbleOn(RumbleHigh);
      }
      if (PS3.getButtonClick(CROSS))
        Serial.print(F("\r\nCross"));
      if (PS3.getButtonClick(SQUARE))
        Serial.print(F("\r\nSquare"));

      if (PS3.getButtonClick(UP)) {
        Serial.print(F("\r\nUp"));
        if (PS3.PS3Connected) {
          PS3.setLedOff();
          PS3.setLedOn(LED4);
        }
      }
      if (PS3.getButtonClick(RIGHT)) {
        Serial.print(F("\r\nRight"));
        if (PS3.PS3Connected) {
          PS3.setLedOff();
          PS3.setLedOn(LED1);
        }
      }
      if (PS3.getButtonClick(DOWN)) {
        Serial.print(F("\r\nDown"));
        if (PS3.PS3Connected) {
          PS3.setLedOff();
          PS3.setLedOn(LED2);
        }
      }
      if (PS3.getButtonClick(LEFT)) {
        Serial.print(F("\r\nLeft"));
    if (PS3.PS3Connected) {
      PS3.setLedOff();
      PS3.setLedOn(LED3);
    }
  }

  if (PS3.getButtonClick(L1))
    Serial.print(F("\r\nL1"));
  if (PS3.getButtonClick(L3))
    Serial.print(F("\r\nL3"));
  if (PS3.getButtonClick(R1))
    Serial.print(F("\r\nR1"));
  if (PS3.getButtonClick(R3))
    Serial.print(F("\r\nR3"));

  if (PS3.getButtonClick(SELECT)) {
    Serial.print(F("\r\nSelect - "));
    PS3.printStatusString();
  }
  if (PS3.getButtonClick(START)) {
    Serial.print(F("\r\nStart"));
    printAngle = !printAngle;
  }
}
#if 0 // Установите значение 1, чтобы увидеть угол контроллера
    if (printAngle) {
      Serial.print(F("\r\nPitch: "));
      Serial.print(PS3.getAngle(Pitch));
      Serial.print(F("\tRoll: "));
      Serial.print(PS3.getAngle(Roll));
    }
#endif
  }
#if 0 // Установите значение 1, чтобы включить поддержку контроллера Playstation Move.
  else if (PS3.PS3MoveConnected) {
    if (PS3.getAnalogButton(T)) {
      Serial.print(F("\r\nT: "));
      Serial.print(PS3.getAnalogButton(T));
    }
    if (PS3.getButtonClick(PS)) {
      Serial.print(F("\r\nPS"));
      PS3.disconnect();
    }
    else {
      if (PS3.getButtonClick(SELECT)) {
        Serial.print(F("\r\nSelect"));
        printTemperature = !printTemperature;
      }
      if (PS3.getButtonClick(START)) {
        Serial.print(F("\r\nStart"));
        printAngle = !printAngle;
      }
      if (PS3.getButtonClick(TRIANGLE)) {
        Serial.print(F("\r\nTriangle"));
        PS3.moveSetBulb(Red);
      }
      if (PS3.getButtonClick(CIRCLE)) {
        Serial.print(F("\r\nCircle"));
        PS3.moveSetBulb(Green);
      }
      if (PS3.getButtonClick(SQUARE)) {
        Serial.print(F("\r\nSquare"));
        PS3.moveSetBulb(Blue);
      }
      if (PS3.getButtonClick(CROSS)) {
        Serial.print(F("\r\nCross"));
        PS3.moveSetBulb(Yellow);
  }
  if (PS3.getButtonClick(MOVE)) {
    PS3.moveSetBulb(Off);
    Serial.print(F("\r\nMove"));
    Serial.print(F(" - "));
    PS3.printStatusString();
  }
}
if (printAngle) {
  Serial.print(F("\r\nPitch: "));
  Serial.print(PS3.getAngle(Pitch));
  Serial.print(F("\tRoll: "));
  Serial.print(PS3.getAngle(Roll));
}
else if (printTemperature) {
  Serial.print(F("\r\nTemperature: "));
  Serial.print(PS3.getTemperature());
}
  }
#endif
}

, 👍1


1 ответ


1

Я идиот. Я думал Мега 2560 = ADK. Это не. Как только я переделал свою плату с Mega 2560 на ADK, порт USB заработал.

,

Можно принять свой собственный ответ как решение проблемы., @VE7JRO