最近、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