Możesz zrobić coś takiego, ale weź pod uwagę kilka rzeczy:
Jeśli użyjesz readStringUntil(), poczeka, aż otrzyma postać lub limity czasu. Tak więc, z twoim bieżącym łańcuchem, ostatnia pozycja będzie trwać trochę dłużej, ponieważ musi czekać. Możesz dodać znak &końca, aby uniknąć tego limitu czasu. Możesz łatwo sprawdzić to zachowanie na monitorze, spróbować wysłać ciąg z dodatkowym &i bez dodatkowego, a zobaczysz takie opóźnienie.
Faktycznie nie trzeba indeks serwo, można po prostu wysłać swój ciąg stanowisk i uzyskać indeks serwo przez pozycję w łańcuchu wartości, coś takiego: 90&80&180&. Jeśli korzystasz z indeksu serwomechanizmu, być może chcesz go sprawdzić (przekonwertuj na int, a następnie dopasuj indeks pętli i), aby upewnić się, że nic nie poszło nie tak z twoją wiadomością.
Musisz sprawdzić, czy zwracany ciąg readStringUntilnie jest pusty. Jeśli funkcja przekroczy limit czasu, nie otrzymałeś wystarczającej ilości danych, a zatem każda próba wyodrębnienia intwartości przyniesie dziwne wyniki.
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);
}
}
}