#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
const int trigPin = 9;
const int echoPin = 10;
const int ledPin = 4;
const int buzzerPin = 7; // Pin buzzer bisa disesuaikan
const int servoPin = 6; // Pin servo bisa disesuaikan
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C untuk modul LCD 16x2
Servo myServo; // Inisialisasi objek Servo
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
Serial.begin(9600); // Inisialisasi komunikasi serial untuk debugging
// Inisialisasi LCD
lcd.init();
lcd.backlight();
// Inisialisasi servo
myServo.attach(servoPin);
}
void loop() {
long duration, distance;
// Mengirimkan pulse ultrasonik
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Menerima hasil pengukuran
duration = pulseIn(echoPin, HIGH);
// Menghitung jarak berdasarkan waktu yang diterima
distance = duration * 0.034 / 2;
// Tampilkan jarak pada serial monitor untuk debugging
Serial.print("Distance: ");
Serial.println(distance);
// Tampilkan hasil pada LCD
lcd.clear();
lcd.setCursor(0, 0);
if (distance < 10) {
lcd.print("Kotak Terbuka");
digitalWrite(ledPin, HIGH);
// Bergerakkan servo ke posisi 90 derajat
myServo.write(90);
// Bunyikan buzzer
tone(buzzerPin, 1000);
} else {
lcd.print("Kotak Tertutup");
digitalWrite(ledPin, LOW);
// Menggerakkan servo ke posisi awal (0 derajat)
myServo.write(0);
// Matikan bunyi buzzer
noTone(buzzerPin);
}
delay(100); // Tunggu sebelum mengukur kembali
}