#include <Servo.h>
Servo servo1;
Servo servo2;
// Контакты сервоприводов
const int servo1Pin = 9;
const int servo2Pin = 10;
// Контакты кнопок
const int buttonPins[3] = {2, 3, 4};
// Положения сервоприводов
const int homeAngle = 90;
// Положение друг к другу
const int servo1In = 0;
const int servo2In = 180;
// Положение в разные стороны
const int servo1Out = 180;
const int servo2Out = 0;
// Защита кнопок от дребезга
unsigned long buttonTimer[3] = {0, 0, 0};
bool lastReading[3] = {HIGH, HIGH, HIGH};
bool buttonState[3] = {HIGH, HIGH, HIGH};
void setup() {
servo1.attach(servo1Pin);
servo2.attach(servo2Pin);
for (int i = 0; i < 3; i++) {
pinMode(buttonPins[i], INPUT_PULLUP);
}
// Исходное положение
servo1.write(homeAngle);
servo2.write(homeAngle);
}
// Функция управления сервоприводами
void moveServos(int angle1, int angle2) {
servo1.write(angle1);
servo2.write(angle2);
}
// Проверка кнопок
void checkButtons() {
unsigned long now = millis();
for (int i = 0; i < 3; i++) {
bool reading = digitalRead(buttonPins[i]);
if (reading != lastReading[i]) {
buttonTimer[i] = now;
}
if (now - buttonTimer[i] > 40) {
if (reading != buttonState[i]) {
buttonState[i] = reading;
if (buttonState[i] == LOW) {
// Зелёная: смотрят друг на друга
if (i == 0) {
moveServos(servo1In, servo2In);
}
// Синяя: смотрят в разные стороны
if (i == 1) {
moveServos(servo1Out, servo2Out);
}
// Красная: исходное положение
if (i == 2) {
moveServos(homeAngle, homeAngle);
}
}
}
}
lastReading[i] = reading;
}
}
void loop() {
checkButtons();
}