#include <Servo.h>
const int trigPin1 = 41;
const int echoPin1 = 43;
const int redPin1 = 7;
const int greenPin1 = 6;
const int bluePin1 = 5;
Servo servo1;
int lastRotatedPin1 = -1;
const int trigPin2 = 47;
const int echoPin2 = 49;
const int redPin2 = 25;
const int greenPin2 = 27;
const int bluePin2 = 29;
Servo servo2;
int lastRotatedPin2 = -1;
const int trigPin3 = 51;
const int echoPin3 = 53;
const int redPin3 = 33;
const int greenPin3 = 35;
const int bluePin3 = 37;
Servo servo3;
int lastRotatedPin3 = -1;
void setup() {
Serial.begin(9600);
servo1.attach(13);
servo1.write(0);
servo2.attach(12);
servo2.write(0);
servo3.attach(11);
servo3.write(0);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(redPin1, OUTPUT);
pinMode(greenPin1, OUTPUT);
pinMode(bluePin1, OUTPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
pinMode(redPin2, OUTPUT);
pinMode(greenPin2, OUTPUT);
pinMode(bluePin2, OUTPUT);
pinMode(trigPin3, OUTPUT);
pinMode(echoPin3, INPUT);
pinMode(redPin3, OUTPUT);
pinMode(greenPin3, OUTPUT);
pinMode(bluePin3, OUTPUT);
}
void loop() {
int distance1 = getDistance(trigPin1, echoPin1);
int distance2 = getDistance(trigPin2, echoPin2);
int distance3 = getDistance(trigPin3, echoPin3);
Serial.print("Distance 1: ");
Serial.println(distance1);
Serial.print("Distance 2: ");
Serial.println(distance2);
Serial.print("Distance 3: ");
Serial.println(distance3);
setColorBasedOnDistance(distance1, servo1, redPin1, greenPin1, bluePin1, lastRotatedPin1);
setColorBasedOnDistance(distance2, servo2, redPin2, greenPin2, bluePin2, lastRotatedPin2);
setColorBasedOnDistance(distance3, servo3, redPin3, greenPin3, bluePin3, lastRotatedPin3);
}
int getDistance(int trigPin, int echoPin) {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
int distance = duration * 0.034 / 2;
Serial.print("Duration: ");
Serial.print(duration);
Serial.print(" microseconds. Distance: ");
Serial.println(distance);
return distance;
}
void setColorBasedOnDistance(int distance, Servo servo, int redPin, int greenPin, int bluePin, int& lastRotatedPin) {
if (distance > 7) {
if (lastRotatedPin != servo.read()) {
Serial.println("Turning LED to red");
analogWrite(redPin, 255);
analogWrite(greenPin, 0);
analogWrite(bluePin, 0);
delay(5000); // Adjust the delay to control how long the LED stays on
Serial.println("Moving Servo from 0 to 90 degrees");
for (int angle = 0; angle <= 90; angle++) {
servo.write(angle);
delay(50); // Adjust the delay to make the servo move faster
}
delay(5000); // Wait for 5 seconds before moving the servo back
Serial.println("Moving Servo from 90 to 0 degrees");
for (int angle = 90; angle >= 0; angle--) {
servo.write(angle);
delay(50); // Adjust the delay to make the servo move faster
}
Serial.println("Turning LED to blue");
analogWrite(redPin, 0);
analogWrite(greenPin, 0);
analogWrite(bluePin, 255);
delay(5000); // Adjust the delay to control how long the LED stays on
lastRotatedPin = servo.read();
}
} else {
if (lastRotatedPin != -1) {
Serial.println("Turning LED to blue");
analogWrite(redPin, 0);
analogWrite(greenPin, 0);
analogWrite(bluePin, 255);
delay(5000); // Adjust the delay to control how long the LED stays on
lastRotatedPin = -1;
}
}
}