Проблема программирования 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 .

, 👍0


1 ответ


1

Две вещи:

  1. nRF24L01 является только полудуплексным. Вы не можете отправлять и получать одновременно. Вы должны отправить только краткое сообщение, а затем потратить некоторое время на прослушивание ответа. Без задержек нет времени слушать. Как будто он сидит там, заткнув уши пальцами и все время повторяя "ла-ла-ла-ла".

  2. Ты все время пишешь "ответ" по спаму. Происходит та же ситуация. У вас есть два передатчика, которые редко что - либо слушают. Вы должны отправлять свой ответ только в том случае, если вы получили оригинальный запрос.

,

Я не могу вас ясно расслышать..... пожалуйста, объясните вкратце, @nskaran

я думаю, что nRF24L01 может поддерживать полный дуплекс (двусторонняя связь)., @nskaran

Прочитайте свой код и следуйте его логическому ходу. Это очень ясно., @Majenko

Он может работать в двух направлениях, но не "полный дуплекс". Только "полудуплекс". Он может передавать и может принимать, но не может делать и то, и другое одновременно., @Majenko

@nskaran, как в "рации", или морской УКВ, или в любых других подобных системах. Следовательно, все человеческие протоколы выполняются для того, чтобы люди не разговаривали одновременно или в течение длительного времени., @timemage