#include <Servo.h> // подключаем библиотеку для управления сервоприводом
#include <AnalogKey.h>
#include <GyverButton.h> // библиотека управления кнопками
#include <EEPROM.h> // библиотека для работы с памятью EEPROM
#define DEBOUNCE 100 // задержка для устранения дребезга кнопок
#define Relay1 7
#define Relay2 8
#define Relay3 16
#define EEPROM_ADDR 100 // адрес ячейки памяти
boolean btnState, btnFlag;
boolean butt2;
boolean butt2_flag=0;
boolean led_flag2=0;
unsigned long debounceTimer;
boolean Poz=0;
int ugol1;
int ugol2;
int skorost1;
int skorost2;
Servo servo1;
Servo servo2;
void setup()
{
pinMode(5, OUTPUT); // управляющий выход для сервы №1
pinMode(6, OUTPUT); // управляющий выход для сервы №2
pinMode(9, INPUT_PULLUP); // кнопка №1
pinMode(10, INPUT_PULLUP); // кнопка №2
pinMode(15, OUTPUT); // выход на светодиод №1(индикация)
pinMode(17, OUTPUT); // выход на светодиод №2(индикация)
pinMode(Relay1, OUTPUT); // управляющий выход реле №1
pinMode(Relay2, OUTPUT); // управляющий выход реде №2
pinMode(Relay3, OUTPUT); // управляющий выход на реле №3
servo1.attach(5); // подключаем серво 1 к 5 выходу
servo2.attach(6); // подключаем серво 2 к 6 выходу
EEPROM.get(EEPROM_ADDR, Poz); // считываем из памяти положение
if (Poz=true)
{
servo1.write(115);
servo2.write(45);
digitalWrite(17, HIGH);
}
if (Poz=false)
{
servo1.write(0);
servo2.write(165);
digitalWrite(17, LOW);
}
}
void loop()
{
btnState=!digitalRead(10); // опрашиваем кнопки
butt2=!digitalRead(9);
int skorost1 = 25;
int skorost2 = 25;
if (!btnState && btnFlag&&(millis() - debounceTimer > DEBOUNCE)) // антидребезг кнопок
{
btnFlag=false;
debounceTimer = millis();
for (ugol2 = 165; ugol2 > 45; ugol2 -= 1) // цикл плавного поворота сервы 2
{
servo2.write (ugol2);
delay (skorost2);
}
for (ugol1 = 0; ugol1 < 115; ugol1 +=1) // цикл плавного поворота сервы 1
{
servo1.write (ugol1);
delay (skorost1);
}
Poz=true;
EEPROM.put(EEPROM_ADDR, Poz); // запись позиции в память
digitalWrite(17, HIGH); // индикация светодиода (вкл)
}
if (btnState && !btnFlag &&(millis() - debounceTimer > DEBOUNCE)) // антидребезг кнопки
{
debounceTimer = millis();
btnFlag=true;
for (ugol1 = 115; ugol1 > 0; ugol1 -= 1) // цикл плавного поворота сервы 1
{
servo1.write (ugol1);
delay (skorost1);
}
for (ugol2 = 45; ugol2 < 165; ugol2 += 1) // цикл плавного поворота сервы 2
{
servo2.write (ugol2);
delay (skorost2);
}
Poz=false;
EEPROM.put(EEPROM_ADDR, Poz); // запись позиции в память
digitalWrite(17, LOW); // индикация светодиода (выкл)
}
if (butt2==1 && butt2_flag==0) // цикл включения реле
{
butt2_flag=1;
led_flag2=!led_flag2;
digitalWrite(Relay1, HIGH);
digitalWrite(Relay2, HIGH);
digitalWrite(Relay3, LOW);
digitalWrite(15, LOW); // индикация светодиода (выкл)
}
if (butt2==0 && butt2_flag==1) // цикл выключения реле
{
butt2_flag=0;
digitalWrite(Relay1, LOW);
digitalWrite(Relay2, LOW);
digitalWrite(Relay3, HIGH);
digitalWrite(15, HIGH); // индикация светодиода (вкл)
}
}