Hallo,
ich versuche eine zusammengesetzte print-Ausgabe hinzubekommen, wie in der IDE problemlos möglich.
Leider bringt VS diese Fehlermeldung, auch alle anderen probierten Varianten mit mehr oder weniger " bringen Fehler.
Was will der hier, heute soll ganz normaler Text sein?
Die komplette Ausgabe bei i=0 soll so aussehen:
start.t0.txt="heute"
cu
Tommy56
November 26, 2024, 6:09pm
2
Das dürfte auch in der IDE nie funktioniert haben.
Du kannst mit + keine Zeichenketten-Literale verknüpfen.
Gruß Tommy
1 Like
Serial2.print("meldung.t0");
}
Serial2.print(".txt=\"" + String((rtc.getTime("%D,%T"))) + ": "); // Datum, Zeit
switch (fehlercode) { // Fehlermeldungen ausgeben
case 0:
break;
case 1:
debm("Fehler 1");
fehlercode = 0;
Serial2.print("Fehler Befehlsbyte: " + String(byte_befehl, HEX) + "\"");
Was ist hier anders?
cu
Kai-R
November 26, 2024, 6:16pm
4
Das fällt dir wirklich nicht selber auf?
Tommy56
November 26, 2024, 6:17pm
5
ist etwas Anderes, als "heute".
Du solltest dringend anfangen, die Grundlagen von C++ zu lernen.
Gruß Tommy
noiasca
November 26, 2024, 6:24pm
6
a) warum?
b) für welchen Microcontroller?
c) hast schon mal Streaming.h probiert?
Tommy56:
die Grundlagen von C++
...enthalten allerdings nicht die Arduino String - Klasse.
Diese ist nur in der Arduino-Referenz zu finden.
Tommy56
November 26, 2024, 6:30pm
8
Aber Zeichenketten-Literale und die std::String verhält in dieser Hinsicht genau so.
Gruß Tommy
Kai-R
November 26, 2024, 6:33pm
9
Wenn Du es unbedingt so zusammenbacken willst, mach
Serial.println((String)".txt\"" + "heute" + "\"");
draus. Fehlerhafter Code ist und bleibt fehlerhaft. Egal welche IDE man verwendet.
Kai-R
November 26, 2024, 6:34pm
10
In einem Grundlagenbuch lernt man aber was Literale und Datentypen sind. Der Rest ist Transferdenken.
Tommy56
November 26, 2024, 6:35pm
11
Aber Denken tut doch weh, denken manche
Gruß Tommy
Kai-R
November 26, 2024, 6:44pm
12
Naja, so wie es im Ursprungspost steht, ist ja das ganze Konstrukt etwas sinnbefreit.
Es kann ja auch gleich Serial.print(".txt\"heute\"");
geschrieben werden. Ist das gleiche.
Kai-R
November 26, 2024, 7:01pm
13
Soweit ich weiß, probierst Du mit einem ESP32 herum.
Da würde ich das ja eher so machen:
#include <iostream>
using namespace std;
void setup() {
Serial.begin(115200);
int i {0};
cout << "start.t" << i << ".txt=\"heute\"\n";
}
Dann ist das auch wie in einem C++ Buch
Ich hatte auch mehr die Teile in "" im Auge ...
a - weil sich die entsprechenden Textfeldnummern je Datensatz ändern
b - ESP32
c - jein
Ich probiere mal, aber es gibt Ausgaben auf Serial, Serial2 und BTSerial.
Das akzeptiert er, werde morgen mal sehen ob das Richtige rauskommt.
cu
Tommy56
November 26, 2024, 7:04pm
15
Das sieht nach einer Ausgabe zu einem Nextion aus.
Auch dort kann man die Ausgabe auf mehrere print verteilen.
Gruß Tommy
noiasca
November 26, 2024, 7:15pm
16
hawe07546:
c - jein
#include <Streaming.h>
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial << ".txt" << "\"" << "heute" << "\"";
}
void loop() {
// put your main code here, to run repeatedly:
delay(10); // this speeds up the simulation
}
nur damit du Streaming siehst. Das man das in einer Zeile drucken kann soll klar sein.
Richtig, auf dem Nextion werden einzelne Elemente der Reihe nach durchnumeriert.
Das kenne ich. Muss ich mal schauen wie ich da die Endsequenz des Nextion reinkriege.
Obwohl
->
Serial2 << "start.t" << i << ".txt=" << "\"" << "heute" << "\"" << "\xFF\xFF\xFF";
sollte dann ja funktionieren.
cu
noiasca
November 27, 2024, 5:01pm
18
Da könnte man glatt eine Konstante anlegen wenn man es zwei mal oder öfter braucht.
1 Like
noiasca:
eine Konstante anlegen
Du meinst für den Befehlsterminator?
hawe07546:
"\xFF\xFF\xFF"
Bin ich am probieren, habe es aber noch nicht hinbekommen. Der wird sehr sehr oft gesendet, da jede Übertragung zum Nextion, die von diesem als Befehl interpretiert werden soll damit enden muss.
cu
Kai-R
November 27, 2024, 5:57pm
20
Eine Möglichkeit:
constexpr char TERMINATOR[] {"\xFF\xFF\xFF"};