Go Down

Topic: Link aus Varialbe und Text zusammensetzen (Read 309 times) previous topic - next topic

schnibli

Hallo Zusammen,

Ich würde gerne einen Link aus Variablen und Text zusammensetzen.

Wie Folgt habe ich mir das vorgestellt:
Code: [Select]
    for (byte i = 0; i < bufferSize; i++)
        {
          Serial.print(buffer[i] < 0x10 ? " 0" : ",");
          Serial.print(buffer[i], DEC);
     content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : ","));
     content.concat(String(mfrc522.uid.uidByte[i], DEC));
        }

content.toUpperCase();

   char buf[100];
printf(buf, "http://192.168.61.5/tueren/rfid.php?uid=%s ", content);
    http.begin(buf); //HTTP



Nun erscheint folgender Fehler:
cannot pass objects of non-trivially-copyable type 'class String' through '...'


Kann mir jemand helfen?
Gruss

gregorss

Kann mir jemand helfen?
Du bist offensichtlich nicht zum ersten Mal hier. Du bist demnach vermutlich kein blutiger Anfänger und kannst sagen, woher die 'content'-Funktion kommt. In der Referenz kommt das nicht vor.

Außerdem könntest Du vor dem Posten von Code-Schnipselchen wenigstens Strg-T drücken.

Gruß

Gregor
Meine Pizza schmeckt am besten, wenn ich sie selber esse.

schnibli

#2
Dec 10, 2018, 07:50 am Last Edit: Dec 10, 2018, 07:51 am by schnibli
Hallo,

Sorry für die Komische Formatierung.

Content ist als String Formatiert
Es geht darum die UID eines RFID Tags an einen Server zu senden:
Code: [Select]

  String content = "";
  for (byte i = 0; i < bufferSize; i++)
  {
    Serial.print(buffer[i] < 0x10 ? " 0" : ",");
    Serial.print(buffer[i], DEC);
    content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : ","));
    content.concat(String(mfrc522.uid.uidByte[i], DEC));
  }

  content.toUpperCase();
  Serial.println(content);

  HTTPClient http;

  Serial.print("[HTTP] begin...\n");
  char buf[100];
  sprintf(buf, "http://192.168.61.5/tueren/rfid.php?uid=%s ", content.substring(1));
  http.begin(buf); //HTTP

Dies ist Die Error Meldung.
Code: [Select]
cannot pass objects of non-trivially-copyable type 'class String' through '...'

Ich gehe mal davon aus das ich Irgendwo eine Formatierung vergessen habe :s

Derfips

Printf mag kein String Objekt.

Code: [Select]

printf(buf, "http://192.168.61.5/tueren/rfid.php?uid=%s ", content.c_str());



Gruß Fips
Meine Esp8266 & ESP32 Projekte => https://fipsok.de

noiasca

#4
Dec 10, 2018, 07:55 am Last Edit: Dec 10, 2018, 07:55 am by noiasca
ich finds eigenartig, dass du zunächst ein String-Objekt (?) zusammenbauen willst um diesen dann an einen char buf[] anzuhängen.
Vergiss das vorgelagterte String Objekt, und  ergänze die UID direkt in den char buf
DE: Wie man Fragen postet:
1. was hat man (Sketch und Hardware)
2. was SOLL es machen
3. was macht es: IST (Fehlverhalten, Fehlermeldungen, Serial.Output ...)
4. Eine Frage stellen bzw. erklären was man erwartet

schnibli

Hallo danke für die Hilfe.

@noiasca
Wenn ich wüsste wie dies ginge dan würde ich dies auch machen.
Aber ich kann es nur so gut machen wie ich weis dass es geht xD


schnibli

So nun habe ich es das es mehr oder weniger läuft:
Code: [Select]
for (byte i = 0; i < bufferSize; i++)
  {
    Serial.print(buffer[i] < 0x10 ? " 0" : ",");
    Serial.print(buffer[i], DEC);
    content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? "0" : ","));
    content.concat(String(mfrc522.uid.uidByte[i], DEC));
  }

  content.toUpperCase();
  Serial.println(content);

  HTTPClient http;

  Serial.print("[HTTP] begin...\n");
  char buf[100];
  sprintf(buf, "http://192.168.61.5/tueren/rfid.php?uid=%s", content.c_str());
  http.begin(buf); //HTTP


