Nrf24 fonctionne en aller mais pas en retour

Bonsoir, j’ai un problème avec des modules nrf24l01 (encore, oui je sait, mais j’ai pas trouvé de solution dans les autres posts -_-)
en gros je faisait un code d’essai qui envoi une sorte de ping lors de l’appui sur un bouton mais que reste sur écoute pour recevoir les potentiels messages qui viennent de l’autre carte.
ça fait donc un communication uno → méga et méga → uno.
dans le sens uno → méga ça fonctionne, la méga reçoit les messages du ping, mais dans le sens méga uno je n’ai rien, je ne comprends pas pourquoi ?
les adresses des tunnels sont correctes, j’ai bien appelé startListening() à chaque fois, mais la uno reste désespérément muette.
pourtant ça à bien fonctionné une ou deux fois, mais deux fois en deux semaines de test c’est paouf…
émeteur (uno) :

#include <nRF24L01.h>
#include <printf.h>
#include <RF24.h>
#include <RF24_config.h>

#include "screen.hpp"
#include "config.hpp"

#define MAX_SIZE_PACKET 32

/*
   brochage
   nRF24L01 -> UNO
   CSN -> 7
   CE -> 6
*/

#define NRF24_CS_PIN A0
#define NRF24_CE_PIN A1
#define NRF24_CHANNEL 100

#define PIN_SELECT_PALEVEL_POT A5
#define PIN_SELECT_DATARATE_POT A4
#define PIN_PING_BTN 4


byte channel = 123;
int PALevel = RF24_PA_MIN;
int dataRate = RF24_250KBPS;
Data d;

RF24 nrf24(NRF24_CE_PIN, NRF24_CS_PIN);
Screen screen(U8G2_R2, 10, 9, 8);

int timerCheckChip = 0;

void setup()
{
  pinMode(A2, OUTPUT);
  pinMode(PIN_RED, OUTPUT);
  pinMode(PIN_GREEN, OUTPUT);
  pinMode(PIN_BLUE, OUTPUT);

  Serial.begin(9600);
  Serial.println("debut");

  nrf24.begin();

  nrf24.setChannel(channel);
  nrf24.setPALevel(PALevel);
  nrf24.setDataRate(dataRate);
  nrf24.openWritingPipe(adress[0]);
  nrf24.openReadingPipe(1, adress[1]);
  nrf24.startListening();

  Serial.print("emission : ");
  Serial.println((char *) adress[0]);
  Serial.print("reception : ");
  Serial.println((char *) adress[1]);

  d.PALevel = nrf24.getPALevel();
  d.dataRate = nrf24.getDataRate();
  d.channel = nrf24.getChannel();

  screen.begin();

  pinMode(PIN_PING_BTN, INPUT_PULLUP);
  screen.clear();
  screen.update(d);
  nrf24.startListening();
  Serial.println(F("fin setup"));
}

void loop()
{

  nrf24.startListening();

  if (nrf24.isChipConnected() != d.chipIsConnected)
  {

    d.chipIsConnected = !d.chipIsConnected;
    if (d.chipIsConnected)
    {
      Serial.println(F("-i- module connecte -i-"));
      nrf24.begin();
      nrf24.setChannel(channel);
      nrf24.setPALevel(PALevel);
      nrf24.setDataRate(dataRate);
      nrf24.openWritingPipe(adress[0]);
      nrf24.openReadingPipe(1, adress[1]);
      nrf24.startListening();
    }
    else
    {
      Serial.println(F("-!- module deconnecte. -!-"));
    }
    screen.update(d);
  }

  checkEmitParameters();

  if (digitalRead(PIN_PING_BTN) == 0)
  {
    while (digitalRead(PIN_PING_BTN) != 1);
    Serial.println(F("bouton appuye"));
    if(ping(d))
      Serial.println("-i- ping reussi -i-");
    else
      Serial.println("-!- erreur d'emission -!-");
    screen.update(d);
  }

  if (nrf24.available() && d.chipIsConnected) // c'est là que ça pose problème, normalement quand j'appui sur le bouton de la méga je devrait reçevoir un message...
  {
    Serial.println(F("\nmessage recu ---"));
    Serial.print(F("\ttaille :\t"));
    Serial.println(nrf24.getDynamicPayloadSize());
    char buff[MAX_SIZE_PACKET];
    nrf24.read(buff, MAX_SIZE_PACKET);
    Serial.println(buff);

  }
  delay(20);
}

config.hpp (émetteur) :

#ifndef CONFIG_HPP
#define CONFIG_HPP

#define PIN_RED A3
#define PIN_GREEN A0
#define PIN_BLUE A1

