Ich bin mir nicht sicher, ob ich das hier oder auf Stackoverflow posten sollte, aber da dieses Publikum wahrscheinlich die meiste Erfahrung mit Arduino hat, dachte ich, dass dies der beste Ort wäre.
Ich habe gerade ein Ethernet-Schild gekauft, und als erstes Projekt damit versuche ich, einen TMP36-Temperaturmesswert an Pachube zu veröffentlichen. Während Pachube mehrere Formate für Ihre Daten akzeptiert, versuche ich, dieses Zeug in JSON zu posten, weil ich JSON mag. Ich habe jedoch Probleme, meinen Temperaturwert, der ein Float ist, in den JSON-String zu bekommen. Ich bin ein Python/PHP-Entwickler und relativ neu in C, also habe ich viel gegoogelt, aber noch nicht den richtigen Weg gefunden, dies zu tun. Hier ist mein Code:
float temperature = 85.4; // Or whatever
String jsonData = sprintf("{'version':'1.0.0', 'datastreams':[{'id':'%s', 'current_value':'%f'}]}\n", datastream1, temperature);
Ich bekomme immer wieder die folgende Fehlermeldung von der Arduino IDE (Version 1.0): "Cannot convert 'String' to 'const char' for argument '2' to 'int sprintf(char, const char*, ...)'"
Ich habe herausgefunden, dass ich sprintf() mit der falschen Anzahl von Argumenten/Argumenten in der falschen Reihenfolge aufrufe, da es nicht die formatierte Zeichenfolge zurückgibt. Ich bin mir jedoch nicht einmal sicher, ob sprintf() die beste Funktion ist, um das Ziel zu erreichen, den Gleitkommawert des Sensors in eine Zeichenfolge zu bringen. Gibt es einen besseren Weg, dies zu tun
Sie können sprintf()
einen Float auf dem Arduino nicht in einen String formatieren.
Nicht nur das Format des Befehls ist falsch, sprintf auf dem Arduino unterstützt auch keine Floats.
Es gibt eine Funktion dtostrf()
, die ein Float in ein Zeichenarray umwandelt. Sie können es wie folgt verwenden:
float temperature = 85.4;
char temp[10];
String tempAsString;
String jsonData;
dtostrf(temperature,1,2,temp);
tempAsString = String(temp);
jsonData = "{'version':'1.0.0', 'datastreams':[{'id':'" +
datastream1 + "', 'current_value':'" + tempAsString + "'}]}\n";
Das Format der dtostrf
Funktion ist:
dtostrf(value, width, precision, output);
wobei value
der Gleitkommawert ist, den Sie umwandeln möchten, width
die Mindestanzahl von Zeichen ist, die vor dem Dezimalkomma angezeigt werden sollen (bei Bedarf mit Leerzeichen auffüllen), precision
die Anzahl der Dezimalstellen ist und output
das Zeichenarray ist, in das die Ergebnisse eingefügt werden.
tempAsString = String(temp);
rechts?
trosley
Kellenjb
trosley
Chris Stratton
Majenko