Как отправить несколько команд на маршрутизатор xbee за один пакет передачи данных, используя arduino uno - PullRequest
1 голос
/ 28 мая 2019

Мне было интересно, смогу ли я управлять несколькими выводами ввода-вывода на xbee удаленно с помощью одной команды от координатора.

Я могу легко отправить один или несколько пинов ввода / вывода, как показано ниже

xB.write((byte)0x7E);
xB.write((byte)0x0);
xB.write((byte)0x10);
xB.write((byte)0x17);
xB.write((byte)0x0);  // Frame ID
xB.write((byte)0x00); // first byte
xB.write((byte)0x13); // 2
xB.write((byte)0xA2); // 3
xB.write((byte)0x00); // 4
xB.write(addy5); // 5
xB.write(addy6); // 6
xB.write(addy7); // 7
xB.write(addy8);// 8
xB.write((byte)0xFF);
xB.write((byte)0xFE);
xB.write((byte)0x02);
xB.write('D');
xB.write('0');
xB.write(val);
long sum = 0x17 + 0x13 + 0xA2 + addy5 + addy6 + addy7 + addy8 + 0xFF + 0xFE + 0x02 + 'D' + '0' + val;
xB.write((byte)0xFF - (sum & 0xFF));

Но я не могу отправить более одной смены цифрового пина одновременно, как это.

xB.write((byte)0x7E);
xB.write((byte)0x0);
xB.write((byte)0x1F);
xB.write((byte)0x17);
xB.write((byte)0x0);  // Frame ID
xB.write((byte)0x00); // first byte
xB.write((byte)0x13); // 2
xB.write((byte)0xA2); // 3
xB.write((byte)0x00); // 4
xB.write(addy5); // 5
xB.write(addy6); // 6
xB.write(addy7); // 7
xB.write(addy8);// 8
xB.write((byte)0xFF); // "10"67
xB.write((byte)0xFE);// 10"66"
xB.write((byte)0x02);

xB.write('D');
xB.write('1');
xB.write(bin[0]);

xB.write('D');
xB.write('0');
xB.write(bin[1]);

xB.write('D');
xB.write('2');
xB.write(bin[2]);

xB.write('D');
xB.write('3');
xB.write(bin[3]);

xB.write('D');
xB.write('5');
xB.write(bin[4]);

xB.write('D');
xB.write('4');
xB.write(bin[5]);

long sum = 0x17 + 0x13 + 0xA2 + addy5 + addy6 + addy7 + addy8 + 0xFF + 0xFE + 0x02 + 'D' + '1' + bin[0] + 'D' + '0' + bin[1] + 'D' + '2' + bin[2] + 'D' + '3' + bin[3] + 'D' + '5' + bin[4] + 'D' + '4' + bin[5];
xB.write((byte)0xFF - (sum & 0xFF));

Что я могу делать не так?Спасибо!

1 Ответ

0 голосов
/ 28 мая 2019

Как видно из справочника API для Командного фрейма Remote AT , байты после команды (D0) являются значением для этой команды. Модуль XBee не имеет типа фрейма для нескольких AT-команд, но вы можете отправить серию команд из очереди, и все они будут применены сразу, когда вы установите бит «Применить изменения» в поле options.

Таким образом, когда вы отправляете 0x02 прямо перед AT-командой, вы отправляете 0x00 для команд, которые вы хотите поставить в очередь, и отправляете только 0x02 в последней команде, чтобы она применила все меняется сразу.

Кроме того, рассмотрите возможность написания некоторых подпрограмм, чтобы упростить отправку кадров. Например, одна функция, которая получает указатель на буфер с длиной, может автоматически отправлять начало кадра (0x7E 0x00 <length>) и вычисленный байт контрольной суммы в конце кадра.

...