Шум в передатчике и приемнике RF 434

Я работаю над модулями радиочастотного передатчика и приемника, используя два Arduino UNO. Я получаю дополнительный шум на стороне приемника в serial.println. Чтобы было понятнее вопрос. Вот мой код передатчика

// Включить библиотеку амплитудной манипуляции RadioHead
#include <RH_ASK.h>
// Включить зависимую библиотеку SPI
#include <SPI.h> 
 
// Создать объект амплитудной манипуляции
RH_ASK rf_driver;
 
void setup()
{
    // Инициализировать объект ASK
    rf_driver.init();
    Serial.begin(9600);
}
 
void loop()
{
  
    const char *msg = "Hello World";
    rf_driver.send((uint8_t *)msg, strlen(msg));
    rf_driver.waitPacketSent();
    Serial.println((char *)msg);
    delay(1000);
}

Вот мой код получателя

// Включить библиотеку амплитудной манипуляции RadioHead
#include <RH_ASK.h>
// Включить зависимую библиотеку SPI
#include <SPI.h> 
 
// Создать объект амплитудной манипуляции
RH_ASK rf_driver;
 
void setup()
{
    // Инициализировать объект ASK
    rf_driver.init();
    // Настройка последовательного монитора
    Serial.begin(9600);
}
 
void loop()
{
    // Устанавливаем буфер в размер ожидаемого сообщения
    uint8_t buf[11];
    uint8_t buflen = sizeof(buf);
    // Проверяем , правильный ли размер полученного пакета
    if (rf_driver.recv(buf, &buflen))
    {
      
      // Получено сообщение с корректной контрольной суммой
      Serial.print("Message Received: ");
      Serial.println((char*)buf);         
    }
}

А вот мой последовательный монитор на стороне приемника

Итак, может ли кто-нибудь помочь мне разобраться с этой проблемой

, 👍1


1 ответ


Лучший ответ:

1

Вы обрабатываете необработанный буфер как строку.

В C строка представляет собой массив символов (11 в вашем случае), заканчивающийся символом NULL. Вы получаете 11 байтов в виде 11-байтового массива, а затем пытаетесь распечатать его - без каких-либо завершающих символов - поэтому вывод "переполняется"; в память после вашего массива.

Вам нужен буфер размером 12 байтов, а не 11, и вы должны убедиться, что 12-й байт (байт номер 11) равен нулю.

Или используйте функцию Serial.write(buf, buflen);, чтобы записать ровно 11 байт в серийный номер.

,