Probleme beim auslesen und verwerten von werten Com-Port (Ardurino Mega)

  • VB.NET

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

    Probleme beim auslesen und verwerten von werten Com-Port (Ardurino Mega)

    Guten Tag,

    Ich habe folgendes Problem ich habe einen Ardurino Mega der die Temperatur ständig list.
    Nun wollte ich die daten aus dem Com Port auslesen was auch klappt aber die werte werden in einer RichBox ausgegeben.
    Alle Werte werden untereinander ausgegeben. Aber ich kann damit nichts anfangen denn ich müsste die werte weiter verwerten.
    Hatte mir das so vorgestellt das ich dann sagen kann (if textbox1.text = "2.0" then msgbox "Warnung unter 3 Grad". )
    Aber ich kann mit den Werten untereinander nichts anfangen!

    Ich habe mal das Projekt gepackt und hochgeladen. Ich hoffe jemand kann mir helfen!
    Dateien
    • Port.zip

      (81,94 kB, 303 mal heruntergeladen, zuletzt: )
    Ich bin leider noch ein blutiger anfänger in Sachen VB.Net (2013) ich habe sehr viel in Visual Basic 6 Programmiert nur es hat sich sehr viel geändert wie müsste ich das Programm anpassen das ich die daten verwerten kann?

    ChrisBeer222 schrieb:

    gepackt und hochgeladen
    Überzeuge Dich bitte davon, dass das, was Du hochgeladen hast, genau das ist, was Du glaubst hochgeladen zu haben.
    Deine Quellen FormPort*.* sind nämlich nicht dabei. :/
    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!
    Ich habe nun das auslesen hinbekommen war doch ganz einfach aber nun habe ich ein neues Problem!

    Private Sub Timer1_Tick_1(sender As Object, e As EventArgs) Handles Timer1.Tick
    Label1.Text = DateString & " " & TimeOfDay

    Dim var As Single
    var = SerialPort1.ReadLine()
    TextBox7.Text = var
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    SerialPort1.PortName = "com4"
    SerialPort1.BaudRate = "9600"
    SerialPort1.Open()

    Das geht zwar aber nicht lange! :( nach wenigen sekunden friert die Anwendung ein man kann nichts mehr anklicken, nur noch über debuggen beenden.

    Was ist falsch?

    Vielen Dank

    ChrisBeer222 schrieb:

    Was ist falsch?
    Du bestellst eine Pizza und rennst alle paar Sekunden an die Tür um zu sehen, ob der Bote da ist.
    Warte darauf, bis er klingelt.
    Und:
    mach Option Strict On.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. SerialPort1.PortName = "com4"
    3. SerialPort1.BaudRate = 9600
    4. SerialPort1.Open()
    5. End Sub
    6. Private Sub SerialPort1_DataReceived(sender As Object, e As IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
    7. Dim txt = SerialPort1.ReadExisting
    8. Me.Invoke(Sub() Label1.Text = txt)
    9. End Sub
    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!
    Super vielen Dank.

    Das klappt nun super gut :) ein kleines problem habe ich noch! Ich musste von ReadExisting auf Readline ändern sonst kommt nur werte wie.

    19
    50
    30

    usw.

    nun kommt wie es gehört 19.50 (sind temperaturwerte) aber ich wollte nun z.b machen If label1.text = "19.50" then es sind 19,50 Grad erreicht. Aber es geht nicht er erkennt irgendwie den Punkt nicht! Zuvor hatte ich den wert als Single dabei kam raus 1950 das war ok denn ich wusste ja das 1950 19,5 Grad sind. Diese werte konnte auch Visual Basic erkennen. Warum aber 19.50 nicht?

    Vielen Dank

    ChrisBeer222 schrieb:

    er erkennt irgendwie den Punkt nicht!
    Das ist amerikanische Codierung.
    Gib dem Port das richtige Encoding:

    VB.NET-Quellcode

    1. SerialPort1.Encoding = System.Text.Encoding.GetEncoding("en-US")
    2. SerialPort1.Open()
    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!
    Vielen Dank für euere Hilfe. Meine Lösung gefällt mir noch nicht 100% aber es geht erstmal.

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    SerialPort1.PortName = "com4"
    SerialPort1.BaudRate = CInt("9600")
    SerialPort1.Encoding = System.Text.Encoding.GetEncoding("US")
    SerialPort1.Open()
    end sub

    Private Sub SerialPort1_DataReceived(sender As Object, e As IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
    Dim txt As Double = CSng(SerialPort1.ReadLine)
    Me.Invoke(Sub() TextBox6.Text = CStr(txt))
    End Sub

    Private Sub Timer1_Tick_1(sender As Object, e As EventArgs) Handles Timer1.Tick
    If TextBox6.Text = "1950" Then MsgBox("Wert 19,50 Grad")
    End Sub

    Das gibt nun den Wert 1950 aus und lässt sich lesen und verarbeiten.

    Vielen Vielen Dank

    ChrisBeer222 schrieb:

    VB.NET-Quellcode

    1. SerialPort1.BaudRate = CInt("9600")
    What :?:
    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!