Line 1: |
Line 1: |
− | === Logitech Attack 3 Controller ===
| + | [[File:RedJoystick.jpg|thumb|200px|The Red Joystick]] |
| | | |
− | <nowiki> Attribute VB_Name = "Module1"
| + | There are two types of joystick available for our social sciences researchers: |
− | 'Dieser Source stammt von http://www.vb-fun.de
| + | *[[#Red Joystick|TSG Red Joystick]], a custom built, unimaginatively named, single-axis joystick with a bright red base. |
− | 'und kann frei verwendet werden. Für eventuelle Schäden
| + | *[[#Logitech Attack 3|Logitech Attack 3]], a commercial multi-axis joystick controller. |
− | '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
| + | == Red Joystick == |
| | | |
− | Dim DX As New DirectX7
| + | === Installation === |
− | Dim DI As DirectInput
| + | The Red Joystick is a [[wikipedia:plug and play|plug and play]] USB device. |
− | 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
| + | === Configuration === |
− | 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)
| + | When connected to a PC via USB, the Red Joystick will emulate a serial port. The following COM port settings should be used: |
− | 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()
| + | {| class="wikitable" |
− | 'öffne Systemsteuerung
| + | |- |
− | DI.RunControlPanel Jsbilder.hWnd
| + | | Baudrate |
− | End Sub
| + | | 115200 |
| + | |- |
| + | | Parity |
| + | | None |
| + | |- |
| + | | Data bits |
| + | | 8 |
| + | |- |
| + | | Stop bits |
| + | | 1 |
| + | |- |
| + | | Flow control |
| + | | None |
| + | |- |
| + | | CTS Control |
| + | | Off |
| + | |- |
| + | | DSR Out Control |
| + | | Off |
| + | |- |
| + | | DSR In Control |
| + | | Off |
| + | |- |
| + | | RTS Control |
| + | | Off |
| + | |- |
| + | | Set FIFO Interrupt |
| + | | Off |
| + | |} |
| | | |
− | Public Sub DInput_Kill()
| + | ===Presentation=== |
− | Dim i As Single
| + | '''Example PCL code you can program a handle to send a marker:''' |
− | 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 | + | active_buttons = 0; |
− | Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\..\..\..\WINDOWS\system32\stdole2.tlb#OLE Automation
| + | begin; |
− | Reference=*\G{E1211242-8E94-11D1-8808-00C04FC2C602}#1.0#0#..\..\..\..\WINDOWS\system32\dx7vb.dll#DirectX 7 for Visual Basic Type Library
| + | picture { |
− | Module=Module1; Module1.bas | + | text { caption = " "; font_size = 16; } t_Text1; x = 0; y = 0; |
− | Form=js.frm | + | } P_Text; |
− | Startup="Jsbilder"
| + | begin_pcl; |
− | HelpFile=""
| + | joystick stick = response_manager.get_joystick( 1 ); |
− | ExeName32="jsbilder_zoom_englisch_181006.exe"
| + | loop int i = 1 |
− | Command32=""
| + | until false |
− | Name="joystick_bilder" | + | begin |
− | HelpContextID="0" | + | stick.poll( ); |
− | CompatibleMode="0" | + | t_Text1.set_caption("coordinates: " + string(stick.x()) + ":" + string(stick.y()), true); |
− | MajorVer=1 | + | P_Text.present(); |
− | MinorVer=0 | + | end; |
− | 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]
| + | ==== Python ==== |
− | AutoRefresh=1</nowiki>
| + | <syntaxhighlight lang="python" line> #!/usr/bin/env python |
− | | |
− | === Red Joystick (Serial Based) === | |
− | | |
− | <nowiki> #!/usr/bin/env python
| |
| from rusocsci import joystick, utils | | from rusocsci import joystick, utils |
| import logging, time | | import logging, time |
Line 238: |
Line 81: |
| for i in range(15): | | for i in range(15): |
| print("x: {}".format(j.getX())) | | print("x: {}".format(j.getX())) |
− | time.sleep(1)</nowiki> | + | time.sleep(1) |
| + | </syntaxhighlight> |
| + | |
| + | == Logitech Attack 3 == |
| + | [[File:logitech_joystick.jpg|thumb|200px|Logitech Attack 3 Joystick]] |
| + | |
| + | === Installation === |
| + | |
| + | The Logitech Attack 3 joystick requires a DirectX 7 DLL file to be installed on your computer. If it hasn't been installed yet, please follow the instructions below. |
| + | |
| + | ==== Windows 7 32bit ==== |
| + | |
| + | # Download [[media:dx7dll.zip | dx7vb.dll]]. |
| + | # Extract the zip and copy the .dll file into the following folder: '''<tt>C:\Windows\System32</tt>''' |
| + | # Open the Windows Command Prompt with '''Administrator rights'''. |
| + | # Register the DLL file by executing the following command:<br /> <code style="background-color:#000; color:#fff; padding:1px 3px;">C:\Windows\System32\regsvr32 dx7vb.dll</code> |
| + | # When done correctly, you should see the following message:<br /><br />[[file:regsvr32.jpg]] |
| + | <br /> |
| + | |
| + | ==== Windows 7 64bit and Windows 10 64bit ==== |
| + | |
| + | # Download [[media:dx7dll.zip | dx7vb.dll]]. |
| + | # Extract the zip and copy the .dll file into the following folder: '''<tt>C:\Windows\SysWow64</tt>''' |
| + | # Open the Windows Command Prompt with '''Administrator rights'''. |
| + | # Register the DLL file by executing the following command:<br /> <code style="background-color:#000; color:#fff; padding:1px 3px;">C:\Windows\SysWow64\regsvr32 dx7vb.dll</code> |
| + | # When done correctly, you should see the following message:<br /><br />[[file:regsvr32.jpg]] |