C_REQ | request | Прямой запрос данных одной нодой у другой через Реквест | Прямая отправка данных

О программировании Arduino, использование библиотек, примеры и общие вопросы программирования.
Ответить
Berk
Сообщения: 81
Зарегистрирован: 11 окт 2017, 22:05

C_REQ | request | Прямой запрос данных одной нодой у другой через Реквест | Прямая отправка данных

Сообщение Berk »

Меня спросили как...

Скетч запрашивающей ноды

Код: Выделить всё

#define MY_RADIO_RF24
#define MY_DEBUG
#define MAGIC_SENSOR 5
#define SENDER_NODE 10
byte magic;
byte mem_parent_id;
static uint32_t reset_timer;
static uint16_t reset_interval = 5000;  // Интервал опроса удаленной ноды
#include <MySensors.h>


void preHwInit()
{
}


void before()
{
}


void presentation()
{
  sendSketchInfo("TEST_NODE_D", "1.1");
}


void setup() {
  mem_parent_id = _transportConfig.parentNodeId;
  reset_timer = millis();
}


void loop()
{
  if (millis() - reset_timer > reset_interval) {
    reset_timer = millis();
    _transportConfig.parentNodeId = SENDER_NODE;
    request(MAGIC_SENSOR, V_VAR1, SENDER_NODE);
    _transportConfig.parentNodeId = mem_parent_id;
    wait(2000, C_SET, V_VAR1);
  }
}


void receive(const MyMessage &message)
{
  if (message.sender == SENDER_NODE) {
    if (message.sensor == MAGIC_SENSOR) {
      if (message.type == V_VAR1) {
        magic = message.getByte();
        CORE_DEBUG(PSTR("MyS: DELIVEED MAGIC: %d\n"), magic);
      }
    }
  }
}
Скетч ноды отправителя

Код: Выделить всё

#define MY_RADIO_RF24
#define MY_DEBUG
#define MAGIC_SENSOR 5
#include <MySensors.h>
byte magic = 5;
byte mem_parent_id;
MyMessage MsgMagic(MAGIC_SENSOR, V_VAR1);


void preHwInit()
{
}


void before()
{
}


void presentation()
{
  sendSketchInfo("TEST_NODE_S", "1.1");
}


void setup() {
  mem_parent_id = _transportConfig.parentNodeId;
}


void loop()
{

}


void receive(const MyMessage &message)
{
  if (mGetCommand(message) == C_REQ) {
    if (message.sensor == MAGIC_SENSOR) {
      if (message.type == V_VAR1) {
        _transportConfig.parentNodeId = message.sender;
        send(MsgMagic.setDestination(message.sender).set(magic));
        _transportConfig.parentNodeId = mem_parent_id;
        if (magic == 255) {
          magic = 0;
        } else {
          magic = magic + 5;
        }
      }
    }
  }
cabat
Сообщения: 6
Зарегистрирован: 09 янв 2018, 10:08

Re: C_REQ | request | Прямой запрос данных одной нодой у другой через Реквест | Прямая отправка данных

Сообщение cabat »

Здорово - в данном случае имелось в смысле "отлично" :)
Berk
Сообщения: 81
Зарегистрирован: 11 окт 2017, 22:05

Re: C_REQ | request | Прямой запрос данных одной нодой у другой через Реквест | Прямая отправка данных

Сообщение Berk »

"Здорово, всегда пожалуйста :)" = Согласен, не плохо, с радостью готов и дальше делится наработками :)
Ответить