#include <Servo.h>
// Definisi pin
const int trigPin1 = 9;
const int echoPin1 = 10;
const int trigPin2 = 11;
const int echoPin2 = 12;
const int ledMerah = 7;
const int buzz = 8;
const int servoPin = 6;
Servo palangServo;
long duration1, distance1;
long duration2, distance2;
long getDistance(int trigPin, int echoPin) {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
long distance = duration * 0.034 / 2;
return distance;
}
void setup() {
Serial.begin(9600);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
pinMode(ledMerah, OUTPUT);
pinMode(buzz, OUTPUT);
palangServo.attach(servoPin);
palangServo.write(90); //servo dalam kondisi normal atau tertutup
}
void loop() {
//ultrasonik 1
distance1 = getDistance(trigPin1, echoPin1);
//ultrasonik 2
distance2 = getDistance(trigPin2, echoPin2);
//sensor 1 (jarak kurang dari 300 cm)
if (distance1 < 200) {
palangServo.write(0); // Buka palang
digitalWrite(ledMerah, LOW); // Mati LED merah
}
// sensor 2 (jarak kurang dari 300 cm)
if (distance2 < 30) {
palangServo.write(90); // Tutup palang
tone(buzz, 1500);
delay(100);
noTone(buzz);
digitalWrite(ledMerah, HIGH);
delay(50);
digitalWrite(ledMerah, LOW);
}
// serial monitor menalmpilkan jarak
Serial.print("Distance1: ");
Serial.print(distance1);
Serial.print(" cm, Distance2: ");
Serial.print(distance2);
Serial.println(" cm");
delay(100); // Penundaan untuk stabilitas pembacaan sensor
}