Erkennen an welchem Anschluss DS18B20 angeschlossen ist

Was Gunther in #9 schreibt hatte ich in der Vergangenheit mal angewendet.
4 Sensoren an jeweils einem eigenen Arduinopin. Im Beispiel an Pin 8, 9, 10 und 11
Dann braucht man sich um die Adressen der Sensoren nicht zu kümmern. Die Messungen bleiben den 4 Pins (4 Buchsen) zugeordnet.

#include <OneWire.h>

#define DS18B20_1 8                // Datenpin Temperatursensor 1
#define DS18B20_2 9                // Datenpin Temperatursensor 2
#define DS18B20_3 10               // Datenpin Temperatursensor 3
#define DS18B20_4 11               // Datenpin Temperatursensor 4

OneWire Sensor1(DS18B20_1);
OneWire Sensor2(DS18B20_2);
OneWire Sensor3(DS18B20_3);
OneWire Sensor4(DS18B20_4);

byte data[12], i;
int16_t raw;
float temp_1;                       // Temperatur 1
float temp_2;                       // Temperatur 2
float temp_3;                       // Temperatur 3
float temp_4;                       // Temperatur 4

void start_DS18B20_1() {
  Sensor1.reset();       // reset one wire buss
  Sensor1.skip();        // select only device
  Sensor1.write(0x44);   // start conversion
}
void start_DS18B20_2() {
  Sensor1.reset();       // reset one wire buss
  Sensor1.skip();        // select only device
  Sensor1.write(0x44);   // start conversion
}
void start_DS18B20_3() {
  Sensor1.reset();       // reset one wire buss
  Sensor1.skip();        // select only device
  Sensor1.write(0x44);   // start conversion
}
void start_DS18B20_4() {
  Sensor1.reset();       // reset one wire buss
  Sensor1.skip();        // select only device
  Sensor1.write(0x44);   // start conversion
}

void lesen_DS18B20_1() {
  Sensor1.reset();
  Sensor1.skip();
  Sensor1.write(0xBE);
  for ( i = 0; i < 9; i++) {
    data[i] = Sensor1.read();
  }
  // Convert the data to actual temperature
  raw = (data[1] << 8) | data[0];
  temp_1 = (float)raw / 16.0;
}
void lesen_DS18B20_2() {
  Sensor2.reset();
  Sensor2.skip();
  Sensor2.write(0xBE);
  for ( i = 0; i < 9; i++) {
    data[i] = Sensor2.read();
  }
  // Convert the data to actual temperature
  raw = (data[1] << 8) | data[0];
  temp_2 = (float)raw / 16.0;
}
void lesen_DS18B20_3() {
  Sensor3.reset();
  Sensor3.skip();
  Sensor3.write(0xBE);
  for ( i = 0; i < 9; i++) {
    data[i] = Sensor3.read();
  }
  // Convert the data to actual temperature
  raw = (data[1] << 8) | data[0];
  temp_3 = (float)raw / 16.0;
}
void lesen_DS18B20_4() {
  Sensor4.reset();
  Sensor4.skip();
  Sensor4.write(0xBE);
  for ( i = 0; i < 9; i++) {
    data[i] = Sensor4.read();
  }
  // Convert the data to actual temperature
  raw = (data[1] << 8) | data[0];
  temp_4 = (float)raw / 16.0;
}

void setup() {
  Serial.begin(115200);        // connect to the serial port
}

void loop() {
  start_DS18B20_1();
  start_DS18B20_2();
  start_DS18B20_3();
  start_DS18B20_4();
  delay(1000);                 // den Sensoren Zeit zur Messung lassen
  lesen_DS18B20_1();
  lesen_DS18B20_2();
  lesen_DS18B20_3();
  lesen_DS18B20_4();

  Serial.print("T1: "); Serial.println(temp_1, 3);
  Serial.print("T2: "); Serial.println(temp_2, 3);
  Serial.print("T3: "); Serial.println(temp_3, 3);
  Serial.print("T4: "); Serial.println(temp_4, 3);
}

Das Programm ist ungetestet!

Gruß Peter