Code, um Werte von Gamepad zu lesen



  • Hallo Zusammen,

    Ich brauche Hilfe!
    Was muss ich alles tun, um von meinem Gamepad (Logitech Rumblepad 2) die Werte der Analogsticks und der einzelnen Buttons lesen zu können. Schlussendlich möchte ich mit diesen Werten weiterarbeiten können (kleine Motoren ansteuern...).
    Ich muss jetzt aber auch zugeben, dass ich sonst nicht viel Ahnung hab vom Programmieren...
    😞

    Kann mir jemand da weiterhelfen?

    ati



  • gibts keine API für des Ding?
    Da musst (vermutlich) irgendwie über den Treiber ran kommen, denk ich mal.



  • Das weiss ich eben nicht.

    Auf jeden Fall hab ich meinen Gamepad schon mit Matlab/Simulink verbunden und da klappt es sehr gut.
    Nur weiss ich nicht, wie mein C-code auszusehen hat...



  • Ich denke mal, dein Gamepad wird genauso im Betriebssystem angesteuert werden, wie ein Normaler Joystick. Du hast mehrere Möglichkeiten:

    - DirectX (DirectInput) benutzen.
    - Die SDL kann auch Joysticks ansteuern.

    Such einfach mal im Internet nach Tutorials.

    Btw.: Das lässt sich mit reinem C++ nicht machen. Du musst also Betriebssystemspeziefische APIs benutzen. Also welches Betriebssystem willst du verwenden?



  • Zuerst fang ich mal mit Windows an.
    Danach sollte es aber mit Linux laufen...
    😕
    Ich suche mal weiter nach tutorials.
    Danke...



  • atilla schrieb:

    Zuerst fang ich mal mit Windows an.
    Danach sollte es aber mit Linux laufen...
    😕
    Ich suche mal weiter nach tutorials.
    Danke...

    Wenn es mit beiden laufen soll, dann versuch es als erstes mit der SDL.



  • SDL ist auch wirklich einfach. Vor allem wenn man auch gleich Grafik, Sound und Netzwerk damit erledigt. Wenn man das denn alles braucht. 😉



  • Versuchs mal mit dem

    Object Oriented Input System

    Forum dazu ist hier:
    http://www.wreckedgames.com/forum/

    Ist plattformübergreifend und C++, keine C Library.



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hallo Zusammen

    Ich habs jetzt mal mit SDL versucht.

    Aber ich bekomme Fehlermeldungen, wenn ich z.B. die Werte der Achsen ausgegeben haben möchte.
    Ich glaube, es könnte daran liegen, dass ich keinen Joystick habe sondern einen Gamepad mit 2 Analogsticks.

    Die Fehlermeldung sieht so aus:
    Unhandled exception at 0x6812ed6b in Test_1.exe: 0xC0000005: Access violation reading location 0xccccccd4.

    Ich hoffe, jemand kann mir weiter helfen!

    Gruss
    Atilla



  • Sieht so aus als ob du per Zeiger auf einen Bereich zugreifen willst, der nicht deinem Prozeß gehört.



  • Mein code sieht folgendermassen aus:

    SDL_Joystick *joy;
    	// Check for joystick
    	if(SDL_NumJoysticks()>0){
    	  // Open joystick
    	  joy=SDL_JoystickOpen(0);
    	  if(joy)
    	  {
    		printf("Opened Joystick 0\n");
    		printf("Name: %s\n", SDL_JoystickName(0));
    
    		//printf("Number of Axes: %s\n", SDL_JoystickNumAxes(joy));
    		//printf("Number of Buttons: %s\n", SDL_JoystickNumButtons(joy));
    		printf("Number of Balls: %s\n", SDL_JoystickNumBalls(joy));
    	  }
    	  else
    		printf("Couldn't open Joystick 0\n");
    

    Meine Probleme tauchen bei Zeile 11 und 12 auf.
    Sonst gibt er mir den richtigen Namen des Gamepads aus!

    Kann es nicht daran liegen, dass mein Gamepad 2 Sticks hat und diese Tatsache den Code überfordert???

    Danke für eure Hilfe...

    Gruss
    atilla



  • Kann es sein, dass du das hier vergessen hast?

    // Initialize the joystick subsystem
    SDL_InitSubSystem(SDL_INIT_JOYSTICK);
    

    http://www.libsdl.org/cgi/docwiki.cgi/SDL_5fJoystickOpen

    Geh bitte immer erstmal davon aus, dass dein Programm einen Fehler hat. Gerade eine Zugriffsverletzung deutet darauf hin.



  • Daran lag es nicht...
    Ich bekomme immer noch die gleiche Fehlermeldung!

    Ich hoffe ich bekomme weitere Vorschläge für eine Lösung....... 😕



  • Das hier läuft bei mir ohne Probleme, 1:1 aus der SDL-Doku übernommen:

    #include <SDL.h>
    #include <stdio.h>
    
    int main()
    {
        SDL_Joystick *joy;
    
        // Initialize the joystick subsystem
        SDL_InitSubSystem(SDL_INIT_JOYSTICK);
    
        // Check for joystick
        if(SDL_NumJoysticks()>0)
        {
            // Open joystick
            joy=SDL_JoystickOpen(0);
    
            if(joy)
            {
                printf("Opened Joystick 0\n");
                printf("Name: %s\n", SDL_JoystickName(0));
                printf("Number of Axes: %d\n", SDL_JoystickNumAxes(joy));
                printf("Number of Buttons: %d\n", SDL_JoystickNumButtons(joy));
                printf("Number of Balls: %d\n", SDL_JoystickNumBalls(joy));
            }
            else
                printf("Couldn't open Joystick 0\n");
    
            // Close if opened
            if(SDL_JoystickOpened(0))
                SDL_JoystickClose(joy);
        }
    }
    

    Kompiliert mit gccsdl-config --cflags --libsjoystick.c -o joystick

    edit: cpp statt code



  • das entspricht auch 1:1 meinem code... aber bei mir geht es nicht!

    Woran könnte das liegen? Ich versuche das ganze im Microsoft Visual Studio...
    Evtl. Fehler mit den libs oder Linker???
    🙄



  • atilla schrieb:

    das entspricht auch 1:1 meinem code... aber bei mir geht es nicht!

    Nein, tut es nicht. Vergleich doch bitte mal genau:

    Dein Code:

    printf("Number of Axes: %s\n", SDL_JoystickNumAxes(joy));
    printf("Number of Buttons: %s\n", SDL_JoystickNumButtons(joy));
    

    Mein Code (aus der Doku kopiert):

    printf("Number of Axes: %d\n", SDL_JoystickNumAxes(joy));
    printf("Number of Buttons: %d\n", SDL_JoystickNumButtons(joy));
    


  • :p
    hattest recht!
    Die Fehlermeldungen sind weg!
    Danke vielmals!

    Ich versuche mit JoystickGetAxis Werte von meinem Gamepad zu lesen...

    Ich hoffe, das klappt auch bald einmal!

    Gruss

    atilla



  • Noch eine Frage:

    Wie soll mein Code aussehen, wenn ich nun dynamisch die Werte auf der Konsole ausgelesen haben möchte?

    SDL_JoyAxisEvent scheint das zu sein, was ich brauche... Aber trotzdem bin ich nicht weitergekommen... 😕

    Probiert hab ich's auch damit

    Sint16 x_move, y_move;
    x_move=SDL_JoystickGetAxis(joy, 0);
    y_move=SDL_JoystickGetAxis(joy, 1);
    printf("x move: %d\n", x_move);
    printf("y move: %d\n", y_move);
    

    das klappt aber nicht wirklich. Ich bekomme bloss den Wert 0.

    Nützliche Hinweise???

    Danke schon im Voraus.

    Gruss
    atilla



  • Auch wenn Du das in einer Endlosschleife machst und die Analogsticks bis zum Anschlag in irgendeine Richtung drückst?

    Zeig bitte mal die Ausgabe von vorher, vielleicht werden die Sticks ja irgendwie anders angesprochen oder Du fragst nicht die richtige Achse ab oä.

    Btw, was meinst Du mit "dynamisch auslesen"? Wie denn sonst? Zeig einfach auch mal Deinen bisherigen Code! Und mach dafür evtl. mal einen frischen Thread auf, jetzt weißt Du ja schon, was Du verwenden möchtest, das dürfte der Thread-Titel reflektieren bzw. man muss nicht unbedingt die ganzen Antworten davor lesen...


Log in to reply