Difference between revisions of "JoySticks"
Jump to navigation
Jump to search
Line 1: | Line 1: | ||
=== Logitech Attack 3 Controller === | === Logitech Attack 3 Controller === | ||
− | + | <nowiki> 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</nowiki> | ||
<nowiki> Type=Exe | <nowiki> Type=Exe |
Revision as of 14:04, 31 March 2014
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)