/*
Arduino | coding help
Johnos — 6/30/24 at 11:33 PM
im trying to make eyeballs that move randomly but also
together does anyone happen to know a good code for that?
or i could post the one i have here and someone could see
why the eyes arent in sync?
*/
#include <Servo.h>
// Define servo objects for two servos
Servo servoX; // Horizontal servo
Servo servoY; // Vertical servo
// Pins for the servos
const int servoPinX = 10; // Connect horizontal servo to pin 9
const int servoPinY = 9; // Connect vertical servo to pin 10
// Variables to store current position of the servos
int posServoX = 90; // Starting position for horizontal servo (centered)
int posServoY = 90; // Starting position for vertical servo (centered)
// Constants for servo movement limits
const int minX = 60; // Minimum position for horizontal movement
const int maxX = 120; // Maximum position for horizontal movement
const int minY = 60; // Minimum position for vertical movement
const int maxY = 120; // Maximum position for vertical movement
void setup() {
// Attach servos to their respective pins
servoX.attach(servoPinX);
servoY.attach(servoPinY);
// Initialize servos to starting position
servoX.write(posServoX);
servoY.write(posServoY);
// Optional: Initialize random seed
randomSeed(analogRead(0));
// Optional: Serial communication for debugging
Serial.begin(9600);
}
void loop() {
// Generate random positions for both servos
int newX = random(minX, maxX + 1);
int newY = random(minY, maxY + 1);
// Move servos simultaneously
moveServos(newX, newY);
// Optional: Print positions to serial monitor for debugging
Serial.print("X: ");
Serial.print(newX);
Serial.print(", Y: ");
Serial.println(newY);
// Delay before generating new random positions
delay(random(1000, 3000));
}
// Function to move servos to specified positions
void moveServos(int newX, int newY) {
// Move horizontally
if (newX != posServoX) {
if (newX > posServoX) {
for (int i = posServoX; i <= newX; i++) {
servoX.write(i);
servoY.write(map(i, posServoX, newX, posServoY, newY));
delay(10); // Adjust speed of movement
}
} else {
for (int i = posServoX; i >= newX; i--) {
servoX.write(i);
servoY.write(map(i, posServoX, newX, posServoY, newY));
delay(10); // Adjust speed of movement
}
}
posServoX = newX;
}
// Move vertically (if necessary)
if (newY != posServoY) {
if (newY > posServoY) {
for (int i = posServoY; i <= newY; i++) {
servoY.write(i);
servoX.write(map(i, posServoY, newY, posServoX, newX));
delay(10); // Adjust speed of movement
}
} else {
for (int i = posServoY; i >= newY; i--) {
servoY.write(i);
servoX.write(map(i, posServoY, newY, posServoX, newX));
delay(10); // Adjust speed of movement
}
}
posServoY = newY;
}
}