Связь Arduino по схеме «точка-точка» с RFM LoRa Shield

В < a href="https://cytrontechnologies.github.io/RFM-LoRa-Shield-Examples/Arduino-Sketches-Overview/">этом руководстве он отправляет строку из одного узла в другой узел. Но если я хочу отправить целое число вместо строки, как мне изменить код?

Serial.println("Sending to rf95_server");
// Отправить сообщение на rf95_server

String radiopacket = "Hello World #";
radiopacket += String(packetnum++);
radiopacket += " from ";
radiopacket += node_id;

Serial.print("Sending "); Serial.println(radiopacket); delay(10);
rf95.send((uint8_t*)radiopacket.c_str(), radiopacket.length()+1);

Serial.println("Waiting for packet to complete..."); delay(10);
rf95.waitPacketSent();

, 👍1

Обсуждение

Вы можете либо преобразовать его в текст (sprintf), либо отправить его в виде байтов. Как вам нравится. Как вы *хотите* его отправить?, @Majenko

Я хочу отправить данные, полученные с ультразвукового датчика. Как отправить данные в виде байта? Извините, я новичок в программировании., @Kelvin Chai

Я могу сказать... Данные — это просто данные, будь то строка или число. Это просто данные. int — это всего лишь два байта. Вы можете отправить его, приведя его к типу bytes (как вы уже делаете с существующим кодом) с размером 2 байта. Просто помните, что приводить его нужно с использованием адреса целого числа, а не его значения., @Majenko


2 ответа


1

Самый простой способ — просто преобразовать целое число в массив из 2 байтов и отправить его. Предположим, что int temperature:

rf95.send((uint8_t *)&temperature, 2);

Чтобы сделать его более переносимым, вы можете использовать размер целого числа вместо 2:

rf95.send((uint8_t *)&temperature, sizeof(int));

При обратном считывании вы просто преобразуете полученный буфер в целое число или объединяете данные вручную (что может быть безопаснее, поскольку буфер может быть не выровнен на более мощной системе, чем 8-битный Arduino):

int temperature = buf[0] | (buf[1] << 8);

(Предполагается, что он был отправлен из прямоугольной 8-битной системы).

Если вы хотите отправить число в виде обычного текста, чтобы его мог легко прочитать человек, вам нужно вывести его в строку:

char temp[6];
sprintf(temp, "%d", temperature);
rf95.send((uint8_t *)temp, strlen(temp));
,

0

Просто приведите целое число к строке перед отправкой и преобразуйте строку обратно в int при получении. Может быть не очень удобно для памяти, учитывая, что вы используете строки, но это очень просто.

int a = 10;
String s = String(a);

Затем вы можете отправить строку, как обычную строку. Затем на принимающей стороне вы преобразуете ее обратно в int.

Предполагаем, что вы получили строку s.

int b = s.toInt();
,