I have wired up 3 x DS18B20 sensors and are using this code (see below) to read the data. However, the output gives me correct temperatures for sensors 1 & ,3 but 2 always reads -127°C.
I have swapped the sensors around, connector wires, inputs, etc. all to no avail so it is clearly a problem with the code. I have checked it over but can't see anything obvious. Can you help please? The code is below. I currently use no pullup resistor because the sensors have a length of 50cm.
//Einbinden der Bibliotheken
#include <OneWire.h>
#include <DallasTemperature.h>const int Relai1 = 21; // Relai connected to pin
const int Relai2 = 18; // Relai connected to pin
const int Relai3 = 5; // Relai connected to pinconst float MIN_TEMP1 = 28; //Temperaturschwellwert zum schalten des Relais
OneWire ds18_1(23); // Anschluss des DS18B20 für "Wabe" an PIN 23 (4k7 zwischen Plus und Data)
OneWire ds18_2(22); // Anschluss des DS18B20 für "unten" an PIN 22 (4k7 zwischen Plus und Data)
OneWire ds18_3(19); // Anschluss des DS18B20 für "unten" an PIN 1 (4k7 zwischen Plus und Data)DallasTemperature sensors1(&ds18_1);
DallasTemperature sensors2(&ds18_2);
DallasTemperature sensors3(&ds18_3);void setup()
{
Serial.begin(115200); //Starten der seriellen Kommunikation mit 115200 baud
pinMode(Relai1, OUTPUT); // Relai 1
pinMode(Relai2, OUTPUT); // Relai 2
pinMode(Relai3 , OUTPUT); // Relai 3sensors1.begin(); //Starten der Kommunikation mit dem Sensor
sensors2.begin(); //Starten der Kommunikation mit dem Sensor
sensors3.begin(); //Starten der Kommunikation mit dem Sensor
}void loop()
{
if(sensors1.getDS18Count()==0)
{
Serial.println("Es wurde Temperatursensor1 nicht gefunden!");
Serial.println("Bitte überprüfe deine Schaltung!");
}
sensors1.requestTemperatures();if(sensors2.getDS18Count()==0)
{
Serial.println("Es wurde Temperatursensor2 nicht gefunden!");
Serial.println("Bitte überprüfe deine Schaltung!");
}
sensors2.requestTemperatures();if(sensors3.getDS18Count()==0)
{
Serial.println("Es wurde Temperatursensor3 nicht gefunden!");
Serial.println("Bitte überprüfe deine Schaltung!");
}
sensors3.requestTemperatures();//Ausgabe aller Werte der angeschlossenen Temperatursensoren.
float temp1 = sensors1.getTempCByIndex(0); // Auslesen Temperaturen der DS18B20 am Bus auslesen
float temp2 = sensors2.getTempCByIndex(0); // Auslesen Temperaturen der DS18B20 am Bus auslesen
float temp3 = sensors3.getTempCByIndex(0); // Auslesen Temperaturen der DS18B20 am Bus auslesenprintValue(temp1, "°C"); //ausgeben der Temperatur auf dem seriellen Monitor
printValue(temp2, "°C"); //ausgeben der Temperatur auf dem seriellen Monitor
printValue(temp3, "°C"); //ausgeben der Temperatur auf dem seriellen Monitor
Serial.print("\t\t"); // Gibt 2 Tab aus//wenn die aktuelle Temperatur größer als die gespeicherte dann soll das Relais ausgelöst werden
if(MIN_TEMP1 < temp1){
digitalWrite(Relai1, HIGH);
} else {
digitalWrite(Relai1, LOW);
}delay(2000); //eine Pause von 2 sek.
}//ausgeben eines Textes auf den seriellen Monitor der Arduino IDE
void printValue(float value, String text){
Serial.print(value);
Serial.println(text);
}