#include <Servo.h>
#include <LiquidCrystal_I2C.h>
// Pin Assignments
const int trigPinKucing = 4; // Pin Trig sensor ultrasonik kucing
const int echoPinKucing = 5; // Pin Echo sensor ultrasonik kucing
const int trigPinPakan = 8; // Pin Trig sensor ultrasonik wadah pakan kucing
const int echoPinPakan = 9; // Pin Echo sensor ultrasonik wadah pakan kucing
const int servoPin = 3; // Pin untuk servo motor
const int buzzerPin = 13; // Pin untuk buzzer
const int ledPin = 12; // Pin untuk LED
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo servoMotor;
void setup() {
pinMode(trigPinKucing, OUTPUT);
pinMode(echoPinKucing, INPUT);
pinMode(trigPinPakan, OUTPUT);
pinMode(echoPinPakan, INPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(ledPin, OUTPUT);
servoMotor.attach(servoPin);
lcd.begin(16, 2); // Inisialisasi LCD 16x2
lcd.print("Selamat datang");
delay(1000);
lcd.clear();
}
void loop() {
long durationKucing, distanceKucing;
long durationPakan, distancePakan;
// Membaca jarak dari sensor ultrasonik kucing
digitalWrite(trigPinKucing, LOW);
delayMicroseconds(2);
digitalWrite(trigPinKucing, HIGH);
delayMicroseconds(10);
digitalWrite(trigPinKucing, LOW);
durationKucing = pulseIn(echoPinKucing, HIGH);
distanceKucing = durationKucing * 0.034 / 2;
// Membaca jarak dari sensor ultrasonik wadah pakan kucing
digitalWrite(trigPinPakan, LOW);
delayMicroseconds(2);
digitalWrite(trigPinPakan, HIGH);
delayMicroseconds(10);
digitalWrite(trigPinPakan, LOW);
durationPakan = pulseIn(echoPinPakan, HIGH);
distancePakan = durationPakan * 0.034 / 2;
// Deteksi kucing mendekati
if (distanceKucing < 100) {
lcd.clear();
lcd.print("Kasih Makan");
servoMotor.write(90); // Buka servo untuk memberi makanan
delay(500);
servoMotor.write(0); // Tutup servo setelah memberi makanan
} else {
lcd.clear();
lcd.print("Smart Cat Feeder");
servoMotor.write(0); // Tutup servo untuk memberi makanan
delay(500);
}
// Kontrol LED dan buzzer pada wadah pakan kucing
if (distancePakan < 100) {
digitalWrite(ledPin, HIGH); // LED menyala cepat (makanan habis)
tone(buzzerPin, 1000); // Buzzer bunyi
delay(200);
} else if (distancePakan < 250) {
digitalWrite(ledPin, HIGH); // LED menyala sedang (makanan setengah penuh)
delay(500);
digitalWrite(ledPin, LOW);
delay(250);
noTone(buzzerPin); // Buzzer mati
} else {
digitalWrite(ledPin, LOW); // LED mati (wadah penuh)
noTone(buzzerPin); // Buzzer mati
delay(250);
}
}