无法从Lora电台接收radiopacaket

时间:2019-04-02 17:02:52

标签: arduino arduino-uno uint8t lora lorawan

我无法从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();

它将打印新行,但不显示任何数据。它以前工作过,但是当我开始尝试调整电源时,它不再工作了,所以我尝试了其他方法。我是编码的新手,请不要小看,谢谢您能提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

您要将uint8_t转换为uint8_t*,这意味着您的 uninitalized 变量将用于指向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未初始化,并且可能包含值0。因此,您收到的数据存储在 地址0而不是变量的地址中,因此由于第一个指针问题,您的接收数据并未更改。