Шум в передатчике и приемнике 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);
}
}
А вот мой последовательный монитор на стороне приемника
Итак, может ли кто-нибудь помочь мне разобраться с этой проблемой
@Vishnu Vardhan, 👍1
1 ответ
Лучший ответ:
Вы обрабатываете необработанный буфер как строку.
В C строка представляет собой массив символов (11 в вашем случае), заканчивающийся символом NULL. Вы получаете 11 байтов в виде 11-байтового массива, а затем пытаетесь распечатать его - без каких-либо завершающих символов - поэтому вывод "переполняется"; в память после вашего массива.
Вам нужен буфер размером 12 байтов, а не 11, и вы должны убедиться, что 12-й байт (байт номер 11) равен нулю.
Или используйте функцию Serial.write(buf, buflen);
, чтобы записать ровно 11 байт в серийный номер.
- nRF24L01 + потеря пакетов, вызванная считыванием Arduino и связью с датчиками
- Код приемника RF 433 МГц работает только после сброса Arduino.
- Проблемы Serial.write и Serial.read
- Обработка данных, полученных по последовательному каналу
- Основная связь Arduino ModBus RTU с проблемой измерителя мощности
- Отправка значения с одного Arduino на другой
- Связь Arduino master/slave с использованием RS485
- Клиент MQTT на Arduino + SIM900