Daten von 2x DS18B20 an Xively

Hallo liebe Leute,

ich habe hier gerade ein kleines Problem. Ich habe einen Arduino Uno mit zwei Dallas DS18B20 ausgestattet und möchte die Daten nun auf meinen Xively Account streamen. Ich habe dazu einen Sketch genutzt, den ich im Netz gefunden habe. Das Funktioniert alles auch eigentlich ohne Probleme, das einzige was mich wundert, un das ich nicht in den Griff bekomme ist, dass die Temperatur nur in ganzen °C Schritten gestreamt wird. Es wird also immer 22°C angezeigt, obwohl unter Umständen 22,3°C ist.
Kann mir jemand sagen, ob wo der “Fehler” im Sketch liegt?
Ich hatte eigentlich gedacht, dass durch

#define TEMPERATURE_PRECISION 12

die Temperaturauflösung mit 12bit, also 0.0625° festgelegt werden würde.

Hier nun der Code:

#include <SPI.h>
#include <Ethernet.h>
#include <HttpClient.h>
#include <Xively.h>
#include <OneWire.h>
#include <DallasTemperature.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // MAC address for your Ethernet shield

char xivelyKey[] = "ddGfnPVNAOx1wbzrMQktNlC0dBXpt6FJQeGTukfk3PAi0TDe";  // Your Xively key to let you upload data

#define ONE_WIRE_BUS 3   //data wire is plugged into pin 3 on the Arduino 
#define TEMPERATURE_PRECISION 12

OneWire oneWire(ONE_WIRE_BUS);  //Setup a oneWire instance to communicate with any OneWire devices.

DallasTemperature sensors(&oneWire);  //pass our oneWire reference to the Dallas Temperature.

DeviceAddress TEMP1 ={ 0x28, 0xAC, 0x66, 0x2D, 0x06, 0x00, 0x00, 0x8E }; // address of sensor on one wire bus
DeviceAddress TEMP2 ={ 0x28, 0xA7, 0x07, 0x09, 0x06, 0x00, 0x00, 0xD4 }; // address of sensor 2 on one wire bus

char sensorId0[] = "Bier";  // Define the strings for our datastream IDs
char sensorId1[] = "Umgebung";  // Define the strings for our datastream IDs
XivelyDatastream datastreams[] = {
  XivelyDatastream(sensorId0, strlen(sensorId0), DATASTREAM_FLOAT),
  XivelyDatastream(sensorId1, strlen(sensorId1), DATASTREAM_FLOAT),
};

XivelyFeed feed(857165771, datastreams, 2 /* number of datastreams */);  // Finally, wrap the datastreams into a feed

EthernetClient client;
XivelyClient xivelyclient(client);



void setup() {
  
  Serial.begin(9600);  // put your setup code here, to run once:
  
  Serial.println("Starting single datastream upload to Xively...");
  Serial.println();

  while (Ethernet.begin(mac) != 1)
  {
    Serial.println("Error getting IP address via DHCP, trying again...");
    delay(15000);
  }
  sensors.begin();
  sensors.setResolution(TEMP1, TEMPERATURE_PRECISION);
  sensors.setResolution(TEMP2, TEMPERATURE_PRECISION);
}

void loop() {
  sensors.requestTemperatures();
  int sensorValue = (sensors.getTempCByIndex(0));  //this is teh code from MBurton 
  datastreams[0].setFloat(sensorValue);
  sensorValue = (sensors.getTempCByIndex(1));  //this is teh code from MBurton 
  datastreams[1].setFloat(sensorValue);

  Serial.print("Read sensor value ");
  Serial.println(datastreams[0].getFloat());
  
  Serial.print("Read sensor value ");
  Serial.println(datastreams[1].getFloat());

  Serial.println("Uploading it to Xively");
  int ret = xivelyclient.put(feed, xivelyKey);
  Serial.print("xivelyclient.put returned ");
  Serial.println(ret);

  Serial.println();
  delay(1000);
}

Ich hoffe, dass mir jemand behilflich sein kann.

Viele Grüße

Stephan

Hallo Stephan,

mitint sensorValue = (sensors.getTempCByIndex(0)); wird es keine Nachkommastellen geben. Int ist ein Datentyp für Ganzzahlen.

Versuche es mal mit

float sensorValue = (sensors.getTempCByIndex(0));

Gruß Peter

Hallo Peter,

vielen Dank für die schnelle Hilfe. Das war genau der Fehler, nun läuft alles wie es sein sollte! Ich merke ich brauche noch sehr viel Übung im Code schreiben und lesen... :) :P