RA-02 SX1278 LoRa странное поведение при выводе данных

Вчера я начал работать с моими модулями LoRa на Arduino. Я использовал примеры эскизов, чтобы понять, как они работают. Теперь я хочу проверить полученные значения, чтобы сделать определенные вещи, такие как включение и выключение светодиодов.

Моя проблема в том, что полученные значения верны с исходным эскизом библиотеки 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.

Я надеюсь, что вы можете оказать мне некоторую конструктивную помощь или хотя бы намеки, как я мог бы сделать эту работу.

1 ответ

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

Вы печатаете char, не десятичное значение. Так что да, ожидайте иметь странные однобайтовые символы.

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

Даст вам преимущество.

Другие вопросы по тегам