1

最近、ROV プロジェクトのコードに取り組んでいます。私の目標は、XBOX 360 コントローラーを構成して全体を制御することでした。これまでのところ、ジョイスティックを除いて、すべてがうまく機能しています。駆動モーターである程度動作するようになりましたが、誰かがコードを簡単に見て、より効率的または信頼性の高い方法があるかどうかを確認していただければ幸いです。ジョイスティックをすばやくフリックすると、ジョイスティックの中心が 0 のときにモーターが切れないことがあることがわかりました。競技中に私に対処しません。とにかく、これが私が現在使用しているコードです。私が本当に気にかけているのはジョイスティックだけです。

Imports Microsoft.Xna.Framework
Imports Microsoft.Xna.Framework.Input
Public Class Form1
Dim WithEvents MC1 As Phidget21COM.PhidgetMotorControl
Dim WithEvents MC2 As Phidget21COM.PhidgetMotorControl

Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    'Kills the power to the motors and disconnects the Phidget.
    MC1.Velocity(0) = 0
    MC1.Velocity(1) = 0
    MC1.Close()
    MsgBox("Now safe to remove devices")
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    'Creates a new instance of the motor controller (For drives)
    MC1 = New Phidget21COM.PhidgetMotorControl
    MC1.Open(15100)
    MC1.WaitForAttachment(3000)
    'Checks phidget attached status
    If MC1.IsAttached = True Then
        CheckBox2.Checked = True
    Else
        CheckBox2.Checked = False
        MsgBox("Connection could not be established. Check hardware and restart the program.")
    End If
    'Checks joystick attached status
    JoyConnect.Text = ""
    Threading.Thread.Sleep(1000)
    If GamePad.GetState(PlayerIndex.One).IsConnected = True Then
        JoyConnect.Text = "Controller Connected!"
        CheckBox1.Checked = True
    Else
        JoyConnect.Text = "Not Connected. :("
    End If

End Sub

Private Sub JoySticks()

    'Left Joystick
    Dim LY As Integer
    Dim LX As Integer
    LY = GamePad.GetState(PlayerIndex.One).ThumbSticks.Left.Y * 100
    LX = GamePad.GetState(PlayerIndex.One).ThumbSticks.Left.X * 100
    LX1.Text = LX
    LY1.Text = LY
    If LY > 0 Then
        MC1.Velocity(0) = LY
        MC1.Velocity(1) = LY
    ElseIf LY < 0 Then
        MC1.Velocity(0) = LY
        MC1.Velocity(1) = LY
    ElseIf LX > 0 Then
        MC1.Velocity(0) = LX
        MC1.Velocity(1) = LX * -1
    ElseIf LX < 0 Then
        MC1.Velocity(0) = LX
        MC1.Velocity(1) = LX * -1
    ElseIf LX Or LY = 0 Then           '<--- Seemed to fix some issues with
        MC1.Velocity(0) = 0            'the motors not stopping when the stick
        MC1.Velocity(1) = 0            'centred to 0.
    End If

    'Right Joystick
    Dim RY As Integer
    Dim RX As Integer
    RY = GamePad.GetState(PlayerIndex.One).ThumbSticks.Right.Y * 100
    RX = GamePad.GetState(PlayerIndex.One).ThumbSticks.Right.X * 100
    RY1.Text = RY
    RX1.Text = RX



End Sub

Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    'Frequently updates the joysticks and motors. 1000 Updates/Second. (1ms)
    JoySticks()
End Sub
End Class
4

0 に答える 0