#define lampu 8 //Membuat variabel LED ke-pin 13.Misalnya, jadi #define led 7, maka kamu harus menyambungkan LED ke pin 7, bukan lagi ke pin 13.
#define echo 9 //Membuat variabel Echo ke-pin 12
#define trig 10 //Membuat variabel Trig ke-pin 11
long duration, distance; //Membuat variabel untuk durasi dan jarak
#include <Servo.h>
//Misalnya, jadi #define led 7, maka kamu harus menyambungkan LED ke pin 7, bukan lagi ke pin 13.
//Trig (Trigger) untuk mengirim sinyal ultrasonik.
//Echo untuk menerima pantulan sinyal dan menghitung jarak
Servo myservo;//Membuat objek servo
// Fungsi untuk membaca jarak menggunakan sensor ultrasonik
float read_srf(int pintriger, int pinecho) {
long durasi;// Variabel untuk durasi pantulan
float jarak;// Variabel untuk jarak
// Mengirim sinyal rendah ke pin trigger untuk mengosongkan sinyal sebelumnya
digitalWrite(pintriger, LOW);
delayMicroseconds(2);// Tunggu sebentar (2 mikrodetik)
// Mengirim sinyal tinggi ke pin trigger untuk mengaktifkan sensor
digitalWrite(pintriger, HIGH);
delayMicroseconds(10);// Sinyal dikirim selama 10 mikrodetik
digitalWrite(pintriger, LOW);// Mematikan sinyal setelah itu
delayMicroseconds(2); // Tunggu sebentar lagi
durasi = pulseIn(pinecho, HIGH);// Membaca waktu pantulan gelombang ultrasonik
// Menghitung jarak berdasarkan durasi pantulan
distance = (duration / 2) / 29.1; //Rumus mengubah durasi menjadi jarak (cm)
return jarak;// Mengembalikan nilai jarak yang diukur
}
void setup() {
Serial.begin (9600); //Berfungsi untuk komunikasi serial dengan komputer
pinMode(trig, OUTPUT); //Set varibel trigPin sebagai output
pinMode(echo, INPUT); //Set variabel echoPin sebagai input
pinMode(lampu, OUTPUT); //Set variabel led sebagai output
myservo.attach(9);
}
void loop() {
//Program agar Trig mengirim sinyal ultrasonik
digitalWrite(trig, LOW);
delayMicroseconds(5);
digitalWrite(trig, HIGH);
delayMicroseconds(5);
digitalWrite(trig, LOW);
delayMicroseconds(5);
duration = pulseIn(echo, HIGH); //Echo menerima sinyal ultrasonik
distance = (duration/2)/29.1; //Rumus mengubah durasi menjadi jarak (cm)
int jarak = read_srf(trig, echo);
// Jika jarak kurang dari 150 cm, LED menyala dan servo bergerak ke kanan (90°)
if (distance <= 150) {
digitalWrite(lampu, HIGH);
// Perlahan-lahan menggerakkan servo ke sudut 90°
for (int pos = 0; pos <= 90; pos++) {
myservo.write(pos);
delay(20); // Memperlambat gerakan servo
}
} else {
digitalWrite(lampu, LOW);
// Mengembalikan servo ke posisi 0°
for (int pos = 90; pos >= 0; pos--) {
myservo.write(pos);
delay(20); // Memperlambat gerakan servo
}
}
//Meanmpilkan jarak di serial monitor dengan jeda 0.05 detik
Serial.print(distance);
Serial.println(" cm");
delay(5);
}