Problème NRF24L01+ : Bloqué dans While

Bonjour,
J'ai deux modules radio NRF24L01+, un côté client, l'autre serveur.

Dans le code côté client, mon programme se bloque dans la boucle while : while (Mirf.isSending());

J'ai aussi un deuxième problème, surement lié : après avoir installé la librairie Mirf, tout ce qui est en rapport avec celle ci n'est pas de couleur orange dans le code. Mais pourtant la vérification et téléversement s'effectue sans problème.

Code client :

/**
   Exemple de code pour la bibliothèque Mirf – Client Ping Pong
*/
#include <SPI.h>      // Pour la communication via le port SPI
#include <Mirf.h>     // Pour la gestion de la communication
#include <nRF24L01.h> // Pour les définitions des registres du nRF24L01
#include <MirfHardwareSpiDriver.h> // Pour la communication SPI

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

  Mirf.cePin = 9; // Broche CE sur D9
  Mirf.csnPin = 10; // Broche CSN sur D10
  Mirf.spi = &MirfHardwareSpi; // On veut utiliser le port SPI hardware
  Mirf.init(); // Initialise la bibliothèque

  Mirf.channel = 1; // Choix du canal de communication (128 canaux disponibles, de 0 à 127)
  Mirf.payload = sizeof(long); // Taille d'un message (maximum 32 octets)
  Mirf.config(); // Sauvegarde la configuration dans le module radio

  Mirf.setTADDR((byte *) "nrf02"); // Adresse de transmission
  Mirf.setRADDR((byte *) "nrf01"); // Adresse de réception

  Serial.println("Go !");
}

void loop() {
  unsigned long time_message = millis(); // On garde le temps actuel retourné par millis()

  Serial.print("Ping ... ");
  Mirf.send((byte *) &time_message); // On envoie le temps actuel en utilisant une astuce pour transformer le long en octets
  
  Serial.println("ok 1");
  while (Mirf.isSending()); // On attend la fin de l'envoi
  Serial.println("ok 2");

  // Attente de la réponse
  while (!Mirf.dataReady()) { // On attend de recevoir quelque chose
    if (millis() - time_message > 1000 ) { // Si on attend depuis plus d'une seconde
      Serial.println("Pas de pong"); // C'est le drame ...
      return;
    }
  }

  // La réponse est disponible
  Mirf.getData((byte *) &time_message); // On récupère la réponse

  // On affiche le temps de latence (sans division par deux)
  Serial.print("Pong: ");
  Serial.print(millis() - time_message);
  Serial.println("ms");

  // Pas besoin de tester plus d'une fois par seconde
  delay(1000);
}

Code serveur :

/**
 * Exemple de code pour la bibliothèque Mirf – Serveur Ping Pong
 */
#include <SPI.h>      // Pour la communication via le port SPI
#include <Mirf.h>     // Pour la gestion de la communication
#include <nRF24L01.h> // Pour les définitions des registres du nRF24L01
#include <MirfHardwareSpiDriver.h> // Pour la communication SPI

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

  Mirf.cePin = 9; // Broche CE sur D9
  Mirf.csnPin = 10; // Broche CSN sur D10
  Mirf.spi = &MirfHardwareSpi; // On veut utiliser le port SPI hardware
  Mirf.init(); // Initialise la bibliothèque

  Mirf.channel = 1; // Choix du canal de communication (128 canaux disponibles, de 0 à 127)
  Mirf.payload = sizeof(long); // Taille d'un message (maximum 32 octets)
  Mirf.config(); // Sauvegarde la configuration dans le module radio

  Mirf.setTADDR((byte *) "nrf01"); // Adresse de transmission
  Mirf.setRADDR((byte *) "nrf02"); // Adresse de réception

  Serial.println("Go !"); 
}

void loop() {
  byte message[sizeof(long)];

  if(!Mirf.isSending() && Mirf.dataReady()){
    Serial.println("Ping !");
    Mirf.getData(message); // Réception du paquet
    Mirf.send(message); // Et on le renvoie tel quel
  }
}

Les modules NRF24L01+ :

Acheté ici

Bonjour,

je n'ai jamais utilisé la bibliothèque Mirf mais après lecture (rapide) de ton code et de la doc je ne vois pas d'erreur, en tout cas rien qui ne devrait empêcher l'affichage de "ok 2".

Donne peut-être un schéma des branchements et précise l'arduino utilisé.

Après tu peux t'approprier à partir de la bibliothèque les fonctions send et isSending pour voir où cela bloque (en affichant les valeurs de status, PTX, TX_DS, MAX_RT).

Bonne chance.

Pour ce qui est de la couleur des mots-clés, c'est défini dans un fichier qui s'appelle keywords.txt de la bibliothèque. Si tu veux en ajouter, il suffit de le modifier.

Bonjour,
J'ai reçu aujourd'hui deux adaptateurs pour les NRF24L01+ et avec ça marche très bien !

Je comprends pas trop pourquoi sans ça ne marchait pas, pourtant je les ai bien mis sur le 3.3V, sûr des branchements...
Bref, je réessaierai sans peut être une autre fois.

Pour infos, j'utilise une carte Arduino Uno d'un côté, et une carte Arduino Nano de l'autre.

Merci toutefois de m'avoir répondu !

Les adaptateurs :

Acheté sur Amazon