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 readStringUntil
nie jest pusty. Jeśli funkcja przekroczy limit czasu, nie otrzymałeś wystarczającej ilości danych, a zatem każda próba wyodrębnienia int
wartoś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);
}
}
}