1

我无法接收从 Lora rf95 收发器发送的无线电数据包。

我尝试将接收到的数组声明为 char、uint8_t 以及使用 len 作为大小,但是大小为 7,所以我认为我所做的没问题。我使用时它没有收到任何东西:

uint8_t buf[RH_RF95_MAX_MESSAGE_LEN];
    uint8_t len = sizeof(buf);

    if (rf95.recv(buf, &len))
    {
      digitalWrite(LED, HIGH);
      RH_RF95::printBuffer("Received: ", buf, len);
      Serial.print("Got: ");
      Serial.println((char*)buf);}

当我使用时,它确实以与收发器相同的速率接收一些东西:

uint8_t P;

if(rf95.recv((uint8_t*)P,7)){

  Serial.print((char)P);
Serial.println();

它打印新行但没有数据。它以前可以工作,但是当我开始尝试调整功率时,它不再起作用,所以我尝试了其他方法。我是编码新手,所以请不要吝啬,感谢您提供的任何帮助。

4

1 回答 1

0

您将 a 转换uint8_t为 auint8_t*这意味着您的未初始化变量将用于指向rf95.recv将开始存储其数据的位置。这意味着它是否P = 5将从内存位置开始5并且是否P = 0会产生一个null指针。

您应该做的是获取P:的地址rf95.recv(&P,7))

因此,这些行应该是:

rf95.recv(&buf, &len)

RH_RF95::printBuffer("Received: ", &buf, len);

Serial.println(buf[0]); 甚至更好:

for(uint8_t i = 0; i<len; ++i) {
    Serial.println(buf[i]);
}

您的第二个代码块没有打印出任何数据,因为P未初始化并且可能包含 value 0。因此,您收到的数据存储地址0而不是变量的地址,因此由于第一个指针问题,您的接收没有更改。

于 2019-06-21T10:04:57.900 回答