setzen Ich habe eine Nachricht Zeichenfolge von der Arduino erhalten und jetzt möchte ich die Nachricht teilen und in separaten Feldern.Wie Sie eine Nachricht mit verschiedenen Werten in separaten Textfeldern in C#
Die Botschaft lautet:
"DevID ~ erster Wert | $ DevEUI ~ 2. Wert | $ HWEUI ~ 3. Wert | $ AppKey ~ 4. Wert |"
Die Nachricht schlüpft nach jedem $
Zeichen. Der Code ist wie folgt, während der Laufzeit teilt er die Nachricht und die Zeichenfolge "Wert" erhielt jedes Mal den neuen Wert, aber alle Textfelder enthalten zur Zeit den gleichen Wert.
private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort Arduino = (SerialPort)sender;
string indata = Arduino.ReadExisting();
Debug.WriteLine("Data Received:");
Debug.Print(indata);
isConnected = true;
RxString = RxString + indata;
int endmarkerPos = RxString.IndexOf('|');
if(endmarkerPos != -1)
{
//now pack everything till endmarker into messageString and delete this part from RxString
messageString = RxString.Substring(0, RxString.IndexOf('|'));
Debug.Print(messageString);
RxString = RxString.Substring(endmarkerPos + 1);
}
int startmarkerPos = messageString.IndexOf('$');
if (startmarkerPos != -1)
{
messageString = messageString.Substring(startmarkerPos +1);
String command = messageString.Substring(0, messageString.IndexOf('~'));
String value = messageString.Substring(messageString.IndexOf('~') + 1);
Debug.Print("---parsed: command: " + command + "\t value: " + value);
Debug.Print("the trimmed message is: " + messageString);
if (string.Compare(command , " DevID") == 1)
{
//messageString = messageString.Substring(messageString.IndexOf('~') + 1);
textBox1.Invoke(new Action(() => textBox1.Text = value));
//textBox1.Text = value;
messageString = messageString.Substring(messageString.IndexOf('~') + 1);
Debug.Print("1st block");
}
if (string.Compare(command, " DevEUI") == 1)
{
//messageString = messageString.Substring(messageString.IndexOf('~') + 1);
textBox2.Invoke(new Action(() => textBox2.Text = value));
//textBox1.Text = value;
messageString = messageString.Substring(messageString.IndexOf('~') + 1);
Debug.Print("2nd block");
}
if (string.Compare(command, " HWEUI") == 1)
{
//messageString = messageString.Substring(messageString.IndexOf('~') + 1);
textBox2.Invoke(new Action(() => textBox3.Text = value));
//textBox1.Text = value;
messageString = messageString.Substring(messageString.IndexOf('~') + 1);
Debug.Print("3rd block");
}
if (string.Compare(command, " AppKey") == 1)
{
//messageString = messageString.Substring(messageString.IndexOf('~') + 1);
textBox2.Invoke(new Action(() => textBox4.Text = value));
//textBox1.Text = value;
messageString = messageString.Substring(messageString.IndexOf('~') + 1);
Debug.Print("4th block");
}
Schlagen Sie dies als eine Gelegenheit vor, um zu lernen, wie Sie den Debugger verwenden. Legen Sie in der ersten Zeile der Methode einen Haltepunkt fest und sehen Sie, wo der Fehler liegt. – LordWilmore
Dies ist bestenfalls schrecklich. Ich würde wirklich in die 'string.split' Funktion schauen und lernen, wie man auf mehrere Tokens aufteilt. Das ist sehr schwer für die Augen, auch starten Sie den Debugger. – MethodMan
nur als Tipp, es ist wirklich hilfreich (für uns und für sich selbst), Kommentare in Ihrem Code zu schreiben, die beschreiben, was diese Codezeile tun soll oder was Sie tun, was sie tun wird.Manchmal öffnen sie deine eigenen Augen und machen dir klar, dass du einen Fehler im Gedankenprozess selbst hast. Der Code ist einfach das Ergebnis dieses Gedankenprozesses :) Willkommen bei StackOverflow –