Help with smooth servo movement

this is what i made so far:

////******************************************* Libraries *******************************************////
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>
#include <Stepper.h>

////********************************************* radio *********************************************////
#define CE_PIN 49
#define CSN_PIN 48

RF24 radio(CE_PIN, CSN_PIN);
const byte pipe[] = "00001";

////******************************************* Servo Setup ******************************************////
const byte servoPins[] = {2, 5, 4, 3};     //s1 =(2) s2 =(5) s3 =(4) s4 =(3)
const byte servosCount = sizeof servoPins / sizeof * servoPins;
int previousAngles[servosCount];
const int initialPositions[servosCount] = {90, 90, 90, 84};
const int mappedRanges[servosCount][2] = {{80, 100}, {65, 115}, {65, 115}, {80, 88}};
const unsigned int speed = 1;


Servo servos[servosCount];

////***************************************** Message Setup *****************************************////
struct __attribute__ ((packed)) t_message {
  int16_t rawValues[servosCount];
} payload;


void setup() {
  pinMode(10, OUTPUT);

  for (byte i = 0; i < servosCount; i++) {
    servos[i].write(initialPositions[i]);     //set starting positions
    servos[i].attach(servoPins[i]);
    previousAngles[i] = initialPositions[i];
  }

  // Serial
  Serial.begin(9600);
  //radio
  radio.begin();
  radio.openReadingPipe(0, pipe);
  radio.setPALevel(RF24_PA_MIN);
  radio.startListening();
}

void loop() {
  if (radio.available()) {
    radio.read((uint8_t *) &payload, sizeof payload);
    Serial.print(F("New positions: "));
    for (byte i = 0; i < servosCount; i++) {
      float angle = map(payload.rawValues[i], 0, 1023, mappedRanges[i][0], mappedRanges[i][1]);
      previousAngles[i] = (angle * 0.4) + (previousAngles[i] * 0.6);

if (previousAngles[i] >= mappedRanges[i][1])
   {previousAngles[i] += speed;}
   else  {
   if (previousAngles[i] <= mappedRanges[i][0])
       {previousAngles[i] -= speed;}
    Serial.print(previousAngles[i]); Serial.write('\t');
}}
  { 
    Serial.println();
  }
  delay(30);
} }

but the servo don't move, i know that this us due to the fact that there is no

servos[i].write(previousAngles[i]);

but it has to have it, but from what i remember reading you said that that needs to be removed.

"The point is not to tell directly with a write. You’ll do that asynchronously at every iteration of the loop when a step is due."
post #45

(sorry i dont know how to that quote thing)

forgot that i can just test it, i added it in the loop like this:

void loop() {
  if (radio.available()) {
    radio.read((uint8_t *) &payload, sizeof payload);
    Serial.print(F("New positions: "));
    for (byte i = 0; i < servosCount; i++) {
      float angle = map(payload.rawValues[i], 0, 1023, mappedRanges[i][0], mappedRanges[i][1]);
      previousAngles[i] = (angle * 0.4) + (previousAngles[i] * 0.6);

if (previousAngles[i] >= mappedRanges[i][1])
   {previousAngles[i] += speed;}
   else  {
   if (previousAngles[i] <= mappedRanges[i][0])
       {previousAngles[i] -= speed;}
    Serial.print(previousAngles[i]); Serial.write('\t');
servos[i].write(previousAngles[i]);
}}
  { 
    Serial.println();
  }
  delay(30);
} }

the servos do move but not slower that normal, i have a feeling that is because i am stepping the deceleration.