Плохие данные, полученные из последовательного порта Arduino при чтении с аналогового порта

Может быть, это просто чепуха, но она сводит меня с ума. Я пытаюсь прочитать один аналоговый порт в Arduino и отправить значение через последовательный порт в JavaScript, используя узел. Когда я показываю данные в консоли Arduino, все работает нормально, но когда я использую терминал в Mac, некоторые значения отображаются разделенными на две строки.

460
460
4
60
460

Код, который я использую:

Arduino:

const int analogInPin = A0;
int sensorValue = 0;

void setup() {
  Serial.begin(500000);
}

void loop() {
  sensorValue = analogRead(analogInPin);
  Serial.print(sensorValue);
  delay(200);
}

Узел:

var com = require('serialport').SerialPort;

var opts = {baudrate: 500000};

var serialPort = new com('/dev/tty.usbmodem641', opts);

serialPort.on('data', function(data) {
  console.log(data.toString());
});

Код не может быть проще, но все равно не работает должным образом. Я знаю, что что-то упустил, но не вижу этого. Я тестировал разные скорости, но ничего не работает. Не могли бы вы мне помочь?

заранее спасибо

2 ответа

Решение

Я думаю, что, может быть, Elias Benevedes пытается предложить это в своем ответе: сейчас ваши данные Arduino вообще не разграничены. Предположим, ваш sensorValue всегда читается как 1, В этом случае выход Arduino будет

11111111111111111111111111111111111111111111111111111111111....

И так далее; потому что вы печатаете целочисленное значение без разделителей. Таким образом, способ, которым он разбирается на разные числа, связан со сроками поступления данных. Продолжая с примером выше, иногда ваше значение читается как 1иногда как 11иногда как 111 и так далее, только в зависимости от времени чтения и записи.

Чтобы начать это исправлять, нужно вставить нечисловые данные между выводом показаний датчика. Один (опять же, это, возможно, то, что имеет в виду Elias Benevedes) - вставить разрывы строк между каждым напечатанным номером.

 Serial.println(sensorValue);

Другим способом было бы добавить пробелы между данными

 Serial.print(sensorValue);
 Serial.print(" ");

Любое решение будет отделять ваши числовые показания друг от друга, что вы хотите.

У меня это тоже было однажды. Serial.print() отправляет данные в arduino. Serial.println() отправит информацию из arduino на доску последовательных сообщений компьютера (или как вы хотите ее называть).

Другие вопросы по тегам