Ви можете зробити щось подібне, але врахуйте кілька речей:
Якщо ви використовуєте readStringUntil()
, він буде чекати, поки він не отримає символу або таймаути. Таким чином, у вашому поточному рядку остання позиція триватиме трохи довше, оскільки її потрібно чекати. Ви можете додати трейлінг, &
щоб уникнути цього тайм-ауту. Ви можете легко перевірити цю поведінку на своєму моніторі, спробувати надіслати рядок з додатковими та без них, &
і ви побачите таку затримку очікування.
Ви на самому справі не потрібен індекс серво, ви можете просто відправити рядок позицій, і отримати індекс серво по позиції значення в рядку, що - щось на кшталт: 90&80&180&
. Якщо ви використовуєте серво-індекс, можливо, ви хочете перевірити його (перетворити на int
, а потім відповідати циклу i), щоб переконатися, що з вашим повідомленням нічого не пішло.
Ви повинні перевірити, що рядок, що повертається readStringUntil
, не порожній. Якщо час очікування функції, ви не отримали достатньо даних, і, отже, будь-яка спроба вилучення ваших int
значень дасть дивні результати.
void setup() {
Serial.begin(9600);
}
void loop() {
for(int i=1; i<=3; i++) {
String servo = Serial.readStringUntil(':');
if(servo != ""){
//here you could check the servo number
String pos = Serial.readStringUntil('&');
int int_pos=pos.toInt();
Serial.println("Pos");
Serial.println(int_pos);
}
}
}