здравствуйте, люди умные подскажитe новичку подключаю контроллер от ps2 к ардуино библиотеку использую PS2X беру стандартный пример из библиотеки (там один для платы ардуино уно) при включении геймпада приемник мигать перстал мол есть соединение но код пишет в монитор порта “unknown controller type” кто работал подскажи́те с чем ошибка?
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мс
}#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мс