Привет, сообщество!
Помогите понять, это мне с геймпадом не повезло или я криворукий?)
Второй вечер пытаюсь добиться стабильной работы геймпада с Arduino. Подключал к Uno через Trema-Power Shield и без него. Подключал к Nano. Везде плюс-минус один и тот-же результат:
Помогите понять, это мне с геймпадом не повезло или я криворукий?)
Второй вечер пытаюсь добиться стабильной работы геймпада с Arduino. Подключал к Uno через Trema-Power Shield и без него. Подключал к Nano. Везде плюс-минус один и тот-же результат:
- С первого раза геймпад никогда не подключается к приемнику. Поэтому и пришлось изобразить бесконечный цикл на этапе подключения.
- Если случается чудо и он подключается, то сигналы с кнопок приходят так отвратительно, что лучше один раз увидеть, вот 60 секунд страданий (без регистрации и смс). Чтобы получить сообщение о нажатой кнопке приходится давить как не в себя, но и это не дает гарантий.
C++:
#include <PS2X_lib.h>
#define PS2_DAT 2
#define PS2_CMD 3
#define PS2_SEL 4
#define PS2_CLK 5
#define pressures false
#define rumble false
PS2X ps2x;
int error = 0;
byte type = 0;
byte vibrate = 0;
int attemptCount = 0;
void setup(){
Serial.begin(9600);
delay(500);
error = ps2x.config_gamepad(PS2_CLK, PS2_CMD, PS2_SEL, PS2_DAT, pressures, rumble);
while (error != 0) {
attemptCount++;
error = ps2x.config_gamepad(PS2_CLK, PS2_CMD, PS2_SEL, PS2_DAT, pressures, rumble);
if (error == 1)
Serial.print("error: Контроллер не найден. Попытка: ");
else if (error == 2)
Serial.print("error: Контроллер найден, но не принимает команды. Попытка: ");
else if (error == 3)
Serial.print("error: Контроллер найден, но без режима давления. Попытка: ");
Serial.println(attemptCount);
delay(500);
}
type = ps2x.readType();
Serial.println("Контроллер готов к проверке кнопок.");
}
void loop() {
ps2x.read_gamepad(false, vibrate);
if(ps2x.Button(PSB_START))
Serial.println("Start is being held");
if(ps2x.Button(PSB_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);
}
if(ps2x.Button(PSB_PAD_RIGHT)){
Serial.print("Right held this hard: ");
Serial.println(ps2x.Analog(PSAB_PAD_RIGHT), DEC);
}
if(ps2x.Button(PSB_PAD_LEFT)){
Serial.print("LEFT held this hard: ");
Serial.println(ps2x.Analog(PSAB_PAD_LEFT), DEC);
}
if(ps2x.Button(PSB_PAD_DOWN)){
Serial.print("DOWN held this hard: ");
Serial.println(ps2x.Analog(PSAB_PAD_DOWN), DEC);
}
delay(50);
}
Вложения
-
67.3 KB Просмотры: 4
-
415.3 KB Просмотры: 3