// define pins for ultrasonic sensor and LEDs
const int trigPin = 2;
const int echoPin = 3;
const int greenLedPin = 4;
const int redLedPin = 5;
const int trigPin2 = 6;
const int echoPin2 = 7;
const int greenLedPin2 = 8;
const int redLedPin2 = 9;
const int trigPin3 = 10;
const int echoPin3 = 11;
const int greenLedPin3 = 12;
const int redLedPin3 = 13;
// define variables to keep track of LED states and previous distance
bool greenLedOn = false;
bool redLedOn = false;
bool greenLedOn2 = false;
bool redLedOn2 = false;
bool greenLedOn3 = false;
bool redLedOn3 = false;
int prevDistance = 0;
int prevDistance2 = 0;
int prevDistance3 = 0;
void setup() {
// initialize serial communication
Serial.begin(9600);
// define pin modes
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(greenLedPin, OUTPUT);
pinMode(redLedPin, OUTPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
pinMode(greenLedPin2, OUTPUT);
pinMode(redLedPin2, OUTPUT);
}
void loop() {
// send 10us pulse to trigger pin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// measure the duration of the pulse and calculate distance in cm
long duration = pulseIn(echoPin, HIGH);
int distance = duration / 58;
// print distance to serial monitor
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// check if distance has changed since last measurement
if (distance != prevDistance && distance != prevDistance + 1 && distance != prevDistance - 1) {
// turn off both LEDs
digitalWrite(greenLedPin, LOW);
digitalWrite(redLedPin, LOW);
// turn on green LED if distance is less than 10cm, else turn on red LED
if (distance < 10) {
digitalWrite(greenLedPin, HIGH);
greenLedOn = true;
} else {
digitalWrite(redLedPin, HIGH);
redLedOn = true;
}
// wait for 1 second
delay(1000);
// turn off the LED that was turned on
if (greenLedOn) {
digitalWrite(greenLedPin, LOW);
greenLedOn = false;
} else {
digitalWrite(redLedPin, LOW);
redLedOn = false;
}
// update previous distance
prevDistance = distance;
}
// wait for a moment before taking another measurement
delay(100);
// send 10us pulse to trigger pin
digitalWrite(trigPin2, LOW);
delayMicroseconds(2);
digitalWrite(trigPin2, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin2, LOW);
// measure the duration of the pulse and calculate distance in cm
long duration2 = pulseIn(echoPin2, HIGH);
int distance2 = duration2 / 58;
// print distance to serial monitor
Serial.print("Distance2: ");
Serial.print(distance2);
Serial.println(" cm");
// check if distance has changed since last measurement
if (distance2 != prevDistance2 && distance2 != prevDistance2 + 1 && distance2 != prevDistance2 - 1) {
// turn off both LEDs
digitalWrite(greenLedPin2, LOW);
digitalWrite(redLedPin2, LOW);
// turn on green LED if distance is less than 10cm, else turn on red LED
if (distance2 < 10) {
digitalWrite(greenLedPin2, HIGH);
greenLedOn2 = true;
} else {
digitalWrite(redLedPin2, HIGH);
redLedOn2 = true;
}
// wait for 1 second
delay(1000);
// turn off the LED that was turned on
if (greenLedOn2) {
digitalWrite(greenLedPin2, LOW);
greenLedOn2 = false;
} else {
digitalWrite(redLedPin2, LOW);
redLedOn2 = false;
}
// update previous distance
prevDistance2 = distance2;
}
// wait for a moment before taking another measurement
delay(100);
// send 10us pulse to trigger pin
digitalWrite(trigPin3, LOW);
delayMicroseconds(2);
digitalWrite(trigPin3, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin3, LOW);
// measure the duration of the pulse and calculate distance in cm
long duration3 = pulseIn(echoPin3, HIGH);
int distance3 = duration3 / 58;
// print distance to serial monitor
Serial.print("Distance3: ");
Serial.print(distance3);
Serial.println(" cm");
// check if distance has changed since last measurement
if (distance3 != prevDistance3 && distance3 != prevDistance3 + 1 && distance3 != prevDistance3 - 1) {
// turn off both LEDs
digitalWrite(greenLedPin3, LOW);
digitalWrite(redLedPin3, LOW);
// turn on green LED if distance is less than 10cm, else turn on red LED
if (distance3 < 10) {
digitalWrite(greenLedPin3, HIGH);
greenLedOn3 = true;
} else {
digitalWrite(redLedPin3, HIGH);
redLedOn3 = true;
}
// wait for 1 second
delay(1000);
// turn off the LED that was turned on
if (greenLedOn3) {
digitalWrite(greenLedPin3, LOW);
greenLedOn3 = false;
} else {
digitalWrite(redLedPin3, LOW);
redLedOn3 = false;
}
// update previous distance
prevDistance3 = distance3;
}
// wait for a moment before taking another measurement
delay(100);
}