Проблема программирования nRF24L01
Я новичок в nrf24l01 . У меня есть два nrf24l01 ,они оба работают очень хорошо, я протестировал их с помощью простой программы мигания светодиодов. Теперь я пишу программу как для передатчика, так и для приемника, чтобы просто отправить сообщение и получить ответ на сообщение. Как программы передатчика, так и программы приемника указаны ниже (программа работает, но не так, как я ожидал).
Передатчик
#include<RF24.h>
#include <nRF24L01.h>
#include<SPI.h>
const byte CEpin=9;
const byte CSNpin=10;
RF24 radio(CEpin,CSNpin);
const byte address[][6]={"000001","000002"};
char ack[30],buf[]="hi....How are you?";
bool x;
void setup() {
Serial.begin(9600);
radio.begin();
radio.openWritingPipe(address[1]);
radio.openReadingPipe(1,address[0]);
radio.setPayloadSize(30);
radio.setChannel(83);
radio.setDataRate(RF24_1MBPS);
radio.setPALevel(RF24_PA_HIGH);
}
void loop() {
delay(4);
radio.stopListening();
if(radio.write(buf,sizeof(buf)))
Serial.println("MSG sent successfully");
delay(6);
radio.startListening();
if(radio.available())
{
radio.read(ack,sizeof(ack));
Serial.println(ack);
}
}
Приемник
#include<SPI.h>
#include<RF24.h>
#include<nRF24L01.h>
const byte cepin=9;
const byte cspin=10;
RF24 mynrf(cepin,cspin);
const byte address[][6]={"000001","000002"};
char buf[50];
char response[]={"I'm fine"};
void setup() {
Serial.begin(9600);
mynrf.begin();
mynrf.openReadingPipe(1,address[0]);
mynrf.openWritingPipe(address[1]);
mynrf.setPayloadSize(30);
mynrf.setChannel(83);
}
void loop() {
delay(4);
mynrf.startListening();
if(mynrf.available())
{
mynrf.read(buf,sizeof(buf));
Serial.println(buf);
}
delay(6);
mynrf.stopListening();
if(mynrf.write(response,sizeof(response)))
Serial.println("response sent successfully\n\n\n");
}
Я столкнулся со множеством проблем
1.Без задержки() [delay(4);delay(6);] это не работает
2.С setPayloadSize() и setChannel() это не работает
3.Я не могу установить скорость передачи данных на уровне 250 Кбит / с и 2 Мбит / с, что означает, что setDataRate(RF24_1 Мбит / с) работает только
4.setPALevel(RF24_PA_HIGH) и setPALevel(RF24_PA_LOW) работают только
5.It также не дает результатов, как я ожидал. Я приложил скриншот моего вывода ниже ( COM5-передатчик, а COM4-приемник).
Последовательный выход монитора передатчика и приемника
Вот с какими проблемами я столкнулся. Может ли кто-нибудь это объяснить .
Пожалуйста, кто-нибудь может предложить мне лучшие учебные пособия и примеры для nrf24lo1 .
@nskaran, 👍0
1 ответ
Две вещи:
nRF24L01 является только полудуплексным. Вы не можете отправлять и получать одновременно. Вы должны отправить только краткое сообщение, а затем потратить некоторое время на прослушивание ответа. Без задержек нет времени слушать. Как будто он сидит там, заткнув уши пальцами и все время повторяя "ла-ла-ла-ла".
Ты все время пишешь "ответ" по спаму. Происходит та же ситуация. У вас есть два передатчика, которые редко что - либо слушают. Вы должны отправлять свой ответ только в том случае, если вы получили оригинальный запрос.
- вопрос по трубке nRF24L01
- Как подключить NodeMCU к NRF24L01
- Переключение каналов NRF24l01
- Использование функции уровня сигнала модуля nRF24L01
- Как автоматически сбросить nrf24l01+ с кодом?
- NRF24L01+ PA не работает с Arduino Mega (работает с Nano)
- Пустое значение не игнорируется, как должно быть.
- Не получаем данные от NRF24L01
Я не могу вас ясно расслышать..... пожалуйста, объясните вкратце, @nskaran
я думаю, что nRF24L01 может поддерживать полный дуплекс (двусторонняя связь)., @nskaran
Прочитайте свой код и следуйте его логическому ходу. Это очень ясно., @Majenko
Он может работать в двух направлениях, но не "полный дуплекс". Только "полудуплекс". Он может передавать и может принимать, но не может делать и то, и другое одновременно., @Majenko
@nskaran, как в "рации", или морской УКВ, или в любых других подобных системах. Следовательно, все человеческие протоколы выполняются для того, чтобы люди не разговаривали одновременно или в течение длительного времени., @timemage