Arduino Issue, Servo Issue, or Operator Error

I’m working on a dual servo project, and am stumped by what is happening.
I’ve written a simple code to move a pair of servos with keyboard input. I used a pair of Futaba S3003 servos for testing, and everything is perfect. Very exciting for a relative noob. Then I moved up to the servos I’ll be using on the project, a pair of GWS S777FCG/6BB giant high torque servos. The bigger motors just crank all the way to the right, and keep trying to crank.
Some important info:
Arduino and Servos are powered separately.
Initial power for servos was from a 5v 1000ma wall wart (metered at 5.34v), then switched to a 6v 1600ma NiMH battery.
Have a ground connected between motors and arduino.
Using the NiMH battery pack, the large servos work fine with a Spektrum DX5E RC tx/rx using the same NiMH battery pack.
Code looks like this:

#include <Servo.h>
int minPulse1     =  0;   // minimum servo position
int maxPulse1     =  180; // maximum servo position
int turnRate1     =  10;  // servo turn rate increment (larger value, faster rate)
int minPulse2     =  0;  // minimum servo position
int maxPulse2     =  180; // maximum servo position
int turnRate2     =  10;  // servo turn rate increment (larger value, faster rate)
int buttonPin     = 13;    // pin that the trigger will be connected to
/** The Arduino will calculate these values for you **/
int centerServo1;
int centerServo2;
int pulseWidth1;          // servo pulse width
int pulseWidth2;          // servo pulse width

Servo servo1;
Servo servo2;

void setup() {
  pinMode(buttonPin, OUTPUT);
  centerServo1 = maxPulse1 - ((maxPulse1 - minPulse1)/2);
  centerServo2 = maxPulse2 - ((maxPulse2 - minPulse2)/2);
  pulseWidth1 =  centerServo1;
  pulseWidth2 =  centerServo2;
  Serial.begin(9600);      // opens serial port, sets data rate to 9600 bps
  Serial.println("      Arduino Serial Servo Control");
  Serial.println("Press a, s, d, or w to move, spacebar to center, and f to fire");

void loop() {
  // check for serial input
  if (Serial.available() > 0) {
    int data =;       // read the incoming byte:
    digitalWrite(buttonPin, LOW);  // turn the pin off on any incoming data
      case 'a' :  pulseWidth1 = pulseWidth1 - turnRate1;  break;
      case 'd' :  pulseWidth1 = pulseWidth1 + turnRate1;  break ;     
      case ' ' :  pulseWidth1 = pulseWidth2 = centerServo1;  break;  
      case 's' :  pulseWidth2 = pulseWidth2 - turnRate1;  break;
      case 'w' :  pulseWidth2 = pulseWidth2 + turnRate1;  break ;
      case 'f' :  digitalWrite(buttonPin, HIGH); break;           
    // stop servo pulse at min and max
    if (pulseWidth1 > maxPulse1) { pulseWidth1 = maxPulse1; }
    if (pulseWidth1 < minPulse1) { pulseWidth1 = minPulse1; }

      // stop servo pulse at min and max
    if (pulseWidth2 > maxPulse2) { pulseWidth2 = maxPulse2; }
    if (pulseWidth2 < minPulse2) { pulseWidth2 = minPulse2; }
    // print pulseWidth back to the Serial Monitor (uncomment to debug)
    Serial.print("Servo 1: ");
    Serial.print(" Servo 2: ");

Am I sending signals to the servos that I don’t know about? Any thoughts or input would be greatly appreciated! Thanks!!

The heavy duty servos should be the same as the Futaba.

I have a remark about your code.
The Servo library ( Servo - Arduino Reference ) takes care of the pulse width. So you set an angle. The center is always 90 degrees, and 0 and 180 are the minimum and maximum.

Thank you for the reply, and for your thoughts on my code. I'll take all the help I can get!
I couldn't figure why the heavy duty servos should be any different, it made absolutely no sense to me. I may have found the answer on an RC site. A fellow had the same issue with a servo - same brand, different model - and found that the shaft sending info to the pot was not attached to the main gear, so the motor just kept spinning waiting for feedback from the pot. He said a dab of Cyanoacrylate did the trick. So looks like I'm tearing a couple of new servos apart. :0

Servo test code to see if code or the servo is the issue. Bad ground wiring can cause erattic behavior.

// zoomkat 10-22-11 serial servo test
// type servo position 0 to 180 in serial monitor
// or for writeMicroseconds, use a value like 1500
// for IDE 0022 and later
// Powering a servo from the arduino usually *DOES NOT WORK*.

String readString;
#include <Servo.h> 
Servo myservo;  // create servo object to control a servo 

void setup() {
  myservo.writeMicroseconds(1500); //set initial servo position if desired
  myservo.attach(7);  //the pin for the servo control 
  Serial.println("servo-test-22-dual-input"); // so I can keep track of what is loaded

void loop() {
  while (Serial.available()) {
    char c =;  //gets one byte from serial buffer
    readString += c; //makes the string readString
    delay(2);  //slow looping to allow buffer to fill with next character

  if (readString.length() >0) {
    Serial.println(readString);  //so you can see the captured string 
    int n = readString.toInt();  //convert readString into a number

    // auto select appropriate value, copied from someone elses code.
    if(n >= 500)
      Serial.print("writing Microseconds: ");
      Serial.print("writing Angle: ");

    readString=""; //empty for next input

Thanks Zoomkat, the code runs perfectly on every other servo I have, but not the GWS (either one). I also disassembled one of the GWS servos, and it's got a D drive shaft to the pot, so no slipping there. I guess the next step is to wait to hear back from GWS, and see what they know.
Thanks again for your help!