multirecepteur nrf25

Bonjour, je cherche un exemple tout simple . depuis un emeteur nano + nrf24 (equipé d'un bouton poussoir ) je souhaite allumer une led sur 3 recepteurs (nano +nrf24 ) placé dans un rayon de quelques metres . je cherche surement mal mais j'ai pas trouvé ?

ce besoin c'est pour etudier le code et comprendre en fonctionnement (je suis un débutant et l'analyse d'un programme est pour moi une bonne façon de comprendre et d'avancer .

pouvez vous m'aider ? cordialement Alain

Qu’avez vous essayé? montrez nous votre code...

voici le code de mon recepteur pour commander des servo moteur
est ce qu’il suffit de programmer d’autres arduino avec le même code pour avoir plusieurs recepteurs ?

/* origine du programme plus modif perso
Utilisation du module nRF24L01+ avec l’Arduino | iTechnoFrance
réception d’une valeur integer via module nRF24L01
buzzer 2 bips led allumée extinction pin2 a la masse
affichage numero alarme + temps
Broche module Broche Arduino Fonction
recepteur antenne niveau haut
a la mise sous tension de l’emetteur le chiffre 5 est envoyé
la mise à la masse de la pin 2 de lémetteur envoie e chiffre 5
1 GND Masse
2 3.3v VCC/3.3v
3 9 (configurable) CE
4 10 (configurable) CSN
5 13 SCK
6 11 MOSI
7 12 MISO
8 non connectée IRQ
à la reception du chiffre 5 buzzer(pin6 1Seconde ) led pin7 extinction par pin2 à la masse
*/
#include <Servo.h>
Servo aig1;
Servo aig2;
Servo aig3;
Servo aig4;
Servo aig5;
int posdr = 60; // variable to store the servo position
int posdv = 120;

#include <SPI.h> // gestion du bus SPI
#include <Mirf.h> // gestion de la communication
#include <nRF24L01.h> // définition des registres du nRF24L01
#include <MirfHardwareSpiDriver.h> // communication SPI nRF24L01

int valeur = 0; // contient la valeur à recevoir
byte valeur_octet[2]; // contient la valeur découpée en octet pour la réception
int cpt=0;
long duree=0;
long t0=0;
int seconde=0;
int minute=0;
int heure=0;
int temps=0;
int origine=0;

void setup()
{
Mirf.cePin = 9; // CE sur broche 9
Mirf.csnPin = 10; // CSN sur broche 10
Mirf.spi = &MirfHardwareSpi; // utilisation du port SPI hardware
Mirf.init(); // initialise le module SPI
Mirf.channel = 0; // utilisation canal 0 pour communiquer (128 canaux disponible, de 0 à 127)
Mirf.payload = sizeof(unsigned int); // = 2, déclaration taille du message à transmettre, max 32 octets
// RF_SETUP=0000abcd : a=1–>2Mb/s, a=0–>1Mb/s; puissance émission bc=00–>-18 dBm, bc=01–>-12dBm, bc=10–>-6dBm, bc=11–>0dBm;
// d=0 pas de gain sur le bruit en réception
Mirf.configRegister(RF_SETUP, 0x06); // 1 Mb/s et 0 dBm (puissance maximum)
Mirf.config(); // configure le canal et la taille du message
Mirf.setTADDR((byte *)“ardu1”); // définition adresse sur 5 octets de la 2ème carte Arduino
Mirf.setRADDR((byte *)“ardu2”); // définition adresse sur 5 octets de la 1ere carte Arduino

Serial.begin(9600);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);

pinMode (3,OUTPUT);//servo
pinMode (4,OUTPUT);
pinMode (5,OUTPUT);
pinMode (6,OUTPUT);

pinMode(2, INPUT_PULLUP);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
delay (5000);
Serial.println("debut surveillance ");
duree=0;
t0= millis();
}
void agdr(int nb)
{
aig1.attach(nb);
aig1.write(posdr);
delay(400);
aig1.detach();
digitalWrite(nb,LOW);
delay(100);
}
void agdv(int nb)
{
aig1.attach(nb);
aig1.write(posdv);
delay(400);
aig1.detach();
digitalWrite(nb,LOW);
delay(100);
}

void loop()
{
// Serial.println("recepteur valeur ");
while(!Mirf.dataReady())
{
// pas prêt à recevoir
// Serial.println("pas pret ");

delay(5);
}
Mirf.getData(valeur_octet); // récupére 2 octets
valeur = valeur_octet[0] + (valeur_octet[1] << 8); // transforme en int

// commande servo1

if (valeur==1)
{
agdr(3) ;
valeur=0;
}
if (valeur==2)
{
agdv(3) ;
valeur=0;
}

// commande servo2
if (valeur==3)
{
agdr(4) ;
valeur=0;
}
if (valeur==4)
{
agdv(4) ;
valeur=0;
}
// commande servo2
if (valeur==5)
{
agdr(5) ;
valeur=0;
}
if (valeur==6)
{
agdv(5) ;
valeur=0;
}
// commande servo2
if (valeur==7)
{
agdr(6) ;
valeur=0;
}
if (valeur==8)
{
agdv(6) ;
valeur=0;
}
}

il y a un smiley dans le code… n’utilisez pas les tag de quote (la bulle) mais le symbole </> pour insérer du code → modifiez votre post ci dessus et changez les tags:

là où vous verrez

[quote]......[/quote]

mettez

