ZnPPt 2023-02-25 16:42 采纳率: 0%
浏览 54
已结题

Arduino连接nRF24L01,接收端串口监视器一直滚动但就是没数据,咋回事呢?

发送端代码:


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

RF24 radio(8, 10); // CE, CSN
const byte address[6] = "00001";
int greenPin = 6;//我连了一个LED,用于监测发送端数据是否发出去了。
float greenLEDVal;

void setup() {
  
  greenLEDVal = 5.;
  pinMode(greenPin, OUTPUT);

  radio.begin();
  radio.openWritingPipe(address);
  radio.setPALevel(RF24_PA_HIGH);
  radio.setDataRate(RF24_250KBPS);
  radio.setRetries(15, 15); 
  radio.stopListening();
}

void loop() {
  bool txan;
  const char text[4] = "Hel";
  txan = radio.write(&text, sizeof(text));
  delay(1000);
  if(txan)
    analogWrite(greenPin, greenLEDVal);
  else
    analogWrite(greenPin, 0.);
}

接收端代码:


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

RF24 radio(8, 10); // CE, CSN
const byte address[6] = "00002";
const char text[4];

void setup() {
  Serial.begin(115200);
  radio.begin();
  radio.setPayloadSize(sizeof(text));
  radio.openReadingPipe(1, address);
  radio.setPALevel(RF24_PA_HIGH);
  radio.setDataRate(RF24_250KBPS);
  radio.setRetries(15, 15);
  radio.startListening();
}

void loop() {

  uint8_t pipeNum;
  if (radio.available(&pipeNum)) {
    Serial.print("Received data on pipe ");
    Serial.println(pipeNum);

    uint8_t bytes = radio.getPayloadSize();
    radio.read(&text, bytes);
    Serial.println(text);

//    radio.flush_rx();
  }
}

运行结果就是发送端LED灯亮着,接收端串口监视器一直无规律滚动Received data on pipe 0/1/3/4,此外每2行中间还有1行空行。

img

  • 写回答

6条回答 默认 最新

  • MarkHan_ 2023-02-25 16:49
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ
    问题可能是您的接收端代码没有正确地接收和处理数据。在接收数据之前,您应该先声明一个缓冲区来存储接收到的数据。在您的接收端代码中,您没有声明一个缓冲区来存储接收到的数据,而是直接使用了一个未初始化的字符数组 text。此外,您需要在接收到数据后将缓冲区转换为字符串,并输出到串口监视器中。

    以下是修改后的接收端代码:

    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>
    
    RF24 radio(8, 10); // CE, CSN
    const byte address[6] = "00002";
    char text[32];
    
    void setup() {
      Serial.begin(115200);
      radio.begin();
      radio.setPayloadSize(sizeof(text));
      radio.openReadingPipe(1, address);
      radio.setPALevel(RF24_PA_HIGH);
      radio.setDataRate(RF24_250KBPS);
      radio.setRetries(15, 15);
      radio.startListening();
    }
    
    void loop() {
      uint8_t pipeNum;
      if (radio.available(&pipeNum)) {
        Serial.print("Received data on pipe ");
        Serial.println(pipeNum);
    
        uint8_t bytes = radio.getPayloadSize();
        radio.read(&text, bytes);
        text[bytes] = '\0'; // Add null terminator to convert buffer to string
        Serial.println(text);
      }
    }
    
    
    

    请注意,我将字符数组 text 的大小更改为 32,以便容纳可能更长的消息。我还添加了一个空字符到缓冲区的末尾,以便在输出到串口监视器时将其转换为字符串。

    您应该尝试重新编译和上传修改后的接收端代码,并确保发送端和接收端使用相同的地址。如果问题仍然存在,请检查您的硬件连接和配置,以确保所有设置正确。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 3月5日
  • 创建了问题 2月25日

悬赏问题

  • ¥15 lvgl v8.2定时器提前到来
  • ¥15 qtcp 发送数据时偶尔会遇到发送数据失败?用的MSVC编译器(标签-qt|关键词-tcp)
  • ¥15 cam_lidar_calibration报错
  • ¥15 拓扑学,凸集,紧集。。
  • ¥15 如何扩大AIS数据容量
  • ¥15 单纯型python实现编译报错
  • ¥15 c++2013读写oracle
  • ¥15 c++ gmssl sm2验签demo
  • ¥15 关于模的完全剩余系(关键词-数学方法)
  • ¥15 有没有人懂这个博图程序怎么写,还要跟SFB连接,真的不会,求帮助