ich hoffe ihr könnt mir helfen. Ich bin relativ neu in der Arduino Programmierung und komme nicht weiter.
Mein Ziel ist es, mit einem Arduino über die serielle Schnittstelle eine Zeichenkette einzulesen (die unterschiedlich lang sein kann), und so aussehen kann "1.234;2.345;3.456". Das Semikolon dient als Seprator der einzelnen Zahlen. Am Ende möchte 3 float variaben haben à la float1=1.234, float2=2.345, float3=3.456.
Ich habe viel rumprobiert, gegoogelt, noch mehr probiert usw. Zwischendurch bin ich dem Ergebnis näher gekommen, dann wieder weiter weg. Jetzt sehe ich den Wald vor lauter Bäumen nicht mehr und bin bei diesem (wahrscheinlich völlig falschem) Code stehen geblieben:
Ich hoffe ihr seid gnädig mit mir und könnt mir helfen.
1.) Du beachtest nicht wie elendig langsam Serial ist. Bei 9600 Baud dauert ein Zeichen 1ms. Da kannst du das nicht in einer while-Schleife einlesen.
2.) Du hast nicht verstanden wie Arrays funktionieren. Oder Strings in C. Wie du das Array verwendet ist totaler Quatsch.
Das macht man so dass man das Ende des Strings mit einem CR oder LF markiert (kann man wenn man es per Hand macht auch im Serial Monitor einstellen). Und dann liest man solange ein bis das Endzeichen kommt. Zwischendurch kann man dann andere Sachen machen.
Wenn du weißt dass du immer 3 Floats hast brauchst du da nicht unbedingt eine while Schleife. Der Teil ist aber nicht falsch. Eine while-Schleife da ist praktisch wenn man die Anzahl der Werte nicht kennt.
Wie gesagt CR oder LF (nicht beides) beim Senden nicht vergessen! Sonst geht es nicht
vielen Dank für deine Hilfe. Ich habe mir das Thema Arrays nochmal angeshene und deinen Code studiert. Das hilft mir sehr für das Vertändnis.
Irgendwo hakt es aber noch. Es passiert bei einer Eingabe im Serial Monitor nichts, egal was ich eingebe (zum Beispiel 1.2;3.4;5.6;\n). Was mache ich hier falsch? Es kommt auch keine Meldung über "Read Serial True) im Serial Monitor.
ElEspanol:
Ginge es auch, Serial.println zu verwenden?
println() hängt immer beides an, Carriage Return und Newline.
Das ist bei seinem Code äußerst nachteilig, weil wenn zwischen Carriage Return und Newline keine drei float-Zahlen gesendet werden, bekommt er immer einen Satz Nuller zwischen den gültigen Zahlen, die er eigentlich bekommen möchte.
Also bei seinem Code besser nur ein Steuerzeichen senden, Serial.print("...\n"); oder Serial.print("...\r"); und nicht zwei Steuerzeichen hintereinander. Oder den Code modifizieren, so dass unmittelbar aufeinanderfolgende Steuerzeichen keine Nuller-Datensätze rauswerfen.
Du kannst auch vor der Auswertung prüfen ob was im String steht:
if(*serial_buffer)
oder
if(*serial_buffer != NULL)
oder
if(serial_buffer[0] != '\0')
Und noch ein paar ähnliche Varianten. Dadurch verhinderst du dass ein leerer String ausgewertet wird. Was passiert wenn einfach so ein einzelnes CR oder LF ankommt