Node.js не может распознавать символы из последовательного порта
Следующий скрипт печатает все нормально, он распознает целые числа из последовательного порта, но не может распознавать символы. Оператор if не работает с символами. Я пробовал как ==, так и === в операторе if
var SerialPort = require('serialport')
var Readline = SerialPort.parsers.Readline
var serialPort = new SerialPort('/dev/ttyAMA0', {//ttyAMA0
baudRate: 9600
})
var parser = new Readline()
serialPort.pipe(parser)
parser.on('data', function (data) {
if(data === 'c'){/// c не распознается
console.log('data received: ' + data)
}
})
serialPort.on('open', function () {
console.log('Communication is on!')
})
Код Arduino выглядит следующим образом:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(12, 13); // прием, передача
int x = 0;
int y = -30000;
int z = 0;
String data;
char command = 'q';
int left = 0;
int right = 0;
int left_pwm = 0;
int right_pwm = 0;
void setup() {
mySerial.begin(9600); // открывает последовательный порт, устанавливает скорость передачи данных 9600 бит/с
Serial.begin(9600);
}
void loop() {//данные карты и компаса
if (y==30000) {
mySerial.println('c');
delay(5);
mySerial.println(299);
delay(5);
z = -25000;
}
if(z==30000){
mySerial.println('lon');
delay(5);
mySerial.println(529);
delay(5);
mySerial.println('lat');
delay(5);
mySerial.println(522);
y = -30000;
}
y++; z++;
if (!mySerial.available()) {
return;
}
data = mySerial.readString();
sscanf(data.c_str(), "%c%01d%01d%03d,%03d", &command, &left, &right, &left_pwm, &right_pwm);
if (command == 'n') { // мы получили команду навигации
// соответствующим образом обновить GPIO, это происходит только один раз после получения новой команды 'n'
Serial.print(command);
Serial.print(left);
Serial.print(right);
Serial.print(left_pwm);
Serial.print(",");
Serial.println(right_pwm);
}
}////конец цикла
@Harry Hobson, 👍1
Обсуждение1 ответ
Лучший ответ:
▲ 0
Если вы используете анализатор строк в Nodejs, он не удаляет все символы конца строки. Я думаю (хотя сейчас не могу это привести), что из строки удаляется только символ 'ņ'
. Но Serial.println()
отправляет "\r\n"
в качестве конца строки. Это означает, что ваша строка "c\r", которая не равна "c".
Используя метод trim()
типа String, вы можете удалить все пробелы в начале и в конце строки, включая символы конца строки, такие как '\r'
.
,
@chrisl
Смотрите также:
- Команда strtok() с Serial связью
- Как связаться с ESP8266 ESP01, отправив данные через программный сериал на Arduino Uno?
- Как изменить переменную при нажатии кнопки, подключенной к контакту 2
- Arduino синтаксический анализ строки с использованием sscanf
- Как программно обнаружить последовательный порт Arduino на разных платформах?
- Java NetBeans отправляет значение и получает значение от Arduino
- Почему нужно использовать latin-1 вместо utf-8 при использовании python с arduino?
- Чтение последовательных данных с Arduino с помощью кода C
почему эта команда не перед оператором
if
?console.log('данные получены: ' + данные)
, @jsotolaВы пытались обрезать «данные» из всего пробела?, @chrisl
Журнал консоли @jsotola сообщает мне, что оператор if не работает., @Harry Hobson
@chrisl данные = data.trim(); Бинго, Спасибо!, @Harry Hobson
@HarryHobson, журнал консоли внутри оператора
if
не позволяет вам увидеть, какие данные были получены ... это плохая процедура отладки, @jsotola