Ich versuche gerade mit einem Arduino serielle Daten von einem Messgerät einzulesen.
Am liebsten hätte ich die Daten in einer Variable, in der ich sie weiter verarbeiten kann (float?).
Irgend wie bekomme ich das aber nicht hin...
In der dritten Zeile (-08-) gab es eine Fehlmessung.
Ich brauche immer die letzte Zahl, ohne die Einheit (Vm).
Gibts da anfängertaubliche HowTos wie ich die Daten zuerst komplett empfangen kann (vermutlich in einer char) und dann einen Teil davon weiterverarbeite?
Aktuell will ich die Werte auf einem LCD anzeigen lassen.
Später soll das alles noch auf einer SD-Karte gespeichert werden.
Ich hatte noch ein paar andere Sachen um die Ohren, deshalb hats etwas länger gedauert.
Aber hier mein Ergebniss.
Zum empfangen der Daten habe ich aus dem Link von noiasca das zweite Beispiel (Example 2 - Receive with an end-marker) verwendet.
Das klappt soweit auch super.
Beim Umwandeln hab ich etwas rumgespielt, und hab jetzt diese Lösung:
Die Daten werden vorher empfangen und in dem "char SerielleDaten[]" gespeichert.
Die "float Speed" wird auch global festgelegt.
void DatenUmrechnen()
{
char Wert[9]; // neuen Char[] erstellen
Wert[0] = SerielleDaten[17]; // Die benötigten Buchstaben in das neue Char[] übernehmen
Wert[1] = SerielleDaten[18];
Wert[2] = SerielleDaten[19];
Wert[3] = SerielleDaten[20];
Wert[4] = SerielleDaten[21];
Wert[5] = SerielleDaten[22];
Wert[6] = SerielleDaten[23];
Speed = atof(Wert); // Wert in float Speed umwandeln
}
Das übernehmen der Buchstaben in den "char Wert[]" könnte ich noch über eine Schleife machen.
Bei mir funktioniert das so sehr gut, aber auch nur, weil meine Zahl immer genau an der gleichen Stelle in dem "char SerielleDaten[]" steht.
Wen die Zahlen weniger Stellen haben, ersetzt mein Messgerät durch führende Leerzeichen, die atof dann sauber wegschneidet.
Ich habe etwas mit strtok rumgespielt, hat aber nicht auf anhieb geklappt.
Wenn SerielleDaten[23] nicht sowieso schon das Endezeichen (0) von SerielleDaten ist, solltest du die lokale Variable durch Wert[7] = 0; sauber abschliessen. Es ist nämlich undefiniert, was dort drin steht, und falls es zufällig ein Zeichen ist, das als Ziffer interpretiert werden kann, würde es das atof-Ergebnis verfälschen.
Ich will jetzt auch nicht gegen globale Variable schimpfen, aber wenn deine Funktion Datenumrechnen
so zu verwenden wäre: