Mit Arduino Daten empfangen

  • VB.NET
  • .NET (FX) 4.0

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von 00yoshi.

    Mit Arduino Daten empfangen

    Ich habe mir schon einige Tutorials zum empfangen von daten mit dem Arduino gelesen, doch keines hat bisher funktioniert.
    Ich habe einen Arduino Leonardo.
    So, den Code verwende ich zurzeit in vb:

    VB.NET-Quellcode

    1. Public Class form1
    2. Dim SP_Empfangen As String
    3. Private _Encoding As System.Text.Encoding
    4. Dim inByte As String
    5. Public Sub New()
    6. InitializeComponent()
    7. _Encoding = System.Text.Encoding.Default
    8. End Sub
    9. Private Sub SP_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SP.DataReceived
    10. Dim ToRead As Integer = SP.BytesToRead
    11. If ToRead > 0 Then
    12. Dim Buffer(ToRead - 1) As Byte
    13. SP.Read(Buffer, 0, ToRead)
    14. inByte = _Encoding.GetString(Buffer)
    15. If inByte = vbCr Then
    16. Me.Invoke(Sub() New_Message(SP_Empfangen))
    17. SP_Empfangen = Nothing
    18. Else
    19. SP_Empfangen &= inByte
    20. End If
    21. End If
    22. End Sub
    23. Private Sub New_Message(ByVal m As String)
    24. TxtReceived.Text += m
    25. End Sub
    26. End Class

    (von VB-Paradise(Thread))
    Die RichTextBox TxtReceived bleibt leer.
    Arduino-Code:

    C#-Quellcode

    1. void setup() {
    2. Serial.begin(9600);
    3. }
    4. void loop(){
    5. Serial.write("Dies ist ein Test");
    6. Serial.write(13);
    7. delay(100);
    8. }

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „00yoshi“ ()

    Die Konfiguration ist in der Form. (alles auf standart, Port ist COM3)

    VB.NET-Quellcode

    1. Private Sub form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    2. SP.Open()
    3. End Sub


    habe ich jetzt hinzugefügt.

    EDIT:\\ FUNKTIONIERT!!! einfach RtsEnable auf true

    EDIT:\\ Mal klappts, mal nicht

    EDIT:\\ ohne Serial.write(13); klappt's nicht

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „00yoshi“ ()

    Hallo,

    00yoshi schrieb:

    EDIT:\\ ohne Serial.write(13); klappt's nicht


    das liegt daran das 13 laut ASCII für CR (Carriage Return) steht und du das doch hier abfragst

    VB.NET-Quellcode

    1. If inByte = vbCr Then
    2. Me.Invoke(Sub() New_Message(SP_Empfangen))
    3. SP_Empfangen = Nothing
    4. Else
    5. SP_Empfangen &= inByte
    6. End If


    Wenn du einfach alles sehen möchtest was du empfängst dann nimm die Abfrage raus und übergebe inByte direkt den Sub New_Message

    Tim
    Mein Code: (klappt)

    VB.NET-Quellcode

    1. Public Class form1
    2. Dim SP_Empfangen As String
    3. Private _Encoding As System.Text.Encoding
    4. Dim inByte As String
    5. Public Sub New()
    6. InitializeComponent()
    7. _Encoding = System.Text.Encoding.Default
    8. End Sub
    9. Private Sub SP_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SP.DataReceived
    10. eventcount += 1
    11. Dim ToRead As Integer = SP.BytesToRead
    12. Dim Buffer(ToRead - 1) As Byte
    13. SP.Read(Buffer, 0, ToRead)
    14. Me.Invoke(Sub() New_Message(_Encoding.GetString(Buffer)))
    15. End Sub
    16. Dim msgcount As Integer
    17. Dim eventcount As Integer
    18. Private Sub New_Message(ByVal m As String)
    19. msgcount += 1
    20. TxtReceived.Text += m
    21. End Sub
    22. Private Sub form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    23. SP.Open()
    24. End Sub
    25. Private Sub form1_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
    26. SP.Close()
    27. End Sub
    28. End Class


    Bei SP RTSenable auf true