// Подключаем библиотеки
#include <Servo.h>
// Создаем объект класса
Servo ser;
//Определяем пины подключения
#define SERVO_PIN_PWM (uint8_t)(3)
#define PIN_LED_STATE_RDY (uint8_t)(12)
#define PIN_LED_STATE_WORK (uint8_t)(8)
#define PIN_LEFT_STATE_SW (uint8_t)(7)
#define PIN_RIGHT_STATE_SW (uint8_t)(5)
// Функция принимающая объект класса, стартовое и конечное положение
void servo_working(Servo *servo, uint8_t PtStart, uint8_t PtEnd)
{
// Сравнение положения для того, что бы понять в какую сторону идти
if(PtStart > PtEnd)
{
//Цикл поворота
for(uint8_t i = PtStart; i > PtEnd; i--)
{
// Проверка на выключение, если выключили принудительно останавливаем
if(digitalRead(PIN_LEFT_STATE_SW))
{
break;
}
//Команда на управление сервой
servo->write(i);
delay(15);
}
}
else
// описывает тот же самый процесс обратного условия
{
for(uint8_t i = PtStart; i < PtEnd; i++)
{
if(digitalRead(PIN_LEFT_STATE_SW))
{
break;
}
servo->write(i);
delay(15);
}
}
}
// Настройка пинов
void setup()
{
Serial.begin(9600);
ser.attach(SERVO_PIN_PWM);
pinMode(PIN_LED_STATE_RDY, OUTPUT);
pinMode(PIN_LED_STATE_WORK, OUTPUT);
pinMode(PIN_LEFT_STATE_SW, INPUT);
pinMode(PIN_RIGHT_STATE_SW, INPUT);
digitalWrite(PIN_LED_STATE_RDY, HIGH);
digitalWrite(PIN_LED_STATE_WORK, LOW);
}
void loop()
{
//Проверка на сигнал пина
if(digitalRead(PIN_LEFT_STATE_SW))
{
// если выключен, то включаем зеленую и выключаем красную
digitalWrite(PIN_LED_STATE_RDY, HIGH);
digitalWrite(PIN_LED_STATE_WORK, LOW);
}
else if (digitalRead(PIN_RIGHT_STATE_SW))
// если включен, то выключаем зеленую и включаем красную
{
digitalWrite(PIN_LED_STATE_RDY, LOW);
digitalWrite(PIN_LED_STATE_WORK, HIGH);
// Запускаем функцию
servo_working(&ser, 0, 90);
}
}