0

所以,我想做的是在按下按钮时运行一段代码(我暂时使用右箭头键),并继续循环运行它,直到该键被释放。

所以,我当前的代码看起来像这样(我已经简化了它,因为它使用的是 SerialPorts,而且代码不容易理解):

Private Sub Form1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown

    Select Case e.KeyCode

        Case Keys.Right

            Do Until (CODE LOOKING FOR RIGHT-ARROW KEY RELEASE)
                SerialPort1.Write("right")
            Loop

            e.Handled = True
            SerialPort1.Close()
End Sub

最终,我想做的是通过串口功能控制和arduino。我已经把它连接到一辆便宜的遥控车上(我通常有几个 arduino 项目在路上),并且有代码可以让我通过 IDE 本身的箭头键来控制它。

但是,我对 VB.NET 的了解有限(我只接触了几年),所以我在谷歌的帮助下有点挣扎,在试图弄清楚如何保持串行端口时,这是一个上帝的结局打开(由于我的代码中的逻辑错误,它一直关闭)。

目标是,一旦我可以在 VB.NET 中通过箭头键控制它,我就可以设置一个更高级的程序,允许预编程路线(例如,我可以尝试“教”汽车指令集,以便我可以让它自动跟随电路,并将各种预编程的路线加载到其中)。我还计划一个屏幕上的 gui 来显示按下了什么按钮,以及我想到的任何其他内容。

此外,鉴于这是一个原型,我打算最终将 arduino 和 VB 程序连接到我的爱好级 rc,看看我是否可以得到带有预编程指令的计算机程序,以击败我的赛道。

好吧,在那篇小论文之后,我想这只是提前感谢,我项目其他领域的任何建议也很感激=)

4

1 回答 1

0

Why make this complicated. It looks like you want to send something as long as the key is down, and then close the port when it is released.

Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
    If e.KeyCode = Keys.Right AndAlso keydelay >= 1 Then
        Debug.WriteLine("DWN") 'SerialPort1.Write("right")
        e.Handled = True
    ElseIf e.KeyCode = Keys.Right Then
        keydelay += 1
    End If
End Sub

Dim keydelay As Integer = 0

Private Sub Form1_KeyUp(sender As Object, e As KeyEventArgs) Handles Me.KeyUp
    If e.KeyCode = Keys.Right Then
        keydelay = 0
        Debug.WriteLine("UP") 'SerialPort1.Close()
    End If
End Sub
于 2014-04-06T14:56:15.390 回答