Simple print-Ausgabe in VS

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

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

Das fällt dir wirklich nicht selber auf?

ist etwas Anderes, als "heute".
Du solltest dringend anfangen, die Grundlagen von C++ zu lernen.

Gruß Tommy

a) warum?
b) für welchen Microcontroller?
c) hast schon mal Streaming.h probiert?

...enthalten allerdings nicht die Arduino String - Klasse.
Diese ist nur in der Arduino-Referenz zu finden.

Aber Zeichenketten-Literale und die std::String verhält in dieser Hinsicht genau so.

Gruß Tommy

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.

In einem Grundlagenbuch lernt man aber was Literale und Datentypen sind. Der Rest ist Transferdenken.

Aber Denken tut doch weh, denken manche :wink:

Gruß Tommy

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.

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 :wink:

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

Das sieht nach einer Ausgabe zu einem Nextion aus.
Auch dort kann man die Ausgabe auf mehrere print verteilen.

Gruß Tommy

#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

Da könnte man glatt eine Konstante anlegen wenn man es zwei mal oder öfter braucht.

1 Like

Du meinst für den Befehlsterminator?

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

Eine Möglichkeit:

constexpr char TERMINATOR[] {"\xFF\xFF\xFF"};