Dtostrf


#1

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


hat das Thema öffentlich gemacht, #2

#3

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.


#4

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;
  }
}

#5

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.


#6

Herzlichen Dank für die schnelle Unterstützung!