#include <Servo.h>
#define echoPin 2
#define trigPin 3
#define red 10
#define green 9
#define buzzer 1
#define servoPin 5 // Ganti dengan pin yang ingin Anda gunakan untuk menghubungkan servo
long duration, distance;
Servo myservo; // Membuat objek Servo
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(buzzer, OUTPUT);
myservo.attach(5); // Menghubungkan servo ke pin yang Anda tentukan
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration / 2) / 58.0;
if (distance <= 100) {
digitalWrite(red, HIGH);
digitalWrite(green, LOW);
playMelody(); // Panggil fungsi untuk memainkan melodi
myservo.write(90);
} else {
digitalWrite(red, LOW);
digitalWrite(green, HIGH);
noTone(buzzer);
myservo.write(0); // Menggerakkan servo kembali ke posisi 0 derajat (atau sesuai dengan kebutuhan Anda)
}
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
delay(100);
}
void playMelody() {
int melody[] = {
262, 196, 196, 220, 196, 0, 247,
262, 196, 196, 220, 196, 0, 294,
262, 349, 330, 294, 247, 220, 196, 330, 349
};
int noteDuration[] = {
4, 8, 8, 4, 4, 4, 4,
4, 8, 8, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 2
};
for (int i = 0; i < sizeof(melody) / sizeof(melody[0]); i++) {
int noteDurationMS = 1000 / noteDuration[i];
tone(buzzer, melody[i], noteDurationMS);
delay(noteDurationMS + 50); // Menambah sedikit delay antara nada
}
noTone(buzzer);
}