Mehrere double werte nebeneinander anzeigen

Hallo zusammen

Ich habe das Problem, dass ich mehrere Double Werte auf eine SDkarte speichern möchte. Jedoch kann ich diese nicht einzeln in ein FEld der csv datei schreiben sondern sie werden mir immer aufsummiert.
Kann mir da jemand helfen?

long tempinbitIR00 = 0;
double tempIR00 = 0;
long tempinbitIR01 = 0;
double tempIR01 = 0;
long tempinbitIR02 = 0;
double tempIR02 = 0;
long tempinbitIR3 = 0;
double tempIR3 = 0;

if (dataFile) {
Serial.println(“TEst01”);
dataFile.print(tempIR00 + tempIR01 + tempIR02 + tempIR3 + timenow);
Serial.print(tempIR00 + tempIR01 + tempIR02 + tempIR3 + timenow); // print to the serial port too

Ergebniss:

tempIR00: -20.50
tempIR01: -20.12
tempIR02: -20.80
tempIR3: -21.20
TEst01
-82.62;2000/1/1 0:0:18

Wie müsste ich die einzelnen Werte angeben, damit sie nebeneinander angezeigt werden?

Versuche mal:

Serial.print(tempIR00);
Serial.print(';');
Serial.print(tempIR01);
Serial.print(';');
Serial.print(tempIR02); 
Serial.print(';');
Serial.print(tempIR3);
Serial.print(';');
Serial.print(timenow);

Möglicherweise könnte Dir Streaming.h gefallen:

#include <Streaming.h>
...
Serial << tempIR00 << ";" << tempIR01 << ";" << tempIR02 << ";" << tempIR3 << ";" << endl;

Beispiele findest Du in der Bibliothek SdFat.

  • wird nun mal zur Addition verwendet.
    Und das ist auch gut so. :wink:

Hi

Gibt auch Sprachen, in Denen mit + Strings verknüpft werden - könnte bei PHP so gewesen sein (müsste nachschauen).

MfG

postmaster-ino:
Hi

Gibt auch Sprachen, in Denen mit + Strings verknüpft werden - könnte bei PHP so gewesen sein (müsste nachschauen).

MfG

Arduino kann das auch

     Serial.print(String() + tempIR00 + tempIR01 + tempIR02 + tempIR3 + timenow); // print to the serial port too
void setup() 
{
 Serial.begin(9600);
 String a(2.55);
 float  pi = 3.14;
 Serial.println(a + " " + pi + " " + 42 + " " + 4711 + " " + 1.1 + F(" Rosinensalat"));

}

Aber was geht, muss nicht unbedingt gut sein

postmaster-ino:
Hi

Gibt auch Sprachen, in Denen mit + Strings verknüpft werden - könnte bei PHP so gewesen sein (müsste nachschauen).

MfG

Von AutoIT und VBA, wahrscheinlich auch VB, kenne ich die Möglichkeit mit dem &-Zeichen, so was in der Art vermisse ich in C++/Arduino. Aber warum einfach wenn es auch umständlich geht, bzw. man gewöhnt sich irgendwann daran. :wink:

Hi

Da auf dem AVR zumindest Strings (großes S) keine so gute Idee sind, stört das fehlende 'Zusammenkleben per +' nur bedingt.
Gerade bei dieser Kleberei wird einem sehr schnell der Speicher ausgehen, da ja beide vorhandenen Strings zusammengesetzt irgendwo Platz finden müssen - wobei der Kompiler schon gezeigt hat, daß Er weiß, was Er tut ... wenn man's aber nicht benutzt, fällt man damit aber auch nicht auf die Fresse.

MfG

wapjoe:
Von AutoIT und VBA, wahrscheinlich auch VB, kenne ich die Möglichkeit mit dem &-Zeichen, so was in der Art vermisse ich in C++/Arduino.

Das wäre doch mal die Idee: Du könntest VB auf den Arduino portieren :wink:

Gruß Tommy

Tommy56:
Das wäre doch mal die Idee: Du könntest VB auf den Arduino portieren :wink:

Gruß Tommy

lol
Das willst du und ich nicht wirklich... :smiley:

wapjoe:
Von AutoIT und VBA, wahrscheinlich auch VB, kenne ich die Möglichkeit mit dem &-Zeichen, so was in der Art vermisse ich in C++/Arduino. Aber warum einfach wenn es auch umständlich geht, bzw. man gewöhnt sich irgendwann daran. :wink:

Basic/VB ist eine andere Sprache mit anderen Operatoren und anderer Syntax.
Arduino verwendet, wie richtig bemerkt, C++.
In C++ gibt es neben den ANSI-C-ctrings (nullterminierte char-arrays, die man mit strcat() aneinanderhängen kann) noch die std::string class (kleines s), in der man strings ebenfalls mit + verknüpfen kann.
Arduino hat diese std::strings nicht, weil sie extrem viel Speicher brauchen.
Stattdessen hat Arduino die String Class (großes S), die ziemlich ähnlich wie ein abgespecktes std::string funktioniert inkl. ebenfalls "+" fürs zusammenfügen, aber immer noch sehr viel Speicher braucht, oft zuviel für die kleinen AVRs.
Außerdem haben die AVRs (u.a. auch aus Speichergründen) gar kein echtes 64bit-"double" - "double" auf den AVRs ist schlicht dasselbe wie das ganz normale 32bit-float.
Weil man ständig mit diesen Mini-AVRs mit ihrem mickrigen 2-3kB Speicher solche RAM-Probleme hat, verwende ich (wie auch viele andere User) von vornherein den Mega2560 oder einen ARM (Zero/M0, Due/M3 oder M4 von Adafruit/Teensy) - dann kann man auch getrost String verwenden - u.v.m.
Ein M0 oder M4 ist oft nicht größer als ein Nano (s. Adafruit Itsybitsy M0/M4 oder Feather M0/M4), es gibt die aber auch mit Uno/R3 oder Mega2560/R3-Platinenlayout (z.B. Adafruit Metro M4 oder Adafruit Great Central M4).

PS
eine weitere, wirklich mächtige und auch sehr praktische (wenn auch für Anfänger oft zu komplizierte) Funktion, um cstrings aneinanderzuhängen und perfekt (auch tabellarisch) zu formatieren, ist sprintf().
Bislang konnte man mit sprintf auf AVRs leider keine fp (float oder double) formatieren (sondern nur auf ARMs, ebenfalls aus Speichergründen), inzwischen gibt es aber einen Patch, mt dem sich fp per sprintf auch auf AVRs zu einem cstring verarbeiten lassen (aber auch natürlich Zusatzspeicher braucht, wenn auch nicht so viel wie die String class).