NRF24L01+ - После остановки прослушивания невозможно записать данные

Хорошо, это код моего приемника.

Это довольно запутанно, поэтому давайте назовем Receiver = DEVICE 1 и Transmitter = DEVICE 2

.

УСТРОЙСТВО 1: NRF24L01+, HC-05 (Bluetooth)

УСТРОЙСТВО 2: NRF24L01+

Поэтому УСТРОЙСТВО 1 будет получать данные от УСТРОЙСТВА 2. Также, когда он получает данные с моего телефона, подключенного к модулю HC-05, он будет radio.StopListening и radio.write.

Но по какой-то причине, после того как я сделал radio.StopListening, radio.write не работает.

В настоящее время УСТРОЙСТВО 2 имеет очень простой код для получения данных, отправляемых с УСТРОЙСТВА 1. Я сделал это только для того, чтобы проверить, отправляются ли какие-либо данные, когда модуль HC-05 DEVICE 1 получает данные.

Код:

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

RF24 radio(9, 8);

byte addresses[][6] = {"1Node","2Node"};

void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.setPALevel(RF24_PA_MIN);
  radio.setDataRate(RF24_2MBPS);
  radio.setChannel(124);

  // Открываем канал записи и чтения на каждом радио с противоположными адресами
  radio.openWritingPipe(addresses[0]);
  radio.openReadingPipe(1, addresses[1]);
}

void loop() {
  unsigned char rf_data; //Создаем переменную для хранения данных
  unsigned char bt_data;
  unsigned char tosend;
  radio.startListening();

  if (radio.available()){
    while (radio.available()){
      radio.read(&rf_data, sizeof(rf_data));
      Serial.println(rf_data);
      }
    }

  if (Serial.available()>0){
    while (Serial.available()>0){
      bt_data = Serial.read();
      radio.stopListening();
      Serial.println(bt_data); //----------- Я МОГУ ПОСЛЕДОВАТЕЛЬНО ПЕЧАТЬ ----
      radio.write(&bt_data, sizeof(bt_data)); //-------- НО Я НЕ МОГУ ВЫПОЛНИТЬ ЭТОТ КОД ЗДЕСЬ ПО НЕКОТОРЫМ ПРИЧИНАМ
      }
    }

}

Я добавил комментарии, чтобы показать, какая часть работает, а какая нет

Надеюсь, этот вопрос не слишком сложен для понимания.

, 👍-1

Обсуждение

имя приемника «DEVICE 1» менее запутанно?, @jsotola

@jsotola не мог бы ты быть немного более полезным, @Denise

Примеры скетчей работают? Возможно, у вас есть проблема, не связанная с вашим кодом., @Kwasmich


1 ответ


1

Причин может быть несколько, но, во-первых, я хотел бы попросить вас проверить, работает ли вообще ваша команда записи. Попробуйте отключить режим чтения и оставить только режим записи:

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

RF24 radio(9, 8);

byte addresses[][6] = {"1Node","2Node"};

void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.setPALevel(RF24_PA_MIN);
  radio.setDataRate(RF24_2MBPS);
  radio.setChannel(124);

  // Открываем канал записи и чтения на каждом радио с противоположными адресами
  radio.openWritingPipe(addresses[0]);
  //radio.openReadingPipe(1, address[1]);
}

void loop() {
  unsigned char rf_data; //Создаем переменную для хранения данных
  unsigned char bt_data;
  unsigned char tosend;
  //радио.startListening();

 // если (радио.доступно()){
 // пока (радио.доступно()){
 // radio.read(&rf_data, sizeof(rf_data));
 // Serial.println(rf_data);
 // }
 // }

  if (Serial.available()>0){
    while (Serial.available()>0){
      bt_data = Serial.read();
      //радио.stopListening();
      Serial.println(bt_data); //----------- Я МОГУ ПОСЛЕДОВАТЕЛЬНО ПЕЧАТЬ ----
      radio.write(&bt_data, sizeof(bt_data)); //-------- НО Я НЕ МОГУ ВЫПОЛНИТЬ ЭТОТ КОД ЗДЕСЬ ПО НЕКОТОРЫМ ПРИЧИНАМ
      }
    }

}

Попробуйте приведенный выше код, и если он не будет работать, измените RF24_2MBPS на RF24_1MBPS и RF24_PA_MIN на RF24_PA_LOW на обоих модули (передатчик и приемник)

,