Ich brauchte mal einen kleinen Schupps in die richtige Richtung !
In meinen kleine Projekt empfange ich Daten vom Adruino, von denen ich gerne drei Wörter Filtern möchte.
Die Daten werden in einer Variabel gespeichert und später in einer TextBox ausgegeben.
Alles soweit kein Problem auch das finden der drei Wörter macht keine Probleme nur wenn die Daten per Serial gelesen werden und das Event ausgelöst wird, möchte ich testen ob die Wörter "Grbl, ok, error" im String vorhanden sind und darauf reagieren.
Das Problem ist jetzt, das nach jeden absetzen einens Befehls an die Serielle Schnittstelle der Adruino mit ok oder Error Antwortet und dies eine Dauerschleife auslöst.
Wie könnte ich dies am besten umgehen so das ich nach jedem ok. ein neuen Befehl senden kann ?
private String rxstring;
private void SerialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
rxstring = serialPort1.ReadExisting();
Invoke(new EventHandler(DisplayTxt));
}
private void SerialSend(string gcode)
{
RichTextBoxOutput.AppendText("> " + gcode + "\n");
serialPort1.WriteLine(gcode);
}
private void DisplayTxt(object sender, EventArgs e)
{
RichTextBoxOutput.AppendText(rxstring);
RichTextBoxOutput.ScrollToCaret();
bool checkerror = rxstring.Contains("error:");
bool checkok = rxstring.Contains("ok");
bool checkgrbl = rxstring.Contains("Grbl");
if (checkgrbl)
{
SerialSend("$G");
}
if(checkok)
{
SerialSend("$$");
}
...
Hallo,
du sendest ja in der DisplayTxt immer direkt den nächsten Befehl an die Serielle Schnittstelle. Wenn der Arduino immer auf einen Befehl antwortet ist es korrekt, das es in einer Dauerschleife endet.
Gruß
Thomas
Merke dir in einer Member-Variablen, ob die nächste Antwort ignoriert werden soll; dies ist so ähnlich wie [FAQ] Event nur bei Benutzeraktion auslösen, nicht bei programmtechnischer Änderung.