JoySticks

From TSG Doc
Revision as of 15:04, 31 March 2014 by 131.174.202.37 (talk)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Logitech Attack 3 Controller

 Attribute VB_Name = "Module1"
 'Dieser Source stammt von http://www.vb-fun.de
 'und kann frei verwendet werden. Für eventuelle Schäden
 'wird nicht gehaftet.

 'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
 'Ansonsten viel Spaß und Erfolg mit diesem Source !

 Option Explicit

 Dim DX As New DirectX7
 Dim DI As DirectInput
 Dim diJoystick() As DirectInputDevice
 Const JOYSTICKCENTERED = 32768
 Dim JSButton() As Single
 Dim Button() As Long
 Public test
 Public jpos As Integer
 Public Const UNKLAR = 99
 Public Const MITTE = 0
 Public Const WEG = 1
 Public Const HIN = 2
 Public Const GANZ_WEG = 3
 Public Const GANZ_HIN = 4
 Public Const ANSCHLAG_WEG = 5
 Public Const ANSCHLAG_HIN = 6
 Public Const WEITER_HIN = 7
 Public Const WEITER_WEG = 8
 Public jsknopf As Boolean
 Public m1, m2, v1, v2, v3, h1, h2, h3
 '
 Public Declare Function ShowCursor Lib "user32" (ByVal bShow As Long) As Long
 '
 Public Function DInput_Init() As Boolean
     Dim Caps As DIDEVCAPS
     Dim diEnumObjects As DirectInputEnumDeviceObjects
     Dim enumDevice As DirectInputEnumDevices
     Dim i As Single
    
     On Error GoTo ErrEnd
       
     'erstelle das DirectInput-Objekt
     Set DI = DX.DirectInputCreate()
     
     'Auflistung aller angeschlossenen Joysticks einlesen
     Set enumDevice = DI.GetDIEnumDevices(DIDEVTYPE_JOYSTICK, DIEDFL_ATTACHEDONLY)
     
     If enumDevice.GetCount = 0 Then
         MsgBox "There are no Joysticks connected to this PC!", vbInformation
         Exit Function
     End If
     
     ReDim diJoystick(enumDevice.GetCount) As DirectInputDevice
     ReDim JSButton(enumDevice.GetCount) As Single
     'und nun pro Joystick
     For i = 1 To enumDevice.GetCount
         'setze Input-Objekt pro Joystick
         Set diJoystick(i) = DI.CreateDevice(enumDevice.GetItem(i).GetGuidInstance)
         'hole Produktname
         Jsbilder.List2.AddItem enumDevice.GetItem(i).GetProductName
         'setze DirectInput DatenFormat auf Joystick
         diJoystick(i).SetCommonDataFormat DIFORMAT_JOYSTICK
         'setze cooperative Level
         diJoystick(i).SetCooperativeLevel Jsbilder.hWnd, DISCL_BACKGROUND Or DISCL_EXCLUSIVE
         'hole Fähigkeiten des Joysticks
         diJoystick(i).GetCapabilities Caps
         'irgendwelche Fähigkeiten hat der Joystick hoffentlich
         If Caps.lFlags Then
             'hole Button-Auflistung vom Joystick
             Set diEnumObjects = diJoystick(i).GetDeviceObjectsEnum(DIDFT_BUTTON)
             'wieviele Button hat der Joystick
             JSButton(i) = diEnumObjects.GetCount
             ReDim Button(i, diEnumObjects.GetCount)
             diJoystick(i).Acquire
             diJoystick(i).Poll
             Set diEnumObjects = Nothing
         End If
     Next i
     
     DInput_Init = True
     Exit Function
 ErrEnd:
     MsgBox "Direct Input konnte nicht initialisiert werden!" & vbCr & _
         "Anwendung wird beendet.", vbExclamation
     DInput_Init = False
 End Function

 Public Function CheckInput() As Integer
     Dim JoystickState As DIJOYSTATE
     Dim i As Single
     Dim strhilf As String
     Dim temp, jpv, j
     'On Error Resume Next
     j = 0
 s1:
     j = j + 1
     'stelle Verbindung her
     diJoystick(Jsbilder.List2.ListIndex + 1).Acquire
     'mache Daten verfügbar
     diJoystick(Jsbilder.List2.ListIndex + 1).Poll
     'hole aktuelle Daten
     diJoystick(Jsbilder.List2.ListIndex + 1).GetDeviceState Len(JoystickState), JoystickState
     
     'frmMain.txt_XY.Text = "X: " & (JoystickState.x - JOYSTICKCENTERED) & vbCrLf & _
     '    "Y: " & (JoystickState.y - JOYSTICKCENTERED) & vbCrLf & _
     '    "Z: " & (JoystickState.z - JOYSTICKCENTERED)

     temp = 32768 - Val(JoystickState.y - JOYSTICKCENTERED)
     jpos = UNKLAR
     If temp > m1 And temp < m2 Then jpos = MITTE
     '
     If temp < m1 And temp > v1 Then jpos = HIN
     If temp > v2 And temp < v1 Then jpos = WEITER_HIN
     If temp > v3 And temp < v2 Then jpos = GANZ_HIN
     If temp < v3 Then jpos = ANSCHLAG_HIN
     '
     If temp > m2 And temp < h1 Then jpos = WEG
     If temp > h1 And temp < h2 Then jpos = WEITER_WEG
     If temp > h2 And temp < h3 Then jpos = GANZ_WEG
     If temp > h3 Then jpos = ANSCHLAG_WEG
     '
     If JoystickState.buttons(0) > 0 Then jsknopf = True Else jsknopf = False
     'stelle Verbindung her
     diJoystick(Jsbilder.List2.ListIndex + 1).Acquire
     'mache Daten verfügbar
     diJoystick(Jsbilder.List2.ListIndex + 1).Poll
     'hole aktuelle Daten
     diJoystick(Jsbilder.List2.ListIndex + 1).GetDeviceState Len(JoystickState), JoystickState
     
     'frmMain.txt_XY.Text = "X: " & (JoystickState.x - JOYSTICKCENTERED) & vbCrLf & _
     '    "Y: " & (JoystickState.y - JOYSTICKCENTERED) & vbCrLf & _
     '    "Z: " & (JoystickState.z - JOYSTICKCENTERED)
     
     temp = 32768 - Val(JoystickState.y - JOYSTICKCENTERED)
     jpv = UNKLAR
     '
     If temp > m1 And temp < m2 Then jpv = MITTE
     '
     If temp < m1 And temp > v1 Then jpv = HIN
     If temp > v2 And temp < v1 Then jpv = WEITER_HIN
     If temp > v3 And temp < v2 Then jpv = GANZ_HIN
     If temp < v3 Then jpv = ANSCHLAG_HIN
     '
     If temp > m2 And temp < h1 Then jpv = WEG
     If temp > h1 And temp < h2 Then jpv = WEITER_WEG
     If temp > h2 And temp < h3 Then jpv = GANZ_WEG
     If temp > h3 Then jpv = ANSCHLAG_WEG
     If jpos <> jpv Then jpos = UNKLAR
     If jpos = UNKLAR Then
     If j < 10 Then GoTo s1
     End If
     '
     If test Then
     Jsbilder.Label2.Visible = True
     If jpos = UNKLAR Then Jsbilder.Label2.Caption = "UNKLAR " + CStr(temp)
     If jpos = MITTE Then Jsbilder.Label2.Caption = "MITTE " + CStr(temp)
     If jpos = WEG Then Jsbilder.Label2.Caption = "WEG " + CStr(temp)
     If jpos = GANZ_WEG Then Jsbilder.Label2.Caption = "GANZ_WEG " + CStr(temp)
     If jpos = ANSCHLAG_WEG Then Jsbilder.Label2.Caption = "ANSCHLAG_WEG " + CStr(temp)
     If jpos = HIN Then Jsbilder.Label2.Caption = "HIN " + CStr(temp)
     If jpos = GANZ_HIN Then Jsbilder.Label2.Caption = "GANZ_HIN " + CStr(temp)
     If jpos = ANSCHLAG_HIN Then Jsbilder.Label2.Caption = "ANSCHLAG_HIN " + CStr(temp)
     If jpos = WEITER_WEG Then Jsbilder.Label2.Caption = "WEITER_WEG " + CStr(temp)
     If jpos = WEITER_HIN Then Jsbilder.Label2.Caption = "WEITER_HIN " + CStr(temp)
     End If
     CheckInput = jpos
 End Function

 Public Sub DInput_ControlPanel()
     'öffne Systemsteuerung
     DI.RunControlPanel Jsbilder.hWnd
 End Sub

 Public Sub DInput_Kill()
     Dim i As Single
     If Jsbilder.List2.ListCount > 0 Then
         For i = 1 To Jsbilder.List2.ListCount
             Set diJoystick(i) = Nothing
         Next i
     End If
     Set DI = Nothing
     Set DX = Nothing
 End Sub
 Type=Exe
 Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\..\..\..\WINDOWS\system32\stdole2.tlb#OLE Automation
 Reference=*\G{E1211242-8E94-11D1-8808-00C04FC2C602}#1.0#0#..\..\..\..\WINDOWS\system32\dx7vb.dll#DirectX 7 for Visual Basic Type Library
 Module=Module1; Module1.bas
 Form=js.frm
 Startup="Jsbilder"
 HelpFile=""
 ExeName32="jsbilder_zoom_englisch_181006.exe"
 Command32=""
 Name="joystick_bilder"
 HelpContextID="0"
 CompatibleMode="0"
 MajorVer=1
 MinorVer=0
 RevisionVer=0
 AutoIncrementVer=0
 ServerSupportFiles=0
 VersionCompanyName="TUD"
 CompilationType=0
 OptimizationType=0
 FavorPentiumPro(tm)=0
 CodeViewDebugInfo=0
 NoAliasing=0
 BoundsCheck=0
 OverflowCheck=0
 FlPointCheck=0
 FDIVCheck=0
 UnroundedFP=0
 StartMode=0
 Unattended=0
 Retained=0
 ThreadPerObject=0
 MaxNumberOfThreads=1

 [MS Transaction Server]
 AutoRefresh=1

Red Joystick (Serial Based)

 #!/usr/bin/env python
 from rusocsci import joystick, utils
 import logging, time
 
 ## Setup Section
 #logging.getLogger().setLevel(logging.DEBUG) # use this for debug info
 #utils.serialList() # get alist of ports with a joystick or buttonbox connected
 j = joystick.Joystick()
 #j = joystick.Joystick(1) # use this to connect to the second joystick 
 #j = joystick.Joystick(port="COM1") # use this to connect to a joystick on a specific port
 
 ## Experiment Section
 for i in range(15):
 print("x: {}".format(j.getX()))
 time.sleep(1)