Running servos Adafruit Servo shield

I have an Adafruit motor shield, but it only can run 2 servo motors.

I want to run 3 servo motors, so I bought the Adafruit 16 channel servo driver.

I figured the code and set up would be the same as the motor shield…attach servo to a pin and myMotor->run(FORWARD), etc.

But this servo shield is all about PWM…and the example runs 16 servos…I only have 3. How do I just run a servo full speed forward, stop, and reverse.

There doesn't seem to be enough info for me to figure it out.

The library reference says:
pwm.setPWM(15, 1024, 3072)
and that's it for code.

-steve

/***************************************************

  This is an example for our Adafruit 16-channel PWM & Servo driver
  Servo test - this will drive 16 servos, one after the other

  Pick one up today in the adafruit shop!
  ------> http://www.adafruit.com/products/815

  These displays use I2C to communicate, 2 pins are required to  
  interface. For Arduino UNOs, thats SCL -> Analog 5, SDA -> Analog 4

  Adafruit invests time and resources providing this open source code, 
  please support Adafruit and open-source hardware by purchasing 
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.  
  BSD license, all text above must be included in any redistribution
 ****************************************************/

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

// called this way, it uses the default address 0x40
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
// you can also call it with a different address you want
//Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x41);

// Depending on your servo make, the pulse width min and max may vary, you 
// want these to be as small/large as possible without hitting the hard stop
// for max range. You'll have to tweak them as necessary to match the servos you
// have!
#define SERVOMIN  150 // this is the 'minimum' pulse length count (out of 4096)
#define SERVOMAX  600 // this is the 'maximum' pulse length count (out of 4096)

// our servo # counter
uint8_t servonum = 0;

void setup() {
  Serial.begin(9600);
  Serial.println("16 channel Servo test!");

  pwm.begin();
  
  pwm.setPWMFreq(60);  // Analog servos run at ~60 Hz updates
}

// you can use this function if you'd like to set the pulse length in seconds
// e.g. setServoPulse(0, 0.001) is a ~1 millisecond pulse width. its not precise!
void setServoPulse(uint8_t n, double pulse) {
  double pulselength;
  
  pulselength = 1000000;   // 1,000,000 us per second
  pulselength /= 60;   // 60 Hz
  Serial.print(pulselength); Serial.println(" us per period"); 
  pulselength /= 4096;  // 12 bits of resolution
  Serial.print(pulselength); Serial.println(" us per bit"); 
  pulse *= 1000;
  pulse /= pulselength;
  Serial.println(pulse);
  pwm.setPWM(n, 0, pulse);
}

void loop() {
  // Drive each servo one at a time
  Serial.println(servonum);
  for (uint16_t pulselen = SERVOMIN; pulselen < SERVOMAX; pulselen++) {
    pwm.setPWM(servonum, 0, pulselen);
  }
  delay(500);
  for (uint16_t pulselen = SERVOMAX; pulselen > SERVOMIN; pulselen--) {
    pwm.setPWM(servonum, 0, pulselen);
  }
  delay(500);

  servonum ++;
  if (servonum > 15) servonum = 0;
}

You can use the standard Arduino Servo library with an extra seperate power supply.

Use a seperate power supply for the servo motors, and connect the signal wires directly to Arduino pins. That's all.

I like that 16 channel servo board, but it is not specific for servo motors.
In the example code, the variable "servonum" is the number of the servo motor. It runs from 0 up 15, and after that it is set to 0 again.

You are right.
I thought I read somewhere I couldn't do that...
but yes, I powered the servo and put the control on pin 8 or 11 and it works fine.
Thanks.

Stevex,
I am trying to run more servos using the Adafruit Servo shield. Any way I can get a look at your code. I am having a hard time isolating the servos for spider legs.
Thank you