Bonjour à tous,
J'ai un réel soucis par rapport au tableau.
J'explique en gros ce que je veux que mon programme fasse.
- Lire une adresse de sonde DS18B20 par la fonction readAdress()
- A chaque nouvelle sonde détectée, celle-ci devrait stocker son adresse dans un tableau nommé tableauAdress[][] ( maximum 3 sondes pour mon programme.) Et vérifier sont code CRC8.
- A l'aide du tableau d'adresse ainsi créé, je voudrais lire les températures des sondes.
Je crée une méthode readAdress qui emploie la fonction Search() de la librairie OneWire. Celle-ci stocke l'adresse de la sonde dans une variable nommée adress ( déclaration : byte adress[9])
Cette adresse devrait se stocker dans un tableau de 2 dimension ( déclaration : byte tableau [][9])
Ainsi tableau[0] stockerais la première adresse
tableau[1] la deuxième,...
Pour cela, j'ai créé la fonction constructionTableau() qui copie les élément de adresse et par une boucle for() la mets dans ce tableau.
J'ai testé cette méthode et elle a l'air fonctionnelle. ( je print les éléments de tu tableau créé pour vérifier et c'est la même chose que adress ).
Mon problème arrive malheureusement.
Quand je reprend mon tableau ainsi créé ( donc après avoir appellé readAdress() ), celui-ci me place un "0" avant chaque byte enregistré et je ne sais pas pourquoi . C'était avant, je sais pas pourquoi, j'ai changé quelque chose et maintenant, je n'ai que des "0".
Le programme :
#include <OneWire.h>
int pin=3;;
byte tableauAdress[2][9];// si adress[9] != 1, adresse non valide
OneWire leCapteur(pin);
void setup(){
Serial.begin(9600);
}
void loop(){
readAdress(leCapteur,tableauAdress);
delay(3000);
Serial.println(" ");
Serial.print("ROMtrafique =");// le ROMtrafique devrait correspondre avec mes adresse créé par readAdress()
for( int i = 0; i < 8; i++) {
Serial.write(' ');
Serial.print(tableauAdress[0][i], HEX);
}
Serial.println("capteur 1 :");
Serial.println(getTemp(tableauAdress[0],leCapteur));
Serial.println("capteur 2 :");
Serial.println(getTemp(tableauAdress[0],leCapteur));
delay(3000);
}
// a faire dans le setup()
//Rempli un tableau adress du capteur et la vérifie
void constructionTableau(byte tableau[][9],byte adress[9],byte b){
for( int i = 0; i < 8; i++) {
tableau[b][i]=byte(adress[i]);
}
for( int i = 0; i < 8; i++)
Serial.write(' ');
delay(500);
Serial.print(tableau[b][i], HEX);
}
Serial.println(" ");
}
//Construit un tableau d'adresse de max 3 oneWire ( à cause du switch pour le moment )
boolean readAdress(OneWire capteur,byte tableau[][9]){// lit l'adresse et regarde si elle est correcte
byte adress[9];
byte b = 0;
while(capteur.search(adress)&& b<sizeof(tableau)){//construit le tableau avec l'adresse et retourne true si "ok"
b++;
switch (b){
case 0 :
constructionTableau(tableau,adress,b);
break;
case 1:
constructionTableau(tableau,adress,b);
break;
case 2:
constructionTableau(tableau,adress,b);
break;
}
if(capteur.crc8(adress,7)!=adress[7]){
adress[9]=1;
Serial.print("error dans le crc8");
return false;
}
Serial.print("ROM =");// ici je print l'adresse courante pour la vérifier avec constructionTableau()
for( int i = 0; i < 8; i++) {
Serial.write(' ');
Serial.print(adress[i], HEX);
}
Serial.println(" ");
}
adress[9]=1;//signifie true
return true;
}
La fonction getTemp(), n'a pas été mise car elle ne sert à rien pour mon problème
Ce que me renvoie mon arduino :
28 5E 49 BC 4 0 0 24 // ce qu'enregistre le tableau[b][i]
ROM = 28 5E 49 BC 4 0 0 24 // On remarque que c'est correcte, les bytes sont bien enregistré car égal au ROM
28 77 9B BD 4 0 0 56 // deuxième capteur pareil
ROM = 28 77 9B BD 4 0 0 56
ROMtrafique = 0 0 0 0 0 0 0 0 // Là, je rappelle mon talbeauAdress pour vérifier l'adresse enregister. Et bien, rien n'est enregistre
capteur 1 :
-5.00 // le -5 indique dans le getTemp ( non fourni ) une erreur dans l'adresser renvoyée
capteur 2 :
-5.00
Merci à tous pour votre aide