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)); //-------- НО Я НЕ МОГУ ВЫПОЛНИТЬ ЭТОТ КОД ЗДЕСЬ ПО НЕКОТОРЫМ ПРИЧИНАМ
}
}
}
Я добавил комментарии, чтобы показать, какая часть работает, а какая нет
Надеюсь, этот вопрос не слишком сложен для понимания.
@Denise, 👍-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
на обоих модули (передатчик и приемник)
- NRF24L01+ (библиотека TMRH20): Получатель получает пустые данные
- Задержка связи основного узла RF24Mesh
- Serial.parseInt() занимает больше времени, чем хотелось бы
- Последовательная связь ПК с Arduino с использованием C и отправка через NRF
- RF24, если операторы не читаются должным образом, даже если значение «if» неверно, оно все равно следует за соответствующим кодом.
- Как разделить входящую строку?
- Как вывести несколько переменных в строке?
- В чем разница между Serial.write и Serial.print? И когда они используются?
имя приемника «DEVICE 1» менее запутанно?, @jsotola
@jsotola не мог бы ты быть немного более полезным, @Denise
Примеры скетчей работают? Возможно, у вас есть проблема, не связанная с вашим кодом., @Kwasmich