Schau Dir zu Zeichenketten in C mal meine Zusammenfassung an. Auch ansonsten solltest Du an Deinem Grundlagenwissen arbeiten.
Hab ich schon 2x gemacht.
Verstehe aber nicht was du meinst, oder was mich da hätte erleuchten sollen.
Ich hab vor 25 Jahren ne Menge Basic, Turbo Pascal und Visual Basic programmiert. Dann aber 25 Jahre Pause gemacht. Und bin nun plötzlich, wie die Jungfrau zum Kind in der C++ Welt gelandet.
Ich schreibe das mal mit meinen Worten auf:
Ein String ist eine Zeichenkette. Gelernt habe ich, das diese speicherfressend ist, und das man die nicht benutzen soll. Gut, erledigt.
Mit einem char ist immer ein char Array gemeint (also eine Ansammlung von Zeichen). Ja, kenn ich.
Das man vorher wissen sollte wie groß das Array ist, und wenn es zu klein ist und man trotzdem mehr Dateien reinschreibt und dann nur Käse dabei rauskommt ist mir auch klar.
....aber was zum Geier ist zum Beispiel der Unterschied in der Deklaration mit und ohne dem "*"? Da hab ich jetzt schon mehrfach nach gesucht, aber keine für mich verständliche Antwort gefunden.
Dazu schweigt sich dein Tutorial auch aus, oder ich finde es nicht oder ich verstehe es nicht.
Genau das gleiche mit const. Steht leider auch nicht in dem Tutorial drin. Scheint aber wichtig zu sein?!
Bei der Variablenübergabe verstehe ich auch absolut nicht warum manche Varianten nicht funktionieren.
In dem JSON ist die Zeichenkette bzw. Zahl 13 Stellen lang. Also muss ich das char Array so deklarieren: char zwischen1[13];
Hab ich mal in 6 Varianten getan, und versuche die Variablen zu übergeben:
char zwischen1[13];
zwischen1 = data_tuples0[0];
Geht nicht, der Kompiler bricht mit der Fehlermeldung "incompatible types in assignment of 'ArduinoJson::JsonArraySubscript' to 'char [13]' ". Ich verwende die ArduinoJSON Library. Warum das nicht geht verstehe ich nicht.
Next try:
char zwischen2[13];
strcpy(zwischen2, data_tuples0[0]);
Das geht. ....wieso denn das?
Next try:
const char* zwischen3 = data_tuples0[0];
Das geht auch. ....wieso denn das?
Okay, dann versuche ich nochmal die erste Variante aber mit const und "*". Das ist dann so wie die 3. Variante.
const char* zwischen4;
zwischen4 = data_tuples0[0];
Das geht jetzt auch. Warum diese aber geht und die erste Variante nicht geht ist mir nicht klar.
Nun mit Zahlen:
uint32_t zwischen5 = data_tuples0[0];
Geht, aber nur halb, weil die Variable zu klein ist. Das ist mir klar, das da Blödsinn bei rauskommt.
Dann hab ich probiert:
uint64_t zwischen6 = data_tuples0[0];
uint32_t zwischen7 = zwischen6 / 1000;
Das geht wieder nicht, die Fehlermeldung des Kompilers ist: C:\Users\Chris\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Deserialization/../JsonVariant.hpp:240:3: error: no type named 'type' in 'struct ArduinoJson::TypeTraits::EnableIf<false, long long unsigned int>'
Ich verwende die ArduinoJSON Library. Warum das nicht geht verstehe ich nicht.
Mit Zahlen scheint es also irgendwie nicht zu klappen.
Ich denke, das ist auch kein Problem. Ich kann auch mir char Arrays leben, würde diese aber gerne noch besser verstehen, siehe oben.
Nun kommt allerdings noch ein weiteres Problem hinzu.
Ich habe das Ganze auch noch mehrfach.
Also, die ausgelesenen Zeichen sind timestamps.
Davon habe ich aktuell 7 Stück.
Wenn es Zahlen wären, hätte ich einfach Arrays benutzt, das habe ich z.B. schon folgendermaßen mit anderen Variablen erfolgreich gemacht:
uint16_t TextColor[8];
float Temperatur[8]={0};
float OldTemperatur[8]={99};
.....aber wie geht das denn mit char Arrays?
Das müsste dann ja ein "char Array Array" sein.
Gibt's sowas? Geht sowas?
Oder kann man das nur machen, indem man aus dem char Array wieder eine Zahl macht, und diese in ein Zahlen Array speichert?
Ich hoffe ich konnte mich verständlich ausdrücken?
Ich weiss, das ist auch nicht einfach mit mir.
Lieben Gruß und lieben Dank,
Chris