Arduino --> Nextion Text senden, Textfeld füllen

Hallo,
da bin ich zu blöde zu…
Ich habe ein TextFeld "t0" auf der Seite 0

Gebe ich im Editor t0.txt="AA" ein, dann wird in das Textfeld "t0" AA geschrieben.

Sende ich mit dem Mega:

Serial2.print("t0.txt=AA"); 

  Serial2.write(0xff); 
   Serial2.write(0xff);
   Serial2.write(0xff);

das:

Serial2.print("t0.txt="); 
Serial2.print("AA");

  Serial2.write(0xff); 
   Serial2.write(0xff);
   Serial2.write(0xff);

funktioniert auch nicht.

Ich kann mit dem Mega jedes Feld und jede Variable füllen, nur in dieses
verdammte Textfeld bekomme ich nichts rein.

Fehlermeldung ist:

0x1a 0xff 0xff 0xff
Parse: Invalid Variables

Ist das ein Bug im Editor? Muß ich einen Spruch aufsagen?

Hat da jemand einen Tip für mich?

Gruß und Dank
Andreas

Warum schickst du nicht das, was du auch im Editor eingäbest?

Serial2.print("t0.txt=\"AA\"");

Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);

Hallo Whandall,
mein Freund… wenn wir uns mal über´n Weg laufen sollten, dann gibt es
"ne´ Flasch Bier"

Was ist denn das? Arduino oder C++ Thematik? Gibt es dafür einen Fachausdruck
zum nachschlagen? Ich sehe das zum ersten mal.

Eigentlich wollte ich einen Arduino-Wert in ein Nextion-TextFeld schreiben.

float EXcT = 15.7;

char outstr[15];
dtostrf(EXcT,7, 1, outstr);

Serial.print(outstr); // serieller Monitor 15.7

alles gut- Denkste Puppe!
Jetzt sollte EXct Text sein. Das habe ich dann versucht zu übertragen- hat
nicht funktioniert, also etwas leichtes suchen- "AA" ist ideal.
Da wäre ich bald Wahnsinnig geworden, weil Dein Therminus nicht an einer
Stelle aufgetaucht ist…

Wie muß ich denn Dein

Serial2.print("t0.txt=\"AA\"");

ändern, das ist ich die 15.7 als Text in das Feld bekomme? Welche Steuerzeichen
muß ich denn da setzen?

Gruß und Dank
Andreas

Serial2.print("t0.txt=\"");
Serial2.print("was auch immer");
Serial2.write('"');

oder

Serial2.print("t0.txt=");
Serial2.write('"');
Serial2.print("was auch immer");
Serial2.write('"');

Wenn du Anführungszeichen in ein Stringliteral einbetten willst musst du mit dem Backslash verhindern, dass das Zeichen als Ende des Literals erkannt wird.

Man kann die Anführungszeichen auch per write schicken, Character Konstanten benutzen ja '.

Hallo,
das funktioniert aber nicht…

"Serial2.print("t0.txt="");"
hier sagt der Backslash, das nach dem = Zeichen nocht etwas kommt?

"Serial2.print("was auch immer");
"was auch immer" wird nachgeschoben…

Serial2.write('"');
hier wird das Ende festgelegt

"Serial2.print("was auch immer");
oder
"Serial2.print(outstr);

ist hier noch nicht das Ende erreicht

denn outstr wird nicht übertragen.

es wird nur 3 mal 0xff übertragen, das Textfeld bekommt NULL

"Serial2.print("was auch immer");
hier ist das Ende doch schon angekommen!

Das kann doch nicht so schwer sein…
Gruß und Dank
Andreas

SkobyMobil:
"Serial2.print("t0.txt="");"
hier sagt der Backslash, das nach dem = Zeichen nocht etwas kommt?

Der Backslash bedeutet, dass das darauf folgende Zeichen besonders behandelt wird,
im Fall des " wird dieses Zeichen in den String mit aufgenommen statt ihn zu beenden.
Das direkt darauf folgende " beendet den Text.

