Problème Rf2400P

Salut j'étudie en ce moment le module Rf2400P et j'utilise la bibliotheque Mirf mais j'ai un problème Je vais essayer d'etre claire (si je peux ^^)

Alors lorsque le premiers module envoie une requete de 12 octets, le second arrive à le recevoir ensuite quand j'essaye de renvoyer une autre requete avec le second module il n'arrive pas, il reste bloquer dans la boucle while(Mirf.isSending()). Alors mon problème c'est lorsqu'un module passe en mode réception, il n'arrive plus à passer en mode transmission.

Merci d'avance de l'aide que vous m'apporterez.

Code ...

Module 1

#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
int donnerecu;
int z=0, y=0, x=0;
int a, b, c, d, e, f, g, h, i, j, k, l, m;
int requete[13] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
int requetea[13] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14};
unsigned long temps = 0;

void setup(){
Serial.begin(9600);
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.payload = sizeof(unsigned long);
Mirf.config();
Mirf.setTADDR((byte *)“squid”);
Mirf.setRADDR((byte *)“easy”);
pinMode(2, INPUT);
pinMode(4, INPUT);
pinMode(3, OUTPUT);
Serial.println(“Preparation fini”);
}

void loop()
{
temps = millis();
if(z == 0)
{
if(digitalRead(2) == LOW)
{
z=1;
}

if(digitalRead(4) == LOW)
{
z=3;
}
}

if(z==1)
{
digitalWrite(3,HIGH);
for(y=0; y<13; y++)
{
digitalWrite(3,HIGH);
Mirf.send((byte *)&requete[y]);
while(Mirf.isSending()){}
Serial.print("On envoye ");
Serial.println((requete[y]));
delay(1000);
}
z=2;
}
if(z==3)
{

digitalWrite(3,HIGH);
for(y=0; y<13; y++)
{
digitalWrite(3,HIGH);
Mirf.send((byte *)&requetea[y]);
while(Mirf.isSending()){}
Serial.print("On envoye ");
Serial.println((requetea[y]));
delay(1000);
}
z=2;
}

if(z == 2)
{
while(!Mirf.dataReady())
{
if ( millis() > temps+20000)
{
Serial.println(“recommence”);
z=0;
x=0;
y=0;
digitalWrite(3, LOW);
return;
}
}

digitalWrite(3, HIGH);
Serial.println(“On attend”);
while(!Mirf.dataReady())
{ }
Mirf.getData((byte *) &a);
delay(1000);

while(!Mirf.dataReady())
{ }
Mirf.getData((byte *) &b);
delay(1000);

while(!Mirf.dataReady())
{ }
Mirf.getData((byte *) &c);
delay(1000);

while(!Mirf.dataReady())
{ }
Mirf.getData((byte *) &d);
delay(1000);

while(!Mirf.dataReady())
{ }
Mirf.getData((byte *) &e);
delay(1000);

while(!Mirf.dataReady())
{ }
Mirf.getData((byte *) &f);
delay(1000);

while(!Mirf.dataReady())
{ }
Mirf.getData((byte *) &g);
delay(1000);

while(!Mirf.dataReady())
{ }
Mirf.getData((byte *) &h);
delay(1000);

while(!Mirf.dataReady())
{ }
Mirf.getData((byte *) &i);
delay(1000);

while(!Mirf.dataReady())
{ }
Mirf.getData((byte *) &j);
delay(1000);

while(!Mirf.dataReady())
{ }
Mirf.getData((byte *) &k);
delay(1000);

while(!Mirf.dataReady())
{ }
Mirf.getData((byte *) &l);
delay(1000);

while(!Mirf.dataReady())
{ }
Mirf.getData((byte *) &m);
delay(1000);

digitalWrite(3, LOW);

int tableaudonne[13]= {a, b, c, d, e, f, g, h, i, j, k, l, m};
Serial.println(“On recoit”);
for(x=0; x<13; x++)
{
Serial.println((tableaudonne));
}

z=0;
x=0;
y=0;
Serial.println(“Fini”);
}
}

Module 2

#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
int x=0, y=0, u=0, p=0, o=1;
unsigned long donnenvo[13] = {187, 2, 4, 6, 8, 16, 18, 20, 22, 24, 187, 48, 70};
int a, b, c, d, e, f, g, h, i, j, k, l, m;
unsigned long vrairequete[13] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};

