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 vergleichen georg01 15 830 18.07.2017 20:35
Letzter Beitrag: Tommy56
  String.charAt() ardun 3 345 02.07.2017 15:28
Letzter Beitrag: Tommy56
  Aus char string machen metzgefa 1 369 06.05.2017 15:15
Letzter Beitrag: Tommy56
  String übergeben oOSpikeOo 9 716 28.03.2017 19:47
Letzter Beitrag: georg01
  String in tinygps++ einlesen hoko 17 1.137 07.03.2017 15:40
Letzter Beitrag: hoko
  String -> Char *gelöst* Binatone 2 553 31.01.2017 11:08
Letzter Beitrag: Binatone
  ascii string to int array konvertieren renid55 3 616 29.12.2016 11:49
Letzter Beitrag: Tommy56
  String / HTTP Request Marc2014 4 667 23.12.2016 15:42
Letzter Beitrag: Tommy56
  String zusammensetzen Mathias 13 1.999 01.09.2016 21:15
Letzter Beitrag: Mathias
  String-Array füllen? torsten_156 9 1.427 08.07.2016 20:07
Letzter Beitrag: amithlon

Gehe zu:


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