Vb Net Bluetooth HC-05 Arduino

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von SoEinVBler.

    Vb Net Bluetooth HC-05 Arduino

    Hallo zusammen,
    Porgrammiere gerade eine App um mir Daten mittels Bluetooth HC-05 vom Arduino zu VB Net zusenden.
    Das verbinden Klappt aber bei den Daten die Ich über arduino an Vb Net sendene kommen nicht richtig an .
    beim ersten Bluetooth Hc-05 Baudrate 115200 kommen die Daten abwecslend mal kommt nur eine zahl dann wehcselt es auf vier Ziffern dann wieder mal auf drei.
    Dann habe ich ein weiters ausprobiert bei diesem habe ich baudrate auf 9600 da fehlt mir die erste ziffer?
    Vieleicht kann mir jemand Helfen

    Mein code:

    Quellcode

    1. Imports System
    2. Imports System.Threading
    3. Imports System.IO.Ports
    4. Imports System.ComponentModel
    5. Imports System.Windows.Forms.VisualStyles.VisualStyleElement.ProgressBar
    6. Imports System.Timers
    7. Public Class Form1
    8. Dim Temp As String
    9. Dim myPort As Array
    10. Delegate Sub SetTextCallBack(ByVal [text] As String)
    11. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    12. myPort = IO.Ports.SerialPort.GetPortNames()
    13. portComboBox.Items.AddRange(myPort)
    14. Button2.Enabled = False
    15. Button1.Enabled = True
    16. Timer1.Enabled = False
    17. End Sub
    18. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    19. SerialPort1.PortName = portComboBox.Text
    20. SerialPort1.BaudRate = CInt(baudComboBox.Text)
    21. SerialPort1.DataBits = 8
    22. Me.RichTextBox1.Text = "Verbindung zu AIO wird aufgebaut" + Environment.NewLine
    23. SerialPort1.Open()
    24. SerialPort1.Write("BluetoothVerbinden")
    25. If SerialPort1.IsOpen Then
    26. Me.RichTextBox1.Text = "AIO Verbunden" + Environment.NewLine
    27. End If
    28. ProgressBar1.Value = 100
    29. Button2.Enabled = True
    30. Button1.Enabled = False
    31. Timer1.Enabled = True
    32. End Sub
    33. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    34. If SerialPort1.IsOpen Then
    35. SerialPort1.Close()
    36. ProgressBar1.Value = 0
    37. Me.RichTextBox1.Text = "AIO Verbindung getrennt" + Environment.NewLine
    38. End If
    39. Button1.Enabled = True
    40. Button
    41. End Sub
    42. Private Sub SerialPort1_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
    43. ReceivedText(SerialPort1.ReadExisting())
    44. End Sub
    45. Private Sub ReceivedText(ByVal [Text] As String)
    46. If Me.RichTextBox1.InvokeRequired Then
    47. Dim x As New SetTextCallBack(AddressOf ReceivedText)
    48. Me.Invoke(x, New Object() {(Text)})
    49. Else
    50. Me.RichTextBox1.Text = [Text]
    51. End If
    52. End Sub
    53. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    54. Temp = RichTextBox1.Text.ToString()
    55. Label7.Text = Temp
    56. End Sub
    57. Private Sub RichTextBox3_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox3.TextChanged
    58. End Sub
    59. Private Sub Label7_Click(sender As Object, e As EventArgs) Handles Label7.Click
    60. End Sub
    61. End Class
    Hallo,

    erst mal die Frage, wie sendst du im Arduino die Daten, also mit welchem Befehl?

    Ich verwende immer Serial.println(), so werden immer Paket gesendet die mit einem "Zeilenumbruch" und "NewLine" abgeschlossen werden. (siehe Doku beim Arduino).
    Wenn man es mit einer Text-Datei vergleicht wird also immer ein Zeile nach der anderen gesendet.

    Beim Einlesen in VB.NET lese ich dann immer Zeilenweise ein.
    Das Problem ist, dass beim Senden oder eher Empfangen Verzögerungen auftreten können.
    Es wird z.B. schon gemeldet, dass Daten angekommen sind und auch wie viele.
    Diese kann man auch schon einlesen, aber es ist vielleicht noch nicht die ganze Zeile angekommen, es fehlen also noch Daten die beim nächsten mal dann erst ankommen.

    Meine Empfangsroutine sieht so aus, im String indata ist dann immer eine Zeile, also der Inhalt von einem Serial.println()

    VB.NET-Quellcode

    1. Public Sub DataReceivedHandler(sender As Object, e As SerialDataReceivedEventArgs)
    2. Dim sp As SerialPort = CType(sender, SerialPort)
    3. Dim indata As String
    4. Try
    5. While (sp.BytesToRead)
    6. indata = sp.ReadLine()
    7. ShowText(indata & vbCrLf)
    8. End While
    9. Catch ex As TimeoutException
    10. sp.DiscardInBuffer()
    11. indata = sp.ReadExisting
    12. ShowText("Timeout: Vermutlich kein "" newLine""" & vbCrLf)
    13. End Try
    14. End Sub