我无法从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();
它将打印新行,但不显示任何数据。它以前工作过,但是当我开始尝试调整电源时,它不再工作了,所以我尝试了其他方法。我是编码的新手,请不要小看,谢谢您能提供的任何帮助。
答案 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
而不是变量的地址中,因此由于第一个指针问题,您的接收数据并未更改。