#include <Servo.h>
// Создаем объекты сервоприводов
Servo servoX; // Сервопривод по оси X
Servo servoY; // Сервопривод по оси Y
// Пины подключения сервоприводов
const int servoXPin = 9; // Пин для сервопривода X
const int servoYPin = 10; // Пин для сервопривода Y
// Параметры движения
const int minPosX = 0; // Минимальное положение (0 градусов)
const int maxPosX = 180; // Максимальное положение (180 градусов)
const int minPosY = 60; // Минимальное положение (0 градусов)
const int maxPosY = 150; // Максимальное положение (180 градусов)
const int midPos = 90; // Среднее положение (90 градусов)
int step = 1; // Шаг движения
// Текущие и целевые положения
int currentX = midPos;
int targetX = midPos;
int currentY = midPos;
int targetY = midPos;
// Таймеры для движения
unsigned long moveTimerX = 0;
unsigned long moveTimerY = 0;
unsigned long changeTimerX = 0;
unsigned long changeTimerY = 0;
// Интервалы времени
unsigned long moveInterval = 50; // Интервал движения (мс)
const unsigned long changeInterval = 50; // Интервал смены цели (мс)
void setup() {
// Инициализация сервоприводов
servoX.attach(servoXPin);
servoY.attach(servoYPin);
// Устанавливаем начальное положение
servoX.write(midPos);
servoY.write(midPos);
// Задаем начальные таймеры
moveTimerX = millis();
moveTimerY = millis();
changeTimerX = millis();
changeTimerY = millis();
}
void loop() {
step = random(1,5);
moveInterval = random(random(1,50),random(50,500));
// Движение по оси X
if (millis() - moveTimerX >= moveInterval) {
moveServo(currentX, targetX, step, servoX);
moveTimerX = millis();
// Случайная смена цели
if (millis() - changeTimerX >= random(1000, 360000)) {
targetX = random(minPosX, maxPosX + 1);
changeTimerX = millis();
}
}
// Движение по оси Y
if (millis() - moveTimerY >= moveInterval) {
moveServo(currentY, targetY, step, servoY);
moveTimerY = millis();
// Случайная смена цели
if (millis() - changeTimerY >= random(100, 360000)) {
targetY = random(minPosY, maxPosY + 1);
changeTimerY = millis();
}
}
}
// Функция плавного перемещения сервопривода
void moveServo(int ¤t, int target, int step, Servo servo) {
if (current < target) {
current = min(current + step, target);
} else if (current > target) {
current = max(current - step, target);
}
servo.write(current);
}голова вверх
голова вниз
голова влево
голова вправо
голова прямо-------------------
|
|
|
голова прямо