Не так давно озадачивался проблемой передачи значений нескольких переменных на контролер или с ноды на ноду. Помню помучился. Выделил код преобразований в отдельный тестовый скетч(для наглядности, см. в мониторе порта), выкладываю здесь, думаю кому нибудь пригодится обязательно. Если кто может предложить более оптимизированный код, прошу выложить сюда.
Код: Выделить всё
#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);
}
}
}
}