#include <Servo.h>
#define NUM_SERVOS 12
Servo myServo[NUM_SERVOS];
void setup()
{
// Attach pins from the Arduino Mega board to the Servo objects.
// Starting from pin 22, there happen to be exactly 32 pins on the double row pins.
for( int i=0; i<NUM_SERVOS; i++)
{
myServo[i].attach( i + 2); // с пина 2 до 14 получается 12 пинов.
}
}
void loop()
{
// Последовательность 01.
// Все серово отклоняются на рандомный угол.
for( int a=0; a<10; a++)
{
for( int i=0; i<NUM_SERVOS; i++)
{
myServo[i].write( random( 0, 181));
delay( 2);
}
delay( 200);
}
// Последовательность 02.
// Все сервы поворачиваются на одинаковый угол.
for( int i=0; i<NUM_SERVOS; i++)
{
myServo[i].write( 0); // установка начального положения (тяга влево)
}
delay( 1000); // wait to let the viewer get used to it
for( int a=0; a<3; a++)
{
for( int r=0; r<=180; r++) // move horns to the right
{
for( int i=0; i<NUM_SERVOS; i++)
{
myServo[i].write( r);
}
delay( 6);
}
for( int r=180; r>=0; r--)
{
for( int i=0; i<NUM_SERVOS; i++) // move horns to the left
{
myServo[i].write( r);
}
delay( 6);
}
}
// Sequence three.
// A rotating wave.
for( int a=0; a<6; a++)
{
for( int i=0; i<NUM_SERVOS; i++)
{
for( int j=0; j<NUM_SERVOS; j++)
{
// Calculate distance to active servo
int d = j - i;
if( d < 0)
d = -d;
if( d > (NUM_SERVOS / 2))
d = NUM_SERVOS - d;
int angle = 90 - (10 * d);
if( angle < 0)
angle = 0;
myServo[j].write( angle);
}
delay(100);
}
}
// Последовательность 08.
// Все серво отклоняются на определенный угол.
for( int i=0; i<NUM_SERVOS; i++)
{
myServo[i].write( 0);
delay( 300);
myServo[i].write( 90);
delay( 500);
myServo[i].write( 180);
delay( 300);
}
delay( 1000);
// Последовательность 10.
// Все серво отклоняются на определенный угол.
for( int i=0; i<NUM_SERVOS; i++)
{
myServo[random( 0, 12)].write( 0);
delay( 200);
myServo[random( 0, 12)].write( 180);
delay( 200);
}
delay( 700);
}