Hallo zusammen,
In dem unten zusehen Code habe ich ein Problem bzw. Ich finde den "Fehler" nicht. Mein Ziel ist es nach einem Befehl "OW01" den Sensor OW01 auszulesen und den Wert EINMAL zurück zugeben. Dann soll nichts mehr passieren bis ich einen anderen Befehl verwende.
Das ganze funktioniert fast. Allerdings wird der Wert nicht einmal ausgegeben sondern so lange bis ich einen neuen Befehl sende, also in einem sehr kurzen Intervall direkt den aktuellen Wert ausgegeben.
Ich würde mich über Hilfe sehr freuen.
Beste Grüße
Florian
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
#define RESOLUTION 10
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// Meine Sensoren
DeviceAddress sensor1 = { 0x28, 0xFF, 0x1C, 0xFC, 0x4C, 0x04, 0x00, 0xC7 };
DeviceAddress sensor2 = { 0x28, 0xFF, 0x25, 0xE9, 0x4E, 0x04, 0x00, 0x46 };
/* Die Sensoren, hast du ferwendet! Sind die Adressen Korrekt?
DeviceAddress sensor1 = { 0x10, 0x38, 0x27, 0x57, 0x2, 0x8, 0x0, 0x79 };
DeviceAddress sensor2 = { 0x10, 0x16, 0x2E, 0x57, 0x2, 0x8, 0x0, 0x2F };
*/
float temp1 = 0.0;
float temp2 = 0.0;
String Input=""; // Input von Serieller Schnittstelle
String Befehl=""; // Befehl aus Input
// -------------------------------------------------------------------
void setup()
{
Serial.begin(9600);
sensors.begin();
sensors.setResolution(sensor1, RESOLUTION);
sensors.setResolution(sensor2, RESOLUTION);
Serial.println("");Serial.println("Testausgabe");
} // ende setup
// -------------------------------------------------------------------
//
// ===================================================================
void loop(void)
{
if (Serial.available()) Einlesen();
sensors.requestTemperatures(); // Messwerte erneuern
//delay(400); // Nur bei Parasitaerer Beschaltung Notwendig! // Bei Notwendigkeit erhoehen
ausfuehren();
} // ende loop
// *******************************************************************
//
// ===================================================================
void Einlesen()
{
while (Serial.available())
{
char ch = Serial.read();
// Serial.print("Echo: ");
// Serial.println(ch);
Input=Input+ch;
// Serial.println(Input);
// delay(10);
}
Befehl = Input.substring(0, 4);
Serial.println("Befehl: " + Befehl);
Input="";
} // ende Einlesen()
// ===================================================================
//
// ===================================================================
void ausfuehren() // Ablauf korrigiert
{
if (Befehl=="OW01")
{
float temp1 = gibTemp(sensor1); // 'temp1' ohne weitere Auswertung?
tempAus(temp1); // weitere Auswertung
}
else if (Befehl=="OW02")
{
float temp2 = gibTemp(sensor2); // 'temp2' ohne weitere Auswertung?
tempAus(temp2); // weitere Auswertung
}
else
{
// Serial.println("fehl Eingabe! 'OW01' oder 'OW02' !!");
}
} // ende ausfueren()
// ===================================================================
//
// ===================================================================
// Gibt den Sensor Temperaturwert zurueck
float gibTemp(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00)
{ // device disconnected code for Celsius
Serial.print("Error getting temperature, DS18B20 disconnected");
}
return (tempC); // Gibt den Wert in °C zurueck
} // ende gibTemp()
// ===================================================================
//
// ===================================================================
// Temperaturwert zu Serial Monitor und oder anderswo?
void tempAus(float temp)
{
Serial.println(temp);
} // ende gibTemp()