INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
String falsch verstanden?
06.07.2015, 22:57
Beitrag #1
String falsch verstanden?
Hey Leute,

Code:
#include <DHT.h>
#include <Ethernet.h>
#include <SPI.h>

byte mac[] = { 0x90, 0xA2, 0xDA, 0x0E, 0x0B, 0x76 }; // RESERVED MAC ADDRESS
EthernetClient client;

#define DHTPIN 2 // SENSOR PIN
#define DHTTYPE DHT11 // SENSOR TYPE - THE ADAFRUIT LIBRARY OFFERS SUPPORT FOR MORE MODELS
DHT dht(DHTPIN, DHTTYPE);

long previousMillis = 0;
unsigned long currentMillis = 0;
long interval = 250000; // READING INTERVAL

int t = 0;    // TEMPERATURE VAR
int h = 0;    // HUMIDITY VAR
String data;

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

    if (Ethernet.begin(mac) == 0) {
        Serial.println("Failed to configure Ethernet using DHCP");
    }

    dht.begin();
    delay(10000); // GIVE THE SENSOR SOME TIME TO START

    h = (int) dht.readHumidity();
    t = (int) dht.readTemperature();

    data = "";
}

void loop(){

    currentMillis = millis();
    if(currentMillis - previousMillis > interval) { // READ ONLY ONCE PER INTERVAL
        previousMillis = currentMillis;
        h = (int) dht.readHumidity();
        t = (int) dht.readTemperature();
    }

    data = "temp1=" + t  + "&hum1=" + h ;

    if (client.connect("132.252.134.250",80)) { // REPLACE WITH YOUR SERVER ADDRESS
        client.println("POST /add.php HTTP/1.1");
        client.println("Host: 132.252.134.250"); // SERVER ADDRESS HERE TOO
        client.println("Content-Type: application/x-www-form-urlencoded");
        client.print("Content-Length: ");
        client.println(data.length());
        client.println();
        client.print(data);
    }

    if (client.connected()) {
        client.stop();    // DISCONNECT FROM THE SERVER
    }

    delay(300000); // WAIT FIVE MINUTES BEFORE SENDING AGAIN
}

Mein Arduino sagt leider dann bei

Code:
data = "temp1=" + "t" + "&hum1=" + "h" ;

immer das hier...

Code:
info1:45: error: invalid operands of types 'const char*' and 'const char [7]' to binary 'operator+'

Ich hab mich schon totgesucht..kann mir jemand helfen?

Dankee
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.07.2015, 22:59
Beitrag #2
RE: String falsch verstanden?
man kann C-Strings nicht addieren mit +
dazu musst du die Strings in der C++ Stringklasse verwenden oder den ANSI C Befehl strcpy.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.07.2015, 23:18
Beitrag #3
RE: String falsch verstanden?
(06.07.2015 22:59)tito-t schrieb:  man kann C-Strings nicht addieren mit +
dazu musst du die Strings in der C++ Stringklasse verwenden oder den ANSI C Befehl strcpy.

Tut mir leid, aber das verstehe ich nicht ganz..wie müsste das denn dann aussehen?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.07.2015, 05:10
Beitrag #4
RE: String falsch verstanden?
Tante G hilft:

String copy

Keep on... Ralf aka RMR
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.07.2015, 07:32 (Dieser Beitrag wurde zuletzt bearbeitet: 07.07.2015 07:53 von HaWe.)
Beitrag #5
RE: String falsch verstanden?
nicht strcpy sondern strcat verknüpft strings:
http://www.cplusplus.com/reference/cstring/strcat/
und sprintf kann auch zusätzlich formatierte Variablen einfügen (berichtigt):

Code:
char sdata[50];
h = (int) dht.readHumidity();
t = (int) dht.readTemperature();
sprintf(sdata, "temp1=%d  & hum1=%d ", t, h) ;
client.print(sdata);

sprintf finde ich auch sonst zum Verknüpfen mehrerer Strings einfacher:
Code:
char s1[]="Ich", s2[]="verwende", s3[]="sprintf", s4[]="gerne";
char sbuf[50];
sprintf(sbuf, "%s %s %s %s", s1, s2, s3, s4); // man achte auch auf die Leerzeichen im Formatstring!
Serial.print(sbuf);

