// Inisialisasi pin setiap alat yang digunakan (sensor, aktuator, output)
int pinBuzzer = 3; // pin buzzer di arduino adalah 3
int pinLed1 = 8; // pin led 1 di arduino adalah 8
int pinLed2 = 7; // pin led 2 di arduino adalah 7
int pinLed3 = 6; // pin led 3 di arduino adalah 6
int pinPir = 2; // pin sensor pir di arduino adalah 2
int pinTrig = 5; // pin trigger dari ultrasonik di arduino adalah 5
int pinEcho = 4; // pin echo dari ultrasonik di arduino adalah 4
// Inisialisasi nilai awal sensor pir
int pirValue = 0; // nilai awal sensor pir di set 0
/* void setup pada Arduino berfungsi sebagai bentuk inisialisasi atau pengenalan
dalam program Arduino dan hanya dieksekusi sekali sejak program dijalankan*/
void setup() {
//Serial.begin untuk menentukan kecepatan dan penerimaan data melalui port serial
Serial.begin(9600); // kecepatan dan penerimaan data 9600 bit per sekon
// Menentukan mode dari pin yang telah diinisialisasi sebagai input / output
pinMode(pinBuzzer, OUTPUT); //setup pin buzzer menjadi output
pinMode(pinLed1, OUTPUT); //setup pin led 1 menjadi output
pinMode(pinLed2, OUTPUT); //setup pin led 2 menjadi output
pinMode(pinLed3, OUTPUT); //setup pin led 3 menjadi output
pinMode(pinPir, INPUT); //setup pin sensor pir menjadi input
pinMode(pinTrig, OUTPUT); //setup pin trigger ultrasonik menjadi output
pinMode(pinEcho, INPUT); //setup pin echo ultrasonik menjadi input
}
// fungsi tambahan untuk membaca jarak oleh sensor ultrasonik
float readDistanceCM() {
// digitalWrite = memberikan perintah untuk menentukan nilai positif/1 (HIGH)
// ataupun nilai negative/0 (LOW) pada Output Digital
digitalWrite(pinTrig, LOW); // menentukan nilai LOW untuk pin trigger (mati)
// delayMicroseconds = memberikan jeda dalam satuan microseconds
delayMicroseconds(2); // jeda selama 2 microsecond
digitalWrite(pinTrig, HIGH); // menentukan nilai HIGH untuk pin trigger (hidup)
delayMicroseconds(10); // jeda selama 10 microsecond
digitalWrite(pinTrig, LOW); // menentukan nilai LOW untuk pin trigger (mati)
// variabel baru dengan nama 'duration' bertipe integer
// pulseIn = Fungsi untuk membaca pulsa HIGH atau LOW pada pin.
int duration = pulseIn(pinEcho, HIGH); // nilai duration akan diisi oleh fungsi pulseIn
return duration * 0.034 / 2; // mengembalikan nilai durasi x 0,034 / 2 (nilai jarak)
}
// void loop akan dieksekusi terus-menerus secara berurutan hingga program berhenti dijalankan
void loop() {
// digitalRead = fungsi untuk membaca data input dari pin digital
pirValue = digitalRead(pinPir); // pirValue = data input dari pin sensor
// Percabangan
if (pirValue == HIGH){ // program dijalankan jika nilai pirValue adalah HIGH
// variabel baru dengan tipe float
float distance = readDistanceCM(); // memanggil fungsi readDistanceCM untuk mendapatkan jarak
if (distance < 50) { // jika jarak lebih kecil dari 50cm
digitalWrite(pinLed3, HIGH); // led 3 akan HIGH atau HIDUP
// Serial.print = untuk menampilkan di serial monitor
Serial.print("Measured distance: ");
// Serial.print = untuk menampilkan di serial monitor tambah line baru
Serial.println(readDistanceCM()); // menampilkan nilai jarak
// tone = untuk membunyikan nada dengan frekuensi tertentu
tone(pinBuzzer, 300); // lewat pinBuzzer akan membunyikan suara 300hz
}
// dijalankan jika jarak lebih dari 50cm dan kurang dari 100cm
else if (distance > 50 && distance < 100) {
digitalWrite(pinLed2, HIGH); // led 2 akan HIGH atau HIDUP
Serial.print("Measured distance: ");
Serial.println(readDistanceCM()); // menampilkan nilai jarak
tone(pinBuzzer, 200); // lewat pinBuzzer akan membunyikan suara 200hz
}
// dijalankan jika jarak lebih dari 100cm
else if (distance > 100) {
digitalWrite(pinLed1, HIGH); // led 1 akan HIGH atau HIDUP
Serial.print("Measured distance: ");
Serial.println(readDistanceCM()); // menampilkan nilai jarak
tone(pinBuzzer, 100); // lewat pinBuzzer akan membunyikan suara 100hz
}
// dijalankan jika tidak memenuhi salahsatu kondisi sebelumnya (kondisi pada if dan else if)
else {
digitalWrite(pinLed3, LOW); // led 3 akan mati (LOW)
digitalWrite(pinLed2, LOW); // led 2 akan mati (LOW)
digitalWrite(pinLed1, LOW); // led 1 akan mati (LOW)
noTone(pinBuzzer); // noTone = tidak ada suara
}
}
else {
digitalWrite(pinLed3, LOW); // led 3 akan mati (LOW)
digitalWrite(pinLed2, LOW); // led 2 akan mati (LOW)
digitalWrite(pinLed1, LOW); // led 1 akan mati (LOW)
noTone(pinBuzzer); // noTone = tidak ada suara
}
delay(1000); // jeda sebesar 1000 milisecond atau 1 detik
}