Плохие данные, полученные из последовательного порта 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 на доску последовательных сообщений компьютера (или как вы хотите ее называть).