amelioration de code

Bonjour , je me penche sur l ’ utilisation des capteurs de temperatures DS18B20 ( 7 ou 8 ) .

je voulais savoir si certains ont des pistes pour coder cela dans une boucle plutot que de tout re-ecrire , c ’ est bien plus facile a maintenir .

/* Dépendance pour le bus 1-Wire */
#include <OneWire.h>

/* Broche du bus 1-Wire */
const byte BROCHE_ONEWIRE = 7;

const byte NB_CAPTEUR_TEMP = 3;

/* Adresses des capteurs de température */
const byte SENSOR_ADDRESS_1[] = { 0x28, 0x9E, 0x9C, 0x1F, 0x00, 0x00, 0x80, 0x04 };
const byte SENSOR_ADDRESS_2[] = { 0x28, 0x1D, 0x9B, 0x1F, 0x00, 0x00, 0x80, 0xE6 };
const byte SENSOR_ADDRESS_3[] = { 0x28, 0x0F, 0x91, 0x1F, 0x00, 0x00, 0x80, 0x6E };

/* Création de l'objet OneWire pour manipuler le bus 1-Wire */
OneWire ds(BROCHE_ONEWIRE);
 
//Fonction de démarrage de la prise de mesure de la température via un capteur DS18B20
void startTemperatureMeasure(const byte addr[]) { // addr[] : Adresse du module 1-Wire détecté
  
  // Reset le bus 1-Wire et sélectionne le capteur
  ds.reset();
  ds.select(addr);
  
  // Lance une prise de mesure de température et attend la fin de la mesure
  ds.write(0x44, 1);
}

// Fonction de récupération de la prise de mesure de la température via un capteur DS18B20.
float readTemperatureMeasure(const byte addr[]) { // addr[] : Adresse du module 1-Wire détecté
  byte data[9];  // data[] : Données lues depuis le scratchpad

  // Reset le bus 1-Wire, sélectionne le capteur et envoie une demande de lecture du scratchpad
  ds.reset();
  ds.select(addr);
  ds.write(0xBE);
 
 // Lecture du scratchpad
  for (byte i = 0; i < 9; i++) {
    data[i] = ds.read();
  }
  return ((data[1] << 8) | data[0]) * 0.0625;  // Calcul de la température en degré Celsius
}

void setup() {
  // Initialisation du port série
  Serial.begin(115200);  
}

void loop() {

  float temperature[3];
   
  // Lit les températures des capteurs
  
  ////////////////////////////
  startTemperatureMeasure(SENSOR_ADDRESS_1);
  startTemperatureMeasure(SENSOR_ADDRESS_2);
  startTemperatureMeasure(SENSOR_ADDRESS_3);
  delay(800);
  temperature[0] = readTemperatureMeasure(SENSOR_ADDRESS_1);
  temperature[1] = readTemperatureMeasure(SENSOR_ADDRESS_2);
  temperature[2] = readTemperatureMeasure(SENSOR_ADDRESS_3);
  
  /* Affiche les températures */
  Serial.print(F("Temperatures : "));
  Serial.print(temperature[0], 2);
  Serial.write(176); // Caractère degré
  Serial.print(F("C, "));
  Serial.print(temperature[1], 2);
  Serial.write(176); // Caractère degré
  Serial.print(F("C, "));
  Serial.print(temperature[2], 2);
  Serial.write(176); // Caractère degré
  Serial.println('C');
}

J ’ ai essayé de creer un tableau avec les adresses de capteur :
const byte SENSOR_ADDRESSES[NB_CAPTEUR_TEMP] = { SENSOR_ADDRESS_1, SENSOR_ADDRESS_2, SENSOR_ADDRESS_3 };

Comment parvenir a faire une boucle qui prendrait en parametre les differentes adresses de capteurs ?

toute piste est la bienvenue .

hello
regarde ce code et inspire t’en.
attention lis bien les commentaires

DS18B20_isnobe.zip (2.2 KB)

Merci pour votre code il m ' a bien inspiré , par contre il me renvoi un avertissement quand a la creation du tableau de noms des variables il me semble :

/home/iznobe/montages/nfs.nas/perso/sauvegardes/programation/arduino/SKETCH/TEMPERATURE/DS18B20_isnobe/DS18B20_isnobe.ino:49:123: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
 char* tab_nom_sondes[]         {"Temp1 ","Temp2 ","Temp3 ","Temp4 ","Temp5 ","Temp6 ","Temp7 ","Temp8 ","Temp9 ","Temp10 "};
                                                                                                                           ^
