Adaptation code pour lecture de plusieurs températures

Bonjour
Je souhaiterais lire 5 températures différentes avec des capteurs DFROBOT DS18B20
Pas de souci pour lire une température. Voici le code fourni dans la doc. Il fonctionne.

#include <OneWire.h>
int DS18S20_Pin = 2; //DS18S20 Signal pin on digital 2
OneWire ds(DS18S20_Pin); 

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

void loop(void) {
  float temperature = getTemp();
  Serial.println(temperature);
  delay(1000); //just here to slow down the output so it is easier to read
}

float getTemp(){
  //returns the temperature from one DS18S20 in DEG Celsius

  byte data[12];
  byte addr[8];

  if ( !ds.search(addr)) {
      //no more sensors on chain, reset search
      ds.reset_search();
      return -1000;
  }

  if ( OneWire::crc8( addr, 7) != addr[7]) {
      Serial.println("CRC is not valid!");
      return -1000;
  }

  if ( addr[0] != 0x10 && addr[0] != 0x28) {
      Serial.print("Device is not recognized");
      return -1000;
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44,1); // start conversion, with parasite power on at the end

  byte present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE); // Read Scratchpad
  for (int i = 0; i < 9; i++) { // we need 9 bytes
      data[i] = ds.read();
  }
  ds.reset_search();
  byte MSB = data[1];
  byte LSB = data[0];
  float tempRead = ((MSB << 8) | LSB); //using two's compliment
  float TemperatureSum = tempRead / 16;
  return TemperatureSum;
}

Ma question est assez basique : quel est le code le concis pour récupérer les valeurs de 5 capteurs ?
Pins utilisées 2,3,4,5,6
La fonction float getTemp n'est pas claire pour moi dans l'état actuel de mes connaissances...
Je souhaiterais éviter d'utiliser ce gendre de code

int pte1 = 2; //DS18S20 Signal pin on digital 2
int pte2 = 3; //DS18S20 Signal pin on digital3
int pte3 = 4; //DS18S20 Signal pin on digital4
...

OneWire ds1(pte1);  
OneWire ds2(pte2);  
OneWire ds3(pte3);  
...

Merci pour votre aide

un tableau et une boucle for pour lire les températures

sinon la bibliothèque GitHub - milesburton/Arduino-Temperature-Control-Library: Arduino Temperature Library vous simplifiera la vie

Merci pour votre réponse.
La boucle et le tableau me semblent une bonne solution. Mais je ne comprends pas comment lire les valeurs sur 5 pins différentes en utilisant toujours la même instance ds.

Merci pour le lien. Si je comprends bien dans l'exemple les différents capteurs sont tous reliés à la pin 2 de l'Arduino ...

OneWire comme son nom l'indique fait passer toutes les données sur un seul fil qui sert aussi de fil d'alimentation (mode parasite). Votre pin unique peut interroger les appareils qui se trouvent sur le bus, chacun dispose d'une adresse et donc généralement on fait un scan du bus, on voit qui répond ou on peut envoyer un message à un appareil spécifique si on connait son adresse

lire par exemple (premier hit google)
https://www.planete-domotique.com/blog/2009/06/20/le-bus-1-wire/

https://www.carnetdumaker.net/articles/faire-un-scanneur-de-bus-1-wire-avec-une-carte-arduino/

Je ne savais pas que cela était possible
Merci de me l'avoir fait découvrir.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.