Balayage des broches

Bonjour à tous,

j' utilise un Arduino pro/mini 5V/16 Mhz depuis quelques jours et m'y intéresse de plus en plus !

Pour apprendre, je viens d'installer de quoi lire un capteur de température DS18S20, cela fonctionne parfaitement.
Cela a été relativement facile à mettre en oeuvre avec la bibliothèque GitHub - PaulStoffregen/OneWire: Library for Dallas/Maxim 1-Wire Chips, ce programme fixe une broche où brancher le signal du capteur de température, et affiche sur la liaison-série la température lue.

Je voudrais maintenant balayer plusieurs broches, sur lesquelles je mettrai plusieurs capteurs (je sais que je peux reconnaitre plusieurs capteurs sur la même broche, mais je voudrais mettre des capteurs sur des broches différentes). Or je ne connais pas bien la syntaxe, et je me demande comment spécifier dynamiquemnt des broches différentes à l'exécution de mon programme ? si quelqu'un peut m'aider, je l'apprécierais !

Le programme commence par fixer la broche 10 :
OneWire ds(10); // on pin 10 (a 4.7K resistor is necessary), for DS18S20

Puis les fonctions de reset et d'écriture sont appelées, en utilisant la broche précédemment définie:
ds.reset() // reset DS18S20
** ds.skip(); // skip ROM command**
** ds.write(0x44, 1); // start conversion**

Comment puis-je changer la broche lors de l'appel à ces fonctions, pour réaliser un balayage des broches ? je ne voudrais pas changer les routines appellées (dans le OneWire.cpp) car le timing est dépendant du code, et celui-ci fonctionne bien...
Merci !

Bonjour,

Tu déclares plusieurs objets OneWire

  OneWire  ds1(10);
  OneWire  ds2(11);
  OneWire  ds3(12);

Bonjour kamill :slight_smile:

oui, je me doutais pouvoir faire comme cela, en dur, mais je vais alors devoir dupliquer mon code autant de fois qu’il y aura de sondes… je voulais garder une seule boucle, et changer de broche à chaque tour de boucle ; un peu comme cela :

for ( i = 0; i < 9; i++) {          // Balaye 8 broches

     *** Nouveau_OneWire = autre_broche; ***      // ICI JE CHANGE DE BROCHE 

     ds.reset()                         // reset DS18S20
     ds.skip();                         // skip ROM command
     ds.write(0x44, 1);                // start conversion
   }

Comme je débute, il me manque un peu de connaissance de syntaxe…

Tu peux utiliser un tableau de pointeurs sur tes objets onewire

OneWire  ds1(10);
OneWire  ds2(11);
OneWire  ds3(12);

OneWire *tabDs[] = {&ds1, &ds2, &ds3};

// ....

  for (int i = 0; i < sizeof tabDs / sizeof tabDs[0]; i++) {         // Balaye de tous les ds1820
    OneWire *pDs = tabDs[i];      // pointeur sur l'objet onewire courant

    pDs->reset();                // reset DS18S20
    pDs->skip();                 // skip ROM command
    pDs->write(0x44, 1);         // start conversion
  }

Aaaaaaaaah okaaayy, ça ce précise, je vois le truc; je n'aurais pas pu l'inventer, mais maintenant j'ai la bonne piste. Je code et te tiens au courant.

Ssssuuuuper.

Merci beaucoup, cela fonctionne parfaitement, je continue mon avancement, maintenant que j’ai débuté avec les pointeurs ! (j’avais corrigé l’opérateur → grâce au compilateur qui m’a mit sur la voie).

Pas mal le test sur la longueur de la table for (int i = 0; i < sizeof tabDs / sizeof tabDs[0]; i++), j’adopte !

Encore merci, il est bien ce site et cet Arduino