SerialPort und DataReceived in vb

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von peterfido.

    @Der Laie Was ist das Problem?
    Ist eine entsprechende Hardware vorhanden?
    ====
    Ich geh mal davon aus, dass Du das Port korrekt parametrisiert hast.
    Ein SerialPort bleibt üblicherweise während der Programmlaufzeit geöffnet, da kann die Gegenstelle senden wann immer sie will und es hört jemand zu.
    Ein SerialPort sendet und empfängt Bytes :!: Mit einem entsprechenden Encoding lassen sich diese Bytes natürlich auch als String interpretieren, das macht dann das SerialPort selbständig.
    Ein SerialPort arbeitet in einem anderen Thread als die GUI. Deshalb musst Du, wenn Du empfangene Daten anzeigen willst, diese in den MainThread invoken.
    Ein SerialPort arbeitet wie eine Pizza-Bude. Du löst per .Write() & Co. eine Aktion aus und wartest, bis per .DataReceived die Antwort kommt. Pollen ist uncool.
    ====
    Hier im Forum gibt es genügend Threads, die sich mit dem SerialPort befassen. Hast Du nicht die geeigneten Informationen gefunden?
    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!
    @Der Laie Ich hab schon einige Geräte mit nem SerialPort betrieben.
    Interessant wird es, wenn Du USB-Geräte hast, für die es einen RS232-Treiber gibt, z.B. BarcodeScanner.
    Der "normale" BarcodeScanner wirkt wie eine Tastatur, das Fenster, das den Fokus hat, bekommt die Eingabe / den Scan. Mit so nem Treiber empfängst Du die Daten im DataReceived-Event genau da, wo sie hin sollen, da kannst Du nebenbwi mit WinWord arbeiten und alles funktioniert. :thumbsup:
    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!
    Moin RodFormGermany

    das ist ja alles super nur ich möchte über den Arduino ein Schalter der mit einem Magnet ausgelöst wird soll in meiner Software als Rückmeldung ein blauer Punkt die Farbe wechseln z.b. Rot und sobald der Magnet nicht mehr auf dem Schalter sind befindet sol der blaue Punkt sich nicht verändern

    LG wie programmiere ich das mit vb ? und a kommt wieder der SerialPort wider ins Spiel weil ich die Rückmeldung über Arduni steuern möchte

    LG
    Jetzt fängst halt mal an. Hier im Forum gibts gefühlt jede Woche nen neuen Thread zum Arduino... Offensichtlich kann das alles nicht schwer sein ;)
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @Der Laie Fang doch einfach mal an, mit dem Sing zu spielen.
    Das ist absolut simpel.
    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!
    Moin zusammen,

    um es mal es genau zu sagen ich möchte gern mit den SerialPort in vb mit dem Arduino sprechen heißt, heißt nix anderes ich schicke ein Befehl z.b. Lampen an ( und eine Gruppe von Lampen ( 20 Lampen gehen an / leuchten ) und am Eingang des Arduino soll mir über SerialPort sagen wieviel ( Watt ) Leistung die die Gruppe verbraucht in einr Anzeige => Label.

    und Pro Button immer eine Gruppe LED-Lampe immer zugerodnet

    Anzige soll halt die gesamt Leistung der Gruppe angezeigt werden und dann auch immer dazu gerechnet werden, und in auch die Anzahl der Lampen soll Angezeigt werden

    Anzeige Bespiel

    [ Button 1= Led an ] Lampe: 600 / 560 Leistung ​10000 /4600 ( W )


    Und bei bei jedem Button mehr sol sich die Lampeanzahl und die Leistung sich immer hört verändern

    Wenn ihr mir da helfen könntet


    LG
    @Der Laie Etwas zu viele Probleme in einen Topf geworfen.
    Was davon macht der Arduino, was der PC, was ist ein Ausführungsbefehl (Lampen an), was ist eine Statusabfrage, wer ermittelt die tatsächliche Leistung usw.
    Schreib mal ganz elementar und detailliert auf, was wann passiert, wer gibt welche Befehle, wie sieht die jeweilige Antwort aus.
    Wenn Du das richtig strukturierst, kannst Du Dein Problem allein lösen.
    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!
    Du musst deine "Probleme/Fragen" abstrahieren. Dann kannst du diese nämlich mittels Forum/Google/Ausprobieren oft selbst lösen.

    Zunächst solltest du Daten senden/empfangen können. Haste das Drauf? Wenn das steht, ist es doch easy irgendwelche Sachen in einem Label anzuzeigen, oder nicht?

    Ich würde mich über eine konkrete Frage/Aufgabenstellung freuen, weil bei

    Der Laie schrieb:

    Wenn ihr mir da helfen könntet
    hab ich immer das gefühl, hier wird jemand zur "Gruppenarbeit" gesucht...der die ganze arbeit macht ;)
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Hallo,

    Du hast Dich doch schon im September damit beschäftigt. Wo hakt es denn? Welchen Code hast Du schon?

    Der Code des Arduino muss an den Code des VB-Programms angepasst sein. Unter VB 6 ist das etwas einfacher als unter .NET.

    Unter .NET empfange ich z.B. so (allein nicht lauffähige Schnipsel aus dem Netz, laufen bei mir zuverlässig):

    VB.NET-Quellcode

    1. Private Sub SerialPort1_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
    2. ReceivedText(SerialPort1.ReadExisting())
    3. End Sub
    4. Private Sub ReceivedText(ByVal [text] As String)
    5. sEingang &= [text]
    6. If InStr(sEingang, vbCr, CompareMethod.Binary) > 0 Then
    7. Me.Invoke(New SetTextCallback(AddressOf TextAnzeigen), sEingang)
    8. sEingang = ""
    9. End If
    10. End Sub
    11. Private Sub TextAnzeigen(ByVal sText As String)
    12. lblEingang.Text = Strings.Replace(sText, vbLf, "")
    13. lblEingang.Text = Strings.Replace(lblEingang.Text, vbCr, "")
    14. End Sub


    lblEingang ist ein Label und sEingang wird im Kopf der Form deklariert.

    Zugriffe auf den Port beim senden immer mit Try, falls die Verbindung gekappt wird.

    VB.NET-Quellcode

    1. Private Sub Senden(ByVal Text As String)
    2. With SerialPort1
    3. Try
    4. If .IsOpen Then
    5. .Write(Text & vbCr)
    6. Else
    7. btnVerbinden.Text = "Verbinden"
    8. End If
    9. Catch ex As Exception
    10. bPortOK = False
    11. btnVerbinden.Text = "Verbinden"
    12. End Try
    13. End With
    14. End Sub


    Arduino-Code kann total unterschiedlich aussehen. Das Protokoll musst Du Dir ausdenken oder wo abgucken.

    Ach ja. Beachte bitte den letzten Satz meiner Signatur.
    Gruß
    Peterfido

    Keine Unterstützung per PN!

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