/home/iznobe/montages/nfs.nas/perso/sauvegardes/programation/arduino/SKETCH/TEMPERATURE/DS18B20_isnobe/DS18B20_isnobe.ino:49:123: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
/home/iznobe/montages/nfs.nas/perso/sauvegardes/programation/arduino/SKETCH/TEMPERATURE/DS18B20_isnobe/DS18B20_isnobe.ino:49:123: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
/home/iznobe/montages/nfs.nas/perso/sauvegardes/programation/arduino/SKETCH/TEMPERATURE/DS18B20_isnobe/DS18B20_isnobe.ino:49:123: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
/home/iznobe/montages/nfs.nas/perso/sauvegardes/programation/arduino/SKETCH/TEMPERATURE/DS18B20_isnobe/DS18B20_isnobe.ino:49:123: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
/home/iznobe/montages/nfs.nas/perso/sauvegardes/programation/arduino/SKETCH/TEMPERATURE/DS18B20_isnobe/DS18B20_isnobe.ino:49:123: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
/home/iznobe/montages/nfs.nas/perso/sauvegardes/programation/arduino/SKETCH/TEMPERATURE/DS18B20_isnobe/DS18B20_isnobe.ino:49:123: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
/home/iznobe/montages/nfs.nas/perso/sauvegardes/programation/arduino/SKETCH/TEMPERATURE/DS18B20_isnobe/DS18B20_isnobe.ino:49:123: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
/home/iznobe/montages/nfs.nas/perso/sauvegardes/programation/arduino/SKETCH/TEMPERATURE/DS18B20_isnobe/DS18B20_isnobe.ino:49:123: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
/home/iznobe/montages/nfs.nas/perso/sauvegardes/programation/arduino/SKETCH/TEMPERATURE/DS18B20_isnobe/DS18B20_isnobe.ino:49:123: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
Compiling libraries...

hello
chez moi en 1.6.12 aucun avertissement ou defaut

Bonjour,

Il manque le = d'affectation au tableau.
Le compilateur devrait donner une erreur au lieu de simples warning.

Bonjour et merci de votre remarque kamill.

version IDE : 1.8.3

mais meme warning avec le " = " :

/home/iznobe/montages/nfs.nas/perso/sauvegardes/programation/arduino/SKETCH/TEMPERATURE/DS18B20_isnobe/DS18B20_isnobe.ino:49:117: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
 char* tab_nom_sondes[] = {"Temp1 ","Temp2 ","Temp3 ","Temp4 ","Temp5 ","Temp6 ","Temp7 ","Temp8 ","Temp9 ","Temp10 "};
                                                                                                                     ^
/home/iznobe/montages/nfs.nas/perso/sauvegardes/programation/arduino/SKETCH/TEMPERATURE/DS18B20_isnobe/DS18B20_isnobe.ino:49:117: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
/home/iznobe/montages/nfs.nas/perso/sauvegardes/programation/arduino/SKETCH/TEMPERATURE/DS18B20_isnobe/DS18B20_isnobe.ino:49:117: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
/home/iznobe/montages/nfs.nas/perso/sauvegardes/programation/arduino/SKETCH/TEMPERATURE/DS18B20_isnobe/DS18B20_isnobe.ino:49:117: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
/home/iznobe/montages/nfs.nas/perso/sauvegardes/programation/arduino/SKETCH/TEMPERATURE/DS18B20_isnobe/DS18B20_isnobe.ino:49:117: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
/home/iznobe/montages/nfs.nas/perso/sauvegardes/programation/arduino/SKETCH/TEMPERATURE/DS18B20_isnobe/DS18B20_isnobe.ino:49:117: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
/home/iznobe/montages/nfs.nas/perso/sauvegardes/programation/arduino/SKETCH/TEMPERATURE/DS18B20_isnobe/DS18B20_isnobe.ino:49:117: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
/home/iznobe/montages/nfs.nas/perso/sauvegardes/programation/arduino/SKETCH/TEMPERATURE/DS18B20_isnobe/DS18B20_isnobe.ino:49:117: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
/home/iznobe/montages/nfs.nas/perso/sauvegardes/programation/arduino/SKETCH/TEMPERATURE/DS18B20_isnobe/DS18B20_isnobe.ino:49:117: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
/home/iznobe/montages/nfs.nas/perso/sauvegardes/programation/arduino/SKETCH/TEMPERATURE/DS18B20_isnobe/DS18B20_isnobe.ino:49:117: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
Compiling libraries...

Mais a priori cela n ' emepche pas de fonctionner , bizzare tout de meme ( sans le = ) .

Chez moi avec la 1.8.3 je n'ai pas de warning (ni sans le = ce qui est très surprenant).

:o :o :o :o

je n ' y comprends plus rien la ... peut etre des bibliotheques differentes ?