[code]......[/code]

et puis tant que vous y êtes, indentez (ctrl-T dans l’IDE) votre code correctement avant de le copier et coller ici → c’est illisible

voici les cerretions demandées

//origine du programme plus modif perso
//   https://itechnofrance.wordpress.com/2013/05/24/utilisation-du-module-nrf24l01-avec-larduino/
//    réception d’une valeur integer via module nRF24L01
//    buzzer 2 bips led allumée extinction  pin2  a la masse
//    affichage  numero alarme + temps
//   Broche module  Broche Arduino  Fonction
//   recepteur antenne niveau haut
//   a la mise sous tension de l'emetteur le chiffre 5 est envoyé
//   la mise à la masse de la pin 2 de lémetteur  envoie e chiffre 5
// 1 GND Masse   (negatif)
// 2 3.3v  VCC/3.3v
// 3 9 (configurable)  CE
// 4 10 (configurable)  CSN
// 5 13  SCK
// 6 11  MOSI
// 7 12  MISO
// 8 non connectée IRQ
// à la reception du chiffre 5 buzzer(pin6 1Seconde ) led pin7  extinction par pin2 à la masse

#include <Servo.h>
Servo aig1;
Servo aig2;
Servo aig3;
Servo aig4;
Servo aig5;
int posdr = 60;    // variable to store the servo position
int posdv = 120;

#include <SPI.h> // gestion du bus SPI 
#include <Mirf.h> // gestion de la communication 
#include <nRF24L01.h> // définition des registres du nRF24L01 
#include <MirfHardwareSpiDriver.h> // communication SPI nRF24L01

int valeur = 0;  // contient la valeur à recevoir
byte valeur_octet[2]; // contient la valeur découpée en octet pour la réception
int cpt = 0;
long duree = 0;
long t0 = 0;
int  seconde = 0;
int  minute = 0;
int  heure = 0;
int  temps = 0;
int origine = 0;

void setup()
{
  Mirf.cePin = 9; // CE sur broche 9
  Mirf.csnPin = 10; // CSN sur broche 10
  Mirf.spi = &MirfHardwareSpi; // utilisation du port SPI hardware
  Mirf.init(); // initialise le module SPI
  Mirf.channel = 0; // utilisation canal 0 pour communiquer (128 canaux disponible, de 0 à 127)
  Mirf.payload = sizeof(unsigned int); // = 2, déclaration taille du message à transmettre, max 32 octets
  // RF_SETUP=0000abcd : a=1–>2Mb/s, a=0–>1Mb/s; puissance émission bc=00–>-18 dBm, bc=01–>-12dBm, bc=10–>-6dBm, bc=11–>0dBm;
  // d=0 pas de gain sur le bruit en réception
  Mirf.configRegister(RF_SETUP, 0x06); // 1 Mb/s et 0 dBm (puissance maximum)
  Mirf.config(); // configure le canal et la taille du message
  Mirf.setTADDR((byte *)"ardu1"); // définition adresse sur 5 octets de la 2ème carte Arduino
  Mirf.setRADDR((byte *)"ardu2"); // définition adresse sur 5 octets de la 1ere carte Arduino


  Serial.begin(9600);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);

  pinMode (3, OUTPUT); //servo
  pinMode (4, OUTPUT);
  pinMode (5, OUTPUT);
  pinMode (6, OUTPUT);

  pinMode(2, INPUT_PULLUP);
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);
  delay (5000);
  Serial.println("debut surveillance  ");
  duree = 0;
  t0 = millis();
}
void agdr(int nb)
{
  aig1.attach(nb);
  aig1.write(posdr);
  delay(400);
  aig1.detach();
  digitalWrite(nb, LOW);
  delay(100);
}
void agdv(int nb)
{
  aig1.attach(nb);
  aig1.write(posdv);
  delay(400);
  aig1.detach();
  digitalWrite(nb, LOW);
  delay(100);
}

void loop()
{
  // Serial.println("recepteur valeur  ");
  while (!Mirf.dataReady())
  {
    // pas prêt à recevoir
    // Serial.println("pas pret  ");

    delay(5);
  }
  Mirf.getData(valeur_octet); // récupére 2 octets
  valeur = valeur_octet[0] + (valeur_octet[1] << 8); // transforme en int

  // commande servo1

  if (valeur == 1)
  {
    agdr(3) ;
    valeur = 0;
  }
  if (valeur == 2)
  {
    agdv(3) ;
    valeur = 0;
  }

  // commande servo2
  if (valeur == 3)
  {
    agdr(4) ;
    valeur = 0;
  }
  if (valeur == 4)
  {
    agdv(4) ;
    valeur = 0;
  }
  // commande servo2
  if (valeur == 5)
  {
    agdr(5) ;
    valeur = 0;
  }
  if (valeur == 6)
  {
    agdv(5) ;
    valeur = 0;
  }
  // commande servo2
  if (valeur == 7)
  {
    agdr(6) ;
    valeur = 0;
  }
  if (valeur == 8)
  {
    agdv(6) ;
    valeur = 0;
  }
}

d’après vous ces 2 lignes font quoi?

 Mirf.setTADDR((byte *)"ardu1"); // définition adresse sur 5 octets de la 2ème carte Arduino
  Mirf.setRADDR((byte *)"ardu2"); // définition adresse sur 5 octets de la 1ere carte Arduino

ces 2 lignes definissent le nom des cartes ?