Continuous Servo, moving slowly

I have two Parallax servo motors as wheels to move a robot. I was researching about the motors and how to slow them down. I understand you cant really control the speed of the servo but I did manage to find a sketch. The sketch uses ONE continuous servo to move slowly, counterclockwise or clockwise. I was very intrigued by this because it just might work for my design. However, I am using two continuous servos. I’ve tried to manipulate the sketch to work for two servos. Although I managed to make it work, I don’t know how manipulate the code so that one servo goes clockwise and the other counterclockwise. Which is why I am seeking help. It will be very helpful if someone can review the code and help me change it so that one servo goes clockwise and the other goes counterclockwise, slowly and at the same time.

int RW     =  7;    // right wheel 
int LW     =  8;            // left wheel

int minPulse     =  1170;  // maximum servo speed clockwise
int maxPulse     =  1770; // maximum servo speed anticlockwise
int turnRate     =  75;  // servo turn rate increment (larger value, faster rate)
int refreshTime  =  20;   // time (ms) between pulses (50Hz)

/** The Arduino will calculate these values for you **/
int centerServo;         // center servo position
int pulseWidth;          // servo pulse width
int moveServo;           // raw user input
long lastPulse   = 0;    // recorded time (ms) of the last pulse


void setup() {
  pinMode(RW, OUTPUT);  // Set servo pin as an output pin
  pinMode(LW, OUTPUT);
  centerServo = maxPulse - ((maxPulse - minPulse)/2);
  pulseWidth = centerServo;   // Give the servo a stop command

  Serial.begin(115200);
  Serial.println("Arduino Serial Continuous Rotation Servo Control");
  Serial.println("          by Orfeus for GRobot.gr");
  Serial.println("   Press < or > to move, spacebar to center");
  Serial.println();
}

void loop() {
  // wait for serial input
  if (Serial.available() > 0) {
    // read the incoming byte:
    moveServo = Serial.read();

    // ASCII '<' is 44, ASCII '>' is 46 (comma and period, really)
    if (moveServo == 44) { 
          pulseWidth = pulseWidth + turnRate;    
        }
        
    if (moveServo == 46) { 
          pulseWidth = pulseWidth - turnRate;     
        }
        
    if (moveServo == 32) { 
          pulseWidth = centerServo;     
        }

    // stop servo pulse at min and max
   if (pulseWidth > maxPulse) { pulseWidth = maxPulse; }
    if (pulseWidth < minPulse) { pulseWidth = minPulse; }
    


     //print pulseWidth back to the Serial Monitor (comment to undebug)
     Serial.print("Pulse Width: ");
     Serial.print(pulseWidth);
     Serial.println("us");
  }

  // pulse the servo every 20 ms (refreshTime) with current pulseWidth
  // this will hold the servo's rotation and speed till we told it to do something else.
  if (millis() - lastPulse >= refreshTime) {
    digitalWrite(RW, HIGH);   // start the pulse
    digitalWrite(LW, HIGH);   // start the pulse
    delayMicroseconds(pulseWidth);  // pulse width
    digitalWrite(RW, LOW);    // stop the pulse   
    digitalWrite(LW, LOW);    // stop the pulse
    
    
    lastPulse = millis();           // save the time of the last pulse
  }
}

Below is some servo code I use to test two continous rotation servos using the serial monitor. With 1500us as the mid point the servo direction/speed is varied using ~±100us or less from the 1500us.

// zoomkat 11-22-10 serial servo (2) test
// for writeMicroseconds, use a value like 1500
// for IDE 0019 and later
// Powering a servo from the arduino usually DOES NOT WORK.
// two servo setup with two servo commands
// send eight character string like 15001500 or 14501550

#include <Servo.h> 
String readString, servo1, servo2;
Servo myservo1;  // create servo object to control a servo 
Servo myservo2;

void setup() {
  Serial.begin(9600);
  myservo1.attach(6);  //the pin for the servo control 
  myservo2.attach(7);
  Serial.println("servo-test-21"); // so I can keep track of what is loaded
}