Ausgabe also [t0.txt="]
dann druckst du das was in das Textfeld soll, in meinem Beispiel [was auch immer]
dann das schließende ["]
dann die drei 0xFF

SkobyMobil:
Das kann doch nicht so schwer sein…

Dachte ich auch.

Hallo,
es wird weder "was auch immer, noch outstr zum Textfeld übertragen...

Serial2.print("t0.txt=\"outstr");

dann müßte das doch richtig sein...

denn das

Serial2.print("t0.txt=\"");
Serial2.print("was auch immer"); // oder das Serial2.print("outstr");
Serial2.write('"');

oder das

Serial2.print("t0.txt=");
Serial2.write('"');
Serial2.print("was auch immer"); // oder das Serial2.print("outstr");
Serial2.write('"');

schreibt nichts (NULL) ins Textfeld
es wird nur 0xFF empfangen.

Gruß und Dank
Andreas

void setup() {
  Serial.begin(250000);

  Serial.print("t0.txt=\"");
  Serial.print("was auch immer");
  Serial.write('"');
  Serial.write(0xFF);
  Serial.write(0xFF);
  Serial.write(0xFF);

  Serial.println();

  Serial.print("t0.txt=");
  Serial.write('"');
  Serial.print("was auch immer");
  Serial.write('"');
  Serial.write(0xFF);
  Serial.write(0xFF);
  Serial.write(0xFF);

  Serial.println();

  Serial.print("t0.txt=\"outstr");
  Serial.write(0xFF);
  Serial.write(0xFF);
  Serial.write(0xFF);

  Serial.println();

}

void loop() {}
t0.txt="was auch immer"ÿÿÿ
t0.txt="was auch immer"ÿÿÿ
t0.txt="outstrÿÿÿ

Hallo,

float EXcT = 15.7;
char outstr[15];
dtostrf(EXcT,7, 1, outstr);

ins Textfeld soll 15.7 als Text (outstr, hat als Inhalt 15.7) geschrieben werden. Ich gehe mal probieren.

Hier läuft etwas nicht rund...
Gruß und Dank
Andreas

Ich verstehe deine Probleme nicht.

void setup() {
  float EXcT = 15.7;
  char outstr[15];
  char fixstr[] = "15.7";
  Serial.begin(250000);

  Serial.print("t0.txt=\"");
  Serial.print(fixstr);
  Serial.write('"');
  Serial.write(0xFF);
  Serial.write(0xFF);
  Serial.write(0xFF);

  Serial.println();
  
  dtostrf(EXcT, 1, 1, outstr);
  Serial.print("t0.txt=\"");
  Serial.print(outstr);
  Serial.write('"');
  Serial.write(0xFF);
  Serial.write(0xFF);
  Serial.write(0xFF);

  Serial.println();
}
void loop() {}
t0.txt="15.7"ÿÿÿ
t0.txt="15.7"ÿÿÿ

Hallo,
ist doch einfach…
Ich will mit dem Arduino Text an das Nextion senden, und diesen in einem
Textfeld auf dem Nextion darstellen- ganz einfach…

Da habe ich die kalte Wut bei bekommen- aus Mangel an Fachwissen! Und ich
ärger mir die Krätze an den Hals, wenn ich etwas "einfaches" nicht hinbekomme.

Das, was Du mir hier beigebracht hast ist C++Basic! Ich überlege mir schon seid
Jahren ein C++ Fachbuch zu kaufen- jetzt ist es soweit.

Wie auch immer.
Dieser kleine, von Dir entwickelte Code-Schnipsel- läuft.

char NexINcT[15];
dtostrf(INcT, 1, 1, NexINcT);

Serial.print("t0.txt=\"");
Serial.print(NexINcT);
Serial.write('"');

Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);

Warum und weshalb weiß ich noch- nicht, da komme ich aber hinter.

Also- vielen Dank für Deine Hilfe- und auch für Deine Geduld.
Gruß und Spaß und noch einmal, Andreas sagt Danke schön.
Andreas

Du hattes vorher mitdtostrf(EXcT,7, 1, outstr);ein paar Leerzeichen vor der Zahl erzeugt,
vielleicht haben die die Zahl aus dem Feld geschoben.

Hallo,
dtostrf(EXcT,7, 1, outstr);
genau das ist es, was ich meine... woher soll ich wissen, das das Leerstellen sind?

Ich habe dtostrf noch nie nutzen müssen, weiß nur, das es aus Zahl- Text macht.
Also C&P- und nichts!
Das passiert mir nicht wieder.
Gruß und Dank
Andreas

SkobyMobil:
genau das ist es, was ich meine... woher soll ich wissen, das das Leerstellen sind?

Indem du die Doku ansiehst:
http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html#ga060c998e77fb5fc0d3168b3ce8771d42
Dass mit Leerzeichen aufgefüllt wird ist analog zu printf(). Die Funktion ist letztlich nur ein Sonderfall dafür weil printf() normal auf den AVRs nicht mit Float arbeitet. Jedesmal wenn irgendwo von "minimum width" die Rede ist wird mit Füllzeichen gearbeitet um eine konstante Breite zu erreichen.

Google.de hätte auch das ganz vorne ausspucken sollen:
dtostrf funktion allgemein - Mikrocontroller.net

Ansonsten mal ein kleines Test-Programm schreiben und Serial verwenden um zu sehen was Formatierungs-Funktionen so machen.

Und das mit dem Backslash um bestimmte Zeichen auszumaskieren läuft unter dem Stichwort "Escape Sequenz":

Hallo,
ich habe keine Lust, das im Internet nachzuschlagen. Mit einem guten
Fachbuch komme ich da weiter. Was dort nicht geschrieben steht, kann ich hier
erfragen. Es gibt mit Sicherheit gute C++ Lektüre, und ich liebe den
Buchhandel. Ich werde also etwas passendes finden.
Aber vielen Dank für Deine Mühe.
Gruß und Spaß
Andreas

dtostrf() findest du nicht in irgendwelchen Büchern erklärt. Das ist keine Standard Funktion

Und zu den Standard C Funktionen gibt es online sehr gute, professionelle Erklärungen

Funktioniert das Senden von Texten bei euch mit der Library zum Display?

Ich bekomme da immer merkwürdige Zahlen bei raus, nie die eigentlichen Texte

    memset(bufferPres, 0, sizeof(bufferPres)); // clear buffer
    itoa("Test", bufferPres, 10);
    Nextemp1.setText(bufferPres);

Wie groß ist Dein bufferPres?

Gruß Tommy

char bufferPres[100] = {0};

Also 100

Hallo,
meine Link´s beziehen sich auf "ohne Nextion-Lib".
Gruß und Spaß
Andreas