edit:
hatte oben einen Tippfehler, jetzt berichtigt!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.07.2015, 09:43
Beitrag #6
RE: String falsch verstanden?
Hi hougy,
in Deinem Fall kannst Du das Verketten auch komplett bleiben lassen.
Anstatt...
Code:
client.print(data);
...müsstest Du auch einfach das hier schreiben können:
Code:
client.print("temp1=");
client.print(t);
client.print("&hum1=");
client.print(h);
Das spart auch noch ein bisschen Speicherplatz.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.07.2015, 10:25 (Dieser Beitrag wurde zuletzt bearbeitet: 07.07.2015 10:33 von HaWe.)
Beitrag #7
RE: String falsch verstanden?
hallo,
ich habe mir nochmal den Spaß gemacht, eine Verkettungsfunktion
stradd()
zu schreiben 8-)

Deklaration:
stradd(Gesamtstring, Anzahl_Teilstrings, Liste_der_Teilstrings);

also z.B.
Code:
stradd(sbuf, 4, "a,"  ,"b,"  ,"c,",   " die Katze lief im Schnee ;) ");

ergibt, ihr erratet es,
"a, b, c, die Katze lief im Schnee ;) "

Code:
void setup() {

   Serial.begin(115200);

}
//================================================================================​=====

char * stradd(char * s, int n, ...) // s=Gesamtstring , n=Anzahl in Liste, ... = string Liste
{
   va_list vlst;
   int i;

   char buf[1024];
   char * bufptr = buf;
   char * retptr = s;

   va_start(vlst, n);
   for (i=1; i<=n; ++i) {
      strcpy(buf, "");
      bufptr = va_arg(vlst, char *);
      strcat(s, bufptr);
   }
   va_end(vlst);
   return retptr;
}


//================================================================================​=====

void loop() {
   char sbuf[128];

   strcpy(sbuf, "");  löscht / initialisiert den Gesamtstring
   Serial.println("stradd test");

   stradd(sbuf, 4, "a,","b,","c,", " die Katze lief im Schnee ;) ");
   Serial.println(sbuf); // Ausgabe des im übergebenen sbuf zwischengespeicherten strings

   strcpy(sbuf, "");  // löscht; ohne löschen würde es jetzt angehängt werden
   Serial.println( stradd(sbuf, 4, "a,","b,","c,", " die Katze lief im Schnee ;) ") ); // direkter return-Wert

   while(1);  // pause

}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.07.2015, 10:32
Beitrag #8
RE: String falsch verstanden?
Hi,
warum machst Du denn das hier:
Code:
char buf[1024];
char * bufptr = buf;
Du benutzt buf gar nicht und mit dem hier:
Code:
bufptr = va_arg(vlst, char *);
...wird bufptr sowieso auf eine andere Adresse gesetzt. Der durch "buf[1024] reservierte Speicher wird nicht benutzt. D.h. z.B. auf einem Uno wird unnötigerweise die Hälfte des Speichers verbraten. (Zwar nur temporär, aber auch das kann Probleme bereiten.)

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  String zusammensetzen Mathias 13 539 01.09.2016 21:15
Letzter Beitrag: Mathias
  String-Array füllen? torsten_156 9 440 08.07.2016 20:07
Letzter Beitrag: amithlon
  String in EEPROM Speichern BennIY 2 405 27.06.2016 10:23
Letzter Beitrag: BennIY
  String - Buchstabenposition auswerten scritch 5 659 01.04.2016 16:25
Letzter Beitrag: rkuehle
  String nach UTF16 konvertieren (UTF-16) ThoEngel 0 299 20.02.2016 19:22
Letzter Beitrag: ThoEngel
  OLED Display anzeige von Logo falsch ! b3ta 0 331 23.01.2016 15:12
Letzter Beitrag: b3ta
Exclamation String Zerlegen in drei Variablen Wampo 4 846 28.12.2015 01:07
Letzter Beitrag: Wampo
  Integer nach Ascii-String ? itoa arduinofan 2 587 22.12.2015 15:34
Letzter Beitrag: arduinofan
  Umwandlung von Array in String Wampo 2 528 09.12.2015 21:58
Letzter Beitrag: Wampo
  erledigt: atan2 rechnet falsch? HaWe 0 342 30.11.2015 17:29
Letzter Beitrag: HaWe

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste