#include <Servo.h>
#define TRIG_PIN 2
#define ECHO_PIN 3
#define BUZZER_PIN 5
#define SERVO_PIN 9
Servo palang;
long duration;
int distance;
bool isOpen = false; // status palang
void setup() {
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
palang.attach(SERVO_PIN);
palang.write(0); // posisi awal tertutup
}
void loop() {
// Kirim pulsa trigger
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Baca echo
duration = pulseIn(ECHO_PIN, HIGH);
distance = duration * 0.034 / 2; // konversi cm
Serial.print("Jarak: ");
Serial.print(distance);
Serial.println(" cm");
if (distance > 0 && distance < 100) {
if (!isOpen) {
// Jika palang baru dibuka
palang.write(90);
Serial.println("Palang Terbuka");
// Bunyi buzzer 2 detik
digitalWrite(BUZZER_PIN, HIGH);
delay(2000);
digitalWrite(BUZZER_PIN, LOW);
isOpen = true;
}
} else {
if (isOpen) {
// Jika palang baru ditutup
palang.write(0);
Serial.println("Palang Tertutup");
isOpen = false;
}
}
delay(200);
}