VirtualWire y ServoTimer2 ((( Problemas con el Servo )))

Hola Amigos.

Tengo un problema y seguro que algunos de vosotros me puede ayudar a resolver.

Tengo un emisor y un receptor realizado con VirtualWire, todo me fucniona perfectamente, mando dos datos analogicos y dos digitales, cuando hago la lectura en el puerto serie del receptor todo me funciona correctamente, la variación de los datos analógicos que yo comando en mi emisor, son leido y interpretados perfectamente e mi emisor, hasta ahi todo ok.

Utilizo esos datos para encender dos leds en el caso de las lecturas digitales y otras dos analogicas, estas últimas las utilizo para controlar la intensidad de un led y el parpadeo de otro y perfecto, todo me funciona correctamente, aquí esta el codigo el cual gobierna el receptor.

/* es decir 2 bytes para el Data0, otros dos para Data1, otros dos para Data2 y otros dos para Data3 /
uint8_t Buffer_Size = 8; /
declara el tamaño del array para recibir los datos /
unsigned int Data0; /
Declara las variables para el volcado de datos de recepción (unsigned int de 8 bits) /
unsigned int Data1;
unsigned int Data2;
unsigned int Data3;
uint8_t RxBuffer[Buffer_Size]; /
declara el array para la recepción de datos /
/
Condicional ¿se ha recibido el mensaje?/
if (vw_get_message(RxBuffer, &Buffer_Size)) {
Data0 = RxBuffer[0] << 8 | RxBuffer[1];
Data1 = RxBuffer[2] << 8 | RxBuffer[3];
Data2 = RxBuffer[4] << 8 | RxBuffer[5];
Data3 = RxBuffer[6] << 8 | RxBuffer[7];
Serial.print("Analogue pin A0: “);
Serial.print(Data0);
Serial.print(” “); Serial.print(Data1);
Serial.print(” “); Serial.print(Data2);
Serial.print(” "); Serial.println(Data3);
// Non-blocking
/
Almacena el dato recibido en un byte high y low /
/
Output this data to the UART (imprime en la consola ese mensaje) /
/
Output this data to the UART (imprime en consola el dato recibido*/
if (Data2 == 0) {
digitalWrite(8, LOW); /* si el Data2 correspondiente a la entrada digital del emisor es 0, apaga el LED 13 /
}
if (Data2 == 1) {
digitalWrite(8, HIGH); /
si el Data2 correspondiente a la entrada digital del emisor es 1, enciende LED 13 */
}
if (Data3 == 0) {
digitalWrite(12, LOW);
}
if (Data3 == 1) {
digitalWrite(12, HIGH);
}

{

Data0 = map(Data0, 0, 800, 0, 254 ); // aumento del brillodel led (0 a 5v) en funcion de Data1
analogWrite(analogPin, Data0);
delay(15);

}

if (Data1 > 0) {

Data1 = map(Data1, 1023, 0, 0, 255); // parpadeo led en funcion de la lectura en Data0
digitalWrite(10, HIGH);
delay(Data1);
digitalWrite(10, LOW);
delay(Data1);
}
else {
digitalWrite(10, LOW);
}
Serial.print(Data1);

}
}

Pues bien, ahora es donde expongo mi problema ya que cuando utilizo mi Data0 que antes utilizaba para gobernar el incremento de intensidad de luz de un led y funciona perfectamente, cuando empleo esta Data0 para gobernar mi servo con la librería ServoTimer2, el servo me oscila mucho,
a pesar de que hago lectura en el monitor serie y leo lecturas correctas que van de 0 a 1023 y si mapeo tambien tengo lecturas perfectas, pero sin embargo el servo oscila, sobre todo en valores altos. Sabeis que esta pasando y como puedo solucionarlo ???

{

val=map(Data0,0,1023,0,180); // con 0 se posiciona en 0º – con 180 se posiciona en 180º
myservo.write(val);

}

if (Data1 > 0) {

Data1 = map(Data1, 1023, 0, 0, 255); // parpadeo led en funcion de la lectura en Data0
digitalWrite(10, HIGH);
delay(Data1);
digitalWrite(10, LOW);
delay(Data1);
}
else {
digitalWrite(10, LOW);
}
Serial.print(Data1);

}
}

:astonished: