DAten über die serielle Schnittstelle einlesen

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    DAten über die serielle Schnittstelle einlesen

    Hallo
    Ich habe mir eine Platine mit AVR's mit Bascom gebaut , die mir 32 analoge Werte pro Sekunde sendet.
    Jetzt möchte ich über die serielle Schnittstelle die Daten einlesen und bei jedem Empfang die Daten anzeigen lassen.
    Ein Datensatz einlesen pro Buttondruck funktionniert, aber wo schreibe ich das Programm wenn ich solange einlesen
    und anzeigen will bis ich über einen Button beende ?
    Das Programm müsste eigentlich so ähnlich funktionnieren wie das Hyperterminal von Windows.
    Vor Jahren hab ich mal mit Delphi gearbeitet, da gab es einen Befehl ( canvas ), wo man Pixel nach belieben
    setzen konnte. z.B. als Oszilloskop, gibt es soetwas auch in Visual Basic ?
    MfG John


    *Topic Verschoben*

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

    VB.NET-Quellcode

    1. Imports System
    2. Imports System.Math
    3. Imports System.IO.Ports
    4. Imports System.Threading
    5. Imports System.Threading.Thread
    6. Public Class Form1
    7. '------------------------------------------------------
    8. ' Delegate to update the Textbox control
    9. '------------------------------------------------------
    10. Public Delegate Sub UppDate()
    11. Dim Auffrischen As UppDate
    12. '-------------------------------------------
    13. ' Event handler for the DataReceived
    14. '-------------------------------------------
    15. Private Sub DataReceived( _
    16. ByVal sender As Object, _
    17. ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _
    18. Handles SerialPort1.DataReceived
    19. Auffrischen = New UppDate(AddressOf updateTextBox) 'Adresse der Textbox übergeben
    20. txtDataReceived.Invoke(Auffrischen) 'Sub aufrufen
    21. End Sub
    22. 'Diese Sub wird automatisch über Invoke aufgerufen
    23. Public Sub updateTextBox() 'empfangene Daten in Textbox ausgeben
    24. With txtDataReceived 'Name der Textbox
    25. .Font = New Font("Garamond", 12.0!, FontStyle.Bold)
    26. .ForeColor = Color.Red
    27. .AppendText(SerialPort1.ReadExisting) 'Text anhängen
    28. .ScrollToCaret()
    29. End With
    30. End Sub
    31. End Class


    Das ist ein Ausschnitt aus einem meiner Arduino Projekte und hat auch so funktioniert.
    Es müssen natürlich Comport und Baudrate gesetzt werden.
    Wichtig ist der Delegat.Über den EventHandler wird dann die Textbox aktualisiert.
    Abschalten könnte man indem der Comport geschlossen wird.
    @BuddyHaus: zu kompliziert und damit fehleranfällig.
    Mach es, wie Dodo sagt.
    Mach Dir eine Form mit einem SerialPort drin und gib diesem im Designer das Event DataReceived

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private _Encoding As System.Text.Encoding
    3. Public Sub New()
    4. InitializeComponent()
    5. _Encoding = System.Text.Encoding.Default
    6. End Sub
    7. Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
    8. Dim ToRead As Integer = SerialPort1.BytesToRead
    9. If ToRead > 0 Then
    10. 'Neu empfangene Zeichen an die Empfangspuffer anhängen
    11. Dim Buffer(ToRead - 1) As Byte
    12. SerialPort1.Read(Buffer, 0, ToRead)
    13. TextBox1.Text &= _Encoding.GetString(Buffer)
    14. End If
    15. End Sub
    16. End Class

    Und zeige die Daten ggf. an.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Gefunden. :thumbsup:
    Das Zauberwort heißt Invoke.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    fraju schrieb:

    Du weist das ich das schwachsinnig finde.

    Dann sieh Dir doch mal die Noobs an, die Code kopieren und sich beschweren, dass er nicht so funktioniert, wie sie glauben.
    Diese Leute sollen verstehen, was sie machen. Probieren, mal sehen, was die Entwicklungsumgebung ihnen für Informationen gibt.
    Sie müssen lernen, Fehler zu finden, nicht aber sie zu suchen. Mit dem Debugger umgehen, Informationen zur Laufzeit erhalten, Fehlermeldungen verstehen und und und.
    Mit fertigem Code ist ihnen mehr geschadet als geholfen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!