Связь 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();
@Kelvin Chai, 👍1
Обсуждение2 ответа
Самый простой способ — просто преобразовать целое число в массив из 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));
Просто приведите целое число к строке перед отправкой и преобразуйте строку обратно в int при получении. Может быть не очень удобно для памяти, учитывая, что вы используете строки, но это очень просто.
int a = 10;
String s = String(a);
Затем вы можете отправить строку, как обычную строку. Затем на принимающей стороне вы преобразуете ее обратно в int.
Предполагаем, что вы получили строку s.
int b = s.toInt();
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Вы можете либо преобразовать его в текст (sprintf), либо отправить его в виде байтов. Как вам нравится. Как вы *хотите* его отправить?, @Majenko
Я хочу отправить данные, полученные с ультразвукового датчика. Как отправить данные в виде байта? Извините, я новичок в программировании., @Kelvin Chai
Я могу сказать... Данные — это просто данные, будь то строка или число. Это просто данные.
int
— это всего лишь два байта. Вы можете отправить его, приведя его к типу bytes (как вы уже делаете с существующим кодом) с размером 2 байта. Просто помните, что приводить его нужно с использованием адреса целого числа, а не его значения., @Majenko