Что делать, когда Arduino отправляет пустой ArrayBuffer в NW. js? - PullRequest
1 голос
/ 22 февраля 2020

Я играл с емкостным сенсорным датчиком MPR121 от Adafruit. В IDE Arduino есть пример кода, который вы можете просто загрузить и запустить, и он отлично работает: когда я касаюсь, например, контакта 11, он возвращает «11 касался», а когда я отпускаю его, он возвращает '11 нажата ''. Отлично!

Теперь проблема возникает, когда я пытаюсь передать эти данные в NW. js. Используя последовательный порт Chrome в NW. js, я могу подключиться к порту, к которому подключен мой Arduino, и попытаться прочитать любые данные, которые посылает Arduino. Однако, когда я пытаюсь прочитать данные, единственное, что я получаю, это ArrayBuffer, заполненный байтами 0. Я действительно не уверен, что здесь происходит, так как оба устройства работают отлично, когда я запускаю его в IDE Arduino, но он возвращает в основном ничего с chrome .serialport.

У кого-нибудь есть совет или представление о том, что здесь происходит? Если я делаю console.log (info.data), я получаю ArrayBuffer только с пустыми прикусами.

Спасибо

Вот мой код:

const ab2str = require('arraybuffer-to-string');

nw.Window.get().showDevTools();

let buffer = "";

chrome.serial.getDevices(devices => {
  devices.forEach(device => console.log(device));
});

// let port = "COM3";
let port = "/dev/cu.usbmodem142401";

chrome.serial.connect(port, {bitrate: 1000000}, () => {
  console.log("Serialport connected:" + port);
  chrome.serial.onReceive.addListener(onDataReceived);
});

function onDataReceived(info) {

  let lines = ab2str(info.data).split("\n");
  lines[0] = buffer + lines[0];
  buffer = lines.pop();

  lines.forEach(line => {
    const [type, value] = line.split("=");
    console.log(type, value);
  });

}

1 Ответ

0 голосов
/ 22 февраля 2020

Скорость передачи Tx и Rx должна быть одинаковой для правильного декодирования информации, и arduino IDE обрабатывает это для вас в первом случае, но вам нужно будет обработать это вручную для второго случая. При передаче через последовательный порт один бит передается за раз, в отличие от параллельных портов, где вам будут доступны все биты одновременно для чтения. Таким образом, в последовательных портах скорость передачи информации (Tx) должна быть такой же, как скорость получения информации (Rx), в противном случае биты могут быть потеряны, и вы можете получить неверную информацию. IDE arduino решает большинство этих проблем за вас, если я не ошибаюсь, IDE позволяет вам изменять скорость передачи, но по умолчанию 9600.

...