Sensorwertausgabe auf einer Linie

Hallo Zusammen

Ich habe folgendes Problem:
Von meinem Arduino UNO habe ich zwei Temperatursensoren angeschlossen DS18B20 die ich auslesen möchte und auf einer Zeile mit einem Kommatrennzeichen ausgeben:

Ausgabe soll so sein:

25.12, 21.23

Hier ist mein Code:

#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS_1 2
#define ONE_WIRE_BUS_2 4

OneWire oneWire_in(ONE_WIRE_BUS_1);
OneWire oneWire_out(ONE_WIRE_BUS_2);

DallasTemperature sensor_leader(&oneWire_in);
DallasTemperature sensor_returns(&oneWire_out);

void setup(void)
{
    Serial.begin(9600);

    sensor_leader.begin();
    sensor_returns.begin();
}

void loop(void)
{
    sensor_leader.requestTemperatures();
    sensor_returns.requestTemperatures();

    float l = sensor_leader.getTempCByIndex(0);
    float r = sensor_returns.getTempCByIndex(0);

    Serial.println("l:"+l+" r:"+r);

delay(60000);
}

entweder so:

#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS_1 2
#define ONE_WIRE_BUS_2 4

OneWire oneWire_in(ONE_WIRE_BUS_1);
OneWire oneWire_out(ONE_WIRE_BUS_2);

DallasTemperature sensor_leader(&oneWire_in);
DallasTemperature sensor_returns(&oneWire_out);

void setup(void)
{
    Serial.begin(9600);

    sensor_leader.begin();
    sensor_returns.begin();
}

void loop(void)
{
    sensor_leader.requestTemperatures();
    sensor_returns.requestTemperatures();

    float l = sensor_leader.getTempCByIndex(0);
    float r = sensor_returns.getTempCByIndex(0);

    //Serial.println("l:"+l+" r:"+r);
    Serial.print("l: ");
    Serial.print(l);
    Serial.print("r: ");
    Serial.println(r);
    

delay(60000);
}

oder du beschäftigst dich mit sprintf

Hallo,

sorry so weit ich weiss geht sprint mit float beim UNO nicht so ohne weiteres.

Heinz

Bei Serial.print() kann man auch noch die Anzahl der Nachkommastellen angeben. Das Komma zwischen den Werten fehlt auch noch.

Hallo Zusammen

Danke erstmal für die ersten Rückmeldungen. Es funktioniert nicht so wie angedacht. Ist es möglich die Werte direkt mit dem Arduino in eine Liste zu Schreiben, sodass die Ausgabe wie folgt ist:

[b'l:, 23.94, r:, 18.81, \r\n']

Ich möchte eben danach die einzelnen Sensordaten einer Variable zuordnen und in eine Datenbank schreiben. Dies mache ich dann mit einem Python Script. Kann mir jemand weiterhelfen wie ich die Sensorwerte in eine Liste mit trennzeichen schreiben kann?

LG

Hi

Zumindest sollte man die String-Verkettung lassen.
Das "Text"+Variable+"Noch'n Text" kostet Unmengen an RAM, da bei jeder Verkettung ein entsprechend großer NEUER freier Bereich gesucht wird.
Die Variante, den Kram einzeln auszugeben, ändert Nichts am Ergebnis, lässt aber den Speicher mehr in Ruhe.

MfG

PS:sprintf wurde bereits genannt - mit einem entsprechend großen c-String (also char-Array)

Hallo Zusammen danke für die Rückmeldungen. Mir ist das irgendwie nicht klar wie ich die beiden Sensordaten (in meinem Beispiel leader und return) in eine Liste eintragen kann. Ich denke das ist am einfachsten, sodass ich nachher die Daten mit dem Python Script direkt mit der gesendeten Liste durch das Arduino empfangen kann. die Werte kann ich dann ja mit dem Python Script aus der Liste extrahieren und in die Datenbank schreiben. Ich benötige eben die beiden Werte in separaten Spalten in der Datenbank.

