#define PIN 0 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define PIN 1 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define PIN 7 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define PIN 6 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define PIN 14 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define PIN 15 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define PIN 16 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define PIN 17 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define MODE_AM 5 // количество режимов (от 0 до указанного)
#include <GyverButton.h> //библиотека кнопок
#include <Servo.h> //библиотека серво
Servo servo1;
Servo servo2; //добавляем сервы
GButton button1(14);
GButton button2(15);
GButton button3(16);
GButton button4(17);// кнопки серво 1 (А0-А3)
GButton button5(0);
GButton button6(1); // кнопки серво2
GButton button7(6);
GButton button8(7); // кнопки переключения реле
int relay1 = 2;
int relay2 = 3;
int relay3 = 5;
int relay4 = 4; // пины реле
byte Mode = 0; // переменная положения серво2
byte rel = 0; // переменная режима реле
void setup()
{
servo1.attach(9);
servo1.write(45);
servo2.attach(8);
servo2.write(45); // определение пинов серво1 и серво2, указание начального угла
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
pinMode(relay3, OUTPUT);
pinMode(relay4, OUTPUT); // определение пинов реле, как выход
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(5, HIGH);
digitalWrite(4, HIGH); // стартовое состояние реле. NO контакты разомкнуты
}
void loop()
{
button1.tick();
button2.tick();
button3.tick();
button4.tick();
button5.tick();
button6.tick();
button7.tick();
button8.tick();// опрос кнопок постоянный
//нажатие кнопки 1
if (button1.isPress())
{
servo1.write(120); // поворот серво1 на 120
}
//нажатие кнопки 2
if (button2.isPress())
{
servo1.write(0); // поворот серво1 на 0
}
//нажатие кнопки 3
if (button3.isPress())
{
servo1.write(30); // поворот серво1 на 30
}
//нажатие кнопки 4
if (button4.isPress())
{
servo1.write(60); // поворот серво1 на 60
}
//нажатие кнопки 5
if (button5.isPress())
{
Mode++;
if (Mode > 2) Mode = 2; // поворот серво 2 в одном направлении на 2 шага
servo2.write(Mode * 45); // угол поворота серво2 при нажатии кнопки
}
//нажатие кнопки 6
if (button6.isPress())
{
Mode--;
if (Mode > 2) Mode = 0;// поворот серво 2 в обратном направлении на 2 шага
servo2.write(Mode * 45); // угол поворота серво2 при нажатии кнопки
}
//нажатие кнопки 7
if (button7.isPress()) //кнопка выбора режима реле
{
if (--rel >= MODE_AM) rel = 0; //декремент режима
switchTask(); //переключение
}
//нажатие кнопки 8
if (button8.isPress()) //кнопка выбора режима реле
{
if (++rel >= MODE_AM) rel = 5; //инкремент режима , количество режимов =5 , включая режим all off
switchTask();
}
}
void switchTask()
{
switch (rel)
{
case 0: task_0();
break;
case 1: task_1();
break;
case 2: task_2();
break;
case 3: task_3();
break;
case 4: task_4();
break;
}
}
// Переключение реле
void task_0()
{
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(5, HIGH);
digitalWrite(4, HIGH);
}
void task_1()
{
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(5, HIGH);
digitalWrite(4, HIGH);
}
void task_2()
{
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(5, HIGH);
digitalWrite(4, HIGH);
}
void task_3()
{
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(5, LOW);
digitalWrite(4, HIGH);
}
void task_4()
{
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(5, HIGH);
digitalWrite(4, LOW);
}