PlanetSquires Forums

Support Forums => Other Software and Code => Topic started by: paul johansen on September 15, 2009, 12:30:12 PM

Title: How to read values from a USB joystick?
Post by: paul johansen on September 15, 2009, 12:30:12 PM
Hi!

I wonder how I can read the three axes and buttons from a USB joystick? I think this is pretty simple!?
Title: Re: How to read values from a USB joystick?
Post by: TechSupport on September 15, 2009, 06:59:57 PM
I have no idea how to do something like this...... maybe you would get more help for a question like this via the PowerBASIC user forums.

:)
Title: Re: How to read values from a USB joystick?
Post by: jthompson on September 23, 2009, 10:03:19 PM
You'll have to make your own form, add some labels, and change the form and label handles, but this should get you started.  It is very easy.

This was the code I played with while learning it.  It should show the functions, just adjust everything else to make it work for you.

WM_CREATE

JOYSETCAPTURE hWndForm, %JOYSTICKID1, 0, %FALSE '%TRUE
'JOYSETTHRESHOLD %JOYSTICKID1, 65535


CUSTOM

LOCAL X AS SINGLE, Y AS SINGLE, Z AS SINGLE

LOCAL xxMin AS LONG, xxMed AS LONG, xxMax AS LONG
LOCAL yyMin AS LONG, yyMed AS LONG, yyMax AS LONG
LOCAL xx AS LONG, yy AS LONG

xxMin = 0 : xxMed = FIX(xxMax/2) : xxMax = 65535
yyMin = 0 : yyMed = FIX(yyMax/2) : yyMax = 65535

xx = ROUND((X/65535*10),2)-5

SELECT CASE wMsg

        CASE %MM_JOY1MOVE

            FF_CONTROL_SETTEXT (HWND_FRMJOYSTICK_LBLX, STR$(LOWRD(lParam)))
            FF_CONTROL_SETTEXT (HWND_FRMJOYSTICK_LBLY, STR$(HIWRD(lParam)))
           
'100: lParam/32767, -1, *100
X = ((LOWRD(lParam)/32767)-1)*100
Y = ((ABS(HIWRD(lParam)-65535)/32767)-1)*100

FF_CONTROL_SETTEXT (HWND_FRMJOYSTICK_LBLXX, STR$(ROUND((LOWRD(lParam)/65535*10),2)-5))
FF_CONTROL_SETTEXT (HWND_FRMJOYSTICK_LBLYY, STR$(ROUND((HIWRD(lParam)/65535*10),2)-5))

        CASE %MM_JOY1ZMOVE
       
FF_CONTROL_SETTEXT (HWND_FRMJOYSTICK_LBLZ, STR$(lParam))
       
'100:
Z = (ABS(lParam-65535)/65535)*100
'Z = ROUND((ABS(lParam-65535)/65535)*5,2)
FF_CONTROL_SETTEXT (HWND_FRMJOYSTICK_LBLZZ, FORMAT$( Z ,"#.##"))

        CASE %MM_JOY1BUTTONDOWN
            IF (wParam AND %JOY_BUTTON1CHG) THEN FF_CONTROL_SETTEXT (HWND_FRMJOYSTICK_LBLBTN1, "X")
            IF (wParam AND %JOY_BUTTON2CHG) THEN FF_CONTROL_SETTEXT (HWND_FRMJOYSTICK_LBLBTN2, "X")
            IF (wParam AND %JOY_BUTTON3CHG) THEN FF_CONTROL_SETTEXT (HWND_FRMJOYSTICK_LBLBTN3, "X")
IF (wParam AND %JOY_BUTTON4CHG) THEN FF_CONTROL_SETTEXT (HWND_FRMJOYSTICK_LBLBTN4, "X")
                                           
        CASE %MM_JOY1BUTTONUP
            IF (wParam AND %JOY_BUTTON1CHG) THEN FF_CONTROL_SETTEXT (HWND_FRMJOYSTICK_LBLBTN1, "")
            IF (wParam AND %JOY_BUTTON2CHG) THEN FF_CONTROL_SETTEXT (HWND_FRMJOYSTICK_LBLBTN2, "")
            IF (wParam AND %JOY_BUTTON3CHG) THEN FF_CONTROL_SETTEXT (HWND_FRMJOYSTICK_LBLBTN3, "")
IF (wParam AND %JOY_BUTTON4CHG) THEN FF_CONTROL_SETTEXT (HWND_FRMJOYSTICK_LBLBTN4, "")
           
        CASE %WM_DESTROY

            'Stop forwarding the joystick's messages.
            JOYRELEASECAPTURE %JOYSTICKID1

      END SELECT


Anywhere (btnJoystickInfo, for example)

DIM MyJoyCaps AS JOYCAPS
JOYGETDEVCAPS %JOYSTICKID1, MyJoyCaps, SIZEOF(MyJoyCaps)
MSGBOX STR$(MyJoyCaps.wMid),,"Manufacturer ID"
MSGBOX STR$(MyJoyCaps.wPid),,"Product ID"
MSGBOX MyJoyCaps.szPname,,"Product Name"
MSGBOX STR$(MyJoyCaps.wXmin),,"X Min"
MSGBOX STR$(MyJoyCaps.wXmax),,"X Max"
MSGBOX STR$(MyJoyCaps.wYmin),,"Y Min"
MSGBOX STR$(MyJoyCaps.wYmax),,"Y Max"
MSGBOX STR$(MyJoyCaps.wZmin),,"Z Min"
MSGBOX STR$(MyJoyCaps.wZmax),,"Z Max"
MSGBOX STR$(MyJoyCaps.wNumButtons),,"Number of Buttons"