String addieren für Gelbschnabel

Warum geht das nicht:

HTMLZeile1 = hour() + " : " + minute() + " : " + second() + " " + HTMLZeile2;

exit status 1
invalid operands of types ‘const char*’ and ‘const char [4]’ to binary ‘operator+’

und das geht:

HTMLZeile1 = hour() + " : ";
HTMLZeile1 += minute() + " : ";
HTMLZeile1 += second() + " " + HTMLZeile2;

Bist Du sicher, dass der 2. teil geht oder nur keinen Fehler beim Kompilieren wirft?

Wie ist HTMLZeile1 definiert?

als char HTMLZeile1[500] ? Dann geht + und += nicht, Dann brauchst Du strcat. Oder schau Dir mal die PString Lib an.

Gruß Tommy

Hast recht:

  1. Teil gibt keinen Fehler beim Kompilieren gibt aber beim Praxistest nicht die Zeit sondern nur Mißt aus.

HTMLZeile1 ist als String definiert.

Am String verzweifel ich beim Arduino auch etwas. Bitte also nicht vergessen, zu posten wenn du es gelöst hast :)

Obwohl es mir ein Graus ist, sollte das eventuell gehen HTMLZeile1 = String(hour()) + " : " + minute() + " : " + second() + " " + HTMLZeile2;

https://www.arduino.cc/en/Tutorial/StringConstructors

Wo kommen hour() bzw. minute() her und was geben sie zurück?

char * oder int oder ...?

Das Arbeiten mit Chararrays ist nicht schwer.

Strings machen es auf den ersten Blick vermeintlich einfach. Das ist aber ein Trugschluss. Denn sie sind nicht mit den meisten Funktionen kompatibel und sie verbrauchen viel vom knappen RAM.

Gruß Tommy

Keine Ahnung was hour() ist. Ich nutze die Time Lib.

Aber das scheint zu laufen:

HTMLZeile1 = String(hour()) + ":" + String(minute()) + ":" + String(second()) + " " + HTMLZeile2;

THX !!

Muss noch etwas in der Praxis testen - hab noch einen weiteren Fehler gefunden...

Aber nicht wundern, wenn plötzlich der Speicher voll ist. Der Verbrauch durch String(...) erscheint nicht in der Anzeige des Kompilers.

Gruß Tommy

Keine Ahnung was hour() ist. Ich nutze die Time Lib.

Du hast schon mehrfach Besserung gelobt. Sollen wir dich mal verhauen?

Du nutzt eine sog. "Time Lib" also musst du das rauskriegen.

Ich rate mal, String(hour()) ist mittags das gleiche wie z.B. String(12) und erzeugt unnötigerweise ein String("12")Objekt. ( Egal ob hour() nun ein byte oder ein int zurückliefert. )

Aber das scheint zu laufen

Wenn es dir gefällt, morgens vor 10 oder in den ersten 10 Minuten einer Stunde ... soll es mir recht sein

Hallo,

stoni99:
Keine Ahnung was hour() ist

das ist schon fast ne´ Frechheit!

“Muss noch etwas in der Praxis testen”

Was willst Du mit Deinem Wissen denn in der Praxis testen? Einen Uhrenvergleich?
Gruß und Spaß
Andreas

Finde ich auch!

hour() könnte mir doch gefälligst sagen was es ist...Frechheit... :grin:

Also das hier

HTMLZeile1 = String(hour()) + ":" + String(minute()) + ":" + String(second()) + " " + HTMLZeile2;

funzt super!

Das hier aber auch:

HTMLZeile1 = "";
HTMLZeile1 = hour();
HTMLZeile1 += " : "; 
HTMLZeile1 += minute();
HTMLZeile1 += " : ";
HTMLZeile1 += second();
HTMLZeile1 += " ";
HTMLZeile1 += HTMLZeile2;

und das ganz ohne "String(hour())".

Und ja, die Lib sollte ich mir mal anschauen... und bitte nicht verhauen... :smiling_imp:

mit PString und Streaming, und als char array würde es so aussehen:

#include <PString.h>
#include <Streaming.h>
#include <TimeLib.h>

char buffer[200];
char * HTMLZeile2 = "Ende des HTML codes";
PString HTMLZeile1(buffer, sizeof(buffer));
 
void setup() {
Serial.begin(115200);
HTMLZeile1 << hour() << ":" << minute() << ":" << second() << " " << HTMLZeile2;

Serial.println(HTMLZeile1);
}

void loop() {
  // put your main code here, to run repeatedly:

}
0:0:0 Ende des HTML codes

Mit korrekter Formatierung der Uhrzeit:

#include <PString.h>
#include <Streaming.h>
//#include <TimeLib.h>

char buffer[200];
char * HTMLZeile2 = "Ende des HTML codes";
PString HTMLZeile1(buffer, sizeof(buffer));
 
void setup() {
Serial.begin(115200);
HTMLZeile1 << "Anfang, Uhrzeit: " ;
if(hour()<10)  HTMLZeile1 << "0" << hour(); else HTMLZeile1 << hour();
if(minute()<10) HTMLZeile1 << ":0" << minute(); else HTMLZeile1 << ":" << minute();
if(second()<10) HTMLZeile1 << ":0" << second(); else HTMLZeile1 << ":" << second();
HTMLZeile1 << " " << HTMLZeile2 << endl;

Serial.println(HTMLZeile1);
}

void loop() {
  // put your main code here, to run repeatedly:

}

uint8_t hour(){
  return 4;
}uint8_t minute(){
  return 5;
}uint8_t second(){
  return 6;
}

Du musst aber den HTML-Code nicht in einer Variablen zusammenbauen. Du kannst auch direkt in den client streamen:
client << buffer;

Danke!