Проблемы с получением радиопакета от радио Лора - PullRequest
1 голос
/ 02 апреля 2019

Я не могу получить отправленный радиопакет от трансивера 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 голосов
/ 21 июня 2019

Вы конвертируете uint8_t в uint8_t*, это означает, что ваша неинициализированная переменная 1004 * будет использоваться для указания места, где 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 вместо адреса переменной и поэтому не были изменены вашим получателем из-за проблемы с первым указателем.

...