void loop() {

  while (Serial.available()) {
    delay(1);  
    if (Serial.available() >0) {
      char c = Serial.read();  //gets one byte from serial buffer
      readString += c; //makes the string readString
    } 
  }

  if (readString.length() >0) {
      Serial.println(readString); //see what was received
      
      // expect a string like 07002100 containing the two servo positions      
      servo1 = readString.substring(0, 4); //get the first four characters
      servo2 = readString.substring(4, 8); //get the next four characters 
      
      Serial.println(servo1);  //print to serial monitor to see results
      Serial.println(servo2);
      
      int n1; //declare as number  
      int n2;
      
      char carray1[6]; //magic needed to convert string to a number 
      servo1.toCharArray(carray1, sizeof(carray1));
      n1 = atoi(carray1); 
      
      char carray2[6];
      servo2.toCharArray(carray2, sizeof(carray2));
      n2 = atoi(carray2); 
      
      myservo1.writeMicroseconds(n1); //set servo position 
      myservo2.writeMicroseconds(n2);
    readString="";
  } 
}

I would like to use the code I have because it works better with my design but I need both servos to rotate together, one clockwise and the other counter clockwise.

I would like to use the code I have because it works better with my design but I need both servos to rotate together, one clockwise and the other counter clockwise.

One way would be to subtract the current value of one servo from its max position and use the result for the other servo's position.

Would you be able to show me an example using my code

int RW     =  7;    // right wheel 
int LW     =  8;            // left wheel

int minPulse     =  1170;  // maximum servo speed clockwise
int maxPulse     =  1770; // maximum servo speed anticlockwise
int turnRate     =  75;  // servo turn rate increment (larger value, faster rate)
int refreshTime  =  20;   // time (ms) between pulses (50Hz)

/** The Arduino will calculate these values for you **/
int centerServo;         // center servo position
int pulseWidth;          // servo pulse width
int moveServo;           // raw user input
long lastPulse   = 0;    // recorded time (ms) of the last pulse


void setup() {
  pinMode(RW, OUTPUT);  // Set servo pin as an output pin
  pinMode(LW, OUTPUT);
  centerServo = maxPulse - ((maxPulse - minPulse)/2);
  pulseWidth = centerServo;   // Give the servo a stop command

  Serial.begin(115200);
  Serial.println("Arduino Serial Continuous Rotation Servo Control");
  Serial.println("          by Orfeus for GRobot.gr");
  Serial.println("   Press < or > to move, spacebar to center");
  Serial.println();
}

void loop() {
  // wait for serial input
  if (Serial.available() > 0) {
    // read the incoming byte:
    moveServo = Serial.read();

    // ASCII '<' is 44, ASCII '>' is 46 (comma and period, really)
    if (moveServo == 44) { 
          pulseWidth = pulseWidth + turnRate;    
        }
        
    if (moveServo == 46) { 
          pulseWidth = pulseWidth - turnRate;     
        }
        
    if (moveServo == 32) { 
          pulseWidth = centerServo;     
        }

    // stop servo pulse at min and max
   if (pulseWidth > maxPulse) { pulseWidth = maxPulse; }
    if (pulseWidth < minPulse) { pulseWidth = minPulse; }
    


     //print pulseWidth back to the Serial Monitor (comment to undebug)
     Serial.print("Pulse Width: ");
     Serial.print(pulseWidth);
     Serial.println("us");
  }

  // pulse the servo every 20 ms (refreshTime) with current pulseWidth
  // this will hold the servo's rotation and speed till we told it to do something else.
  if (millis() - lastPulse >= refreshTime) {
    digitalWrite(RW, HIGH);   // start the pulse
    digitalWrite(LW, HIGH);   // start the pulse
    delayMicroseconds(pulseWidth);  // pulse width
    digitalWrite(RW, LOW);    // stop the pulse   
    digitalWrite(LW, LOW);    // stop the pulse
    
    
    lastPulse = millis();           // save the time of the last pulse
  }
}