0

昨天我开始在 Arduino 上使用我的 LoRa 模块。我使用示例草图来了解它们是如何工作的。现在我想检查接收到的值来做某些事情,比如打开和关闭 LED。

我的问题是接收到的值对于 LoRa 库的原始示例草图是正确的,但是一旦我尝试将它们存储在变量中,它们就开始不正确。

这是我为获取接收值而编写的代码。

#include <SPI.h>
#include <LoRa.h>

void setup() {
  Serial.begin(9600);
  while (!Serial);
  Serial.println("LoRa Receiver");

  if (!LoRa.begin(433E6)) {
    Serial.println("Starting LoRa failed!");
    while (1);
  }
}

void loop() {
  // try to parse packet
  int packetSize = LoRa.parsePacket();

  if (packetSize) {
    // received a packet
    Serial.print("Received packet '");
    byte buffer[packetSize];
    int index = 0;
    // read packet

    while (LoRa.available()) {
      Serial.println((char)LoRa.read());
      buffer[index] = LoRa.read();
      index++;
    }
    char result = char(buffer);
    Serial.println(result);
  }
}

注意:不是我的代码的所有内容。我部分采用了示例草图来帮助我。

控制台输出如下所示:

Received packet '3' with RSSI -73
⸮
Received packet '4' with RSSI -85
⸮
Received packet '5' with RSSI -84
⸮
...
Received packet '8' with RSSI -83
⸮
Received packet '9' with RSSI -83
⸮
Received packet '1' with RSSI -82
⸮

发件人没有做任何特别的事情,只是数到 16,然后从头开始。这只是一项非常基本的任务,但由于我对这项技术不是很熟悉,所以我不明白如何让它发挥作用。这意味着我得到值而不是'?'。第二个问题是大于 10 的数字会缩小为 1。

我希望您能给我一些建设性的帮助,或者至少提示我如何完成这项工作。

4

1 回答 1

0
char result = char(buffer);
Serial.println(result);

您正在打印一个char,而不是十进制值。所以,是的,期望有单字节奇怪的字符。

uint8_t result = char(buffer);
Serial.println(result);

会给你一个良好的开端。

于 2017-12-26T04:41:45.030 回答