Во-первых, не беспокойтесь об их объединении на стороне обработки. Отправка двух строк одна за другой аналогична отправке одной длинной строки. Все это разбито на байты в последовательной строке, и никто не может сказать, где заканчивается одна строка печати и начинается следующая.
myport.write(x);
myport.write(',');
myport.write(y);
myport.write('\n')
будет работать так же хорошо.
Тогда на стороне Arduino вы, скорее всего, захотите уклониться от класса String. Читайте данные символ за символом в массив символов.
char myArray[howLongTheStringIs];
char x[howLongXIs];
char y[howLongYIs];
int index = 0;
Это вызывается снова и снова в l oop и собирает последовательные данные по мере их поступления:
while (Serial.available()){
char c = Serial.read();
myArray[index] = c; // add c to the string
myArray[++index] = 0; // null terminate our string
if(c == '\n'){ // if we are at the end of the string
handleString();
}
}
Затем у вас есть функция для анализа вашей строки. Есть много способов сделать это:
Если вы ничего не знаете о строках, кроме разделителя, используйте strtok:
void handleString(){
char* ptr = strtok(myArray, ":"); // get up to the ":" from the string
strcpy(x, ptr); // copy into x
ptr = strtok(NULL, "\n"); // get from the separator last time up to the next "\n"
strcpy(y, ptr); // copy into y
index = 0 // reset our index and
myArray[0] = 0; // and clear the string
}
Все это не проверено, не скомпилировано и записано в поле для ответа. Так что, если я немного опечатался, пожалуйста, прости и исправь. Но что-то вроде этого должно работать. Если вы уже знаете точную длину строк (или можете отправить их из кода обработки), тогда метод handleString может быть проще. Если у вас есть что-то короткое, связанное с x и y, и после этого они вам не нужны, то, возможно, вы можете просто сохранить указатели на их расположение в myArray. Все зависит от того, какова цель вашего кода. Но как-то так должно получиться.