Отправка и получение нескольких значений переменных в одном сообщении
Добавлено: 25 май 2018, 11:50
Всем привет!!!
Не так давно озадачивался проблемой передачи значений нескольких переменных на контролер или с ноды на ноду. Помню помучился. Выделил код преобразований в отдельный тестовый скетч(для наглядности, см. в мониторе порта), выкладываю здесь, думаю кому нибудь пригодится обязательно. Если кто может предложить более оптимизированный код, прошу выложить сюда.
Не так давно озадачивался проблемой передачи значений нескольких переменных на контролер или с ноды на ноду. Помню помучился. Выделил код преобразований в отдельный тестовый скетч(для наглядности, см. в мониторе порта), выкладываю здесь, думаю кому нибудь пригодится обязательно. Если кто может предложить более оптимизированный код, прошу выложить сюда.
Код: Выделить всё
#define MY_RADIO_RF24
#define MY_DEBUG
#define TEST 200
static uint32_t update_timer;
static uint16_t update_interval = 15000;
byte s_a = 99;
byte s_b = 255;
byte d_a, d_b;
#include <MySensors.h>
MyMessage msg_t(TEST, V_VAR1);
void preHwInit()
{
}
void before()
{
}
void presentation()
{
sendSketchInfo("TEST_NODE", "1.1");
present(TEST, S_CUSTOM);
}
void setup() {
system("chcp 1251");
Serial.print("Переменная тип byte s_a: ");
Serial.println(s_a);
Serial.print("Переменная тип byte s_b: ");
Serial.println(s_b);
String A = (String(s_a) + "," + String(s_b));
Serial.print("Объединяем и переводим в String для передачи на контролер: ");
Serial.println(A);
int str_len = A.length() + 1;
Serial.print("Вычисляем длину строки +1(признак завершения строки): ");
Serial.println(str_len);
char my_sA[str_len];
A.toCharArray(my_sA, str_len);
Serial.print("Конвертируем строку в массив соответсвующей длинны: ");
Serial.println( my_sA );
Serial.println("Отправляем на контролер: ");
send(msg_t.set(my_sA));
}
void loop()
{
if (millis() - update_timer > update_interval) {
update_timer = millis();
Serial.println("Делаем запрос на контролер значения сенсора: ");
request(TEST, V_VAR1);
wait(2000, TEST, V_VAR1);
}
}
void receive(const MyMessage & message) {
if (mGetCommand(message) == C_SET) {
if (message.sensor == TEST) {
if (message.type == V_VAR1) {
String B = message.getString();
Serial.print("Полученное от контролера значение String: ");
Serial.println(B);
int str_len = B.length() + 1;
char my_sB[str_len];
B.toCharArray(my_sB, str_len);
d_a = atoi(strtok(my_sB, ","));
d_b = atoi(strtok(NULL, ","));
Serial.println("Разбираем принятую строку String на переменные: ");
Serial.print("Переменная тип byte d_a: ");
Serial.println(d_a);
Serial.print("Переменная тип byte d_b: ");
Serial.println(d_b);
}
}
}
}