Dtostrf

Hallo Gerald,

habe neue sensebox home und bekomme Fehlermeldung expected initializer before ‘dtostrf’- die Zeile #include “avr/dtostrf.h” habe ich bereits oben eingefügt; was kann ich tun?
Gruß
Markus

Hallo marvioli,

bitte das nächste mal deinen gesamten Code und die gesamte Fehlermeldung als öffentliches Thema posten.

Sieht aus als hättest du irgendwo einen Syntaxfehler.

Hallo Gerald, hier der Code

// senseBox:home WiFi is enabled by default!
// If you have a senseBox:home Ethernet comment out line 5
// and comment in line 4
// Do not comment in both at the same time!
#include "avr/dtostrf.h"
#define ENABLE_WIFI
#define ENABLE_ETHERNET
#include <Wire.h>
#include <SPI.h>
#ifdef ENABLE_WIFI
#include <WiFi101.h>
#include <driver/source/nmasic.h>
#endif
#ifdef ENABLE_ETHERNET
#include <Ethernet.h>
#endif
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#include <Adafruit_BME280.h>
#include <Adafruit_BME680.h>
#include <Adafruit_HDC1000.h>
#include <SDS011-select-serial.h>
#include <senseBoxIO.h>
/********WiFi User Settings********/
const char *ssid = "xxx"; // your network SSID (name)
const char *pass = "xxx"; // your network password

/*
   Zusätzliche Sensorbibliotheken, -Variablen etc im Folgenden einfügen.
*/

//senseBox ID
#define SENSEBOX_ID "5c9235b9922ca900194eddb3"

//Sensor IDs
// Temperatur
#define SENSOR1_ID "xxx"
// rel. Luftfeuchte
#define SENSOR2_ID "xxx"
// Luftdruck
#define SENSOR3_ID "xxx"
// Temperatur
#define SENSOR4_ID "xxx"
// Beleuchtungsstärke
#define SENSOR5_ID "5c9235b9922ca900194eddb7"
// UV-Intensität
#define SENSOR6_ID "5c9235b9922ca900194eddb6"
// PM2.5
#define SENSOR7_ID "xxx"
// PM10
#define SENSOR8_ID "xxx"

//Ethernet-Parameter
char server[] = "ingress.opensensemap.org";
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// Diese IP Adresse nutzen falls DHCP nicht möglich
IPAddress myIP(192, 168, 0, 42);
EthernetClient client;

//Messparameter
const unsigned int postingInterval = 60000; //Uploadintervall in Millisekunden

void setup () {
  Serial.begin(9600);
  Serial.print("Starting network...");
  //Ethernet Verbindung mit DHCP ausführen..
  if (Ethernet.begin(mac) == 0)
  {
    Serial.println("DHCP failed!");
    //Falls DHCP fehltschlägt, mit manueller IP versuchen
    Ethernet.begin(mac, myIP);
  }
  Serial.println("done!");
  delay(1000);
  Serial.println("Starting loop.");
}

void loop () {
  /*
     Hier Sensoren auslesen und nacheinerander über postFloatValue(...) hochladen. Beispiel:

     float temperature = sensor.readTemperature();
     postFloatValue(temperature, 1, temperatureSensorID);
  */
  sleep(postingInterval);
}

void postFloatValue (float measurement, int digits, String sensorId) {
  //Float zu String konvertieren
  char obs[10];
  char * dtostrf(
    double _val,
    signed char _width,
    unsigned char _prec,
    char * _s)
  dtostrf(measurement, 5, digits, obs);
  //Json erstellen
  String jsonValue = "{\"value\":";
  jsonValue += obs;
  jsonValue += "}";
  //Mit OSeM Server verbinden und POST Operation durchführen
  Serial.println("-------------------------------------");
  Serial.print("Connectingto OSeM Server...");
  if (client.connect(server, 80)) {
    Serial.println("connected!");
    Serial.println("-------------------------------------");
    //HTTP Header aufbauen
    client.print("POST /boxes/"); client.print(SENSEBOX_ID); client.print("/"); client.print(sensorId); client.println(" HTTP/1.1");
    client.print("Host:");
    client.println(server);
    client.println("Content-Type: application/json");
    client.println("Connection: close");
    client.print("Content-Length: "); client.println(jsonValue.length());
    client.println();
    //Daten senden
    client.println(jsonValue);
  } else {
    Serial.println("failed!");
    Serial.println("-------------------------------------");
  }
  //Antwort von Server im seriellen Monitor anzeigen
  waitForServerResponse();
}

void waitForServerResponse () {
  //Ankommende Bytes ausgeben
  boolean repeat = true;
  do {
    if (client.available()) {
      char c = client.read();
      Serial.print(c);
    }
    //Verbindung beenden
    if (!client.connected()) {
      Serial.println();
      Serial.println("--------------");
      Serial.println("Disconnecting.");
      Serial.println("--------------");
      client.stop();
      repeat = false;
    }
  } while (repeat);
}

// millis() rollover fix - http://arduino.stackexchange.com/questions/12587/how-can-i-handle-the-millis-rollover
void sleep(unsigned long ms) {            // ms: duration
  unsigned long start = millis();         // start: timestamp
  for (;;) {
    unsigned long now = millis();         // now: timestamp
    unsigned long elapsed = now - start;  // elapsed: duration
    if (elapsed >= ms)                    // comparing durations: OK
      return;
  }
}

Bitte das nächste mal deinen gesamten Code auch als Code formatieren, sonst kann den niemand lesen.

In der Zeile über dtostrf(measurement, 5, digits, obs); fehlt ein semikolon.

Herzlichen Dank für die schnelle Unterstützung!