Hello everybody. I’ve a problem. I’ve connected to the computer a joystick (PS1) to an adapter called “Konig electronic” which is connected to the pc through a usb cable. I want to control it with a c# program. I’ve used slimDX dll but it doesn’t work. When i use a PSX simulation software the joystick works, but when i try to control it with a c# code it doesn’t work. please help me.
I want to get the pressed buttons, from PS1 joystick, and display it into label2.
**PS: Sorry for my bad english but i’m italian! **
My C# project is:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SlimDX.DirectInput;
namespace JoyStick
{
public partial class Form1 : Form
{
List<DeviceInstance> directInputList = new List<DeviceInstance>();
DirectInput directInput = new DirectInput();
SlimDX.DirectInput.Joystick gamepad;
SlimDX.DirectInput.JoystickState state;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
directInputList.AddRange(directInput.GetDevices(DeviceClass.GameController, DeviceEnumerationFlags.AttachedOnly));
gamepad = new SlimDX.DirectInput.Joystick(directInput, directInputList[0].InstanceGuid);
}
private void button1_Click(object sender, EventArgs e)
{
timer1.Start();
}
private void button2_Click(object sender, EventArgs e)
{
//gamepad.Unacquire();
timer1.Stop();
}
private void timer1_Tick(object sender, EventArgs e)
{
if (gamepad.Acquire().IsFailure)
return;
if (gamepad.Poll().IsFailure)
return;
if (SlimDX.Result.Last.IsFailure)
return;
state = gamepad.GetCurrentState();
bool] buttons = state.GetButtons();
for (int i = 0; i < buttons.Length; i++)
if (buttons*)
label2.Text = i.ToString();
lbl_np.Text = Convert.ToString(buttons.Length);
gamepad.Unacquire();
}
}
Welcome to the Chief Delphi forum!
This is a community dedicated to various robotics competitions for high school students and their adult mentors.
The community here doesn’t use slimDX, in general, though you may find somebody who uses it for their day job or for side projects. You’d probably have better luck posting on a forum with an active slimDX community:
Hello,
I used Slim DX and C# to create a scouting system that used ps3 controllers to change several different numbers. Here is the part of my code that gets all the usb joysticks connected to the computer.
namespace FalconScoutingSoftware
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
GetSticks();
Sticks = GetSticks();
stick1 = stick;
timer1.Enabled = true;
}
DirectInput Input = new DirectInput();
SlimDX.DirectInput.Joystick stick;
Joystick] Sticks;
Joystick stick1;
//Thumstick variables.
int yValue = 0;
int xValue = 0;
int zValue = 0;
int rotationZValue = 0;
private void Form1_Load(object sender, EventArgs e)
{
Joystick] joystick = GetSticks();
}
public Joystick] GetSticks()
{
List<SlimDX.DirectInput.Joystick> sticks = new List<SlimDX.DirectInput.Joystick>(); // Creates the list of joysticks connected to the computer via USB.
foreach (DeviceInstance device in Input.GetDevices(DeviceClass.GameController, DeviceEnumerationFlags.AttachedOnly))
{
// Creates a joystick for each game device in USB Ports
try
{
stick = new SlimDX.DirectInput.Joystick(Input, device.InstanceGuid);
stick.Acquire();
// Gets the joysticks properties and sets the range for them.
foreach (DeviceObjectInstance deviceObject in stick.GetObjects())
{
if ((deviceObject.ObjectType & ObjectDeviceType.Axis) != 0)
stick.GetObjectPropertiesById((int)deviceObject.ObjectType).SetRange(-100, 100);
}
// Adds how ever many joysticks are connected to the computer into the sticks list.
sticks.Add(stick);
}
catch (DirectInputException)
{
}
}
return sticks.ToArray();
}
//Creates the StickHandlingLogic Method which takes all the joysticks in the sticks List and puts them into a timer.
public void timer1_Tick(object sender, EventArgs e)
{
for (int i = 0; i < Sticks.Length; i++)
{
StickHandlingLogic(Sticks*, i);
}
}
}
}
This will be the method that is called by the timer every time it ticks:
void StickHandlingLogic(Joystick stick, int id)
{
// Creates an object from the class JoystickState.
JoystickState state = new JoystickState();
state = stick.GetCurrentState(); //Gets the state of the joystick
//These are for the thumbstick readings
yValue = -state.Y;
xValue = state.X;
zValue = state.Z;
rotationZValue = -state.RotationZ;
bool] buttons = state.GetButtons(); // Stores the number of each button on the gamepad into the bool] butons.
//Here is an example on how to use this for the joystick in the first index of the array list
if(id == 0)
{
// This is when button 0 of the gamepad is pressed, the label will change. Button 0 should be the square button.
if(buttons[0])
{
label1.Text = "Worked";
}
}
}
I’ve solved the problem!! i’ve connected the adapter to the pc, debugged the program and after i’ve connected the joystick to the adapter… and it works!