|
|
|
![]() |
|
|||||||
|
||||||||
|
|
Thread Tools | Rate Thread | Display Modes |
|
#6
|
||||
|
||||
|
Re: Launching a command with a second thumbstick
Quote:
You can simply create a Button like your would a JoystickButton but also pass in a threshold at which point you consider the joystick "pressed". This allows the assignment of multiple commands to different thresholds. Typically we use .5 and -.5 to get both directions from the axis. Once you include the class below you can do the following. I'm assuming you know how to create a JoystickButton in OI. Have the member be an Code:
AnalogJoystickButton* fireDiscButton; Code:
fireDiscButton = new AnalogJoystickButton(shooterStick, XboxController::xbZAxis, -.5); fireDiscButton->WhileHeld(new FireDiscCommand()); In your actual command you can get your joystick from OI and get the actual value of the axis if you need it for speed. AnalogJoystickButton.h: Code:
#ifndef _ANAOLG_JOYSTICK_BUTTON_H__
#define _ANOLOG_JOYSTICK_BUTTON_H__
#include "WPILib.h"
class AnalogJoystickButton : public Button
{
public:
AnalogJoystickButton(GenericHID *joystick, int axisNumber, float threshold);
virtual ~AnalogJoystickButton() {}
virtual bool Get();
private:
GenericHID *m_joystick;
int m_axisNumber;
float m_threshold;
};
#endif
AnalogJoystickButton.cpp: Code:
#include "AnalogJoystickButton.h"
AnalogJoystickButton::AnalogJoystickButton(GenericHID *joystick, int axisNumber, float threshold ) {
m_threshold = threshold;
m_joystick = joystick;
m_axisNumber = axisNumber;
}
bool AnalogJoystickButton::Get()
{
if(m_threshold < 0)
return m_joystick->GetRawAxis(m_axisNumber) < m_threshold;
else if(m_threshold > 0)
return m_joystick->GetRawAxis(m_axisNumber) > m_threshold;
return false;
}
EDIT -- Just to make like easier. XboxController.h: Code:
#ifndef XBOXCONTROLLER_H_
#define XBOXCONTROLLER_H_
#include "WPILib.h"
class XboxController: public Joystick {
public:
static const UINT32 XboxController::xbLeftXAxis;
static const UINT32 XboxController::xbLeftYAxis;
static const UINT32 XboxController::xbZAxis;
static const UINT32 XboxController::xbRightXAxis;
static const UINT32 XboxController::xbRightYAxis;
static const UINT32 XboxController::xbAButton;
static const UINT32 XboxController::xbBButton;
static const UINT32 XboxController::xbXButton;
static const UINT32 XboxController::xbYButton;
static const UINT32 XboxController::xbStartButton;
static const UINT32 XboxController::xbSelectButton;
static const UINT32 XboxController::xbRightBumper;
static const UINT32 XboxController::xbLeftBumper;
static const UINT32 XboxController::xbRightStickCLick;
static const UINT32 XboxController::xbLeftStickClick;
XboxController(UINT32 port);
virtual ~XboxController();
};
#endif /* XBOXCONTROLLER_H_ */
XboxController.cpp Code:
#include "XboxController.h"
const UINT32 XboxController::xbLeftXAxis = 1;
const UINT32 XboxController::xbLeftYAxis = 2;
const UINT32 XboxController::xbZAxis = 3;
const UINT32 XboxController::xbRightXAxis = 4;
const UINT32 XboxController::xbRightYAxis = 5;
const UINT32 XboxController::xbAButton = 1;
const UINT32 XboxController::xbBButton = 2;
const UINT32 XboxController::xbXButton = 3;
const UINT32 XboxController::xbYButton = 4;
const UINT32 XboxController::xbStartButton = 8;
const UINT32 XboxController::xbSelectButton = 7;
const UINT32 XboxController::xbRightBumper = 6;
const UINT32 XboxController::xbLeftBumper = 5;
const UINT32 XboxController::xbRightStickCLick = 10;
const UINT32 XboxController::xbLeftStickClick = 9;
XboxController::XboxController(UINT32 port) : Joystick(port){}
XboxController::~XboxController() {}
Last edited by kylelanman : 17-02-2013 at 22:25. Reason: Added XboxController Class for easier implementation. |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|