#define ECHO_PIN 3
#define TRIG_PIN 2
#define pinBuzzer 5
#include <Servo.h>
Servo myservo;
int rotasi = 90;
int interval = 0;
float readDistanceCM() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
return duration * 0.034 / 2;
}
void soundBuzzer() {
if (interval < 500) {
tone(pinBuzzer, 250);
} else if (interval > 500) {
tone(pinBuzzer, 100, 800);
}
}
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
Serial.begin(115200);
pinMode(pinBuzzer, OUTPUT);
myservo.attach(9);
myservo.write(90);
}
void loop() {
tutupPalang();
interval += 100;
if (interval > 1000) interval = 0;
// Display distance on serial monitor
float distance = readDistanceCM();
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
}
void tutupPalang() {
float jarak = readDistanceCM();
if (jarak > 0 && jarak < 100) {
soundBuzzer();
tutup();
} else {
buka();
noTone(pinBuzzer);
}
}
void tutup() {
if (rotasi <= 90) {
myservo.write(rotasi);
delay(100);
rotasi--;
}
if (rotasi <= 0) rotasi = 0;
}
void buka() {
if (rotasi <= 90) {
myservo.write(rotasi);
delay(100);
rotasi += 4;
}
if (rotasi >= 90) rotasi = 90;
}