#define EMIT_PIPE "PIPE0"
#define RECV_PIPE_1 "PIPE1"
#define RECV_PIPE_2 "PIPE2"
#define RECV_PIPE_3 "PIPE3"
#define RECV_PIPE_4 "PIPE4" 
#define RECV_PIPE_5 "PIPE5"

const byte adress[][6] = {EMIT_PIPE, RECV_PIPE_1, RECV_PIPE_2, RECV_PIPE_3, RECV_PIPE_4, RECV_PIPE_5};

#endif //CONFIG_HPP

recpteur (méga) :

#include <nRF24L01.h>
#include <printf.h>
#include <RF24.h>
#include <RF24_config.h>

#include "config.hpp"

/* brochage
    nrf24 -> mega
    mosi, miso, sck -> défaut
    csn (ss) -> 53
    ce -> 49
*/

#define PIN_CS_NRF24 53
#define PIN_CE_NRF24 49

#define PIN_BTN_SEND A7

RF24 nrf24(PIN_CE_NRF24, PIN_CS_NRF24);

int PALevel = RF24_PA_MIN;
int dataRate = RF24_250KBPS;
int channel = 123;

bool timerSend = 0;
bool chipIsConnected = true;

void setup()
{
  Serial.begin(9600);
  pinMode(PIN_BTN_SEND, INPUT_PULLUP);


  nrf24.begin();
  nrf24.setChannel(channel);
  nrf24.setPALevel(PALevel);
  nrf24.setDataRate(dataRate);
  nrf24.openWritingPipe(adress[0]);
  nrf24.openReadingPipe(2, adress[1]);

  Serial.print("emission : ");
  Serial.println((char *) adress[0]);
  Serial.print("reception : ");
  Serial.println((char *) adress[1]);

  Serial.println(nrf24.isChipConnected());
  Serial.println(nrf24.getPALevel());
  Serial.println(nrf24.getDataRate());
  Serial.println(nrf24.getChannel());

  nrf24.startListening();
}

void loop()
{
  if (nrf24.isChipConnected() != chipIsConnected)
  {
    chipIsConnected = !chipIsConnected;
    if (chipIsConnected)
    {
      Serial.println(F("-i- module connecte -i-"));
      nrf24.begin();
      nrf24.setChannel(channel);
      nrf24.setPALevel(PALevel);
      nrf24.setDataRate(dataRate);
      nrf24.openWritingPipe(adress[0]);
      nrf24.openReadingPipe(1, adress[1]);
    }
    else
    {
      Serial.println(F("-!- module deconnecte. -!-"));
    }
  }

  if (!digitalRead(PIN_BTN_SEND))
  {
    while (!digitalRead(PIN_BTN_SEND));
    nrf24.stopListening();
    Serial.println(F("envoi d'un message"));
    char msg[] = "carre dans l'axe";
    if (nrf24.write(msg, sizeof(msg)))
    {
      Serial.println(F("Le message a bien ete envoye"));
    }
    else
    {
      Serial.println(F("Le message n'a pas ete envoye"));
    }
    nrf24.startListening();
  }

  if (nrf24.available() && chipIsConnected)
  {
    Msg recvMsg;
    nrf24.read(&recvMsg, sizeof(Msg));
    Serial.println(F("\nmessage reçu"));
    Serial.print(F("taille : "));
    Serial.println(nrf24.getPayloadSize());
    Serial.print(recvMsg.millisSend);
    Serial.print(" | ");
    Serial.println(recvMsg.msgDe6Octets);
    nrf24.stopListening();

    delay(10);
    nrf24.write(&recvMsg, sizeof(Msg));
    delay(10);
    Serial.println("\nmessage envoye");
    nrf24.startListening();
  }
}

config.hpp (recepteur) :

#ifndef CONFIG_HPP
#define CONFIG_HPP

#define RECV_PIPE_1 "PIPE0"
#define EMIT_PIPE "PIPE1"
#define RECV_PIPE_2 "PIPE2"
#define RECV_PIPE_3 "PIPE3"
#define RECV_PIPE_4 "PIPE4"
#define RECV_PIPE_5 "PIPE5"

const byte adress[][6] = {EMIT_PIPE, RECV_PIPE_1, RECV_PIPE_2, RECV_PIPE_3, RECV_PIPE_4, RECV_PIPE_5};

// broche de communication SPI nrf24 -> arduino ---

struct Msg
{
  unsigned long millisSend;
  char msgDe6Octets[6] = {'y', 'o', 'l', 'o', 'o', '\0'};
};

#endif

Voila si vous avez une idée de ce qui ne va pas…

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.