Я использую библиотеку Radiohead в скетче Arduino для отправки и получения передач на 433,92 МГц. Скетч, который я использую, работает, и я могу отправлять и получать данные датчиков (температура, влажность), встроенные в строки символов «в эфире». Однако меня озадачивает деталь реализации.
Метод recv()
класса RH_ASK
для получения сообщений принимает два аргумента. Первый - это указатель на массив символов. Это понятно, поскольку сообщения отправляются и принимаются в виде массивов символов. Второй - длина массива. Это целочисленное число, которое также передается как указатель. Разве не удобнее отправить само целочисленное число, то есть передать по значению, а не по ссылке?
Вот соответствующий фрагмент кода, смоделированный по статье здесь .
Включите библиотеку, создайте экземпляр объекта-получателя и инициализируйте его.
// Include RadioHead Amplitude Shift Keying Library
#include <RH_ASK.h>
// Create Amplitude Shift Keying Object
RH_ASK rf_driver;
// Initialize ASK Object
rf_driver.init();
Получите поток символов в буфер, преобразуйте его в строку и проанализируйте показания датчика.
// Set buffer to size of expected message
uint8_t buf[11];
uint8_t buflen = sizeof(buf);
// Check if received packet is correct size
if (rf_driver.recv(buf, &buflen)) // Why &buflen and not simply buflen?
{
// Message received with valid checksum
// Get values from string
// Convert received data into string
str_out = String((char*)buf);
// Thereafter, parse the string to extract sensor readings,
// and print them out.
}
Я был бы признателен за любую помощь в понимании концепции передачи совершенно хорошего целого числа по ссылке вместо значения.