库从PS4或Xbox控制器获取输入?

时间:2014-04-05 23:19:06

标签: input controller playstation

我希望通过使用PS4控制器或Xbox 360控制器来控制ROV。我打算通过将控制器连接到计算机然后将其发送到ROV来完成此操作。关于该项目的一些背景信息是,我们将控制器放在顶部,将其发送到计算机,然后我们将通过以太网从计算机发送到ROV上的Arduino。

我已经了解到这可以通过使用Processing在PS3控制器上实现,因为另一个团队已经这样做了,但是我不熟悉那种语言并且没有PS3控制器。但是,我有一个PS4和Xbox 360控制器。

根据我的研究,SDL可能是一个选择,但我正在寻找比我更有经验的人的建议。

1 个答案:

答案 0 :(得分:0)

我的问题被pissed mod删除了,因为它是“无关的”,但我问了同样的问题。无论如何,我用这样的SFML实现了我的PS4控制器支持。其他简单的可能性是SDL。我猜XBox会是一样的。玩得开心

这里有一些示例代码..

sf::Joystick::update();

// Is joystick #0 connected?
m_bGamepadConnected = sf::Joystick::isConnected(0);

if(!m_bGamepadConnected) {
    return;
}

// Does joystick #0 define a X axis?
m_bStickLX = sf::Joystick::hasAxis(0, sf::Joystick::X);
m_bStickLY = sf::Joystick::hasAxis(0, sf::Joystick::Y);
m_bStickRX = sf::Joystick::hasAxis(0, sf::Joystick::Z);
m_bStickRY = sf::Joystick::hasAxis(0, sf::Joystick::R);
m_bStickL2 = sf::Joystick::hasAxis(0, sf::Joystick::U);
m_bStickR2 = sf::Joystick::hasAxis(0, sf::Joystick::V);

m_tJoystick.start(5);
QObject::connect(&m_tJoystick, SIGNAL(timeout() ), this, SLOT(updateGamepad() ) );

这可能对你有帮助..

sf::Joystick::update();

float fStickLX = 0;
float fStickLY = 0;
float fStickRX = 0;
float fStickRY = 0;
float fStickL2 = 0;
float fStickR2 = 0;

// What's the current position of the analog sticks
if(m_bStickLX) {
    fStickLX = sf::Joystick::getAxisPosition(0, sf::Joystick::X) / 100;
}
if(m_bStickLY) {
    fStickLY = sf::Joystick::getAxisPosition(0, sf::Joystick::Y) / 100;
}
if(m_bStickRX) {
    fStickRX = sf::Joystick::getAxisPosition(0, sf::Joystick::Z) / 100;
}
if(m_bStickRY) {
    fStickRY = sf::Joystick::getAxisPosition(0, sf::Joystick::R) / 100;
}
// R2 and L2
if(m_bStickL2) {
    fStickL2 = sf::Joystick::getAxisPosition(0, sf::Joystick::U) + 100;
    fStickL2 /= 200;
}
if(m_bStickR2) {
    fStickR2 = sf::Joystick::getAxisPosition(0, sf::Joystick::V) + 100;
    fStickR2 /= 200;
}

if(m_fStickLX != 0 || m_fStickLY != 0 || m_fStickRX != 0 || m_fStickRY != 0 || m_fStickL2 != fStickL2 || m_fStickR2 != fStickR2) {
    m_bGamepadInUse = true;
} else {
    m_bGamepadInUse = false;
}

m_fStickLX = fStickLX;
m_fStickLY = fStickLY;
m_fStickRX = fStickRX;
m_fStickRY = fStickRY;
m_fStickL2 = fStickL2;
m_fStickR2 = fStickR2;

m_bButLPressed = isButtonPressed(0, 0);
m_bButDPressed = isButtonPressed(0, 1);
m_bButRPressed = isButtonPressed(0, 2);
m_bButTPressed = isButtonPressed(0, 3);

//qDebug() << "m_bButDPressed pressed: " << m_bButDPressed;
static bool bArmToggle = false;
if(m_bButDPressed && !bArmToggle) {
    m_bDeviceArmed = m_bDeviceArmed ? false : true;
    bArmToggle = true;
    qDebug() << "Device armed?: " << m_bDeviceArmed;
}
if(bArmToggle && !m_bButDPressed) {
    bArmToggle = false;
}