Go Down

Topic: Probleme reception NRF24L01  (Read 181 times) previous topic - next topic

bennurre

j'ai 2 nrf24l01 qui font une liaison entre 2 arduino nano.
L'emetteur envoi une valeur A et une valeur B.

Le récepteur reçoit la valeur A, l'affiche et la valeur B et l'affiche.

Tout marche si je n'active pas la réception de la 2eme valeur.
//  radio.read(&vitesseventkmh, sizeof(float));


Si j'active la réception de la 2eme valeur, tout le programme plante et il n'y a plus aucune réception.
radio.read(&vitesseventkmh, sizeof(float));


En gros je fais:
radio.read(&valeur_A, sizeof(float));
radio.read(&valeur_B, sizeof(float));

est ce que c'est la bonne méthode? ou faut il définir autre chose?

Merci !!


Quote
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); //l adresse 0x27 est a changé en fonction de votre écrant

RF24 radio(9, 10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
float temp ;
float vitesseventkmh = 0;
float last_temp = 0;


void setup(void)
{
  // Serial.begin(115200);

  lcd.begin();

  lcd.backlight();
  lcd.clear();

 timeRef = millis(); // initialisation de la référence du comptage

  radio.begin();
  radio.setPALevel(RF24_PA_MAX);
  radio.openReadingPipe(1, pipe);
  radio.startListening();

}



void loop(void)
{

  if (radio.available())
  {
     timeRef = millis();            //raz de la var quand le prog passe dans le if
    last_temp = temp;
    radio.read(&temp, sizeof(float));

  //  radio.read(&vitesseventkmh, sizeof(float));



    Serial.print("recept Temperature : ");
    Serial.println(temp);
    Serial.print("recept vitesseventkmh : ");
     Serial.println(vitesseventkmh);

   

   
    lcd.setCursor(6, 0);
    lcd.print(temp);

    lcd.setCursor(8,1);
    lcd.print(vent);
   
   
    delay(1000);
  }
 
}

Lacuzon

Bonsoir,

Si tu as plusieurs données à transmettre, tu crées un tableau contenant tes données, tu envoies le tableau. A la réception, tu créés un tableau de même  dimension dans lequel tu reçois tes données.
Ensuite tu lis la première valeur, puis la deuxième.


bennurre

Bonsoir,

Si tu as plusieurs données à transmettre, tu crées un tableau contenant tes données, tu envoies le tableau. A la réception, tu créés un tableau de même  dimension dans lequel tu reçois tes données.
Ensuite tu lis la première valeur, puis la deuxième.


ok oui! aurais tu un exemple? j'avoue, je suis une quiche en tableau!

Lacuzon

dans ton sketch d'envoi, si tu as par exemple deux données, une température et une vitesse, tu crées dans l'entête de ton fichier un tableau de type :

float dataE[2];

si tu as deux données.

Ensuite, tu remplis ton tableau avec tes deux données :

dataE[0] = temp;
dataE[1] = vitesse;

ensuite tu procèdes à l'envoi de ton tableau avec la ligne de commande :

 radio.write(dataE, sizeof(dataE));// envoi trame info

Dans ton sketch de réception tu crées un tableau de dimension 2, par exemple :

float dataR[2];

et tu lis les données qui arrivent :

radio.read(dataR, sizeof(dataR)); // lit les trames envoyées

puis tu extrais tes deux données de ton tableau :

temp = dataR[0];
vitesse = dataR[1];

en ayant bien sûr défini les deux variables temp et vitesse en préambule.


ton programme bloque car tu lances deux lectures sur le même pipe. Le mieux est donc de mettre toutes les données dans un seul tableau qui lui sera transmis sans problème.

a plus








Go Up