Fehler bei serieller Kommunikation - VB in Visual Studio 2015

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von EaranMaleasi.

    Fehler bei serieller Kommunikation - VB in Visual Studio 2015

    Hallo Forum,

    nach der heutigen Registrierung habe ich auch gleich eine Frage zu stellen.
    Ich mag übersichtliche Beiträge, deshalb liste ich gleich das Wichtigste auf:
    • Visual Studio 2015
    • VisualBasic
    • Windows-Forms Projekt

    Als Microcontroller verwende ich einen Arduino UNO. Dieser sendet jede 500 Millisekunden "Hallo Welt" in einer neuen Zeile aus.
    Serieller Monitor der Arduino-IDE gestartet, alles funktioniert.

    Mit untenstehendem Programm in Visual Studio funktioniert das leider nicht so einfach... Ich bin steckengeblieben.
    Wenn ich auf den Button "Verbinden" drücke, fängt der Arduino zwar an, Daten auszusenden (das sehe ich an der blinkenden "TX" LED), allerdings blinkt die Status-LED bei Verbindungsaufbau nicht zweimal, wie sie es tut, wenn ich den seriellen Monitor der Arduino-IDE oder jeden anderen seriellen Monitor starte.

    Ich poste hier mal den Quellcode:




    Quellcode

    1. Imports System
    2. Imports System.IO.Ports
    3. Public Class ArduinoSerialPort
    4. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    5. For Each AvailableSerialPorts As String In SerialPort1.GetPortNames()
    6. ComboBox_SerialPort.Items.Add(AvailableSerialPorts)
    7. TextBox_BaudRate.Text = "9600"
    8. TextBox_BaudRate.Enabled = False
    9. TextBox_ExternalBaudRate.Visible = False
    10. ComboBox_SerialPort.Text = AvailableSerialPorts
    11. SerialPort1.DataBits = 8
    12. SerialPort1.Parity = Parity.None
    13. SerialPort1.StopBits = StopBits.One
    14. SerialPort1.Handshake = Handshake.None
    15. SerialPort1.Encoding = System.Text.Encoding.Default
    16. SerialPort1.ReadTimeout = 10000
    17. Button_SerialConnect.Visible = True
    18. Button_SerialDisConnect.Visible = False
    19. Next
    20. End Sub
    21. Private Sub TrackBar_BaudRate_MouseMove(sender As Object, e As MouseEventArgs) Handles TrackBar_BaudRate.MouseMove
    22. If TrackBar_BaudRate.Value = "0" Then
    23. TextBox_BaudRate.Text = "9600"
    24. TextBox_ExternalBaudRate.Visible = False
    25. End If
    26. If TrackBar_BaudRate.Value = "1" Then
    27. TextBox_BaudRate.Text = "19200"
    28. TextBox_ExternalBaudRate.Visible = False
    29. End If
    30. If TrackBar_BaudRate.Value = "2" Then
    31. TextBox_BaudRate.Text = "28800"
    32. TextBox_ExternalBaudRate.Visible = False
    33. End If
    34. If TrackBar_BaudRate.Value = "3" Then
    35. TextBox_BaudRate.Text = "38400"
    36. TextBox_ExternalBaudRate.Visible = False
    37. End If
    38. If TrackBar_BaudRate.Value = "4" Then
    39. TextBox_BaudRate.Text = "57600"
    40. TextBox_ExternalBaudRate.Visible = False
    41. End If
    42. If TrackBar_BaudRate.Value = "5" Then
    43. TextBox_BaudRate.Text = "115200"
    44. TextBox_ExternalBaudRate.Visible = False
    45. End If
    46. If TrackBar_BaudRate.Value = "6" Then
    47. TextBox_BaudRate.Text = "Type in another Baudrate:"
    48. TextBox_ExternalBaudRate.Visible = True
    49. End If
    50. End Sub
    51. Private Sub Button_SerialConnect_Click(sender As Object, e As EventArgs) Handles Button_SerialConnect.Click
    52. Dim Port As String
    53. Dim BaudRate As String
    54. If Button_SerialConnect.Visible = True Then
    55. If TextBox_ExternalBaudRate.Visible = False Then
    56. BaudRate = TextBox_BaudRate.Text
    57. End If
    58. If TextBox_ExternalBaudRate.Visible = True Then
    59. If TextBox_ExternalBaudRate.Text Is "" Then
    60. BaudRate = "9600"
    61. End If
    62. If TextBox_ExternalBaudRate.Text IsNot "" Then
    63. BaudRate = TextBox_ExternalBaudRate.Text
    64. End If
    65. End If
    66. Port = ComboBox_SerialPort.SelectedItem
    67. Button_SerialConnect.Visible = False
    68. Button_SerialDisConnect.Visible = True
    69. SerialPort1.PortName = Port
    70. SerialPort1.BaudRate = BaudRate
    71. TextBox1.Text = Port
    72. TextBox2.Text = BaudRate
    73. SerialPort1.Open()
    74. End If
    75. End Sub
    76. Private Sub Button_SerialDisConnect_Click(sender As Object, e As EventArgs) Handles Button_SerialDisConnect.Click
    77. If Button_SerialDisConnect.Visible = True Then
    78. If SerialPort1.IsOpen Then
    79. SerialPort1.Close()
    80. End If
    81. Button_SerialConnect.Visible = True
    82. Button_SerialDisConnect.Visible = False
    83. End If
    84. End Sub
    85. Function ReceiveSerialData() As String
    86. Dim Incoming As String
    87. Try
    88. Incoming = SerialPort1.ReadExisting()
    89. If Incoming Is Nothing Then
    90. 'Return "nothing" & vbCrLf
    91. TextBox_ReceivedMessages.Text = "Received Noting"
    92. Else
    93. 'Return Incoming
    94. TextBox_ReceivedMessages.Text = "Hallo Welt"
    95. End If
    96. Catch ex As TimeoutException
    97. TextBox_ReceivedMessages.Text = "TimedOut"
    98. End Try
    99. End Function
    100. End Class






    Der ganze Code ist schon etwas länger geworden als normal... Deshalb liste ich hier nochmal das Wichtigste auf:

    Ich verbinde mich mit dem seriellen Port mithilfe des Kommandos

    Quellcode

    1. SerialPort1.Open()
    , nach vorheriger festlegung des Ports und der BaudRate mithilfe von

    Quellcode

    1. SerialPort1.Port = "COM13"
    und

    Quellcode

    1. SerialPort1.BaudRate = 9600
    .
    Der Arduino verbindet sich zwar mit dem Programm, sendet auch Daten aus, aber ich kann Sie
    1. Mithilfe folgender Anleitung nicht empfangen,
    2. Der Arduino blinkt mit der Status-LED nicht, wie bei jeder anderen seriellen Verbindung, z.B. durch den seriellen Monitor direkt aus der Arduino-IDE.

    Das bedeuted, der Arduino hat sich zwar mit dem Programm verbunden, aber doch nicht ganz...

    Error-Meldungen gibt es natürlich keine, sonst hätte ich das Problem schon gefunden.


    Ich bedanke mich schon im Voraus für Hilfe!




    HIER gibt es ein Bild des Programms.
    Hallo nochmal, ich habe den Fehler gefunden.

    Trotzdem lösche ich es vorerst nicht, das die Problemlösung einige interessieren könnte:

    Am Arduino einfach kein "Hallo Welt" ausgeben, wenn man es in VisualStudio als Byte ausliest.
    Ich gebe auf dem Arduino nun eine "1" aus, und es funktioniert perfekt.

    PCalsVentilator

    PCalsVentilator schrieb:

    Trotzdem lösche ich es vorerst nicht, das die Problemlösung einige interessieren könnte:
    Was aus genau dem Grund auch überhaupt nicht in deiner Macht liegt. Was du aber tun kannst, ist den Thread als erledigt zu markieren. Ganz oben zwischen dem Thread-Titel und dem VB.NET Tag ist so ein roter Kasten. Klick da zweimal drauf, dann sollte der Grün werden