Jetzt gibt es nurnoch ein problem beim Zusammensetzten von content
Und zwar:
Wenn der RFID Tag an ersten stelle eine Zahl < 10 hat Funktioniert es: 07,216,83,211
Wenn der RFID Tag an erster Stelle eine Zahl >= 10 hat Funktioniert es nicht und die erste Stelle in Content Beinhaltet eine "," = ,45,244,85,211



Derfips

#7
Dec 10, 2018, 08:19 am Last Edit: Dec 10, 2018, 08:22 am by Derfips
Wenn ich wüsste wie dies ginge dan würde ich dies auch machen.
Aber ich kann es nur so gut machen wie ich weis dass es geht xD


Dann bleibt doch gleich beim String Objekt, die Lib arbeitet intern eh damit.

Code: [Select]

http.begin("http://192.168.61.5/tueren/rfid.php?uid=" + content); //HTTP


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


Gruß Fips
Meine Esp8266 & ESP32 Projekte => https://fipsok.de

noiasca

passt jetzt nicht mehr aber zu deinem Vorpost:

du könntest dir mal die PString ansehen:
https://github.com/johnmccombs/arduino-libraries/tree/master/PString

mit dieser Lib kannst du ziemlich einfach wie mit Print in einen Buffer schreiben.

Oder die Umwandlung von i zu Char mit itoa() http://www.cplusplus.com/reference/cstdlib/itoa/
braucht einen separten (kleinen) Buffer, denn du dann aber mit strcat einfach an deinen großen Buffer anhängen kannst.

aber wie fips schon schrieb, bleib bei einer Variante.
DE: Wie man Fragen postet:
1. was hat man (Sketch und Hardware)
2. was SOLL es machen
3. was macht es: IST (Fehlverhalten, Fehlermeldungen, Serial.Output ...)
4. Eine Frage stellen bzw. erklären was man erwartet

noiasca

Wenn der RFID Tag an ersten stelle eine Zahl < 10 hat Funktioniert es: 07,216,83,211
Wenn der RFID Tag an erster Stelle eine Zahl >= 10 hat Funktioniert es nicht und die erste Stelle in Content Beinhaltet eine "," = ,45,244,85,211

das ist genau was diese Zeile macht:

content.concat(String(mfrc522.uid.uidByte < 0x10 ? " 0" : ","));

wenn das führende , stört, lass es weg.
DE: Wie man Fragen postet:
1. was hat man (Sketch und Hardware)
2. was SOLL es machen
3. was macht es: IST (Fehlverhalten, Fehlermeldungen, Serial.Output ...)
4. Eine Frage stellen bzw. erklären was man erwartet

schnibli

Danke.

Ja das hab ich auch herausgefunden.

Nur bin ich nicht im Stande das erste "," zu löschen.
Entweder alle oder keins  :o


noiasca

machs in einem normalen if ohne else.
DE: Wie man Fragen postet:
1. was hat man (Sketch und Hardware)
2. was SOLL es machen
3. was macht es: IST (Fehlverhalten, Fehlermeldungen, Serial.Output ...)
4. Eine Frage stellen bzw. erklären was man erwartet

schnibli

If ohne else würde ja so Aussehen:
Code: [Select]

    content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? "0"));

oder seh ich das falsch  :smiley-confuse:

Derfips

#13
Dec 10, 2018, 09:13 am Last Edit: Dec 10, 2018, 09:13 am by Derfips
If ohne else würde ja so Aussehen:
Code: [Select]

    content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? "0"));

oder seh ich das falsch  :smiley-confuse:
Falsch!
Das klappt nicht.

Code: [Select]

    content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? "0" : ""));




Oder mit if()


Gruß Fips
Meine Esp8266 & ESP32 Projekte => https://fipsok.de

schnibli

Da ist das Problem das ich keine "," mehr habe ich benötige jeweils nur das erste nicht.

Der Fehler liegt ja da:
,228,45,83,211
07,216,83,211

Bei Kleinen zahlen wird das erste "," nicht geschrieben und bei grossen schon

Go Up