#include <Servo.h>
int regim=1;
int flag=0;
#define NUM_SERVOS 12
Servo myServo[NUM_SERVOS];
void setup()
{// запуск последовательного порта
Serial.begin(9600);
// 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()
{
if(digitalRead(A0)==HIGH&&flag==0)//если кнопка нажата
// и перемення flag равна 0 , то ...
{
regim++;
flag=1;
//это нужно для того что бы с каждым нажатием кнопки
//происходило только одно действие
// плюс защита от "дребезга" 100%
delay (50);
if(regim>4)//ограничим количество режимов
{
regim=1;//так как мы используем только одну кнопку,
// то переключать режимы будем циклично
}
}
if(digitalRead(A0)==LOW&&flag==1)//если кнопка НЕ нажата
//и переменная flag равна - 1 ,то ...
{
flag=0;//обнуляем переменную "knopka"
}
if(regim==1)//первый режим
{
Serial.print(1);
//здесь может быть любое ваше действие
}
if(regim==2)//второй режим
{
Serial.print(2);
//здесь может быть любое ваше действие
// Последовательность 001.
// Все серово отклоняются на рандомный угол.
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);
}
// Последовательность 002. Все сервы поворачиваются на одинаковый угол.
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);
}
}
// Последовательность 003.
// 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);
}
}
// Последовательность 004.
// Все серво отклоняются на определенный угол.
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);
// Последовательность 005.
// Все серво отклоняются на определенный угол.
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);
}
if(regim==3)//третий режим
{
Serial.print(3);
//здесь может быть любое ваше действие
}
if(regim==4)//четвертый режим
{
Serial.print(4);
//здесь может быть любое ваше действие
}
delay (50);
}