#include <Servo.h>
Servo servo1;
Servo servo2;
Servo servo3;
const int servo1Pin = 9;
const int servo2Pin = 10;
const int servo3Pin = 11;
const int minDelay = 500; // Minimum delay time in milliseconds
const int maxDelay = 2000; // Maximum delay time in milliseconds
void setup() {
servo1.attach(servo1Pin);
servo2.attach(servo2Pin);
servo3.attach(servo3Pin);
servo1.write(20); // Initial position
servo2.write(140); // Initial position
servo3.write(20); // Initial position for servo3
randomSeed(analogRead(0)); // Seed random generator
}
void loop() {
int delay1 = random(minDelay, maxDelay);
int delay2 = random(minDelay, maxDelay);
int delay3 = random(minDelay, maxDelay);
// Ensure the servos do not hit at the same time
while (abs(delay1 - delay2) < 500 || abs(delay1 - delay3) < 500 || abs(delay2 - delay3) < 500) { // 500ms buffer to avoid simultaneous hits
delay2 = random(minDelay, maxDelay);
delay3 = random(minDelay, maxDelay);
}
if (delay1 < delay2 && delay1 < delay3) {
hitServo(servo1, delay1, true);
if (delay2 < delay3) {
delay(delay2 - delay1); // Wait for the second servo
hitServo(servo2, 0, false);
delay(delay3 - delay2); // Wait for the third servo
hitServo(servo3, 0, true);
} else {
delay(delay3 - delay1); // Wait for the second servo
hitServo(servo3, 0, true);
delay(delay2 - delay3); // Wait for the third servo
hitServo(servo2, 0, false);
}
} else if (delay2 < delay1 && delay2 < delay3) {
hitServo(servo2, delay2, false);
if (delay1 < delay3) {
delay(delay1 - delay2); // Wait for the second servo
hitServo(servo1, 0, true);
delay(delay3 - delay1); // Wait for the third servo
hitServo(servo3, 0, true);
} else {
delay(delay3 - delay2); // Wait for the second servo
hitServo(servo3, 0, true);
delay(delay1 - delay3); // Wait for the third servo
hitServo(servo1, 0, true);
}
} else {
hitServo(servo3, delay3, true);
if (delay1 < delay2) {
delay(delay1 - delay3); // Wait for the second servo
hitServo(servo1, 0, true);
delay(delay2 - delay1); // Wait for the third servo
hitServo(servo2, 0, false);
} else {
delay(delay2 - delay3); // Wait for the second servo
hitServo(servo2, 0, false);
delay(delay1 - delay2); // Wait for the third servo
hitServo(servo1, 0, true);
}
}
// Adding additional random hits
int randomServo = random(0, 3);
if (randomServo == 0) {
delay(random(minDelay, maxDelay));
hitServo(servo1, 0, true);
} else if (randomServo == 1) {
delay(random(minDelay, maxDelay));
hitServo(servo2, 0, false);
} else {
delay(random(minDelay, maxDelay));
hitServo(servo3, 0, true);
}
// Adding some rest time before next round
delay(random(minDelay, maxDelay));
}
void hitServo(Servo &servo, int initialDelay, bool opposite) {
delay(initialDelay);
if (opposite) {
servo.write(140); // Rotate to hit in opposite direction
} else {
servo.write(20); // Rotate to hit
}
delay(300); // Wait for the hit
if (opposite) {
servo.write(20); // Rotate back to initial position
} else {
servo.write(140); // Rotate back to initial position
}
delay(300); // Wait to stabilize
}