Здравствуйте и спасибо заранее за любую помощь.У меня есть приложение, которое считывает значения скорости, числа оборотов и скорости передачи с BeamNG Drive, и Serial печатает их на COM-порт.Он работает в цикле, разделяя значения с помощью конечных байтов.
RPM_END_BYTE = '+';
SPEED_END_BYTE = '=';
GEAR_END_BYTE = '!';
Используя эти конечные байты, мне интересно, как в arduino разделить входные данные на три строки.Я могу либо получить их непосредственно в целое число, либо использовать string.toInt();
для его преобразования.Вот как выглядит один цикл последовательного вывода программы:
02500+120=6!
Я установил виртуальный COM-порт на своем ПК, чтобы проверить, работает ли программное обеспечение, и оно работает, однако я не могу этого сделатьвыяснить, как разделить входные данные.
Я также использовал следующий код, который работает, когда я ввожу числа через последовательный монитор и оканчиваю его на «+», но он не работает с моим программным обеспечением вТочно так же.
const byte numChars = 32;
char receivedChars[numChars]; // an array to store the received data
#include <LiquidCrystal.h>
boolean newData = false;
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
}
void loop() {
recvWithEndMarker();
showNewData();
}
void recvWithEndMarker() {
static byte ndx = 0;
char endMarker = '+';
char rc;
while (Serial.available() > 0 && newData == false) {
rc = Serial.read();
if (rc != endMarker) {
receivedChars[ndx] = rc;
ndx++;
if (ndx >= numChars) {
ndx = numChars - 1;
}
}
else {
receivedChars[ndx] = '+'; // terminate the string
ndx = 0;
newData = true;
}
}
}
void showNewData() {
if (newData == true) {
lcd.setCursor(0, 1);
lcd.clear();
lcd.print(receivedChars);
newData = false;
}
Большое спасибо всем, кто может помочь.Я прошу прощения, если подобный вопрос уже задавался, но я не могу найти тот.