JW24F8 mit C#

Dies ist das deutsche Forum für alle Themen um den JoyWarrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

Post Reply
ms99
Posts: 1
Joined: Wed Jun 17, 2009 4:12 pm

JW24F8 mit C#

Post by ms99 »

Gibt es für den JW24F8 Quellcodebeispiele unter C#?

Wie hoch ist hier (Windows + C#) die mögliche Abtastrate?
D.h. wie oft pro Sekunde kann ich im Windows-Programm einen Wert erhalten?

Danke
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: JW24F8 mit C#

Post by Christoph Jung »

Für den JW24F8 haben wir im moment keine Beispiele unter C#. Aber um mit C# (also .Net umgebung) auf Joysticks und andere Eingabegeräte zu kommunizieren ist ein guter Weg DirectX DirectInput.

Stichwörte für Google/ Bing wären:
Microsoft.DirectX.DirectInput
C# Joystick

Ich hab hier ein kurzes Skript, was evtl. hilfreich sein könnte. Hab aber keine Ahnung, wo ich das her hab (ist schon ein weilchen her).

Code: Select all


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.DirectX.DirectInput;

namespace joywarrior
{
    class Program
    {
        static void Main(string[] args)
        {
            Device joystickDevice;
            JoystickState state;
            try
            {
                // Ausgehend, dass nur ein Joywarrior und auch sonst kein anderer Gamecontroller angeschlossen ist!!!

                //Liefert eine Liste der angeschlossenen Gamecontroller
                DeviceList gameControllerList = Manager.GetDevices(DeviceClass.GameControl, EnumDevicesFlags.AttachedOnly);
                Console.WriteLine(gameControllerList.Count + " Joystick angeschlossen");
                
                //Wenn mindestens ein Gamecontroller angeschlossen ist:
                if (gameControllerList.Count > 0)
                {
                    //Zeiger auf das erste (und einzige!) Element in der Liste setzen
                    gameControllerList.MoveNext();

                    //Joywarrior initialisieren
                    joystickDevice = new Device (((DeviceInstance)gameControllerList.Current).InstanceGuid );
                    Console.WriteLine(joystickDevice.ToString());
                    
                    //DirectX bekommt mitgeteilt, dass der Gamecontroller ein Joystick ist
                    joystickDevice.SetDataFormat(DeviceDataFormat.Joystick);
                    //DirectX bekommt mitgeteilt, dass der Joystick verwendet wird
                    joystickDevice.Acquire();


                    for (int i = 0; i < 1000; i++)
                    {
                        Console.Clear();
                        //Die Joystickinformationen werden aktualisiert
                        joystickDevice.Poll();
                        state = joystickDevice.CurrentJoystickState;
                        Console.WriteLine(state.X + "   " + state.Y + "   " + state.Z + "   ");
                        System.Threading.Thread.Sleep(200);
                    }
                
                
                }
            }
            catch (Exception err)
            {
                Console.WriteLine("FindJoysticks()");
                Console.WriteLine(err.Message);
                Console.WriteLine(err.StackTrace);
            }

            Console.ReadKey();
        }
    }
}

Was die Abtastrate betrifft, da ist Windows echt flexibel. Mit den Standard Timern schafft Windows nur ca. 20-25 ms. Wenn man aber den Multimedia-timer verwendet schafft man sogar Zeiten von 1-2 ms. 7-8 ms entsprechen der Masimalen Frequenz des JW24F8. Allerdings hab ich keine ahnung, wie das unter C# funktioniert, da ich das bisher nur unter MFC gemacht hab.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Post Reply