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