//////////////////////////    скетч для управления 8 сервоприводами квадропода   /////////////////
#include <Servo.h> //используем библиотеку
#include "boarddefs.h"   //Добавочная библиотека
#include "IRremote.h"
#include "IRremoteInt.h" //Добавочная библиотека

Servo myservoK3 ;  //указываем сервопривод заднего левого колена
Servo myservoB4;  //указываем сервопривод  заднего левого бедра
Servo myservoK5 ;  //указываем сервопривод переднего левого колена
Servo myservoB6;  //указываем сервопривод  переднего левого бедра
Servo myservoK7 ;  //указываем сервопривод заднего правого колена
Servo myservoB8;  //указываем сервопривод  заднего правого бедра
Servo myservoK9 ;  //указываем сервопривод переднего правого колена
Servo myservoB10;  //указываем сервопривод переднего правого бедра
int n=17;
int a03=110;int a04=75;int a05=55;int a06=97;int a07=80;int a08=75;int a09=73;int a010=85;//переменные для углов начального положения конечностей
int da=10;//переменная амплитуды изменения угла в градусах для колен
int db=15;//переменная амплитуды изменения угла в градусах для бёдер
int i;
int a3=a03;int a4=a04;int a5=a05;int a6=a06;int a7=a07;int a8=a08;int a9=a09;int a10=a010;// переменные для хранения значений текущих углов
//////при увеличении значения угла сервоприводы движут лапы :B4,B6-вперёд B8,B10-назад K3,K9-вниз K5,K7-вверх ////////
////////////////////////////////

int RECV_PIN = 2;        //Пин подключения выходного сигнала с ИК-приёмника
int N=0;                 //Счётчик номера нажатой кнопки
long Y1=0;long Y2=0;
//Создаём экземпляр класса IRrecv, в качестве параметра передаём пин подключения сигнала ИК-приёмника
IRrecv irrecv(RECV_PIN);  

decode_results results;   //Переменная для сохранения полученного кода нажатой кнопки
//////////////////////////////// 
void setup()
{

////////////////////////////////////////////
myservoK3.attach(3);//выводы  для подключения 1-8 сервоприводов
myservoB4.attach(4);
myservoK5.attach(5); 
myservoB6.attach(6); 
myservoK7.attach(7);
myservoB8.attach(8);
myservoK9.attach(9); 
myservoB10.attach(10); 

myservoK3.write(a03); delay(n);// начальная установка-настройка углов поворота валов серв
myservoB4.write(a04); delay(n);
myservoK5.write(a05); delay(n);
myservoB6.write(a06); delay(n);
myservoK7.write(a07); delay(n);
myservoB8.write(a08); delay(n);
myservoK9.write(a09); delay(n);
myservoB10.write(a010); delay(n);
irrecv.enableIRIn();     //Включение ИК-приёмника в работу

delay(250*n);
}

