#include <Servo.h>

#define trigPin 2    // Pin trigger sensor ultrasonik
#define echoPin 3    // Pin echo sensor ultrasonik
#define ledPin 7     // Pin LED
#define buzzerPin 8  // Pin buzzer
#define servoPin 9   // Pin untuk servo motor

Servo myServo;  // Inisialisasi objek servo

void setup() {
  Serial.begin(9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(buzzerPin, OUTPUT);
  myServo.attach(servoPin);  // Menghubungkan servo ke pin 9
}

void loop() {
  long duration, distance;

  // Mengirim sinyal ultrasonik
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  // Menerima waktu pantulan gelombang ultrasonik
  duration = pulseIn(echoPin, HIGH);

  // Menghitung jarak berdasarkan waktu yang diterima
  distance = (duration / 2) / 29.1; // Dalam satuan cm

  Serial.print("Jarak: ");
  Serial.println(distance);

  // Jika kereta berjarak 30 cm (contoh 30 cm)
  if (distance <= 30) {
    // Mengatur LED merah menyala
    digitalWrite(ledPin, HIGH);

    // Mengatur bunyi buzzer
    tone(buzzerPin, 30); // Frekuensi bunyi buzzer

    // Menggerakkan servo untuk menutup portal
    myServo.write(45); // Menggerakkan servo ke posisi menutup

    // Menunggu sebentar sebelum menutup portal (misalnya, 2detik)
    delay(2000);

    // Menutup portal
    digitalWrite(ledPin, LOW); // Matikan LED
    noTone(buzzerPin); // Matikan bunyi buzzer
    myServo.write(0); // Menggerakkan servo ke posisi membuka
  }
}