Über VB-GUI daten an Arduino senden und diese in SD karte speichern

  • VB.NET

Es gibt 42 Antworten in diesem Thema. Der letzte Beitrag () ist von gfcwfzkm.

    @milito: Sieh Dir bitte mal Deine Posts an und editiere sie so, dass man sie gut lesen kann.
    Vollzitate sind nicht erforderlich und hier im Forum auch unwewünscht.
    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!
    Dann formuliere mal Deine Frage aus der jetzigen Sicht neu.
    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!
    Ok :D.

    Habe eine GUI, die unter anderem 3 textboxen enthält.
    In den drei textboxen sollen folgende Parameter (I2C- Slave adresse, Register, Daten) eingegeben werden und an dem Arduino versendet werden, via SerialPort. Diese Parameter brauche ich, um ein angeschlossenes I2c-devices an dem Arduino anzusteuern.
    Wenn die Daten vom Arduino empfangen werden, sollen sie zuerst in einer csv.Datei auf einer SD abgespeichert werden.
    Nun möchte ich diese Daten nach gebrauch abrufen, d.h. der Arduino liest die Parameter von der csv. Datei aus und anhand der I2c-library steuert er mit den Parametern das i2c-device an.

    So jetzt meine Frage:
    Die Eingabe der Parameter in meiner GUI, sind ja strings.
    Ich möchte aber echte hex,bin werte dort eintragen( gebe ich 0x58 ein, soll es auch 58 in hex sein) und diese auch als solche dem Arduino übermitteln, damit er sie in eine csv.Datei speichern kann, wäre das möglich?

    Zweite Frage ist: Wenn ich diese als bin/hex-werte in eine csv Datei abspeichere und diese mit dem Arduino auslese, sind sie als solche hex / bin werte noch da oder müssen diese umgewandelt werden?

    Dritte frage: Gibt es vllt eine bessere Lösung, das Problem mit den Parametern zu lösen, vllt diese nicht von der GUI aus, sondern wenn der Arduino sie ausliest in HEX/BIN Werte zu haben?

    milito schrieb:

    echte hex,bin werte
    sind Strings.
    Der Rechner (die CPU) weiß, was "echte" Integer-Werte sind, sie liegen im PC-Ram als "echte" Binärwerte vor im Gegensatz zu einem String des Formats "001110001100101001".
    Du musst in jedem Falle Strings und Integer ineinander umwandeln. Solch ein String kann eine Binär-, Dezimal, oder Hexadezimal-Stringrepräsentation eines "echten" Integer-Wertes sein.
    Du allein musst / kannst wissen, was wo wie dargestellt werden soll.
    ----
    Eine csv-Datei enthält üblicherweise ausschließlich Strings.
    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!
    OK , d.h. also "1111" als String ist etwas anderes als 1111 als Integer?
    Ja danke dir, hoffe das ich das hinbekomme

    Und wie geht das mit dem Keydown Menu für die Eingabebegrenzung, dass nur hex oder binär Eingaben getätigt werden?

    milito schrieb:

    d.h. also "1111" als String ist etwas anderes als 1111 als Integer
    wenn es z.B. als Binärstring oder Hex-String interpretiert wird.
    Hatten wir bereits.
    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!

    VB.NET-Quellcode

    1. Module Module1
    2. Sub Main()
    3. Dim hexstr As Char
    4. Dim HexTxt As String = "0x58"
    5. hextxt = hextxt.Replace("0x", "")
    6. hexstr = Convert.ToChar(Convert.ToInt16(HexTxt, 16))
    7. Debug.Print(HexTxt) '--> 58
    8. Debug.Print(hexstr) '--> X weil: ASCII-Code von Groß-X ist 58hex, 88dez
    9. End Sub
    10. End Module

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

    milito schrieb:

    Weiß jemand
    So:

    VB.NET-Quellcode

    1. Private Sub TextBox1_KeyDown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
    2. If (e.KeyCode >= Keys.D0 AndAlso e.KeyCode <= Keys.D9) OrElse (e.KeyCode >= Keys.A AndAlso e.KeyCode <= Keys.F) Then
    3. Else
    4. e.SuppressKeyPress = True
    5. End If
    6. End Sub
    Du hast mit Hex und Bin immer noch keinen Plan. :S
    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!
    Hi danke dir, also was BIn und Hex ist , weiß ich schon :D.
    Das der Controller eigentlich mit Bin bzw mit Byte arbeitet ist mir klar und dass die Dezimale und Hex-Darstellung einfach nur eine andere Darstellung sind verstehe ich auch.
    Mein Gedanke ist nur der, wie ich am besten das Problem löse mit den Parametern.
    Genauer gesagt, ob ich es schon von der GUI aus umwandle oder ob ich es als String sende und das der Arduino macht, denn wenn ich es in eine csv.Datei speichere, war die Umwandlung via GUI umsonst.
    Oder kennst du eine andere Speichermöglichkeit auf der SD-Karte, vielleicht eine andere Dateiart, wo man die Werte als Binär /Hex abspeichern kann? (vllt eine Binärdatei?).
    Verwende überall Integer, keine Strings.
    Statt einer TextBox solltest Du NumericUpDown-Controls verwenden.
    Da und nur da, wo Strings benötigt werden, konvertiere sie in einen String.
    Zum Abspeichern der Daten in einer Datei solltest Du ggf. eine typisierte DataTable verwenden, die kannst Du ganz easy per DataTable.WriteXml(DEIN_PFAD) und DataTable.ReadXml(DEIN_PFAD) speichern und lesen (in dieser Reihenfolge).
    Such mal im Forum nach DataTable.
    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!
    Ok danke dir :D.
    Das mit dem NumericUpDown ist echt gut. Werden diese Zahlen als String oder Integer verarbeitet?
    Das DataTable ist es auf dem Arduino anwendbar? bzw. kann ich damit über dem Arduino auf die SD-Karte schreiben?

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

    Weder noch:

    VB.NET-Quellcode

    1. Dim value = Cint(NumericUpDown1.Value)
    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!

    RodFromGermany schrieb:

    Weder noch:
    vb-paradise.de/index.php/Attac…77000f9685e6d23544e1f3201

    VB.NET-Quellcode

    1. Dim value = Cint(NumericUpDown1.Value)
    Ah ok, aber danke dir mit dem NumericupDown, da habe ich auch entdeckt, dass du es auf HExeinagbe einstellen kannst. Damit wäe das Problem mit den erlaubten Zeichen in der Eingabe erledigt. Aber besser als die TExtbox, d.h. das sind einfach numerische Werte(doch weder Integer noch Strings?).
    Jetzt nur das mit dem Werten umwandeln.

    Was hältst du von der Idee: Also ich sende diese als normale Werte zum Arduino und dieser speichert sie in die csv.Datei.
    So nach bedarf soll sich der Arduino die Werte ja auslesen von der csv.Datei und erst dort wandle ich sie um in HEX/BIN.

    Was hältst du davon?

    milito schrieb:

    Also ich sende diese als normale Werte zum Arduino
    Alle richtigen Werte (egal ob hex, dez oder bin) sind normal.
    Ich weiß nix von / über Arduino, mach es so, dass Du es in einem halben Jahr noch verstehen kannst.
    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!
    Hi ok, also habe jetzt mal die Werte über den numericUpDown(habe es in Hex eingestellt), folgende Werte über den SerialPort gesendet:
    alles in Hex: 58, AB, 5A.
    Der Arduino hat sie empfangen und in die csv.Datei eingetragen, doch siehe da er hat sie in DEzimal Schreibweise umgewandelt und dort eingetragen: 58 -> 88, AB->171, 5A->90. :D.
    Obwohl ich die Konvertierung von der GUI aus nicht gemacht habe
    Folgendermaßen ist meine Codesyntax:

    Quellcode

    1. SerialPort_i2c.Write(Numeric_addr_i2c.Value & ";") '; damit in csv datei in spalten
    2. SerialPort_i2c.Write(Numeric_reg_i2c.Value & ";")
    3. SerialPort_i2c.Write(Numeric_data_i2c.Value) 'durch vbr = Enter, d.h. wenn ein ganzer String wird ein enter gesendet und arduino weiß ok gsnzer String SerialPort_i2c.Write(vbCr)
    4. MsgBox("Transfer successful")


    Deswegen hast du mir empfohlen, dass ich keine Textbox nehmen soll, sondern das NumericUpDown? -> da er diese dann umwandelt?

    milito schrieb:

    da er diese dann umwandelt?
    Da NumericUpDown für Un-Tastendrücke unempfänglich ist.
    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!