void setup()
{
Serial.begin(9600);
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.payload = sizeof(unsigned long);
Mirf.config();
Mirf.setTADDR((byte *)“easy”);
Mirf.setRADDR((byte *)“squid”);
pinMode(2, OUTPUT);
pinMode(3, INPUT);
Serial.println(“Preparation fini”);
}

void loop()
{
if(x==0)
{
o=1;
Serial.println(“On attend de recevoir la requete”);
while(!Mirf.dataReady())
{ }
digitalWrite(2, HIGH);
Mirf.getData((byte *) &a);
delay(1000);

while(!Mirf.dataReady())
{ }
Mirf.getData((byte *) &b);
delay(1000);

while(!Mirf.dataReady())
{ }
Mirf.getData((byte *) &c);
delay(1000);

while(!Mirf.dataReady())
{ }
Mirf.getData((byte *) &d);
delay(1000);

while(!Mirf.dataReady())
{ }
Mirf.getData((byte *) &e);
delay(1000);

while(!Mirf.dataReady())
{ }
Mirf.getData((byte *) &f);
delay(1000);

while(!Mirf.dataReady())
{ }
Mirf.getData((byte *) &g);
delay(1000);

while(!Mirf.dataReady())
{ }
Mirf.getData((byte *) &h);
delay(1000);

while(!Mirf.dataReady())
{ }
Mirf.getData((byte *) &i);
delay(1000);

while(!Mirf.dataReady())
{ }
Mirf.getData((byte *) &j);
delay(1000);

while(!Mirf.dataReady())
{ }
Mirf.getData((byte *) &k);
delay(1000);

while(!Mirf.dataReady())
{ }
Mirf.getData((byte *) &l);
delay(1000);

while(!Mirf.dataReady())
{ }
Mirf.getData((byte *) &m);
delay(1000);
digitalWrite(2, LOW);

unsigned long tableaurequete[13]= {a, b, c, d, e, f, g, h, i, j, k, l, m};
Serial.println(“On recoit la requete”);
for(u=0; u<13; u++)
{
Serial.println((tableaurequete));
}
for(p=0; p<13; p++)
{
if(o>0)
{
if(tableaurequete[p]==vrairequete[p])
{
o++;
}
else
{
o=0;
x=0;
p=0;
u=0;
y=0;
Serial.println(“pas la bonne requete, on recommence”);
}
}

if(o==14)
{
Serial.println(“C’est la bonne requete, on va envoye les donnees”);
x=2;
delay(5000);
}
}
}







if(x==2)
{
digitalWrite(2,HIGH);
Serial.print(“On va envoye les donnees mais ca va bloquer”);

for(y=0; y<13; y++)
{
Mirf.send((byte *)&donnenvo[y]);
while(Mirf.isSending());
Serial.print("On envoye ");
Serial.println((donnenvo[y]));
delay(1000);
}

digitalWrite(2,LOW);
o=0;
x=0;
p=0;
u=0;
y=0;
Serial.println(“On a tous envoye”);
}
}

Personne n'a jamais eu ce problème ?

met ton code entre balises # pour la lisibilité.

La répétition de while(!Mirf.dataReady()) semble être à l'origine du problème. Que se passe t'il si on rate le début du mot ? On reste bloqué ?

Pourquoi ne pas mettre plus simplement une boucle qui récupère les caractères un par un, les assemble en une seule chaîne, avec sortie de cette boucle quand on a reçu le code de fin de mot ?

Merci de m’avoir répondu, et désolé pour la présentation de la programmation c’est la premiere fois que je viens sur ce forum.

On ne peut pas rater le début de la requete car j’ai mit des boutons poussoirs dans le premiers module pour envoyé la requete et le second module attent toujours une requete. Puis la répétition de la boucle while(!Mirf.dataReady()) n’est pas le problème, au début je voulais enregistrer les données recu dans un tableau avec une boucle for, mais dans mon tableau je recevrais de mauvais donnée alors j’ai decidé de tout mettre à la suite et ca marche parfaitement.

Le problème est pour passer du mode reception au mode transmittion, il n’y arrive pas alors j’ai trouvé une fonction Mirf.powerUpTx() pour mettre mon module en mode transmittion mais ca change rien, à part que maintenant mon programme reste bloqué dans Mirf.send((byte *)&donnenvo[y]) et plus dans la boucle while(Mirf.isSending());

Je continue à chercher avec la fonction Mirf.powerUpTx() et je vous tiens au courant, merci encore de m’avoir répondu.

J’ai trouvé mon problème si d’autre personne rencontre ce problème je vous donnerai le code

Bonjour, j'ai le même problème, quelle a été votre solution?