Hier mein Arduino Code:

#include <OneWire.h>
#include <DallasTemperature.h>


#define ONE_WIRE_BUS_1 2
#define ONE_WIRE_BUS_2 4

OneWire oneWire_in(ONE_WIRE_BUS_1);
OneWire oneWire_out(ONE_WIRE_BUS_2);

DallasTemperature sensor_leader(&oneWire_in);
DallasTemperature sensor_returns(&oneWire_out);

void setup(void)
{
    Serial.begin(9600);

    sensor_leader.begin();
    sensor_returns.begin();
}

void loop(void)
{

    sensor_leader.requestTemperatures();
    sensor_returns.requestTemperatures();

    float l = sensor_leader.getTempCByIndex(0);
    float r = sensor_returns.getTempCByIndex(0);
    Serial.print(l);
    Serial.println(r);

delay(500);
}[\Code]

Kann mir jemand ein Beispiel machen wie ich die beiden Werte leader und returns in eine Liste packen kann (mit Komma trennzeichen) [25.12, 21.00]? und als eine Zeile ausgeben kann?

Alles erscheint immer in einer Zeile, bis zum nächsten println().

Das ist korrekt aber nicht in einer Liste, mit Hilfe einer Liste könnte ich die Werte dann einfacher mit dem Python Script in die Datenbank schreiben.

Hi

Dann mache daraus eine Liste, Die der Python-Skript wieder zerlegen kann.
Hier und Da ein Trennzeichen zwischen, fertig.

MfG

Die Länge der Liste gibt mir Python als “13” aus irgendwas ist falsch den die länge sollte ja nur 2 sein.

Habe mal den Arduino und Python Code gepostet:

Arduino und Python Code:

#include <OneWire.h>
#include <DallasTemperature.h>


#define ONE_WIRE_BUS_1 2
#define ONE_WIRE_BUS_2 4

OneWire oneWire_in(ONE_WIRE_BUS_1);
OneWire oneWire_out(ONE_WIRE_BUS_2);

DallasTemperature sensor_leader(&oneWire_in);
DallasTemperature sensor_returns(&oneWire_out);

void setup(void)
{
    Serial.begin(9600);

    sensor_leader.begin();
    sensor_returns.begin();
}

void loop(void)
{
    sensor_leader.requestTemperatures();
    sensor_returns.requestTemperatures();

    float l = sensor_leader.getTempCByIndex(0);
    float r = sensor_returns.getTempCByIndex(0);
    
    Serial.print(l);
    Serial.print(" ");
    Serial.println(r);

delay(500);
}

-----------------------------------------------------------------------------------------------------------------------------------------------------
Python:


from datetime import datetime

import psycopg2
import serial

con = psycopg2.connect(user="xxxxxxx", password="xxxxxxx", host="xxxxxxx", port="5432", database="mydb")

ser = serial.Serial('/dev/ttyACM3', 9600)
cur = con.cursor()

while True:
    s1 = float(ser.readline())
    print(s1)
[\Code]

Hi

Zwei float-Zahlen mit je 4 Nachkommastellen (je = 6 Zeichen) und einem Trenn-Leerzeichen dazwischen - die 13 könnte ich mir zumindest zusammen reimen.

MfG

postmaster-ino:
Hi

Zwei float-Zahlen mit je 4 Nachkommastellen (je = 6 Zeichen) und einem Trenn-Leerzeichen dazwischen - die 13 könnte ich mir zumindest zusammen reimen.

MfG

Danke für den Hinweis das habe ich geprüft und im Arduino IDE sehe ich nur zwei nachkommastellen bei der Ausgabe...

MfG

25.12 21.00

Das sind 11 Zeichen plus CR LF macht 13. Das Python-Skript kann richtig zählen. Mit Serial.print überträgst Du Zeichen, keine Zahlen.

Serial.print(variable, format);

Also bei format die anzahl der Gewünschten Nachkommastellen eintragen.