Чтение и запись на одном и том же узле (центральном) с помощью сети RF24 на Arduino

Я хочу отправлять и получать сообщения на одном узле, используя библиотеку RF24Network, но не могу этого сделать, даже когда использую радио.stopListening().

Вот этот код:

#include <RF24Network.h>
#include <RF24.h>
#include <SPI.h>

RF24 radio(9,10);
RF24Network network(radio);
struct payload_t{unsigned long int code; unsigned long int message;};

void setup(void) {
  Serial.begin(9600);
  SPI.begin();
  radio.begin();
  radio.setPALevel(RF24_PA_MAX);
  radio.setDataRate(RF24_250KBPS);
  radio.setAutoAck(false);
  network.begin(108, 0);
}

void loop(){
  network.update();
  RF24NetworkHeader header;
  payload_t payload;
  if(network.available()) {
    network.read(header, &payload, sizeof(payload));
    Serial.println(payload.message);
    // Я ХОЧУ ЗДЕСЬ ОТПРАВИТЬ ОБРАТНО В ПЕРЕДАТЧИК, но я не могу сделать это
    radio.stopListening();
    payload_t payload = { 2000, 15444452 };
    RF24NetworkHeader header(2);
    network.write(header, &payload, sizeof(payload));
  }
}

Второй Узел:

#include <RF24Network.h>
#include <RF24.h>
#include <SPI.h>

RF24 radio(9,10);
RF24Network network(radio);
struct payload_t{unsigned long int code; unsigned long int message;};
firstExec = 1;

void setup(void) {
  Serial.begin(9600);
  SPI.begin();
  radio.begin();
  radio.setPALevel(RF24_PA_MAX);
  radio.setDataRate(RF24_250KBPS);
  radio.setAutoAck(false);
  network.begin(108, 2);
}

void loop() {
  network.update();
  if(firstExec) {
    radio.stopListening();
    payload_t payload = { 2000, 5555555 };
    RF24NetworkHeader header(0);
    network.write(header, &payload, sizeof(payload));
    radio.startListening();
    firstExec = 0;
  }
  RF24NetworkHeader header;
  payload_t payload;
  if(network.available()) {
    network.read(header, &payload, sizeof(payload));
    Serial.println(payload.message);
  }
}

, 👍4

Обсуждение

Не могли бы вы опубликовать часть вашего кода, с которой у вас возникли проблемы?, @Gerben

Как насчет того, чтобы включить вашу попытку отправить данные, чтобы мы могли увидеть, где вы ошиблись?, @Majenko

Извините за это, вот полный скрипт с кодом отправки., @djokage

Как насчет кода для другого узла?, @SoreDakeNoKoto

Извините, что пропустил network.update (), потому что я скопировал только необходимый код и, как я всегда ставлю это в верхней части цикла, я пропустил его при копировании, @djokage

Я голосую за то, чтобы закрыть этот вопрос, потому что он уже больше года остается без ответа., @Chris Stratton


1 ответ


1

Библиотека говорит, что вы должны включить network.update() в цикл (), чтобы узлы были синхронизированы. Поместите этот вызов в верхней части цикла() в обоих узлах.

,