Transmission de données analogiques bi directionnelle sans fil (NRF24l01+)

Salut a tous, débutant ici!

Je travaille actuellement sur un projet qui j’avoue pour un débutant est assez corsé! Je veux échanger des données analogiques entre 2 nano utilisant ce fameux nrf24! le “maitre” envoie un analogRead en permance de la A0 a 'lesclave", qui lui renvoie les analogRead de la A0, A1, A2 et A3!

Procedant par étape j’ai dabord ecrit le skech ou uniquement le maitre transmet les valeurs de A0 et ca fonctionne impeccable! J’ai pour suivi en rajoutant l’envoi de A0 au maitre par “l’esclave”, et sa fonctionne “crème”! :slight_smile:
Mais la ou ca se corse c’est que je n’arrive pas a envoyer les valeurs des autres A1 A2 et A3, suivant le meme principe!
Un extrait ci dessous du code vous permettra de voir mieux mon probleme!

en espérent profiter de vos connaissance et lumieres!
Merci d’avance…

// maitre //


#include <RF24.h>




const int AnalogPin = A0;
const int RfDelay = 5;


float Offset = 4.89;

// Setting up radio, CE, CS
RF24 radio(7, 8);
const byte addresses[][6] = {"TXXX1", "RXXX1"};

void setup() {

// un peu de sérial pour débugguer
Serial.begin(9600)


  pinMode (AnalogPin, INPUT);


  // on allume la radio :)
  radio.begin();
  radio.setCRCLength(RF24_CRC_8);
  radio.setPALevel(RF24_PA_MIN);
  radio.setDataRate(RF24_2MBPS);
  radio.setAutoAck(1);
  radio.openWritingPipe(addresses[1]); // TXXX1
  radio.openReadingPipe(1, addresses[0]); // RXXX1

}

void loop() {

  delay(RfDelay);

// on arrete d'écouter pour parler  
  radio.stopListening();
  int AnalogPinVal = analogRead(AnalogPin);
  radio.write(&AnalogPinVal, sizeof(AnalogPinVal));

  delay(RfDelay);

// on se tait et on écoute
  radio.startListening();
  while (!radio.available());
  int AnalogRXA0PinVal;
  radio.read(&AnalogRXA0PinVal, sizeof(AnalogRXA0PinVal));

 //petite conversion
 float AnalogRXA0Volt = ( Offset / 1023) * AnalogRXA0PinVal;


  // Voyons voir ce que l'on recoit
Serial.println(AnalogRXA0Volt);
  




}
// esclave //


#include <RF24.h>



const int RfDelay = 5 ;
const int AnalogRXA0Pin = A0;


// on règle la radio, CE, CS
RF24 radio(7, 8);
const byte addresses[][6] = {"TXXX1", "RXXX1"};

void setup() {

// un peu de céréales :D
  Serial.begin(9600);

  delay(500);

  // Pin modes
  pinMode (AnalogRXA0Pin, INPUT);


  // allumons la radio
  radio.begin();
  radio.setCRCLength(RF24_CRC_8);
  radio.setPALevel(RF24_PA_MIN);
  radio.setDataRate(RF24_2MBPS);
  radio.setAutoAck(1);
  radio.openWritingPipe(addresses[0]); // RCVR
  radio.openReadingPipe(1, addresses[1]); // EMETR


}


void loop() {

  delay(RfDelay);

// on se tait et on écoute
  radio.startListening();
  if ( radio.available()) {
    while (radio.available()) {
   int AnalogPinVal;
      radio.read(&AnalogPinVal, sizeof(AnalogPinVal));

//voyon voir ce que l'on recoit
Serial.println(AnalogPinVal)

    }

    delay(RfDelay);

// on arrete d'écouter et on parle
    radio.stopListening();

    int AnalogRXA0PinVal = analogRead(AnalogRXA0Pin);
    radio.write(&AnalogRXA0PinVal, sizeof(AnalogRXA0PinVal));



}

}

Bonjour,

Tu définis un tableau, tu le rempli et tu transmets ce tableau

  int analogVal[4];
  analogVal[0]=analogRead(A0);
  analogVal[1]=analogRead(A1);
  analogVal[2]=analogRead(A2);
  analogVal[3]=analogRead(A3);
  radio.write(&analogVal, sizeof analogVal);

En réception tu reçois le même tableau

vous êtes en environnement asynchrone

Certains messages peuvent se perdent ou arriver corrompus et éventuellement seront ré-émis - si vous tentez de lire de manière séquentielle vous vous exposez à des problèmes de synchro.

soit vous empaquetez les valeurs de A0, A1, A2, A3 dans une structure (EDIT = comme Kamill le propose) et vous la balancez d'un coup, comme ça de l'autre côté si vous recevez quelque chose vous savez que ce sont 4 entiers sur 2 octets à lire, soit vous devez fournir un peu plus d'info dans le message envoyé, comme le N° de la broche lue, etc