Hi!
I wonder how I can read the three axes and buttons from a USB joystick? I think this is pretty simple!?
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.
:)
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"