Looks like you are having some fun! I am also wondering if in the end you are going to want to keep with totally random, or for lack of better terms maybe a weighted random. That is when your bird does one action, like maybe part of a flight sequence, he is probably more likely to do some actions than others... Just a thought.
As for controlling the servo speed, you might try my ServoEx code. I have a few different ways to use it, but the easiest is to tell each servo where you wish to go and how long to get there. Example:
Code:
#include <ServoEx.h>
ServoEx myservo; // create servo object to control a servo
// a maximum of eight servo objects can be created
int pos = 0; // variable to store the servo position
void setup()
{
myservo.attach(13); // attaches the servo on pin 13 to the servo object
}
void loop()
{
if (myservo.moving())
return; // last move is still active
pos = (pos == 0)? 180 : 0;
myservo.move(pos, 2500);
}
This code moved 1 servo, using the helper function move. Note: you can call move on a different servo while this one is still active and it will also work. Or you can have the code start and stop all servos at the same time as the Move function is simply:
Code:
void ServoEx::move(int value, unsigned int MoveTime)
{
// For now just do shorthand of start, write and commit
ServoGroupMove.start();
write(value);
ServoGroupMove.commit(MoveTime);
}
Kurt