Вы можете сделать что-то вроде следующего, но, пожалуйста, примите во внимание несколько вещей:
Если вы используете 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);
}
}
}