Jürgen Papadopolis schrieb:
> und will sie im Hauptprogramm verarbeiten. Wenn
> ich jetzt aber mit Hilfe von strcat Textteile zufügen will, kommt nur
> noch Mist raus.
Herzeigen!
ALles andere ist sinnlos
> Auch wenn ich Messwert, den ich aus der Einlesefunktion ja als double
> übergebe, in einen String wandle, und dann mit einer for schleife an
> entsprechender Stelle wieder ein Komma einfügen will, kommt nur noch
> mist dabei heraus.
> Wie muss man das Programmieren, damit da keine Daten verloren gehen?
Richtig :-)
Rück erst mal deine Funktionen richtig ein, da sieht man dann schon eine
Menge
1 | double FOG(void)
|
2 | {
|
3 | if (Serial1.available()) {
|
4 | int inByte = Serial1.read();
|
5 |
|
6 | if (inByte == 13){
|
7 | for (int i=0; i<=19; i++){
|
8 | int inByte = Serial1.read();
|
9 | Data[i]=inByte;
|
10 | }
|
11 | }
|
12 |
|
13 | for (int i=5; i<=11; i++){
|
14 | Data1[i-5] = Data[i];
|
15 | }
|
16 | }
|
17 |
|
18 | FOGdbl = atof(Data1);
|
19 | return FOGdbl;
|
20 | }
|
Du wartest jedesmal auf 1 Zeichen. Wenn das ein Return war, wartest du
auf weitere 20 Zeichen und speicherst die zwischen.
Aber was, wenn das kein Return war?
Dann holst du dir munter 7 Zeichen aus dem Data Array (egal was da zu
diesem Zeitpunkt drinnen steht) und wandelst das in einen float.
Zumindest versuchst du es. Denn funktionieren würde das nur dann, wenn
in Data1 auch ein korrekter C-String stehen würde. Das tut er aber
nicht, dazu müsste der mit einem '\0' Zeichen beendet sein.
Auch ist mir nicht wirklich klar, wie du von einem Data1 Array einen
float lesen kannst, wenn doch die Serielle gar nicht verfügbar ist und
Data1 daher gar nie nicht irgendeinen String bekommen hat.
1 | if (Serial1.available()) {
|
2 | ...
|
3 | }
|
4 |
|
5 | FOGdbl = atof(Data1); // angenommen Serial1.available() hat false
|
6 | // zurückgegeben. Was steht dann in Data1?
|
7 | return FOGdbl;
|
8 | }
|
Schreib dir das, was du tun möchtest erst mal im deutschen Klartext in
Form von Kommentaren hin. Und erst dann setzt du dich daran und überstzt
den Klartext nach C.
> Wie muss man das Programmieren, damit da keine Daten verloren gehen?
Wenn du mit geringerer Baudrate wieder ausgibst, musst du dir eine
Strategie überlegen, wie du deinen Zwischenspeicher wieder aufräumst.
Wenn du ein Lager hast, indem LKW alle 1/2 Stunde 20 Paletten bringen,
jedoch ein Arbeiter nur alle 2 Stunden 1 Palette abholt, wird es dir
irgendwann dein Lager sprengen.