Espero que tenhas lido isto...
Conselho, esquece a String e usa vectores. Lembra-te que o Arduino é um micro de 8 bits. Andar com implementacões de alto nível para algo desnecessário (como a String) só torna as coisas piores.
int serialIn = 0;
int value = 0;
char valor;
String funcao="";
char dados[]="0";
String Elevacao="";
String Azimute="";
int servoAzimute=0;
int servoElevacao=0;
void loop() {
if (Serial.available() > 0) {
serialIn = Serial.read(); //serialIn == integer
if(serialIn == 13) { //tens a certeza disto?
value = 0; //value == integer
}
else
value = value * 10 + serialIn - 0x30;
String valor = String(value);
String funcao = valor.substring(0,2);
String dados = valor.substring(2,5);
if (funcao == "17") { //isto não funciona strcmp() é o que precisas
int servoAzimute = atoi (dados);
myservo.write(servoAzimute);
}
if (funcao == "21") { //isto não funciona strcmp() é o que precisas
int servoElevacao = atoi (dados);
myservo.write(servoElevacao);
}
delay(100);
}
}
Depois não sabes exactamente onde comecam os dados... logo antes de mais tens de testar quando comecam os dados e ir descartando o que não importa.
if (Serial.read() == '1') {
if (Serial.read() == '3') {
if (Serial.read() == '1') {
if (Serial.read() == '7') { //próximos dados serão XX
vect[0] = Serial.read();
vect[1] = Serial.read();
vect[2] = '\0';
azimute = atoi(vect);
Serial.read(); //2
Serial.read(); //1
vect[0] = Serial.read();
vect[1] = Serial.read();
vect[2] = Serial.read();
vect[3] = '\0';
elevacao = atoi(vect);
}}}}
Sem compilar, isto deve funcionar...
Mais uma vez NUNCA USES O OBJECTO STRING!!!!!