void loop()
{
  
if(N==0){delay_(5*n);}
if(N==1)
{
  
  /////////////////////////////////////////////  ПРЯМОХОЖДЕНИЕ  /////////////////////////////////////////////
  ///////////// K5,K7 вверх///////////
   for(i = 0 ; i<=da; i++)
  {myservoK5.write(a5+i);
  myservoK7.write(a7+i);
  delay_(n);}
  ///////////// B6,B8- вперёд B4,B10- назад ////////
   for(i = 0 ; i<=db; i++)
  {myservoB6.write(a6+i);
  myservoB8.write(a8-i);
  myservoB4.write(a4-i);
  myservoB10.write(a10+i);
  delay_(n);}
  /////////////K5,K7 вниз /////////////
   for(i = 0 ; i<=da; i++)
  {myservoK5.write(a5-i);
  myservoK7.write(a7-i);
  delay_(n);}
  ////////////K3,K9 вверх /////////////
   for(i = 0 ; i<=da; i++)
  {myservoK3.write(a3-i);
   myservoK9.write(a9-i);
  delay_(n);}
  ///////////// B6,B8- назад B4,B10- вперёд ////////
  for(i = 0 ; i<=db; i++)
  {myservoB6.write(a6-i);
  myservoB8.write(a8+i);
  myservoB4.write(a4+i);
  myservoB10.write(a10-i);
  delay_(n);}
  //////////////K3,K9 вниз /////////////
   for(i = 0 ; i<=da; i++)
  {myservoK3.write(a3+i);
   myservoK9.write(a9+i);
  delay_(n);}
  /////////////////////////////////////////////////////////////////////////////////////////
  
  
 }
if(N==2)
{
  
  /////////////////////////////////////////////  ДВИЖЕНИЕ НАЗАД  /////////////////////////////////////////////
  ////////////K3,K9 вверх /////////////
   for(i = 0 ; i<=da; i++)
  {myservoK3.write(a3-i);
   myservoK9.write(a9-i);
  delay_(n);}
  
  ///////////// B6,B8- вперёд B4,B10- назад ////////
   for(i = 0 ; i<=db; i++)
  {myservoB6.write(a6+i);
  myservoB8.write(a8-i);
  myservoB4.write(a4-i);
  myservoB10.write(a10+i);
  delay_(n);}
   //////////////K3,K9 вниз /////////////
   for(i = 0 ; i<=da; i++)
  {myservoK3.write(a3+i);
   myservoK9.write(a9+i);
  delay_(n);}
  
   ///////////// K5,K7 вверх///////////
   for(i = 0 ; i<=da; i++)
  {myservoK5.write(a5+i);
  myservoK7.write(a7+i);
  delay_(n);}
  
  ///////////// B6,B8- назад B4,B10- вперёд ////////
  for(i = 0 ; i<=db; i++)
  {myservoB6.write(a6-i);
  myservoB8.write(a8+i);
  myservoB4.write(a4+i);
  myservoB10.write(a10-i);
  delay_(n);}
 /////////////K5,K7 вниз /////////////
   for(i = 0 ; i<=da; i++)
  {myservoK5.write(a5-i);
  myservoK7.write(a7-i);
  delay_(n);}
  /////////////////////////////////////////////////////////////////////////////////////////
  
  
 }

if(N==3)
{
  
  /////////////////////////////////////////////  РАЗВОРОТ ВЛЕВО  /////////////////////////////////////////////
  ////////////K3,K9 вверх /////////////
   for(i = 0 ; i<=da; i++)
  {myservoK3.write(a3-i);
   myservoK9.write(a9-i);
  delay_(n);}
  
  ///////////// B6,B10- вперёд B4,B8- назад ////////
   for(i = 0 ; i<=db; i++)
  {myservoB6.write(a6+i);
  myservoB8.write(a8+i);
  myservoB4.write(a4-i);
  myservoB10.write(a10-i);
  delay_(n);}
   //////////////K3,K9 вниз /////////////
   for(i = 0 ; i<=da; i++)
  {myservoK3.write(a3+i);
   myservoK9.write(a9+i);
  delay_(n);}
  
   ///////////// K5,K7 вверх///////////
   for(i = 0 ; i<=da; i++)
  {myservoK5.write(a5+i);
  myservoK7.write(a7+i);
  delay_(n);}
  
  ///////////// B6,B10- назад B4,B8- вперёд ////////
  for(i = 0 ; i<=db; i++)
  {myservoB6.write(a6-i);
  myservoB8.write(a8-i);
  myservoB4.write(a4+i);
  myservoB10.write(a10+i);
  delay_(n);}
 /////////////K5,K7 вниз /////////////
   for(i = 0 ; i<=da; i++)
  {myservoK5.write(a5-i);
  myservoK7.write(a7-i);
  delay_(n);}
  /////////////////////////////////////////////////////////////////////////////////////////
  
  
 }

if(N==4)
{
  
  /////////////////////////////////////////////  РАЗВОРОТ ВПРАВО  /////////////////////////////////////////////
  ///////////// K5,K7 вверх///////////
   for(i = 0 ; i<=da; i++)
  {myservoK5.write(a5+i);
  myservoK7.write(a7+i);
  delay_(n);}
  ///////////// B6,B10- вперёд B4,B8- назад ////////
   for(i = 0 ; i<=db; i++)
  {myservoB6.write(a6+i);
  myservoB8.write(a8+i);
  myservoB4.write(a4-i);
  myservoB10.write(a10-i);
  delay_(n);}
  /////////////K5,K7 вниз /////////////
   for(i = 0 ; i<=da; i++)
  {myservoK5.write(a5-i);
  myservoK7.write(a7-i);
  delay_(n);}
  ////////////K3,K9 вверх /////////////
   for(i = 0 ; i<=da; i++)
  {myservoK3.write(a3-i);
   myservoK9.write(a9-i);
  delay_(n);}
  ///////////// B6,B10- назад B4,B8- вперёд ////////
  for(i = 0 ; i<=db; i++)
  {myservoB6.write(a6-i);
  myservoB8.write(a8-i);
  myservoB4.write(a4+i);
  myservoB10.write(a10+i);
  delay_(n);}
  //////////////K3,K9 вниз /////////////
   for(i = 0 ; i<=da; i++)
  {myservoK3.write(a3+i);
   myservoK9.write(a9+i);
  delay_(n);}
  /////////////////////////////////////////////////////////////////////////////////////////
  
  
 }

}
 ////////////////////////////////////////   ФУНКЦИИ ОПИСАНИЕ   //////////////////////////////////////////////////////
//Функция заменяет выполнение команды delay(n); в ней на время паузы  идёт опрос датчика

void delay_(int T1)
{
 Y2=millis();metka:Y1=millis();if(Y1-Y2>=T1){} 
 else { if (irrecv.decode(&results))         //Если произошло событие/кнопка была нажата
  {
   
    switch ( results.value )
    {
    case 0x88877://кнопка "вверх-вперёд"
       N=1;
        break;
    case 0x8A857://кнопка "вниз-назад"
        N=2;
        break;
    case 0x8C837://кнопка "ОК-стоп"
       N=0;
        break;
       
    case 0x848B7://кнопка "влево"
       N=3;
        break;
    case 0x828D7://кнопка "вправо"
       N=4;
        break;
        
    }
     
     irrecv.resume();//Считываем следующую значение/кнопку
   } goto metka;}

}
 //////////////////////////////////////////////////////////////////////


