Bonjour,
j'ai un petit souci, j'ai fait un programme qui tournait depuis des mois, j'ai souhaité le recompiler (après remplacement d'un élément électronique) et là problème ça ne marche plus. Entre temps, j'ai mis à jour l'IDE arduino, les bibliothèques, etc. Ce programme récolte les données de mes deux serres, données transmises par nrf24 et pour les lire j'utilise alternativement deux "if" comme le montre mon programme. Paradoxalement (pour moi) j'étais obligé de fermer le "pipe" de la serre 1 et d'ouvrir le pipe de la serre 2, puis répétant la technique sur le deuxième canal comme le montre le bout de code ci-dessous :
void (loop {
uint8_t pipe_num;
if (radio.available(&pipe_num)) {
if (pipe_num == pipePserre) {
radio.read(dataPS, sizeof(dataPS));
delay(4);
// On enregistre les données dans le tableau PS[2]
tempRTC = (dataPS[0]);
tempPserre = (dataPS[1]); // on enregistre la température dans la petite serre
Serial.print("Temperature dans la petite serre :");
Serial.println(tempPserre, 2);
Serial.print("Temperature du chip RTC :");
Serial.println(tempRTC, 2);
radio.closeReadingPipe(2); // Nécessaire sinon n'effectue qu'une des détections (grande OU petite serre)
radio.openReadingPipe(pipeGserre, pipeGserreID); // Nécessaire sinon n'effectue qu'une des détections (grande OU petite serre)
}
if (pipe_num == pipeGserre) {
radio.read(dataGS, sizeof(dataGS));
delay(4);
// On enregistre les données dans le tableau GS[3]
tempGserre = (dataGS[0]); // on enregistre la température dans la serre
tempBacExt = (dataGS[1]); // on enregistre la température dans le bac externe
tempBacInt = (dataGS[2]); // on enregistre la température dans le bac interne
Serial.print("Temperature dans la grande serre :");
Serial.println(tempGserre, 2);
Serial.print("Temperature dans le bac interne :");
Serial.println(tempBacInt, 2);
Serial.print("Temperature dans le bac externe :");
Serial.println(tempBacExt, 2);
radio.closeReadingPipe(1); // Nécessaire sinon n'effectue qu'une des détections (grande ou petite serre)
radio.openReadingPipe(pipePserre, pipePserreID);
}
} // fermeture de la boucle NRF24
J'ai ramé pas mal et ai modifié mon programme en substituant aux conditions "if" la condition "switch" et tout est rentré dans l'ordre avec la grosse différence que je n'ai plus à fermer successivement les canaux lus.
Voici le bout de code :
void loop() {
uint8_t pipe_num;
while (radio.available(&pipe_num)) {
switch (pipe_num) {
case pipeGserre:
// Grande serre
radio.read(&dataGS, sizeof(dataGS)); // On lit les paquets de données provenant de la grande serre
tempGserre = (dataGS[0]); // on enregistre la temperature ds la grande serre
tempBacExt = (dataGS[1]); // on enregistre la temperature ds le bac externe
tempBacInt = (dataGS[2]); // on enregistre la temperature ds le bac interne
delay(4);
Serial.print("Temperature dans la grande serre :");
Serial.println(tempGserre, 2);
Serial.print("Temperature dans le bac interne :");
Serial.println(tempBacInt, 2);
Serial.print("Temperature dans le bac externe :");
Serial.println(tempBacExt, 2);
delay(4);
break;
case pipePserre:
// Petite serre
radio.read(&dataPS, sizeof(dataPS)); // On lit les paquets de données provenant de la petite serre
tempPserre = (dataPS[0]); // on enregistre la temperature ds la petite serre
tempRTC = (dataPS[1]); // // on enregistre la temperature du chipset RTC
delay(4);
Serial.print("Temperature dans la petite serre :");
Serial.println(tempPserre, 2);
Serial.print("Temperature du chipset :");
Serial.println(tempRTC, 2);
delay(4);
break;
default:
Serial.print("DEFAULT, pipe:");
Serial.println(pipe_num);
break;
}
} // fermeture de la boucle NRF24
J'ajoute pour terminer qu'avant ma panne, je notais la perte de pas mal de données ce qui ne présentait pas de vrai problème. Avec ma nouvelle mouture, tout est quasiment parfait.
Mes connaissances en langage "C" étant assez limitées, avez-vous une explication à ce comportement bizarre (pour moi, toujours...)
merci d'avance pour vos lumières